| TIP: Click on subject to list as thread! | ANSI |
| echo: | |
|---|---|
| to: | |
| from: | |
| date: | |
| 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™.