home *** CD-ROM | disk | FTP | other *** search
/ FreeWare Collection 2 / FreeSoftwareCollection2pd199x-jp.img / stopcd20 / stopcd.c < prev    next >
Text File  |  1990-06-14  |  2KB  |  83 lines

  1. /*  CDSTOP                     COPYRIGHT (C) AIH  */
  2. /*  stop the CD-drive (real mode)                 */
  3. /*         Ver1.0 90.03                           */
  4. /*         Ver2.0 90.04.30 set time -> stop music */
  5. /*
  6.     Towns-GCC関係者,エディタを開発されたMIYAZAKI氏およびNIFTY-SERVE
  7.     Waku氏に感謝いたします.
  8.       さらにWaku氏のCDINFOを流用させて頂きました.重ねて御礼申し上げます.
  9.     ソ-スが公開されていて,どれほど助かったことか.(^_^;)   感謝!
  10. */
  11.  
  12. #include <stdio.h>
  13. #include "register.h"
  14.  
  15. #define CD_BIOS 0x93        /* CD BIOS INT function */
  16. #define CD_devno 0xc0        /* CD device No. */
  17. #define CD_getinfo 0x54        /* CD BIOS function No. */
  18. #define CD_stopmusic 0x52    /* CD BIOS function No. */
  19.  
  20. struct TRACK {
  21.     unsigned char min,sec,frame ;
  22. } ;
  23.  
  24. struct TOC {
  25.     unsigned char type ;
  26.     unsigned char strk,etrk ;
  27.     struct TRACK total ;
  28.     struct TRACK trk[99] ;
  29. } tocbuf ;
  30.  
  31. union REGS reg ;
  32. struct SREGS sreg ;
  33.  
  34. main(argc, argv)
  35. int argc;
  36. char *argv[];
  37. {
  38.     int seg,ofs ;
  39.     int trks,i ;
  40.     struct TRACK *tp ;
  41.     int time;
  42.     int retry=0;
  43.  
  44.     time=atoi(argv[1]);
  45.     if (time<=0 && time>20){
  46.         time=1;
  47.     }
  48.  
  49.     if( nativetoreal( &(tocbuf), sizeof(tocbuf),&seg, &ofs ) < 0 ) {
  50.         printf ( "作業領域の獲得に失敗しました.中止します.(^_^;)\n" ) ;
  51.         exit( 1 ) ;
  52.     }
  53.  
  54.     while(1){
  55.         reg.h.ah = CD_stopmusic ;
  56.         reg.h.al = CD_devno ;
  57.         reg.x.cx = 0x0000 ;
  58.         reg.x.di = ofs ;
  59.         segread( &sreg ) ;
  60.         sreg.ds = seg ;
  61.  
  62.         intreal( CD_BIOS, ®, ®, &sreg ) ;
  63.         retry++;
  64.         
  65. /*        printf("ah=%x cx=%x retry=%d\n", reg.h.ah, reg.x.cx, retry);*/
  66.  
  67.                     /* bios normal end? */
  68.         if (reg.h.ah==0){
  69.             break;
  70.         }
  71.         if (reg.h.cl==0x01) {
  72.             printf( "CD-ROMドライブが準備できていません.\n");
  73.             exit ( 1 ) ;
  74.         }
  75.         if (reg.h.cl!=0x01 && retry>=5) {
  76.             printf( "CD-ROMの停止に失敗しました. ごめんなさい(^_^;) ah=%x cx=%x\n",reg.h.ah,reg.x.cx ) ;
  77.             exit ( 1 ) ;
  78.         }
  79.     }
  80.     printf("CD-ROMドライブを停止しました.\n");
  81.     exit ( 0 ) ;
  82. }
  83.