📄 新建 文本文档.txt
字号:
/*win-tc下运行通过*/
#include "Mouse1.c"
static int sign_count;
int read_disk(int sector, void* buf);
int write_disk(int sector, void* buf);
static int sign_count;
void G_init();
void close_disk(void);
int main()
{
int x,y;
int x1,y1;
int i;
int size1;
char *var;
x=x1=6;
y=y1=51;
if (!init_disk())
{
perror("vdisk.dat");
getch();
return -1;
}
if (!init_fs())
{
printf("init_fs() error!\n");
getch();
return -2;
}
G_init();
Msinit();
arrow();
while(1)
{
if(MSget(&x,&y))
{
putimage(x1,y1,rar,XOR_PUT);
for(i=0;i<6;i++)
{
if(ISinbox(Menu[i].x,Menu[i].y,Menu[i].x+80,Menu[i].y+25)&&(!Menu[i].flag))
{
Menu[i].flag=1;
setcolor(RED);
setlinestyle(SOLID_LINE,0,5);
rectangle(Menu[i].x,Menu[i].y,Menu[i].x+80,Menu[i].y+25);
outtextxy(Menu[i].x+20,Menu[i].y+10,Menu[i].str);
break;
}
if((!ISinbox(Menu[i].x,Menu[i].y,Menu[i].x+80,Menu[i].y+25)&&Menu[i].flag))
{
Menu[i].flag=0;
setcolor(YELLOW);
setlinestyle(SOLID_LINE,0,5);
rectangle(Menu[i].x,Menu[i].y,Menu[i].x+80,Menu[i].y+25);
setcolor(YELLOW);
outtextxy(Menu[i].x+20,Menu[i].y+10,Menu[i].str);
break;
}
}
putimage(x,y,rar,XOR_PUT);
x1=x;
y1=y;
}
if(LMSpress())
{ for(i=0;i<6;i++)
{ if(ISinbox(Menu[i].x,Menu[i].y,Menu[i].x+80,Menu[i].y+25))
choose=i;
}
}
switch(choose)
{ case 0:choose=-1;creat_file();break;
case 1:choose=-1;read_file();break;
case 2:choose=-1;write_file();break;
case 3:choose=-1;add_file();break;
case 4:choose=-1;del_file();break;
case 5:choose=-1; cleardevice();closegraph();
return 0;
default :choose=-1;break;
}
}
free(rar);
cleardevice(); /**/
closegraph();
restorecrtmode();
return 0;
}
void G_init()
{ int i=0;
int gdriver=DETECT ,gmode;
registerbgidriver(EGAVGA_driver);
initgraph(&gdriver, &gmode, "");
setbkcolor(LIGHTBLUE);
cleardevice();
setcolor(YELLOW);
setlinestyle(SOLID_LINE,2,YELLOW);
rectangle(5,50,635,475);
rectangle(5,5,635,45);
setfillstyle(10,YELLOW);
bar(8,8,632,41);
strcpy(Menu[0].str,"Creat");
strcpy(Menu[1].str,"Read");
strcpy(Menu[2].str,"Write");
strcpy(Menu[3].str,"Add");
strcpy(Menu[4].str,"Del");
strcpy(Menu[5].str,"Exit");
setcolor(YELLOW);
for(;i<6;i++)
{
Menu[i].x=i*100+25;
Menu[i].y=12;
Menu[i].flag=0;
setfillstyle(1,7);
bar3d(Menu[i].x,Menu[i].y,Menu[i].x+80,Menu[i].y+25,1,4);
settextstyle(2,0,0);
setcolor(YELLOW);
outtextxy(Menu[i].x+20,Menu[i].y+10,Menu[i].str);
}
setfillstyle(SOLID_FILL,BLUE);
bar(0,5,4,475);
bar(0,476,640,480);
bar(636,5,640,480);
bar(0,0,640,4);
bar(0,46,640,49);
setcolor(YELLOW);
rectangle(0,0,639,479);
}
int init_fs(void)
{ int i;
struct sign
{char ch1;
char ch2;} sign;
fseek(disk, 1*SECTOR_SIZE, SEEK_SET);
fread(&sign,sizeof(sign),1,disk) ;
if(sign.ch1==0&&sign.ch2==0) /*判断是不是第一次读写文件*/
sign_count=0;
else
{
fseek(disk, 1*SECTOR_SIZE, SEEK_SET);
fread(&sign_count,sizeof(sign_count),1,disk) ;
for(i=0;i<=sign_count;i++)
{
fseek(disk, i*sizeof(struct FCB), SEEK_SET);
fread(&FCB[i],sizeof(struct FCB),1,disk);
}
}
return 1;
}
int my_read(const char* filename, void* buf, int size)
{ char s[10];
int i;
for(i=0;i<=sign_count;i++) /*通过比较名字查找扇区*/
{
if(strcmp(FCB[i].file_name,filename)==0)
break;
}
if(i>sign_count)
{
sprintf(s,"%s","No found");
outtextxy(200,200,s);
getch();
setfillstyle(SOLID_FILL,BLACK);
bar(200,200,420,230);
return 0;
}
read_disk(FCB[i].point_sector,buf);
if(FCB[i].file_size<size) /*判断是否越界*/
return FCB[i].file_size;
else
{
return 0;
}
}
int my_write(const int m, void* buf, int size) /*允许一个文件最多占一个扇区*/
{
/* char dump[SECTOR_SIZE] = {0} ;
for(m=0;m<=sign_count;m++)
{
if(strcmp(FCB[m].file_name,filename)==0&&sign_count>0)
{
fseek(disk, (m+2)*SECTOR_SIZE, SEEK_SET);
fwrite(dump, SECTOR_SIZE, 1, disk);
FCB[m].point_sector =m+2;
FCB[m].file_size=size;
write_disk(m+2, buf);
fseek(disk, m*sizeof(FCB[m]), SEEK_SET);
fwrite(&FCB[m],sizeof(FCB[m]),1,disk);
return 1;
}
}
*/
if (sign_count<=SECTOR_SIZE/sizeof(FCB[1]))
{
/*把文件信息保存在结构体里 并把文件信息保存到第一个扇区上*/
FCB[m].file_size=size;
/*把信息写入文件*/
write_disk(FCB[m].point_sector,buf);
/*保存文件信息到第0个扇区*/
fseek(disk, m*sizeof(FCB[m]), SEEK_SET);
fwrite(&FCB[m],sizeof(FCB[m]),1,disk);
}
else if(sign_count>SECTOR_SIZE/sizeof(FCB[1]))
{
return 0;
}
}
int write_file(void)
{
char filename[MAX_FINENAME_LEN]={0};
char buf[MAX_BUF_LEN]={0};
char s[10]={"No found"};
int rtn=0;
int m,n;
if(get_filename(filename))
{
for(m=0;m<=sign_count;m++) /*通过比较名字查找扇区 看有没有重名字的 如果有则覆盖*/
{if(strcmp(FCB[m].file_name,filename)==0&&sign_count>0)
break;
}
if(m>sign_count)
{
outtextxy(200,200,s);
getch();
setfillstyle(SOLID_FILL,BLACK);
bar(200,200,420,230);
return 0;
}
n = get_file_content(buf);
rtn = my_write(m,buf,n);
}
else
{
rtn = 0;
}
return rtn;
}
int read_file(void)
{
char filename[MAX_FINENAME_LEN]={0};
char buf[MAX_BUF_LEN]={0};
int rtn=0;
if(get_filename(filename))
{
int i;
int x=0,y=0;
char s[10]={0};
char ch[1];
rtn = my_read(filename, buf, MAX_BUF_LEN);
if(rtn)
{
setcolor(YELLOW);
sprintf(s,"%s","File_C:");
outtextxy(400,320,s);
setcolor(RED);
rectangle(400,330,600,450);
setcolor(GREEN);
for (i=0; i<rtn; i++)
{
if(410+10*x>620)
{ x=0;
y++;
}
sprintf(ch,"%c",buf[i]);
outtextxy(410+8*x,335+y*8,ch);
x++;
}
free(s);
free(ch);
}
}
else
{
rtn = 0;
}
if(rtn)
getch();
setfillstyle(SOLID_FILL,BLACK);
bar(400,320,600,450);
return rtn;
}
int get_filename(char* filename)
{
int len=0;
char s[10]={0};
int c;
sprintf(s,"%s","File_n:");
outtextxy(200,200,s);
rectangle(200,210,360,230);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -