home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Software Contest 2
/
SOFTCONTEST2.BIN
/
exp
/
zokusei
/
d1.exe
/
ZOKU.C
< prev
next >
Wrap
Text File
|
1991-09-29
|
29KB
|
1,462 lines
#include <stdlib.h>
#include <stdio.h>
#include <cdr.h>
#include <time.h>
#include <egb.h>
#include <mos.h>
#include <snd.h>
#include <ctype.h>
#include <strings.h>
#include <string.h>
#include <fmc.h>
#include <dos.h>
#include <msdos.cf>
extern void chk_drv();
extern void e_msgq();
extern void e_msgz();
int col;
char *ya1="▼";
char *ya2="▲";
char *cd[20]={" 1"," 2"," 3"," 4"," 5"," 6"," 7"," 8"," 9","10","11","12","13","14","15","16","17","18","19","20"};
char *mdrv[]={"A","B","D","E","F","G","H","I","J","K","L","M","N","O","P","Q"};
char *msg1="CD演奏";
char *msg2="STOP";
char *msg3="全曲";
char *msg4="DRV";
char *msg5="CHDIR";
char *msg6="ファイル属性";
char *msg7="属性変更";
char *msg8="終 了";
char *msg9= "COPYします";
char *msg10="ドライブA:へ";
char *msg11="ドライブB:へ";
char *msg12="読込側にエラー発生";
char *msg13="書込側にエラー発生";
char *msg14="属性変更出来ません!";
char *msg15="ディレクトリ属性を解除!";
char *msg16="確 認";
char *msg17="取 消";
char *msg18="了 解";
char *zoku0="読 み 込 み 専 用";
char *zoku1="隠 し フ ァ イ ル";
char *zoku2="システムファィル";
char *zoku3="サブディレクトリ";
char *zoku4="アーカイブファイル";
char *maru1="○";
char *maru2="●";
char work[1024*5];
char mwork[1024*5];
char para[300];
char bpara[12];
char path[64];
char fname[300][14];
char fname2[15]; /* フクシャ サレル ファィルメイ */
char fzoku[300];
char *arg="*.*";
char init_d;
int fno;
int hno;
int lno=0;
int gno; /* ゲンザイ ノ No (0-9 ノ カウンター ) */
int kakutei=0; /* 0-300 ノ FAIL ノ ハイレツ デ チュウオウニ エランダ ハイレツ */
int no_chek=0;
int dchek=1;
int cd_chek=0;
int i,ii=0;
int ff=0;
int mode=0x36;
int mode2=0x00;
int c=0;
int sw,x,y; /* マウス ノ ヘンスウ */
int yyy=0; /* Y ザヒョウ ノ カクノウ */
int nono=0; /* no ノ カクノウ */
int msg_x=22;
int msg_y=359;
int left1=-1,left2=-1,left3=-1,left4=-1,left5=-1; /* ヒダリ ノ chek */
int righ1=-1 ,righ2=1 ,righ3=1 ,righ4=1 ,righ5=1; /* ミギ ノ chek */
void wait()
{
int i;
for(i=0;i<=100000;i++);
}
#define SHORT short int
#define LONG long int
#define ULONG unsigned long int
#define BOOL short int
#define ERR (-1)
#define SIZE (1024*10)
int type=0,strt=0,endt=0;
int vol=120,sts=0,no=0,acv=0,mos=ERR;
void gamen()
{
MOS_start(mwork,4096);
MOS_resolution(0,3);
MOS_setpos(320,240);
EGB_init(work,4096);
EGB_resolution(work,0,3);
EGB_resolution(work,1,3);
EGB_displayPage(work,0,1);
EGB_displayStart(work,0,0,0);
EGB_displayStart(work,3,640,480);
EGB_color(work,0,13);
EGB_color(work,1,0);
EGB_writePage(work,0);
EGB_writeMode(work,0);
EGB_clearScreen(work);
}
typedef struct {
char min;
char sec;
char frame;
} CDTIME;
CDTIME st,ed;
CDTIME *track=NULL;
int CD_open(void)
{
int i;
CDTIME disc;
if ( track != NULL && acv != 0 )
return 0;
if ( track == NULL &&
(track = (CDTIME *)malloc(sizeof(CDTIME)*99)) == NULL )
return 1;
do {
i = cdr_cdinfo(0,&type,&strt,&endt,(char *)track,(char *)&disc);
} while ( i == CDERR7 );
if ( disc.frame-- <= 0 ) {
disc.frame = 74;
if ( disc.sec-- <= 0 ) {
disc.sec = 59;
if ( disc.min-- <= 0 )
return 1;
}
}
track[endt].min = disc.min;
track[endt].sec = disc.sec;
track[endt].frame = disc.frame;
if ( i == 0 ) acv = 1;
return i;
}
void CD_play(cdno)
int cdno;
{
if ( cdr_mphase(0,&sts,&no,(char *)&st,(char *)&ed) != 0 )
return;
if ( sts != 0 )
return;
if ( CD_open() != 0 ) return;
if ( endt > 0 ) {
if ((track[cdno].min & 0x80) == 0 )
no = cdr_mtplay(0,(char *)&(track[cdno-1]),(char *)&(track[cdno] ));
}
}
void CD_play2()
{
int i;
if ( cdr_mphase(0,&sts,&no,(char *)&st,(char *)&ed) != 0 )
return;
if ( sts != 0 )
return;
if ( CD_open() != 0 ) return;
if ( endt > 0 ) {
for ( i=0 ; i < endt && (track[i].min & 0x80) != 0 ; i++ );
no = cdr_mtplay(0,(char *)&(track[i]),(char *)&(track[endt]));
}
}
static struct {
char dd_dmy[21];
char dd_z;
SHORT dd_time,dd_date;
LONG dd_size;
char dd_name[13];
} dma;
void symbol(int a1,int a2,int k1,int k2)
{
EGB_textZoom(work,0,a1,a2);
EGB_textZoom(work,1,k1,k2);
}
void set_drive(char drv)
{
if(cd_chek==1 && drv==15) e_msgq();
if(drv>1) drv++;
Registers.AX.LH.H = 0x0e;
Registers.DX.LH.L = drv;
calldos();
}
char drive()
{
Registers.AX.LH.H = 0x19;
calldos();
return Registers.AX.LH.L;
}
int set_path()
{
char drv;
drv=drive();
Registers.AX.LH.H = 0x47;
Registers.DX.LH.L = drv+1;
Registers.SI.R = (int)&path[0];
Registers.DS.R = getds();
calldos();
return(drv);
}
void set_dir()
{
if(no_chek!=0)
{
Registers.AX.R = 0x3b00;
Registers.DX.R = (int)&fname[kakutei];
Registers.DS.R = getds();
calldos();
}
}
void set_disk()
{
Registers.AX.R = 0x1A00;
Registers.DX.R = (int)&dma;
Registers.DS.R = getds();
calldos();
}
void zhen()
{
char error,qq;
Registers.AX.LH.H = 0x43;
Registers.AX.LH.L = 0x01;
Registers.CX.R = mode2;
Registers.DX.R = (int)&fname[kakutei];
Registers.DS.R = getds();
calldos();
error=Registers.AX.LH.L;
qq=error&0x05;
if(qq==0x05)
{ e_msgz(); return; }
}
void box(s,x1,y1,x2,y2)
int s,x1,y1,x2,y2;
{
if(s!=0) s=0x22;
else s=2;
EGB_paintMode(work,s);
WORD(bpara + 0)=x1;
WORD(bpara + 2)=y1;
WORD(bpara + 4)=x2;
WORD(bpara + 6)=y2;
EGB_rectangle(work,bpara);
}
void path_print()
{
int x=123,y=448,z=6;
int i;
char drv;
drv=set_path();
WORD(para + 0)=x;
WORD(para + 2)=y;
EGB_color(work,0,0);
EGB_color(work,2,0);
box(1,122,432,518,448);
WORD(para + 6)=drv+0x41;
WORD(para + 7)=':';
WORD(para + 8)='\\';
WORD(para + 4)=3;
EGB_textSpace(work,1);
EGB_textZoom(work,0,8,16);
EGB_textZoom(work,1,16,16);
EGB_color(work,0,14);
EGB_sjisString(work,para);
WORD(para + 0)=x+27;
WORD(para + 2)=y;
for(i=0;i<59;i++)
{
WORD(para + z)=path[i];
if(path[i]=='\0') break;
z++;
}
WORD(para + 4)=i;
EGB_sjisString(work,para);
}
void print(int x,int y,int col,char *moji)
{
int z=6;
int i;
WORD(para + 0)=x;
WORD(para + 2)=y;
for(i=0;i<200;i++)
{
WORD(para + z)=*(moji+i);
if(*(moji+i)=='\0') break;
z++;
}
WORD(para + 4)=i;
EGB_color(work,0,col);
EGB_sjisString(work,para);
}
void f_print()
{
int ch;
int col;
int x,y,z;
x=482; y=142;
ch=9;
MOS_disp(0);
EGB_color(work,0,0);
EGB_color(work,2,0);
box(1,473,124,595,317);
symbol(8,16,16,16);
EGB_textSpace(work,1);
col=14;
if(ff-1<ch) ch=ff-1;
for(fno=0;fno<=ch;fno++)
{
z=0x10&fzoku[fno];
if(z==0x10) col=8;
EGB_fontStyle(work,0);
z=0x02&fzoku[fno];
if(z==0x02) EGB_fontStyle(work,64);
print(x,y,col,fname[fno]);
y=y+19; col=14;
EGB_fontStyle(work,0);
}
EGB_color(work,0,0);
EGB_color(work,2,0);
box(1,204,243,436,278);
MOS_disp(1);
no_chek=0;
hno=0; lno=ch;
}
int dir()
{
int count;
int z;
for(count=0;count<300;count++)
{
for(c=0;c<=13;c++) fname[count][c]='\0';
fzoku[count]=0;
}
Registers.AX.R = 0x4E00;
Registers.CX.R = mode;
Registers.DX.R = (int)arg;
Registers.DS.R = getds();
calldos();
ff=0;
if ( (Registers.Flags & 0x0001) != 0 ) return(1);
z=dma.dd_z&mode;
if( z!=0 )
{
for(c=0;c<=13;c++) fname[ff][c]=dma.dd_name[c];
fzoku[ff]=dma.dd_z;
ff++;
}
else if(righ1==-1)
{
if(dma.dd_z==0x00)
{
for(c=0;c<=13;c++) fname[ff][c]=dma.dd_name[c];
fzoku[ff]=dma.dd_z;
ff++;
}
}
while(ff<300)
{
Registers.AX.R = 0x4F00;
calldos();
if ( (Registers.Flags & 0x0001) != 0 ) return(0);
else
z=dma.dd_z&mode;
if( z!=0 )
{
for(c=0;c<=13;c++) fname[ff][c]=dma.dd_name[c];
fzoku[ff]=dma.dd_z;
ff++;
}
else if(righ1==-1)
{
if(dma.dd_z==0x00)
{
for(c=0;c<=13;c++) fname[ff][c]=dma.dd_name[c];
fzoku[ff]=dma.dd_z;
ff++;
}
}
}
}
void line(int x1, int y1, int x2, int y2)
{
WORD(para + 0)=2;
WORD(para + 2)=x1;
WORD(para + 4)=y1;
WORD(para + 6)=x2;
WORD(para + 8)=y2;
EGB_unConnect(work,para);
}
void maru(int s, int x, int y)
{
if(s==1)
{
EGB_color(work,0,0);
EGB_color(work,2,0);
box(1,x,y-16,x+16,y);
print(x,y,10,maru2);
print(x,y,1,maru1);
}
else {
EGB_color(work,0,0);
EGB_color(work,2,0);
box(1,x,y-16,x+16,y);
print(x,y,1,maru1);
}
}
void waku()
{
MOS_disp(0);
EGB_penSize(work,2);
EGB_color(work,0,4);
box(1,20,320,200,410);
line(20,340,200,340);
EGB_color(work,0,3);
print(36,338,4,"HELPメッセージ");
MOS_horizon(20,200);
MOS_vertical(320,410);
}
void help()
{
int ugx=25;
int ugy=30;
EGB_displayPage(work,0,1);
EGB_writePage(work,1);
EGB_clearScreen(work);
symbol(12,24,24,24);
print(75,ugy,14,"ファイル属性変更プログラム HELP画面");
symbol(8,16,16,16);
ugy=ugy+30;
print(ugx,ugy,15," ○ 読 み 込 み 専 用 ○← この属性の条件に従いファィルセレクタへ");
ugy=ugy+20;
print(ugx,ugy,15," ○ 隠 し フ ァ イ ル ○← ファイル名が表示されます。");
ugy=ugy+20;
print(ugx,ugy,15," ↑ :");
ugy=ugy+20;
print(ugx,ugy,15,"この条件はファィルセレクタからファィル名をクリックし選択した時のファィル");
ugy=ugy+20;
print(ugx,ugy,15,"属性が表示されますが、属性を変更する場合にも利用します。");
ugy=ugy+35;
print(ugx,ugy,15,"ディレクトリ属性のファィルをクリックしCHDIRをクリックすると");
ugy=ugy+20;
print(ugx,ugy,15,"ディレクトリの移動が出来ます");
ugy=ugy+35;
print(ugx,ugy,15,"ドライブ切り換えとCD演奏は直接、希望の番号をクリックして下さい");
ugy=ugy+35;
print(ugx,ugy,15,"通常ファイル←→サブディレクトリの属性は変更できませんので注意して下さい。");
ugy=ugy+35;
print(ugx,ugy,15,"サブディレクトリ属性のファィルを隠しファィルなどに変更したい場合には");
ugy=ugy+20;
print(ugx,ugy,15,"サブディレクトリ左側の○を白丸にして、希望の属性の左側の○を赤丸に変更後");
ugy=ugy+20;
print(ugx,ugy,15,"に属性変更をクリックして下さい。");
ugy=ugy+35;
print(ugx,ugy,15,"COPYと属性変更は誤操作防止の為、マウスの左右のボタンを同時にクリック");
ugy=ugy+20;
print(ugx,ugy,15,"しなければ動かないようにプログラムしてあります。");
ugy=ugy+20;
print(ugx,ugy,15,"この場合、先に右ボタンをクリックしておいて、そのままの状態で左ボタンを");
ugy=ugy+20;
print(ugx,ugy,15,"クリックすると上手に実行できます。");
ugy=ugy+30;
print(ugx+30,ugy,10,"マウスの左右のボタンを同時にクリックすると元の画面に戻ります!!");
wait();
EGB_displayPage(work,0,1);
EGB_writePage(work,0);
}
void ura_gamen()
{
EGB_displayPage(work,0,2);
EGB_writePage(work,1);
MOS_horizon(20,200);
MOS_vertical(340,410);
do
{
MOS_rdpos(&sw,&x,&y);
} while ( sw!=3 );
EGB_displayPage(work,0,1);
EGB_writePage(work,0);
MOS_horizon(20,200);
MOS_vertical(320,410);
}
void kaku()
{
int flag=0;
EGB_color(work,0,3);
EGB_color(work,2,0);
box(1,80,384,140,404);
print(84,401,4,msg16);
MOS_disp(1);
do
{
MOS_rdpos(&sw,&x,&y);
if(((x>80)&&(x<140))&&((y>384)&&(y<404))&&(sw==1)) flag=1;
if(((x>20)&&(x<200))&&((y>320)&&(y<340))&&(sw==1)) ura_gamen();
} while ( flag!=1 );
EGB_color(work,0,0);
EGB_color(work,2,0);
MOS_disp(0);
box(1,20,320,200,410);
MOS_disp(1);
MOS_horizon(0,630);
MOS_vertical(0,470);
}
int kaku2()
{
int flag=0;
int ret;
EGB_color(work,0,3);
EGB_color(work,2,0);
box(1,40,384,100,405);
box(1,120,384,180,405);
print(45,402,4,msg17);
print(125,402,4,msg18);
MOS_disp(1);
do
{
MOS_rdpos(&sw,&x,&y);
if(((x>40)&&(x<100))&&((y>384)&&(y<404))&&(sw==1)) {flag=1; ret=1;}
if(((x>120)&&(x<180))&&((y>384)&&(y<404))&&(sw==1)) {flag=1; ret=0;}
if(((x>20)&&(x<200))&&((y>320)&&(y<340))&&(sw==1)) ura_gamen();
} while ( flag!=1 );
EGB_color(work,0,0);
EGB_color(work,2,0);
MOS_disp(0);
box(1,20,320,200,410);
MOS_disp(1);
MOS_horizon(0,630);
MOS_vertical(0,470);
return(ret);
}
int drv_msg1()
{
int ret;
waku();
symbol(8,16,16,16);
print(msg_x+40,msg_y,9,msg11);
print(msg_x+40,msg_y+20,9,msg9);
ret=kaku2();
return(ret);
}
int drv_msg2()
{
int ret;
waku();
symbol(8,16,16,16);
print(msg_x+40,msg_y,9,msg10);
print(msg_x+40,msg_y+20,9,msg9);
ret=kaku2();
return(ret);
}
void e_msg1()
{
waku();
symbol(8,16,16,16);
print(msg_x+14,msg_y,9,msg12);
print(msg_x+14,msg_y+20,9,"サブディレクトリを選択?");
kaku();
}
void e_msg2()
{
waku();
symbol(8,16,16,16);
print(msg_x+14,msg_y,9,msg13);
print(msg_x+14,msg_y+20,9,"ライトプロテクト?");
kaku();
}
void e_msgf()
{
waku();
symbol(8,16,16,16);
print(msg_x+5,msg_y+10,9,"ファイルを選んで下さい");
kaku();
}
void e_msgw()
{
waku();
symbol(8,16,16,16);
print(msg_x+10,msg_y,9,"書き込みエラー発生");
print(msg_x+10,msg_y+19,9,"ディスク容量不足?");
kaku();
}
void e_msgq()
{
waku();
symbol(8,16,16,16);
print(msg_x+5,msg_y,9,"CD演奏中はQ:ドライブ");
print(msg_x+40,msg_y+19,9,"は使えません");
kaku();
}
void e_msgz()
{
waku();
symbol(8,16,16,16);
print(msg_x+6,msg_y,9,msg14);
print(msg_x+8,msg_y+19,9,msg15);
kaku();
}
void e_msgm()
{
waku();
symbol(8,16,16,16);
print(msg_x+2,msg_y,9,"マウスを右・左の順に両方");
print(msg_x+2,msg_y+19,9,"をクリックすると実行!!");
kaku();
}
void menu()
{
int i;
symbol(12,24,24,24);
print(160,45,13,"ファイル属性変更プログラム");
symbol(8,16,16,16);
EGB_penSize(work,5);
EGB_color(work,0,13);
box(0,40,56,600,80); /* CD */
box(0,60,100,120,282); /* DRV */
box(0,470,100,600,344); /* chdir */
box(0,200,100,440,220); /* メッセージ */
box(0,200,240,440,304); /* fail */
box(0,340,320,420,350); /* ゾクセイ */
box(0,260,370,380,400); /* end */
box(0,120,430,520,450); /* path */
box(0,220,320,300,350); /* copy */
EGB_penSize(work,2);
line(60,120,120,120);
line(470,120,600,120);
line(470,320,600,320);
line(200,280,440,280);
line(320,280,320,300);
line(536,320,536,340);
EGB_penSize(work,1);
int x1=100,y1=56,y2=80,x2;
for(x1=120;x1<=520;x1=x1+20) line(x1,y1,x1,y2);
x1=x1+20;
line(x1,y1,x1,y2);
line(90,120,90,280);
x1=60;y1=140;x2=120;
for(y1=120;y1<=260;y1=y1+20) line(x1,y1,x2,y1);
symbol(8,16,16,16);
i=0;
col=1;
for(x1=123;x1<=503;x1=x1+20) { print(x1,76,col,cd[i]); i++; }
i=0;
for(y1=139;y1<=279;y1=y1+20) { print(70,y1,col,mdrv[i]); i++; }
for(y1=139;y1<=279;y1=y1+20) { print(98,y1,col,mdrv[i]); i++; }
print(50,76,col,msg1); /* cd エン */
print(525,76,col,msg2); /* stop */
print(564,76,col,msg3); /* レンゾク */
print(66,119,col,msg4); /* drv */
print(495,119,col,msg5); /* chdir */
print(347,342,col,msg7); /* ゾクヘンコウ */
print(227,342,col,"COPY"); /* copy */
symbol(10,20,20,20);
print(295,394,col,msg8); /* end */
symbol(8,16,16,16);
print(245,125,col,zoku0);
print(245,146,col,zoku1);
print(245,167,col,zoku2);
print(245,188,col,zoku3);
print(245,209,col,zoku4);
maru(0,215,125);
maru(0,215,146);
maru(0,215,167);
maru(0,215,188);
maru(0,215,209);
maru(0,410,125);
maru(1,410,146);
maru(1,410,167);
maru(1,410,188);
maru(1,410,209);
print(250,299,col,ya2);
print(375,299,col,ya1);
print(500,339,col,ya2);
print(560,339,col,ya1);
}
void uproll()
{
int col,z;
if(lno<ff-1)
{
MOS_disp(0); col=10; print(560,339,col,ya1);
hno++; lno++; fno=lno; nono--; yyy=yyy-19;
if(nono<0) { nono=0; no_chek=0; yyy=yyy+19; }
WORD(para+0)=473;
WORD(para+2)=124;
WORD(para+4)=597;
WORD(para+6)=313;
EGB_partScroll(work,1,0,-19,para);
z=0x10&fzoku[fno];
col=14;
if(z==0x10) col=8;
EGB_fontStyle(work,0);
z=0x02&fzoku[fno];
if(z==0x02) EGB_fontStyle(work,64);
EGB_textSpace(work,1);
print(482,313,col,fname[fno]);
EGB_fontStyle(work,0);
col=1; print(560,339,col,ya1);
MOS_disp(1);
}
return;
}
void dwroll()
{
int col,z;
if(hno>0)
{
MOS_disp(0); col=10; print(500,339,col,ya2);
hno--; lno--; fno=hno; nono++; yyy=yyy+19;
if(nono>9) { nono=9; no_chek=0; yyy=yyy-19; }
WORD(para+0)=473;
WORD(para+2)=124;
WORD(para+4)=597;
WORD(para+6)=313;
EGB_partScroll(work,1,0,19,para);
z=0x10&fzoku[fno];
col=14;
if(z==0x10) col=8;
EGB_fontStyle(work,0);
z=0x02&fzoku[fno];
if(z==0x02) EGB_fontStyle(work,64);
EGB_textSpace(work,1);
print(482,142,col,fname[fno]);
EGB_fontStyle(work,0);
col=1; print(500,339,col,ya2);
MOS_disp(1);
}
return;
}
void palette(int col,int b,int r,int g)
{
char bul,red,grn;
bul=(char)b;
red=(char)r;
grn=(char)g;
DWORD(para+0)=1;
DWORD(para+4)=col;
BYTE(para+8)=bul;
BYTE(para+9)=red;
BYTE(para+10)=grn;
BYTE(para+11)=0;
EGB_palette(work,1,para);
}
void pal_init()
{
palette(1,255,0,175); /* アオ */
palette(2,0,255,100); /* アカ */
palette(3,255,255,0); /* ムラサキ */
palette(4,0,0,255); /* ミドリ */
palette(8,170,255,255); /* キイロ */
palette(9,0,255,147); /* オレンジ */
palette(10,80,255,80); /* ピンク */
}
void zoku_chek()
{
char z;
z=0x01&fzoku[kakutei];
if(z==0x01) {left1=1; maru(1,215,125); }
else {left1=-1; maru(0,215,125); }
z=0x02&fzoku[kakutei];
if(z==0x02) {left2=1; maru(1,215,146); }
else {left2=-1; maru(0,215,146); }
z=0x04&fzoku[kakutei];
if(z==0x04) {left3=1; maru(1,215,167); }
else {left3=-1; maru(0,215,167); }
z=0x10&fzoku[kakutei];
if(z==0x10) {left4=1; maru(1,215,188); }
else {left4=-1; maru(0,215,188); }
z=0x20&fzoku[kakutei];
if(z==0x20) {left5=1; maru(1,215,209); }
else {left5=-1; maru(0,215,209); }
}
void read_f(int no,int y)
{
if(ff>no)
{
int x,z,col;
x=480;
MOS_disp(0);
if(no_chek==1)
{
EGB_color(work,0,0); /*ゲンザイ エラバレテイレバ ハンテン ヲ ケス */
EGB_color(work,2,0);
MOS_disp(0);
box(1,480,yyy-16,591,yyy-1);
z=0x10&fzoku[hno+nono];
col=14;
if(z==0x10) col=8;
EGB_fontStyle(work,0);
z=0x02&fzoku[hno+nono];
if(z==0x02) EGB_fontStyle(work,64);
EGB_textSpace(work,1);
print(482,yyy,col,fname[hno+nono]);
EGB_fontStyle(work,0);
}
no_chek=1;
EGB_color(work,0,1);
EGB_color(work,2,1);
yyy=y; nono=no;
box(1,480,y-16,591,y-1);
z=0x10&fzoku[hno+no];
col=14;
if(z==0x10) col=8;
z=0x02&fzoku[hno+nono];
if(z==0x02) EGB_fontStyle(work,64);
EGB_textSpace(work,1);
print(482,y,col,fname[hno+no]);
EGB_fontStyle(work,0);
EGB_color(work,0,0);
EGB_color(work,2,0);
box(1,204,243,436,278);
symbol(16,32,32,32);
EGB_textSpace(work,1);
col=14;
print(220,277,col,fname[hno+no]);
symbol(8,16,16,16);
kakutei=hno+no;
zoku_chek();
MOS_disp(1);
}
}
void fail(int y)
{
if(y<=142) { gno=0; read_f(gno,142); return;}
if(y<=142+19) { gno=1; read_f(gno,142+19); return;}
if(y<=142+19*2) { gno=2; read_f(gno,142+19*2); return;}
if(y<=142+19*3) { gno=3; read_f(gno,142+19*3); return;}
if(y<=142+19*4) { gno=4; read_f(gno,142+19*4); return;}
if(y<=142+19*5) { gno=5; read_f(gno,142+19*5); return;}
if(y<=142+19*6) { gno=6; read_f(gno,142+19*6); return;}
if(y<=142+19*7) { gno=7; read_f(gno,142+19*7); return;}
if(y<=142+19*8) { gno=8; read_f(gno,142+19*8); return;}
if(y<=144+19*9) { gno=9; read_f(gno,142+19*9); return;}
}
void mdwroll()
{
int dy;
if(kakutei<ff-1)
{
MOS_disp(0);
print(375,299,10,ya1);
dy=yyy+19;
if(dy>=144+19*9) { uproll(); dy=dy-19; fail(dy); }
else fail(dy);
MOS_disp(0);
print(375,299,1,ya1);
MOS_disp(1);
}
}
void muproll()
{
int dy;
if(kakutei>0)
{
MOS_disp(0);
print(250,299,10,ya2);
dy=yyy-19;
if(dy<=123) { dwroll(); dy=dy+19; fail(dy); }
else fail(dy);
MOS_disp(0);
print(250,299,1,ya2);
MOS_disp(1);
}
}
void set_zoku(int z)
{
MOS_disp(0);
switch(z)
{
case 1: righ1=righ1*-1;
if(righ1==1) maru(1,410,125);
else maru(0,410,125);
break;
case 2: righ2=righ2*-1;
if(righ2==1) maru(1,410,146);
else maru(0,410,146);
break;
case 3: righ3=righ3*-1;
if(righ3==1) maru(1,410,167);
else maru(0,410,167);
break;
case 4: righ4=righ4*-1;
if(righ4==1) maru(1,410,188);
else maru(0,410,188);
break;
case 5: righ5=righ5*-1;
if(righ5==1) maru(1,410,209);
else maru(0,410,209);
break;
}
mode=0;
if(righ1==1) mode=mode+0x01;
if(righ2==1) mode=mode+0x02;
if(righ3==1) mode=mode+0x04;
if(righ4==1) mode=mode+0x10;
if(righ5==1) mode=mode+0x20;
dir();
f_print();
path_print();
MOS_disp(1);
}
void set_zoku2(int z)
{
MOS_disp(0);
switch(z)
{
case 1: left1=left1*-1;
if(left1==1) maru(1,215,125);
else maru(0,215,125);
break;
case 2: left2=left2*-1;
if(left2==1) maru(1,215,146);
else maru(0,215,146);
break;
case 3: left3=left3*-1;
if(left3==1) maru(1,215,167);
else maru(0,215,167);
break;
case 4: left4=left4*-1;
if(left4==1) maru(1,215,188);
else maru(0,215,188);
break;
case 5: left5=left5*-1;
if(left5==1) maru(1,215,209);
else maru(0,215,209);
break;
}
mode2=0;
if(left1==1) mode2=mode2+0x01;
if(left2==1) mode2=mode2+0x02;
if(left3==1) mode2=mode2+0x04;
if(left4==1) mode2=mode2+0x10;
if(left5==1) mode2=mode2+0x20;
MOS_disp(1);
wait();
}
void chdir()
{
MOS_disp(0);
EGB_textSpace(work,0);
print(495,119,10,msg5);
EGB_textSpace(work,1);
set_dir();
dir();
f_print();
path_print();
MOS_disp(0);
EGB_textSpace(work,0);
print(495,119,1,msg5);
EGB_textSpace(work,1);
MOS_disp(1);
kakutei=0; yyy=0; nono=0;
}
void chdrv(int x, int y)
{
char co=0;
if(x>90) co=8;
if(y<140) { co=co+0; set_drive(co); return;}
if(y<160) { co=co+1; set_drive(co); return;}
if(y<180) { co=co+2; set_drive(co); return;}
if(y<200) { co=co+3; set_drive(co); return;}
if(y<220) { co=co+4; set_drive(co); return;}
if(y<240) { co=co+5; set_drive(co); return;}
if(y<260) { co=co+6; set_drive(co); return;}
if(y<280) { co=co+7; set_drive(co); return;}
yyy=0; nono=0; kakutei=0; no_chek=0;
}
void chk_drv()
{
char no;
int col,y1,i=0;
no=drive();
col=1;
MOS_disp(0);
EGB_color(work,0,0); /* メインファィルを消す */
EGB_color(work,2,0);
box(1,204,243,436,278);
for(y1=139;y1<=279;y1=y1+20) { print(70,y1,col,mdrv[i]); i++; }
for(y1=139;y1<=279;y1=y1+20) { print(98,y1,col,mdrv[i]); i++; }
if(no>1) no--;
col=10;
switch(no)
{
case 0: print(70,139,col,mdrv[0]); break;
case 1: print(70,139+20,col,mdrv[1]); break;
case 2: print(70,139+20*2,col,mdrv[2]); break;
case 3: print(70,139+20*3,col,mdrv[3]); break;
case 4: print(70,139+20*4,col,mdrv[4]); break;
case 5: print(70,139+20*5,col,mdrv[5]); break;
case 6: print(70,139+20*6,col,mdrv[6]); break;
case 7: print(70,139+20*7,col,mdrv[7]); break;
case 8: print(98,139,col,mdrv[8]); break;
case 9: print(98,139+20,col,mdrv[9]); break;
case 10: print(98,139+20*2,col,mdrv[10]); break;
case 11: print(98,139+20*3,col,mdrv[11]); break;
case 12: print(98,139+20*4,col,mdrv[12]); break;
case 13: print(98,139+20*5,col,mdrv[13]); break;
case 14: print(98,139+20*6,col,mdrv[14]); break;
case 15: print(98,139+20*7,col,mdrv[15]); break;
}
dchek=no;
MOS_disp(1);
dir();
f_print();
path_print();
}
void t_fname(int dchek)
{
int i=2,ii;
if(dchek==0) {fname2[0]='B'; fname2[1]=':'; }
else {fname2[0]='A'; fname2[1]=':'; }
for(ii=0;ii<14;ii++)
{
fname2[i]=fname[kakutei][ii];
if(fname[kakutei][ii]=='\0') break;
i++;
}
}
void cdplay(int xx)
{
int no=0;
if(cd_chek==1) return; /* エンソウ チュウ ハ ナニモシナイ */
EGB_textSpace(work,0);
cd_chek=1;
MOS_disp(0);
if(xx<140){print(123,76,10,cd[0]); CD_play(1); return;}
if(xx<160){print(123+20,76,10,cd[1]); CD_play(2); return;}
if(xx<180){print(123+20*2,76,10,cd[2]); CD_play(3); return;}
if(xx<200){print(123+20*3,76,10,cd[3]); CD_play(4); return;}
if(xx<220){print(123+20*4,76,10,cd[4]); CD_play(5); return;}
if(xx<240){print(123+20*5,76,10,cd[5]); CD_play(6); return;}
if(xx<260){print(123+20*6,76,10,cd[6]); CD_play(7); return;}
if(xx<280){print(123+20*7,76,10,cd[7]); CD_play(8); return;}
if(xx<300){print(123+20*8,76,10,cd[8]); CD_play(9); return;}
if(xx<320){print(123+20*9,76,10,cd[9]); CD_play(10);return;}
if(xx<340){print(123+20*10,76,10,cd[10]);CD_play(11);return;}
if(xx<360){print(123+20*11,76,10,cd[11]);CD_play(12);return;}
if(xx<380){print(123+20*12,76,10,cd[12]);CD_play(13);return;}
if(xx<400){print(123+20*13,76,10,cd[13]);CD_play(14);return;}
if(xx<420){print(123+20*14,76,10,cd[14]);CD_play(15);return;}
if(xx<440){print(123+20*15,76,10,cd[15]);CD_play(16);return;}
if(xx<460){print(123+20*16,76,10,cd[16]);CD_play(17);return;}
if(xx<480){print(123+20*17,76,10,cd[17]);CD_play(18);return;}
if(xx<500){print(123+20*18,76,10,cd[18]);CD_play(19);return;}
if(xx<520){print(123+20*19,76,10,cd[19]);CD_play(20);return;}
if(xx<560){print(525,76,10,msg2); cdr_mstop(0); return;}
if(xx>560 && xx<597) { print(564,76,10,msg3); CD_play2(); return;}
}
void cdstop()
{
EGB_textSpace(work,0);
MOS_disp(0);
print(525,76,10,msg2);
cdr_mstop(0);
MOS_disp(1);
EGB_textSpace(work,1);
}
void zhen2()
{
MOS_disp(0);
EGB_textSpace(work,0);
print(347,342,10,msg7); /* ゾクヘンコウ */
EGB_textSpace(work,1);
if(no_chek!=0) zhen(); /* ファィル ヲ エランデイレバ コピー */
else e_msgf();
EGB_textSpace(work,0);
print(347,342,1,msg7); /* ゾクヘンコウ */
EGB_textSpace(work,1);
MOS_disp(1);
}
void main()
{
char swork[17000];
int flag=0,x1;
int chopen1,chopen2;
int ret;
int e_write=0;
SND_init(swork);
SND_elevol_init();
SND_pcm_mode_set(8);
SND_elevol_all_mute(-1);
SND_elevol_mute(0xff);
SND_elevol_set(1,127,127);
FILE *fp1,*fp2 ;
char buf[SIZE];
init_d=drive();
gamen();
help();
MOS_horizon(0,630);
MOS_vertical(0,470);
pal_init();
menu();
MOS_disp(1);
set_disk();
chk_drv(); /* dir();f_print();path_print(); ヲ フクム */
do
{
MOS_rdpos(&sw,&x,&y);
/* FAIL ノ ウエ ノ ボタン */
if(((x>473)&&(x<534))&&((y>322)&&(y<341))&&(sw==1)) dwroll();
/* FAIL ノ シタ ノ ボタン */
if(((x>538)&&(x<598))&&((y>322)&&(y<341))&&(sw==1)) uproll();
/* FAILヲエラブ */
if(((x>473)&&(x<595))&&((y>124)&&(y<315))&&(sw==1)) fail(y);
if(((x>203)&&(x<320))&&((y>282)&&(y<301))&&(sw==1)) muproll();
if(((x>322)&&(x<437))&&((y>282)&&(y<301))&&(sw==1)) mdwroll();
/* ミギ ノ ゾクセイ */
if(((x>400)&&(x<435))&&((y>109)&&(y<125))&&(sw==1)) set_zoku(1);
if(((x>400)&&(x<435))&&((y>130)&&(y<146))&&(sw==1)) set_zoku(2);
if(((x>400)&&(x<435))&&((y>151)&&(y<167))&&(sw==1)) set_zoku(3);
if(((x>400)&&(x<435))&&((y>172)&&(y<188))&&(sw==1)) set_zoku(4);
if(((x>400)&&(x<435))&&((y>193)&&(y<209))&&(sw==1)) set_zoku(5);
/* ヒダリ ノ ゾクセイ */
if(((x>206)&&(x<237))&&((y>109)&&(y<125))&&(sw==1)) set_zoku2(1);
if(((x>206)&&(x<237))&&((y>130)&&(y<146))&&(sw==1)) set_zoku2(2);
if(((x>206)&&(x<237))&&((y>151)&&(y<167))&&(sw==1)) set_zoku2(3);
if(((x>206)&&(x<237))&&((y>172)&&(y<188))&&(sw==1)) set_zoku2(4);
if(((x>206)&&(x<237))&&((y>193)&&(y<209))&&(sw==1)) set_zoku2(5);
/* chdir */
if(((x>474)&&(x<596))&&((y>103)&&(y<118))&&(sw==1)) chdir();
/* drive */
if(((x>63)&&(x<118))&&((y>121)&&(y<279))&&(sw==1))
{ chdrv(x,y); chk_drv(); }
/* ゾクセイ ヘンコウ */
if(((x>340)&&(x<420))&&((y>323)&&(y<347))&&(sw==1)) e_msgm();
if(((x>340)&&(x<420))&&((y>323)&&(y<347))&&(sw==3))
{ zhen2(); dir(); f_print(); path_print(); }
/* copy */
if(((x>223)&&(x<303))&&((y>323)&&(y<347))&&(sw==1)) e_msgm();
if(((x>223)&&(x<303))&&((y>323)&&(y<347))&&(sw==3))
{
MOS_disp(0);
EGB_textSpace(work,0);
print(227,342,10,"COPY"); /* copy */
EGB_textSpace(work,1);
if(no_chek!=0) /* ファィル ヲ エランデイレバ コピー */
{
if(dchek==0) ret=drv_msg1();
else ret=drv_msg2();
if(ret==0) /* トリケシ ヲ クリック シテイナケレバ ジッコウ */
{
t_fname(dchek); /* カキコミ ガワ ノ ファイルメイ ヲ ツクル */
chopen1=0; chopen2=0;
if ((fp1=fopen(fname[kakutei],"rb"))==NULL) chopen1=1;
if(chopen1==0)
{
if ((fp2=fopen(fname2,"wb"))==NULL) chopen2=1;
if(chopen2==0)
{
while((i=fread(buf,1,SIZE,fp1))!=0)
{
e_write=fwrite(buf,1,i,fp2);
if(e_write!=i) {e_msgw(); break;}
}
}else e_msg2();
}else e_msg1();
}
}else e_msgf();
EGB_textSpace(work,0);
print(227,342,1,"COPY");
EGB_textSpace(work,1);
MOS_disp(1);
} /* copy end */
/* CD ストップ */
if(((x>520)&&(x<560))&&((y>59)&&(y<77))&&(sw==1)) cdstop();
/* CD エンソウ */
if(((x>121)&&(x<597))&&((y>59)&&(y<77))&&(sw==1))
{
cdplay(x);
EGB_textSpace(work,1);
MOS_disp(1);
}
/* cd エンソウ ヲ シテイナケレバ イロ ヲ モドス */
if(cd_chek==1)
{
cdr_mphase(0,&sts,&no,(char *)&st,(char *)&ed); /* CD ノ check */
if ( sts == 0 )
{
cd_chek=0; i=0;
MOS_disp(0);
EGB_textSpace(work,0);
for(x1=123;x1<=503;x1=x1+20) { print(x1,76,1,cd[i]); i++;}
print(525,76,1,msg2); /* stop */
print(564,76,1,msg3); /* レンゾク */
EGB_textSpace(work,1);
MOS_disp(1);
}
}
if(((x>260)&&(x<380))&&((y>370)&&(y<400))&&(sw==1)) flag=1;
} while ( flag!=1 );
cdr_mphase(0,&sts,&no,(char *)&st,(char *)&ed);
if ( sts != 0 ) cdr_mstop(0);
set_drive(init_d-1);
MOS_end();
SND_elevol_init();
SND_end();
EGB_init(work,4096);
}