/*																	*/
/*		Cdur.C			( Cdur.EXE LSI-C86 用ソース)				*/
/*																	*/
/*			v1.00	90/11/24	By T.Takasaka						*/
/*			v1.01	90/12/12	bugfix								*/
/*								一部アセンブラ化(cdstop)			*/
/*								パラメータ数値の範囲検査をする		*/
/*			v1.02	90/12/13	STAT をつける						*/
/*			v1.03	90/12/30	vol をつける 						*/
/*			v1.04	91/01/03	パラメータ無の時cd演奏中			*/
/*								なら､ 新規に演奏しない				*/
/*			v1.05	91/07/07	パラメータ無の時でCD交換時には		*/
/*								演奏開始しないのを直した			*/
/*																	*/
/*							TAKACHAN ( IMA00356   ひかりNET )		*/
/*							おくと	 ( PEE01566 NIFTY-Serve )		*/
/*																	*/
/*					PS. C-Dur は ドイツ語で ハ長調の意味です		*/
/*																	*/
/*	以下は RK の変更
	v1.10rk	94/01/07	back,next,loop を追加した。
	v1.11rk	94/01/11	pause,contを追加した。
						ＣＤのシークが遅い機種での動作速度を向上させた。
						time の機能削除、vol の機能削減。
	v1.12rk	94/01/20	printf の排除によりプログラムサイズ -6KB
						pause中だったときの障害修正
	v1.13	94/01/30	コマンド名を CDS.exe に変更した。
						トレイ式のCDなら開いているとき閉めるようにした(^_^)
						PLAY 指定時に、音量をリセットするようにした。
	v1.13+	94/02/18	loop を repeat に機能変更
	
					PS. CDS は キーボードでは隣あった場所にあるので
						入力しやすいようにしたものです。
						しかし２キーロールオーバーのキーボードでは、
						あまりに入力しやすいため cdsx になってしまう…
*/

#define Version "v1.13+"

#include	"cds_def.h"

CD_INFO	 	cd_info;
ENSOU_STAT	cd_stat;

extern	void	err( int );
extern	int 	poff();

extern	int 	chk_value(int,int,int);

extern	int 	get_cd_stat(int);
extern	int 	get_cd_stat2();		/* pause 時に対応したもの */

extern	int 	cd_cont();
extern	int 	cd_pause(int );
extern	int 	cd_play_main(int ,int ,int );
extern	int 	cd_stop();
extern	int 	cd_init(int);
extern	int 	setvol(int ,int ,int);

main(int argc,char *argv[])
{
	int		start=0, end=99, loop=0,erf=-1;
	int		vol_mode=1,vol_data=VOL_MAX;
	
	putss6(C_GREEN,"***  ",C_CYAN,"ＣＤＳ．ｅｘｅ ",C_RED,"♪  ");
	putss4(C_YELLOW ,Version ,C_WHITE,"  By おくと + ＲＫ" );
	putss3(C_GREEN ,"  ***\n\n",C_WHITE );
	
	if (argc==1)
	{	if ( (erf=cd_cont(0)) == 0 )
			puts("演奏を再開します");
		else if (erf == 0x1000 )		/* 演奏中だったとき */
			erf=get_cd_stat(1);
		else
			erf=cd_play_main(1,99,0);	/* 演奏していないorエラーのとき */
		
	}
	else									/* 直接トラック番号を指定 */
	{	if( (start=atoi(argv[1])) != 0 || argv[1][0]=='0' )
		{	if( start <0)
				erf=cd_stop();
			else
			{					start=chk_value( start		  ,1,99 );
				if( argc>2 )	end  =chk_value( atoi(argv[2]),1,99 );
				if( argc>3 )	loop =chk_value( atoi(argv[3]),0,256);
				erf=cd_play_main(start,end,loop);
			}
		}else{
		start=1;end=99;loop=1;
		
		if( strcmpi(argv[1],"back")== 0 )
		{	
			get_cd_stat2();
			start=cd_stat.cd_flame-1;
			if ( start==1 )	start=-1;	/* 音楽も含むCD-ROMへの対策 */
			
			if( argc>2 )	loop = atoi(argv[2]);
			erf=cd_play_main(start,99,loop);
		}
		else if (strcmpi(argv[1],"next")==0 || strcmpi(argv[1],"for")==0)
		{	
			get_cd_stat2();
			start=cd_stat.cd_flame+1;
			
			if( argc>2 )	loop = atoi(argv[2]);
			erf=cd_play_main(start,99,loop);
		}
		else if (strcmpi(argv[1],"repeat")== 0 ||strcmpi(argv[1],"rep")== 0 )
		{	
			get_cd_stat2();
			if( argc>2 )	loop = atoi(argv[2]);
			else			loop = 0;
			
			erf=cd_play_main(cd_stat.cd_flame,cd_stat.cd_flame,loop);
		}
		else if (strcmpi(argv[1],"loop")== 0 ){
			if	(argc> 2)
			{					start= chk_value( atoi(argv[2]) ,1,99 );
				if (argc> 3)	end  = chk_value( atoi(argv[3]) ,1,99 );
				else			end  = start;
			}
			erf=cd_play_main(start,end,0);
		}
		else if (strcmpi(argv[1],"stop")== 0 )
		{	erf=cd_stop();
			if (strcmpi(argv[2],"poff")== 0 )	/* DANGER! */
				poff();
		}
		else if (strcmpi(argv[1],"pause")==0 ||strcmpi(argv[1],"pau") == 0)
		{	if ( (erf=cd_cont(1))==0x2300 )		/* 演奏していない */
			{	if ( argv[2] != NULL )
					erf=cd_play_main(1,99,0);
				else
					puts("ＣＤを演奏していません");
			}else if (erf ==0x1000)				/* 演奏中 */
				erf=cd_pause(1);
		}
		else if (strcmpi(argv[1],"cont")==0 )
		{	erf=cd_cont(1);
		}
		else if (strcmpi(argv[1],"init")==0 )
		{	erf=cd_init(0);
		}
		else if(strcmpi(argv[1],"play")== 0 )
		{	if	(argc> 2)
			{					start= chk_value( atoi(argv[2]) ,1,99 );
				if (argc> 3)	end  = chk_value( atoi(argv[3]) ,1,99 );
				if (argc> 4)	loop = chk_value( atoi(argv[3]) ,0,256);
			}
			setvol(vol_mode,VOL_MAX,1);
			erf=cd_play_main(start,end,loop);
		}
/*		else if( strcmpi(argv[1],"time")== 0 ){
			if	(argc>=3)					 time	= atoi(argv[2]) ;
			if	( 0 <= time && time <= 255 ) erf	= cd_time(time) ;
		}
*/		
		else if( strcmpi(argv[1],"stat")== 0 )
		{	erf=get_cd_stat(1);
			err(erf);
			exit(cd_stat.cd_flame);		/* 演奏中のトラック番号を返す */
		}
		else if( strcmpi(argv[1],"vol")== 0 )
		{	if( argc>2 )
				vol_data=atoi(argv[2]);
			erf=setvol(vol_mode,vol_data,1);
		}
		}
	}
	err(erf);
}
