?? file.c
字號:
if(strcmp(FCB[m].file_name,filename)==0&&sign_count>0)
{ draw_FCB(FCB[m].usr_name,FCB[m].file_name,FCB[m].point_sector,FCB[m].file_size,FCB[m].time,FCB[m].property);
draw_disk(m);
sprintf(error,"%s","Cover? y/n");
outtextxy(200,200,error);
c=bioskey(0);
setfillstyle(SOLID_FILL,BLACK);
bar(200,200,420,230);
if((char)c=='y')
{
fseek(disk, (m+2)*SECTOR_SIZE, SEEK_SET);
fwrite(dump, SECTOR_SIZE, 1, disk);
FCB[m].point_sector =m+2;
FCB[m].file_size=0;
fseek(disk, m*sizeof(FCB[m]), SEEK_SET);
fwrite(&FCB[m],sizeof(FCB[m]),1,disk);
}
clear_FCB();
clear_disk();
return 1;
}
}
if(sign_count>SECTOR_SIZE/sizeof(FCB[1]))
return 0;
sprintf(error,"%s","Owner:");
outtextxy(200,200,error);
rectangle(200,210,360,230);
m=0;
while(m<9)
{ c=bioskey(0);
if(c==ENTER)
break;
setcolor(YELLOW);
FCB[sign_count].usr_name[m]=(char)c;
m++;
sprintf(error,"%c",c);
outtextxy(202+10*m,215,error);
}
setfillstyle(SOLID_FILL,BLACK);
bar(200,200,360,230);
FCB[sign_count].property=2;
FCB[sign_count].file_size=0;
strcpy(FCB[sign_count].file_name,filename);
FCB[sign_count].point_sector =sign_count+2;
getdate(&d);
sprintf(filename,"%d.%2d.%2d",d.da_year,d.da_mon,d.da_day);
strcpy(FCB[sign_count].time,filename);
fseek(disk, sign_count*sizeof(FCB[sign_count]), SEEK_SET);
fwrite(&FCB[sign_count],sizeof(FCB[sign_count]),1,disk);
sign_count++; /*記錄文件所用扇區的個數*/
fseek(disk, 1*SECTOR_SIZE, SEEK_SET);
fwrite(&sign_count,sizeof(sign_count),1,disk); /*把扇區的個數保存到磁盤第1個扇區上*/
}
int del_file()
{
int m=0;
int c;
char filename[20]={0};
char error[12]={0};
char dump[256]={0};
sprintf(error,"%s","File_n:");
outtextxy(200,200,error);
rectangle(200,210,360,230);
while(m<9)
{ c=bioskey(0);
if(c==ENTER)
break;
setcolor(YELLOW);
filename[m]=(char)c;
m++;
sprintf(error,"%c",c);
outtextxy(202+10*m,215,error);
}
setfillstyle(SOLID_FILL,BLACK);
bar(200,200,360,230);
for(m=0;m<=sign_count;m++)
{
if(strcmp(FCB[m].file_name,filename)==0&&sign_count>0)
{ draw_FCB(FCB[m].usr_name,FCB[m].file_name,FCB[m].point_sector,FCB[m].file_size,FCB[m].time,FCB[m].property);
sprintf(error,"%s","DEL? y/n");
outtextxy(200,200,error);
c=bioskey(0);
setfillstyle(SOLID_FILL,BLACK);
bar(200,200,420,230);
if((char)c=='y')
{
fseek(disk, (m+2)*SECTOR_SIZE, SEEK_SET);
fwrite(dump, SECTOR_SIZE, 1, disk);
for(;m<=sign_count-1;m++)
{strcpy(FCB[m].usr_name,FCB[m+1].usr_name);
strcpy(FCB[m].file_name,FCB[m+1].file_name);
FCB[m].point_sector=FCB[m+1].point_sector;
FCB[m].file_size=FCB[m+1].file_size;
strcpy(FCB[m].time,FCB[m+1].time);
FCB[m].property=FCB[m+1].property;
fseek(disk, m*sizeof(FCB[m]), SEEK_SET);
fwrite(&FCB[m],sizeof(FCB[m]),1,disk);
}
sign_count--;
fseek(disk, 1*SECTOR_SIZE, SEEK_SET);
fwrite(&sign_count,sizeof(sign_count),1,disk);
}
clear_FCB();
clear_disk();
return 1;
}
}
if(m>sign_count)
{
sprintf(error,"%s","No found");
outtextxy(200,200,error);
getch();
setfillstyle(SOLID_FILL,BLACK);
bar(200,200,420,230);
return 0;
}
}
int add_file()
{
int m=0;
int c;
int rtn=0;
char filename[20]={0};
char error[12]={0};
char buf[256]={0};
sprintf(error,"%s","File_n:");
outtextxy(200,200,error);
rectangle(200,210,360,230);
while(m<9)
{ c=bioskey(0);
if(c==ENTER)
break;
setcolor(YELLOW);
filename[m]=(char)c;
m++;
sprintf(error,"%c",c);
outtextxy(202+10*m,215,error);
}
setfillstyle(SOLID_FILL,BLACK);
bar(200,200,360,230);
for(m=0;m<=sign_count;m++)
{
if(strcmp(FCB[m].file_name,filename)==0&&sign_count>0)
{ draw_FCB(FCB[m].usr_name,FCB[m].file_name,FCB[m].point_sector,FCB[m].file_size,FCB[m].time,FCB[m].property);
draw_disk(m);
sprintf(error,"%s","ADD? y/n");
outtextxy(200,200,error);
c=bioskey(0);
setfillstyle(SOLID_FILL,BLACK);
bar(200,200,420,230);
if((char)c=='y')
{
fseek(disk, (m+2)*SECTOR_SIZE+FCB[m].file_size, SEEK_SET);
rtn=get_file_content(buf);
fwrite(buf,rtn,1,disk);
FCB[m].file_size+=rtn;
fseek(disk,m*sizeof(FCB[m]),SEEK_SET);
fwrite(&FCB[m],sizeof(FCB[m]),1,disk);
}
clear_disk();
}
}
if(m>sign_count)
{
sprintf(error,"%s","No found");
outtextxy(200,200,error);
getch();
setfillstyle(SOLID_FILL,BLACK);
bar(200,200,420,230);
return 0;
}
}
int get_file_content(char* buf)
{
int ch, count=0;
int x=0,y=0;
char s[10]={0};
setcolor(YELLOW);
sprintf(s,"%s","File_c");
outtextxy(180,70,s);
setcolor(RED);
rectangle(180,80,500,400);
setcolor(GREEN);
while ((ch = getch()) != '~')
{
buf[count] = ch;
sprintf(s,"%c",ch);
if(185+10*x>492)
{ x=0;
y++;
}
outtextxy(185+10*x,85+y*10,s);
count++;
x++;
}
setfillstyle(SOLID_FILL,BLACK);
bar(180,70,500,400);
clear_FCB();
clear_disk();
free(s);
return count;
}
int init_disk(void)
{
char dump[SECTOR_SIZE] = {0};
int i;
disk = fopen("vdisk.dat", "r+b");
if(disk == NULL)
{
disk = fopen("vdisk.dat", "w+r");
if (disk == NULL)
return 0;
for (i=0; i<TOTAL_SECTOR; i++)
{ fseek(disk,i*SECTOR_SIZE,SEEK_SET);
fwrite(dump, SECTOR_SIZE, 1, disk);
}
}
return (int)disk;
}
void close_disk(void) /*關閉文件*/
{
fclose(disk);
}
int read_disk(int sector, void* buf)
/* 把磁盤的第sector個扇區內容讀入到buf
sector從0開始編號
運行正確返回非0值,錯誤返回0 */
{
if (!init_disk())
return 0;
fseek(disk, sector*SECTOR_SIZE, SEEK_SET); /*SEEK代表0 將位置指針移到離文件頭sector*SECTOR_SIZE個字節處*/
return fread(buf, SECTOR_SIZE, 1, disk);
}
int write_disk(int sector, void* buf)
/* 把buf中SECTOR_SIZE個字節的數據寫到磁盤的第sector個扇區
sector從0開始編號
運行正確返回非0值,錯誤返回0 */
{
if (!init_disk())
return 0;
fseek(disk, sector*SECTOR_SIZE, SEEK_SET);
return fwrite(buf, SECTOR_SIZE, 1, disk);
}
int draw_FCB(char *usr_name,char *file_name ,int point_sector,int size,char *time,int property)
{ int i;
char s[15]={0};
setcolor(YELLOW);
sprintf(s,"%s","FCB");
outtextxy(20,70,s);
setcolor(RED);
rectangle(20,80,170,400);
line(80,80,80,400);
for(i=0;i<=4;i++)
{
line(20,134+i*54,170,134+i*54);
}
settextjustify(0,3);
setcolor(GREEN);
sprintf(s,"%s","USR_NA");
outtextxy(25,100,s);
sprintf(s,"%s",usr_name);
outtextxy(85,100,s);
sprintf(s,"%s","FIL_NA");
outtextxy(25,154,s);
sprintf(s,"%s",file_name);
outtextxy(85,154,s);
sprintf(s,"%s","SECOTR");
outtextxy(25,208,s);
sprintf(s,"%d",point_sector);
outtextxy(85,208,s);
sprintf(s,"%s","SIZE");
outtextxy(30,262,s);
sprintf(s,"%d",size);
outtextxy(85,262,s);
sprintf(s,"%s","TIME");
outtextxy(30,316,s);
sprintf(s,"%s",time);
outtextxy(85,316,s);
sprintf(s,"%s","PORERTY");
outtextxy(22,370,s);
sprintf(s,"%d",property);
outtextxy(85,370,s);
return 1;
}
int clear_FCB()
{
setfillstyle(SOLID_FILL,9);
bar(20,70,170,400);
return 1;
}
int draw_disk(int m)
{ int x=0,y=0;
int i=0;
char buf[2]={0};
fseek(disk,(m+2)*SECTOR_SIZE, SEEK_SET);
fread(buf,1,1,disk);
for(;i<SECTOR_SIZE;i++)
{
if(i%16==0)
{
x=0;
y++;
}
if(buf[0]!=0)
{ setfillstyle(SOLID_FILL,RED);
bar(505+x*7,70+y*7,510+x*7,75+y*7);
}
else
{
setfillstyle(SOLID_FILL,GREEN);
bar(505+x*7,70+y*7,510+x*7,75+y*7);
}
x++;
fseek(disk,(m+2)*SECTOR_SIZE+i, SEEK_SET);
fread(buf,1,1,disk);
}
return 1;
}
int clear_disk()
{
setfillstyle(SOLID_FILL,9);
bar(500,70,630,200);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -