| TIP: Click on subject to list as thread! | ANSI |
| echo: | |
|---|---|
| to: | |
| from: | |
| date: | |
| subject: | 2 CD AUDIOplayer unit for Virtual P |
IF find_valid_cdrom(device_handle) THEN
BEGIN
IF Can_play_audio(device_handle) THEN
BEGIN
IF Query_cdrom(device_handle, cd)
THEN
GetMem(track_pointer, cd.last_track*6);
{ reserve enough memory }
last_track := cd.last_track;
first_track := cd.first_track;
FOR counter := first_track TO last_track DO
Query_track(device_handle, counter, track_pointer^[counter]);
Exit;
{ break away }
END;
END;
Init_cdrom:=False;
Close_cdrom(device_handle);
END;
{ will return first and last track }
FUNCTION Query_cdrom(device_handle : hfile; VAR cd : cd_struct) : Boolean;
VAR
return_code : APIRET;
command : Standard_command;
command_size : Ulong;
param : Return_tracks_param;
param_size : Ulong;
BEGIN
command.Signature := 'CD01';
command_size := SizeOf(command);
param_size := SizeOf(param);
IF dosdevioctl(device_handle, $81, $61, {at}command, command_size, {at}command_size,
{at}param, param_size, {at}param_size) = 0
THEN
BEGIN
Query_cdrom := True;
CD_structure := param;
{ make a reserve copy.. }
cd := param.first_last;
END
ELSE
Query_cdrom := False;
END;
{ request begin and end location of track }
FUNCTION Query_track(device_handle : hfile; track : Byte; VAR track_pos :
track_start_stop) : Boolean;
VAR
command : Return_track_command;
param : Return_track_param;
command_size,
param_size : Ulong;
BEGIN
Query_track := True; { just in case }
command.Signature := 'CD01';
command.track := track;
{ what track to check ? }
command_size := SizeOf(command);
param_size := SizeOf(param);
IF dosdevioctl(device_handle, $81, $62, {at}command, command_size,
{at}command_size, {at}param, param_size, {at}param_size) 0
THEN Query_track := False;
{ something went wrong }
track_pos.start := param.begin_of_track;
IF command.track >= CD_structure.first_last.last_track
THEN track_pos.stop := CD_structure.end_last_track
ELSE
BEGIN
Inc(command.track);
IF dosdevioctl(device_handle, $81, $62, {at}command, command_size,
{at}command_size, {at}param, param_size, {at}param_size) 0
THEN Query_track := False;
track_pos.stop := param.begin_of_track;
END;
END;
{ play cd from start to stop location }
FUNCTION Play_track(device_handle : hfile; track_pos : track_start_stop)
: Boolean;
VAR
command : Play_track_command;
param : Standard_param;
command_size,
param_size : Ulong;
BEGIN
command.Signature := 'CD01';
command_size := SizeOf(command);
param_size := SizeOf(param);
command.address_mode := MSF;
command.start := track_pos.start;
command.dummy_byte := 0;
command.Dummy := 0;
command.end_track := track_pos.stop;
IF dosdevioctl(device_handle, $81, $50, {at}command, command_size,
{at}command_size, {at}param, param_size, {at}param_size) = 0
THEN Play_track := True ELSE Play_track := False;
END;
{ end of unit }
{ thank you for reading this.... }
END.
=== End cd2.pas ===
==> Gerard/2 - member of team os/2 - 1000521{at}ibk.fnt.hvu.nl
--- Fmail/2 1.02 Registered
* Origin: Yet another forgotten area! (2:283/203.18)SEEN-BY: 50/99 270/101 620/243 711/401 409 410 413 430 808 809 934 955 SEEN-BY: 712/407 515 517 628 713/888 800/1 7877/2809 @PATH: 283/203 2 6 1 512 280/801 270/101 712/515 711/808 809 934 |
|
| SOURCE: echomail via fidonet.ozzmosis.com | |
Email questions or comments to sysop@ipingthereforeiam.com
All parts of this website painstakingly hand-crafted in the U.S.A.!
IPTIA BBS/MUD/Terminal/Game Server List, © 2025 IPTIA Consulting™.