home *** CD-ROM | disk | FTP | other *** search
/ FreeWare Collection 2 / FreeSoftwareCollection2pd199x-jp.img / cdtime20 / cdtime.c next >
Text File  |  1990-06-14  |  2KB  |  99 lines

  1. /*  CDSTOP                COPYRIGHT (C) AIH     */
  2. /*  set the stop-time for CD-drive (real mode)  */
  3. /*  90.03    Ver1.0                             */
  4. /*  90.04.30 Ver1.1  Modify message             */
  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_stoptime 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.     if (argc==2){
  45.         time=atoi(argv[1]);
  46.     }
  47.     else {
  48.         time==1;
  49.     }
  50.     if (time<=0 || time>20){
  51.         time=1;
  52.     }
  53.  
  54.     if( nativetoreal( &(tocbuf), sizeof(tocbuf),&seg, &ofs ) < 0 ) {
  55.         printf ( "作業領域の獲得に失敗しました.中止します.(^_^;)\n" ) ;
  56.         exit( 1 ) ;
  57.     }
  58.  
  59. /*  この部分は、nativetoreal関数と同義
  60.     reg.x.ax = 0x250f ;
  61.     reg.e.ebx = (unsigned int)&(tocbuf ) ;
  62.     intdos( ®, ® ) ;
  63.     seg = reg.x.__cx ;
  64.     ofs = reg.x.cx ;
  65.  
  66.     printf( "native::%x --> real::%x:%x\n",&(tocbuf),seg,ofs ) ;
  67. */
  68.     while(1){
  69.         reg.h.ah = CD_stoptime ;
  70.         reg.h.al = CD_devno ;
  71.         reg.x.cx = 0xFF00 + time ;
  72.         reg.x.di = ofs ;
  73.         segread( &sreg ) ;
  74.         sreg.ds = seg ;
  75.  
  76.         intreal( CD_BIOS, ®, ®, &sreg ) ;
  77.         retry++;
  78.         
  79. /*        printf("ah=%x cx=%x retry=%d\n", reg.h.ah, reg.x.cx, retry);*/
  80.  
  81.                     /* bios normal end? */
  82.         if (reg.h.ah==0){
  83.             break;
  84.         }
  85.         if (reg.h.ah!=0 && retry==5) {
  86.             printf( "CD-ROMの停止時間設定に失敗しました. ごめんなさい(^_^;) ah=%x cx=%x\n",reg.h.ah,reg.x.cx ) ;
  87.             exit ( 1 ) ;
  88.         }
  89.                     /* drvie ready? */
  90.         if (reg.h.cl==0x01){
  91.             printf( "CD-ROMドライブが準備できていません.\n");
  92.             exit ( 1 ) ;
  93.             exit (1);
  94.         }
  95.     }
  96.     printf("CD-ROMドライブ停止時間を設定しました.\n");
  97.     exit ( 0 ) ;
  98. }
  99.