TIP: Click on subject to list as thread! ANSI
echo: os2prog
to: All
from: Gerard Gerritsen
date: 1996-01-09 14:26:02
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™.