home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FreeWare Collection 2
/
FreeSoftwareCollection2pd199x-jp.img
/
stopcd20
/
stopcd20.com
/
STOPCD.C
< prev
next >
Wrap
Text File
|
1990-04-29
|
2KB
|
83 lines
/* CDSTOP COPYRIGHT (C) AIH */
/* stop the CD-drive (real mode) */
/* Ver1.0 90.03 */
/* Ver2.0 90.04.30 set time -> stop music */
/*
Towns-GCC関係者,エディタを開発されたMIYAZAKI氏およびNIFTY-SERVE
Waku氏に感謝いたします.
さらにWaku氏のCDINFOを流用させて頂きました.重ねて御礼申し上げます.
ソ-スが公開されていて,どれほど助かったことか.(^_^;) 感謝!
*/
#include <stdio.h>
#include "register.h"
#define CD_BIOS 0x93 /* CD BIOS INT function */
#define CD_devno 0xc0 /* CD device No. */
#define CD_getinfo 0x54 /* CD BIOS function No. */
#define CD_stopmusic 0x52 /* CD BIOS function No. */
struct TRACK {
unsigned char min,sec,frame ;
} ;
struct TOC {
unsigned char type ;
unsigned char strk,etrk ;
struct TRACK total ;
struct TRACK trk[99] ;
} tocbuf ;
union REGS reg ;
struct SREGS sreg ;
main(argc, argv)
int argc;
char *argv[];
{
int seg,ofs ;
int trks,i ;
struct TRACK *tp ;
int time;
int retry=0;
time=atoi(argv[1]);
if (time<=0 && time>20){
time=1;
}
if( nativetoreal( &(tocbuf), sizeof(tocbuf),&seg, &ofs ) < 0 ) {
printf ( "作業領域の獲得に失敗しました.中止します.(^_^;)\n" ) ;
exit( 1 ) ;
}
while(1){
reg.h.ah = CD_stopmusic ;
reg.h.al = CD_devno ;
reg.x.cx = 0x0000 ;
reg.x.di = ofs ;
segread( &sreg ) ;
sreg.ds = seg ;
intreal( CD_BIOS, ®, ®, &sreg ) ;
retry++;
/* printf("ah=%x cx=%x retry=%d\n", reg.h.ah, reg.x.cx, retry);*/
/* bios normal end? */
if (reg.h.ah==0){
break;
}
if (reg.h.cl==0x01) {
printf( "CD-ROMドライブが準備できていません.\n");
exit ( 1 ) ;
}
if (reg.h.cl!=0x01 && retry>=5) {
printf( "CD-ROMの停止に失敗しました. ごめんなさい(^_^;) ah=%x cx=%x\n",reg.h.ah,reg.x.cx ) ;
exit ( 1 ) ;
}
}
printf("CD-ROMドライブを停止しました.\n");
exit ( 0 ) ;
}