home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 3 / FREEWARE.BIN / towns_os / tvi / tvi_src.lzh / REC / REC_CD.C < prev    next >
C/C++ Source or Header  |  1990-11-12  |  7KB  |  228 lines

  1. /*
  2. $Header: rec_cd.cv  1.8  90/11/12 18:03:16  Nam  Rel $
  3. */
  4. #include    <stdio.h>
  5. #include    <stdlib.h>
  6. #include    <string.h>
  7. #include    <egb.h>        /* グラフィック関連のヘッダファイル */
  8. #include    <mos.h>        /* マウス関連のヘッダファイル         */
  9. #include    <snd.h>        /* 音源関連のヘッダファイル         */
  10. #include    <cdr.h>        /* CD関連のヘッダファイル */
  11. #include    <n_win.h>    /* 自前のウィンドゥ関数ヘッダ        */
  12.  
  13. pragma    Include    ("rec_st.h");            /* 標準ヘッダ */
  14.  
  15. extern char *itoa();                /*** 整数>char変換(rec_disp.obj) ***/
  16. extern void change_icon();            /*** マウスアイコン変更(rec_mos.obj) ***/
  17.  
  18. extern unsigned short    /*** rec_cd.c ***/
  19.                 sld_cd_vol,txt_cd_trk,btn_cd_pause;
  20.  
  21. int        cd_devNo = 0x0;            /*    デバイス番号(0)                */
  22. int        cd_error=0;                /*    エラー フラグ                */
  23. int        cd_disktype=0;            /*    ディスクタイプ                */
  24. int        cd_status=0;            /*    演奏状態(0:停止中,1:演奏中)    */
  25. int        cd_nowNo=0;                /*    現在演奏中のトラック        */
  26. int        cd_Strk=0;                /*    先頭トラック                */
  27. int        cd_Etrk=0;                /*    最終トラック                */
  28.  
  29. struct CD_TIME cd_trackTM[99],cd_trkTM,cd_diskTM,cd_endTM;
  30.  
  31.  
  32. void    N_cd_readTOC();        /*** CD TOC読込(rec_cd.obj) ***/
  33. void    N_cd_readPHASE();    /*** CD 演奏状態読み取り(rec_cd.obj) ***/
  34. void    N_cd_setPage();        /*** CD 演奏状態表示(rec_cd.obj) ***/
  35. void    N_cd_play();        /*** CD 演奏開始(rec_cd.obj) ***/
  36. void    N_cd_ff();            /*** CD 一曲送り(rec_cd.obj) ***/
  37. void    N_cd_rr();            /*** CD 一曲戻し(rec_cd.obj) ***/
  38. void    N_cd_pause();        /*** CD 一時停止(rec_cd.obj) ***/
  39. void    N_cd_stop();        /*** CD 停止(rec_cd.obj) ***/
  40. void    N_cd_vol();            /*** CD vol調整(rec_cd.obj) ***/
  41. /*****************************************************************************/
  42. void    N_cd_readTOC()        /*** CD TOC読込(rec_cd.obj) ***/
  43. {
  44.     register short    retry=0;
  45.  
  46.     change_icon(1);            /*** マウスアイコンを砂時計に変更 ***/
  47.     do {
  48.         cdr_mstop(cd_devNo);    /*** TOC 読込のため停止 ***/
  49.         cd_error= cdr_cdinfo(cd_devNo,    /*    デバイスNo.            */
  50.                     &cd_disktype,        /*    ディスクタイプ        */
  51.                     &cd_Strk,            /*    先頭トラック        */
  52.                     &cd_Etrk,            /*    最終トラック        */
  53.                     (char *)&cd_trackTM[0],/*    トラック内演奏時間    */
  54.                     (char *)&cd_endTM    /*    ディスク内演奏終了時間    */
  55.                 );
  56.         if (cd_error==CDERR7) {            /* CDERR7=0x080(メディア交換有)*/
  57.             cd_endTM.min=0;
  58.         } else {
  59.             if (cd_endTM.frame>0) {
  60.                 cd_endTM.frame--;
  61.             }
  62.             else {
  63.                 cd_endTM.frame=74;
  64.                 if (cd_endTM.sec>0) {
  65.                     cd_endTM.sec--;
  66.                 }
  67.                 else {
  68.                     cd_endTM.sec=59;
  69.                     cd_endTM.min--;
  70.                 }
  71.             }
  72.         }
  73.         if (cd_error==0) {
  74.             break;
  75.         }
  76.         retry++;
  77.     } while ( (cd_error==CDERR7)&&(retry<6) );
  78.     change_icon(0);            /*** マウスアイコンを★型に復帰 ***/
  79. }
  80. /*****************************************************************************/
  81. void    N_cd_readPHASE()    /*** CD 演奏状態読み取り(rec_cd.obj) ***/
  82. {
  83.     if (cd_nowNo==0) {
  84.         N_cd_readTOC();
  85.     }
  86.     cd_error= cdr_mphase(cd_devNo,    /*    デバイスNo.                */
  87.                 &cd_status,            /*    演奏状態(0:stop,1:play)    */
  88.                 &cd_nowNo,            /*    演奏トラック            */
  89.                 (char *)&cd_trkTM,    /*    トラック内演奏時間        */
  90.                 (char *)&cd_diskTM    /*    ディスク内演奏時間        */
  91.             );
  92.  
  93. /*
  94.     printf("PHASE  err:%d  status:%d  nowNo:%d  ",cd_error,cd_status,cd_nowNo);
  95.     printf("endtime:%d:%d:%d\n",cd_diskTM.min,cd_diskTM.sec,cd_diskTM.frame);
  96. */
  97. }
  98. /*****************************************************************************/
  99. void    N_cd_setPage(mode)    /*** CD 演奏状態表示(rec_cd.obj) ***/
  100. char    mode;    /*0以外なら無条件で表示を更新*/
  101. {
  102.     static char    oldNo=255,oldMax=255;
  103.     char        tmp[6];
  104.  
  105.     if ((cd_nowNo<1)&&(mode==0)) {    /*** 強制停止状態なら読まない ***/
  106.         return;
  107.     }
  108.     N_cd_readPHASE();
  109.     if ((mode!=0)||(oldNo!=cd_nowNo)||(oldMax!=cd_Etrk)) {
  110.         oldNo=cd_nowNo;
  111.         oldMax=cd_Etrk;
  112.         if (cd_error==0) {
  113.             if (cd_status==0) {
  114.                 strcpy(tmp,"--");
  115.             } else {
  116.                 strcpy(tmp,itoa(cd_nowNo,2));
  117.             }
  118.             strcat(tmp,"/");
  119.             strcat(tmp,itoa(cd_Etrk,2));
  120.         } else {
  121.             strcpy(tmp,"--/--");
  122.         }
  123.         N_WIN_re_copyOptTxt(txt_cd_trk,tmp);
  124.     }
  125. }
  126. /*****************************************************************************/
  127. void    N_cd_start()        /*** CD 演奏(内部) ***/
  128. {
  129.     change_icon(1);            /*** マウスアイコンを砂時計に変更 ***/
  130.     cd_error= cdr_pause(cd_devNo);                /*** pauseしないとERROR ***/
  131.     cd_error= cdr_mtplay(cd_devNo,                /*    デバイスNo.        */
  132.             (char *)&cd_trackTM[cd_nowNo-1],    /*    開始時間        */
  133.             (char *)&cd_endTM                    /*    終了時間        */
  134.             );
  135.     /*printf("Error=%h\n",cd_error);*/
  136.     N_cd_setPage(1);    /*強制表示更新*/
  137.     change_icon(0);            /*** マウスアイコンを★型に復帰 ***/
  138. }
  139. /*****************************************************************************/
  140. void    N_cd_play()        /*** CD 演奏開始(rec_cd.obj) ***/
  141. {
  142.     N_cd_readPHASE();
  143.     if ((cd_error==0)/*&&(cd_status==0)*/) {
  144.         /*** 交換後なら最初の曲に ***/
  145.         cd_nowNo=(cd_nowNo>0)?cd_nowNo:cd_Strk;
  146.         N_cd_start();        /*** CD 演奏(内部) ***/
  147.     }
  148. }
  149. /*****************************************************************************/
  150. void    N_cd_ff()        /*** CD 一曲送り(rec_cd.obj) ***/
  151. {
  152.     N_cd_readPHASE();
  153.     if ((cd_error<DEVPLY)/*&&(cd_status!=0)*/) {
  154.         /*** 最後の曲なら最初に戻る ***/
  155.         cd_nowNo=(cd_nowNo>=cd_Etrk)?cd_Strk:cd_nowNo+1;
  156.         N_cd_start();        /*** CD 演奏(内部) ***/
  157.         /*** pause中ならpause ***/
  158.         if ((N_WIN_getOptAttr(btn_cd_pause)&N_BTN_ATTR_highlight)!=0) {
  159.             cd_error= cdr_pause(cd_devNo);
  160.         }
  161.     }
  162. }
  163. /*****************************************************************************/
  164. void    N_cd_rr()        /*** CD 一曲戻し(rec_cd.obj) ***/
  165. {
  166.     N_cd_readPHASE();
  167.     if ((cd_error<DEVPLY)/*&&(cd_status!=0)*/) {
  168.         /*** 最初の曲なら最後に進める ***/
  169.         cd_nowNo=(cd_nowNo<=cd_Strk)?cd_Etrk:cd_nowNo-1;
  170.         N_cd_start();        /*** CD 演奏(内部) ***/
  171.         /*** pause中ならpause ***/
  172.         if ((N_WIN_getOptAttr(btn_cd_pause)&N_BTN_ATTR_highlight)!=0) {
  173.             cd_error= cdr_pause(cd_devNo);
  174.         }
  175.     }
  176. }
  177. /*****************************************************************************/
  178. void    N_cd_pause()        /*** CD 一時停止(rec_cd.obj) ***/
  179. {
  180.     if ((N_WIN_getOptAttr(btn_cd_pause)&N_BTN_ATTR_highlight)==0) {
  181.         cd_error= cdr_continue(cd_devNo);
  182.     }
  183.     else{
  184.         cd_error= cdr_pause(cd_devNo);
  185.     }
  186. }
  187. /*****************************************************************************/
  188. void    N_cd_stop()        /*** CD 停止(rec_cd.obj) ***/
  189. {
  190.     cd_error= cdr_mstop(cd_devNo);
  191.     cd_nowNo=0;        /*** 停止状態を通知 ***/
  192. }
  193. /*****************************************************************************/
  194. void    N_cd_vol()            /*** CD vol調整(rec_cd.obj) ***/
  195. {
  196.     register unsigned short    _vol=N_WIN_getOptData2(sld_cd_vol)*2;
  197.  
  198.     _vol=(_vol>127)?127:_vol;
  199.     SND_elevol_set(1,_vol,_vol);    /*** 電子ボリューム(CD)セット ***/
  200. }
  201. /******************************************************************************
  202. $Log: RCS/rec_cd.cv $
  203.  * Revision 1.8  90/11/12 18:03:16  Nam
  204.  * Release at V0.0 L18d
  205.  * 
  206.  * Revision 1.7  90/11/12 18:03:16  Nam
  207.  * *** empty log message ***
  208.  * 
  209.  * Revision 1.6  90/11/08 13:37:36  Nam
  210.  * separete N_cd_popup -> rec_menu.c
  211.  * 
  212.  * Revision 1.5  90/10/25 18:43:44  Nam
  213.  * Rel V0.0L17 at '90.11.2 for FPICS.
  214.  * 
  215.  * Revision 1.4  90/10/25 18:43:44  Nam
  216.  * use 'rec_st.h'
  217.  * 
  218.  * Revision 1.3  90/10/15 22:35:58  Nam
  219.  * debugging get-cd-stat
  220.  * 
  221.  * Revision 1.2  90/10/15 22:13:22  Nam
  222.  * debug and disp
  223.  * 
  224.  * Revision 1.1  90/10/10 18:05:22  Nam
  225.  * Initial revision
  226.  * 
  227. *******************************************************************************/
  228.