DWORD dwLoc, DWORD dwSectorNum, int
DWORD lpTransferAddress;
WORD wDataSize;
WORD wStartSector;
DWORD lpVolID;
} IOCTL_Output;
// Запрос на извлечение компакт-диска
typedef struct _EjectDisk
{
BYTE bControl;
} EjectDisk;
#pragma pack()
// Прототипы функций
void GetCDLetters(BYTE *bLetters);
void CallCDDriver(void *rh, int nCDUnit);
int PlayAudioTrack( DWORD dwLoc, DWORD dwSectorNum, int nCDUnit);
int StopAudio(int nCDUnit);
int DeviceOpen(int nCDUnit);
int DeviceClose(int nCDUnit);
int EjectCD(int nCDUnit);
DWORD Red2Sierra(DWORD dwRedLoc);
// Регистры для вызова функции int86
union REGS rg;
// Количество установленных устройств чтения CD-ROM
int nCDUnits;
// Номер первого устройства чтения CD-ROM
int nCDStartUnit;
// Слово состояния после вызова драйвера CD-ROM
int iStatus;
// Массив номеров установленных устройств CD-ROM
BYTE bLetters[26];
// ---------------------------------------------------
// main
// Точка входа в программу
// ---------------------------------------------------
int main(int argc, char *argv[])
{
int i;
DWORD dwStartTrack;
printf("CDPLAY, (c) A. Frolov, 1997\n\n");
dwStartTrack = 1;
if(argc == 2)
{
dwStartTrack = atol(argv[1]);
printf("Track Red book: %ld\n", dwStartTrack);
}
else
{
printf("Usage: CDPLAY <Red book sector address>\n");
return -1;
}
// Преобразование адреса сектора в формат Sierra
dwStartTrack = Red2Sierra(dwStartTrack);
printf("Track Sierra: %ld\n", dwStartTrack);
// Проверяем, установлена ли программа MSCDEX
rg.x.ax = 0x1500;
rg.x.bx = 0;
int86(0x2f, &rg, &rg);
if(rg.x.bx == 0)
{
printf("MSCDEX is not installed\n");
return -1;
}
else
{
// Сохраняем общее количество устройств чтения CD-ROM
nCDUnits = rg.x.bx;
Содержание Назад Вперед