TIP: Click on subject to list as thread! ANSI
echo: os2prog
to: Patrick Haller
from: Doug Nazar
date: 1995-09-28 23:26:54
subject: IOCTL_CDROMDISK

Hello Patrick!

Monday September 25 1995 02:52, Patrick Haller wrote to All / Peter Fitzsimmons:

PH> Recently I found two interesting IOCtl-definitons when browsing BSEDEV.H:
PH> IOCTL_CDROMDISK and
PH> IOCTL_CDROMAUDIO.

PH> But I can't figure out, what my I/O-parameters/packets for DosDevIOCtl have
PH> to look like so the OS2CDROM.CMD will accept them. I keep getting an
PH> rc=65283. What does this return code mean ?

PH> I'd just like to implement a tool for "CDROM /EJECT" or
"CDROM /PLAYAUDIO",
PH> etc.

Both are described in Warp toolkit. I'm not sure if they were in the 2.1
toolkit though. Error 0xFF03 means unknown command.

For Category IOCTL_CDROMDISK, Function CDROMDISK_EJECTDISK, the packet consists of

  UCHAR Signature[4];

which should contain "CD01" (or "CD02" for the second
drive etc.).
Note: It is not null terminated.

Category IOCTL_CDROMAUDIO, Function CDROMAUDIO_PLAYAUDIO is a bit more involved.

  UCHAR Signature[4];                 // "CD01"
  UCHAR Addressing_Mode;              // 0=Logical, 1=Minutes/Seconds/Frames
  ULONG Start;                        // Starting address
  ULONG End;                          // Ending address

Here's some source which will play track 1 of an audio cd.

-- CUT -------- Begin PLAY.CPP -------- CUT --
#define INCL_DOSDEVIOCTL
#define INCL_DOSERRORS
#define INCL_DOSDEVICES
#define INCL_NOPMAPI
#include 
#include 

#pragma pack(1)

int main() {

   struct {
      UCHAR Sig[4];
      UCHAR Mode;
      ULONG Start;
      ULONG End;
   } PPlay;

   UCHAR Signature[] = "CD01";

   ULONG PLength = 0;
   ULONG DLength = 0;
   ULONG Action = 0;
   APIRET rc = NO_ERROR;
   HFILE Handle=NULLHANDLE;

   rc =
DosOpen("G:",&Handle,&Action,0,0,OPEN_ACTION_FAIL_IF_NEW
| OPEN_ACTION_OPEN_IF_EXISTS,OPEN_SHARE_DENYREADWRITE |
OPEN_ACCESS_READONLY | OPEN_FLAGS_DASD,0);

   struct {
      UCHAR First;
      UCHAR Last;
      ULONG Leadout;
   } DAudioDisk;


   PLength = 4;
   DLength = sizeof(DAudioDisk);
   memset(&DAudioDisk,0,DLength);
   rc =
DosDevIOCtl(Handle,IOCTL_CDROMAUDIO,CDROMAUDIO_GETAUDIODISK,&Signature,PLength,
&PLength,&DAudioDisk,DLength,&DLength);

   cout " <<
(int)DAudioDisk.Last  << endl;

   struct {
      UCHAR Sig[4];
      UCHAR Track;
   } PTrackInfo;
   struct {
      ULONG Address;
      UCHAR Info;
   } DTrackInfo;

   memcpy(&PTrackInfo,&Signature,4);

   PLength=sizeof(PTrackInfo);
   DLength=sizeof(DTrackInfo);
   memset(&DTrackInfo,0,DLength);

   PTrackInfo.Track=1;
   rc =
DosDevIOCtl(Handle,IOCTL_CDROMAUDIO,CDROMAUDIO_GETAUDIOTRACK,&PTrackInfo,PLengt
h,&PLength,&DTrackInfo,DLength,&DLength);
   PPlay.Start=DTrackInfo.Address;
   PTrackInfo.Track=2;
   rc =
DosDevIOCtl(Handle,IOCTL_CDROMAUDIO,CDROMAUDIO_GETAUDIOTRACK,&PTrackInfo,PLengt
h,&PLength,&DTrackInfo,DLength,&DLength);
   PPlay.End=DTrackInfo.Address;

   cout << "Playing from " << PPlay.Start <<
" to " << PPlay.End << "." << endl;

   memcpy(&PPlay.Sig,&Signature,4);
   PPlay.Mode=1;

   PLength = sizeof(PPlay);
   rc =
DosDevIOCtl(Handle,IOCTL_CDROMAUDIO,CDROMAUDIO_PLAYAUDIO,&PPlay,PLength,&PLengt
h,0,0,0);

   DosClose(Handle);
   return 0;
}
-- CUT --------- End PLAY.CPP --------- CUT --


Doug

--- GoldED/2 2.50.Beta6 UNREG
* Origin: Realm of the Dragons - `Where thy mind hath no limits' (1:250/516)
SEEN-BY: 270/101 620/243 711/401 409 410 413 430 807 808 809 934 955 712/407
SEEN-BY: 712/515 628 704 713/888 800/1 7877/2809
@PATH: 250/516 101 99 3615/50 396/1 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™.