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 >
Wrap
C/C++ Source or Header
|
1990-11-12
|
7KB
|
228 lines
/*
$Header: rec_cd.cv 1.8 90/11/12 18:03:16 Nam Rel $
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <egb.h> /* グラフィック関連のヘッダファイル */
#include <mos.h> /* マウス関連のヘッダファイル */
#include <snd.h> /* 音源関連のヘッダファイル */
#include <cdr.h> /* CD関連のヘッダファイル */
#include <n_win.h> /* 自前のウィンドゥ関数ヘッダ */
pragma Include ("rec_st.h"); /* 標準ヘッダ */
extern char *itoa(); /*** 整数>char変換(rec_disp.obj) ***/
extern void change_icon(); /*** マウスアイコン変更(rec_mos.obj) ***/
extern unsigned short /*** rec_cd.c ***/
sld_cd_vol,txt_cd_trk,btn_cd_pause;
int cd_devNo = 0x0; /* デバイス番号(0) */
int cd_error=0; /* エラー フラグ */
int cd_disktype=0; /* ディスクタイプ */
int cd_status=0; /* 演奏状態(0:停止中,1:演奏中) */
int cd_nowNo=0; /* 現在演奏中のトラック */
int cd_Strk=0; /* 先頭トラック */
int cd_Etrk=0; /* 最終トラック */
struct CD_TIME cd_trackTM[99],cd_trkTM,cd_diskTM,cd_endTM;
void N_cd_readTOC(); /*** CD TOC読込(rec_cd.obj) ***/
void N_cd_readPHASE(); /*** CD 演奏状態読み取り(rec_cd.obj) ***/
void N_cd_setPage(); /*** CD 演奏状態表示(rec_cd.obj) ***/
void N_cd_play(); /*** CD 演奏開始(rec_cd.obj) ***/
void N_cd_ff(); /*** CD 一曲送り(rec_cd.obj) ***/
void N_cd_rr(); /*** CD 一曲戻し(rec_cd.obj) ***/
void N_cd_pause(); /*** CD 一時停止(rec_cd.obj) ***/
void N_cd_stop(); /*** CD 停止(rec_cd.obj) ***/
void N_cd_vol(); /*** CD vol調整(rec_cd.obj) ***/
/*****************************************************************************/
void N_cd_readTOC() /*** CD TOC読込(rec_cd.obj) ***/
{
register short retry=0;
change_icon(1); /*** マウスアイコンを砂時計に変更 ***/
do {
cdr_mstop(cd_devNo); /*** TOC 読込のため停止 ***/
cd_error= cdr_cdinfo(cd_devNo, /* デバイスNo. */
&cd_disktype, /* ディスクタイプ */
&cd_Strk, /* 先頭トラック */
&cd_Etrk, /* 最終トラック */
(char *)&cd_trackTM[0],/* トラック内演奏時間 */
(char *)&cd_endTM /* ディスク内演奏終了時間 */
);
if (cd_error==CDERR7) { /* CDERR7=0x080(メディア交換有)*/
cd_endTM.min=0;
} else {
if (cd_endTM.frame>0) {
cd_endTM.frame--;
}
else {
cd_endTM.frame=74;
if (cd_endTM.sec>0) {
cd_endTM.sec--;
}
else {
cd_endTM.sec=59;
cd_endTM.min--;
}
}
}
if (cd_error==0) {
break;
}
retry++;
} while ( (cd_error==CDERR7)&&(retry<6) );
change_icon(0); /*** マウスアイコンを★型に復帰 ***/
}
/*****************************************************************************/
void N_cd_readPHASE() /*** CD 演奏状態読み取り(rec_cd.obj) ***/
{
if (cd_nowNo==0) {
N_cd_readTOC();
}
cd_error= cdr_mphase(cd_devNo, /* デバイスNo. */
&cd_status, /* 演奏状態(0:stop,1:play) */
&cd_nowNo, /* 演奏トラック */
(char *)&cd_trkTM, /* トラック内演奏時間 */
(char *)&cd_diskTM /* ディスク内演奏時間 */
);
/*
printf("PHASE err:%d status:%d nowNo:%d ",cd_error,cd_status,cd_nowNo);
printf("endtime:%d:%d:%d\n",cd_diskTM.min,cd_diskTM.sec,cd_diskTM.frame);
*/
}
/*****************************************************************************/
void N_cd_setPage(mode) /*** CD 演奏状態表示(rec_cd.obj) ***/
char mode; /*0以外なら無条件で表示を更新*/
{
static char oldNo=255,oldMax=255;
char tmp[6];
if ((cd_nowNo<1)&&(mode==0)) { /*** 強制停止状態なら読まない ***/
return;
}
N_cd_readPHASE();
if ((mode!=0)||(oldNo!=cd_nowNo)||(oldMax!=cd_Etrk)) {
oldNo=cd_nowNo;
oldMax=cd_Etrk;
if (cd_error==0) {
if (cd_status==0) {
strcpy(tmp,"--");
} else {
strcpy(tmp,itoa(cd_nowNo,2));
}
strcat(tmp,"/");
strcat(tmp,itoa(cd_Etrk,2));
} else {
strcpy(tmp,"--/--");
}
N_WIN_re_copyOptTxt(txt_cd_trk,tmp);
}
}
/*****************************************************************************/
void N_cd_start() /*** CD 演奏(内部) ***/
{
change_icon(1); /*** マウスアイコンを砂時計に変更 ***/
cd_error= cdr_pause(cd_devNo); /*** pauseしないとERROR ***/
cd_error= cdr_mtplay(cd_devNo, /* デバイスNo. */
(char *)&cd_trackTM[cd_nowNo-1], /* 開始時間 */
(char *)&cd_endTM /* 終了時間 */
);
/*printf("Error=%h\n",cd_error);*/
N_cd_setPage(1); /*強制表示更新*/
change_icon(0); /*** マウスアイコンを★型に復帰 ***/
}
/*****************************************************************************/
void N_cd_play() /*** CD 演奏開始(rec_cd.obj) ***/
{
N_cd_readPHASE();
if ((cd_error==0)/*&&(cd_status==0)*/) {
/*** 交換後なら最初の曲に ***/
cd_nowNo=(cd_nowNo>0)?cd_nowNo:cd_Strk;
N_cd_start(); /*** CD 演奏(内部) ***/
}
}
/*****************************************************************************/
void N_cd_ff() /*** CD 一曲送り(rec_cd.obj) ***/
{
N_cd_readPHASE();
if ((cd_error<DEVPLY)/*&&(cd_status!=0)*/) {
/*** 最後の曲なら最初に戻る ***/
cd_nowNo=(cd_nowNo>=cd_Etrk)?cd_Strk:cd_nowNo+1;
N_cd_start(); /*** CD 演奏(内部) ***/
/*** pause中ならpause ***/
if ((N_WIN_getOptAttr(btn_cd_pause)&N_BTN_ATTR_highlight)!=0) {
cd_error= cdr_pause(cd_devNo);
}
}
}
/*****************************************************************************/
void N_cd_rr() /*** CD 一曲戻し(rec_cd.obj) ***/
{
N_cd_readPHASE();
if ((cd_error<DEVPLY)/*&&(cd_status!=0)*/) {
/*** 最初の曲なら最後に進める ***/
cd_nowNo=(cd_nowNo<=cd_Strk)?cd_Etrk:cd_nowNo-1;
N_cd_start(); /*** CD 演奏(内部) ***/
/*** pause中ならpause ***/
if ((N_WIN_getOptAttr(btn_cd_pause)&N_BTN_ATTR_highlight)!=0) {
cd_error= cdr_pause(cd_devNo);
}
}
}
/*****************************************************************************/
void N_cd_pause() /*** CD 一時停止(rec_cd.obj) ***/
{
if ((N_WIN_getOptAttr(btn_cd_pause)&N_BTN_ATTR_highlight)==0) {
cd_error= cdr_continue(cd_devNo);
}
else{
cd_error= cdr_pause(cd_devNo);
}
}
/*****************************************************************************/
void N_cd_stop() /*** CD 停止(rec_cd.obj) ***/
{
cd_error= cdr_mstop(cd_devNo);
cd_nowNo=0; /*** 停止状態を通知 ***/
}
/*****************************************************************************/
void N_cd_vol() /*** CD vol調整(rec_cd.obj) ***/
{
register unsigned short _vol=N_WIN_getOptData2(sld_cd_vol)*2;
_vol=(_vol>127)?127:_vol;
SND_elevol_set(1,_vol,_vol); /*** 電子ボリューム(CD)セット ***/
}
/******************************************************************************
$Log: RCS/rec_cd.cv $
* Revision 1.8 90/11/12 18:03:16 Nam
* Release at V0.0 L18d
*
* Revision 1.7 90/11/12 18:03:16 Nam
* *** empty log message ***
*
* Revision 1.6 90/11/08 13:37:36 Nam
* separete N_cd_popup -> rec_menu.c
*
* Revision 1.5 90/10/25 18:43:44 Nam
* Rel V0.0L17 at '90.11.2 for FPICS.
*
* Revision 1.4 90/10/25 18:43:44 Nam
* use 'rec_st.h'
*
* Revision 1.3 90/10/15 22:35:58 Nam
* debugging get-cd-stat
*
* Revision 1.2 90/10/15 22:13:22 Nam
* debug and disp
*
* Revision 1.1 90/10/10 18:05:22 Nam
* Initial revision
*
*******************************************************************************/