📄 fat.c
字号:
//********************************************
//文件名:FAT.C
//功能:1. 调用读扇区汇编子程序
// 2. 查找FAT表并建立扇区数据文件
// 3. 将找到的扇区数据用十六进制显示
//********************************************
#include<stdio.h> //1.
#include<conio.h> //2.
#include<stdlib.h> //3.
#include<string.h> //4.
#include<dos.h> //5.
extern RHD(int,int,int,int,char *); //6.声明读扇区汇编子程序
void sou(void); //7.声明发声函数
void main(int argc,char *argv[]) //8.
{ //9.
FILE *tmfp,*fp; //10.
int i,c; //11.
int x,y,m; //12.
char *ch=""; //13.
char sh[13]; //14.
char fh[512]; //15.
unsigned char h[512]; //16.
unsigned long k; //17.
long t=0; //18.
unsigned char s1,s2,s3,s4; //19.
//20.
if(argc==1) //21.
{ //22.
printf("Enter FATFIND /? to get help."); //23.
printf("\n"); //24.
exit(0); //25.
} //26.
strcpy(sh,argv[1]); //27.
if((strcmp(sh,"/?")==0)&&argc==2) //28.显示帮助提示
{ //29.
printf("The syntax of FATFIND.EXE is:"); //30.
printf("\n"); //31.
printf("1.FATFIND [/?] is to get help."); //32.
printf("\n"); //33.
printf("2.FATFIND [/+] is find " //34.
"increase sector number."); //35.
printf("\n"); //36.
printf("3.FATFIND [/-] is find " //37.
"reduce sector number."); //38.
printf("\n"); //39.
} //40.
//41.
if((strcmp(sh,"/+")==0) //42.判断功能开关
||(strcmp(sh,"/-")==0)&&argc==2) //43.
{ //44.
printf("Enter create file name: "); //45.
scanf("%s",ch); //46.
printf("Enter sector number: "); //47.
scanf("%lu",&k); //48.
textcolor(15); //49.
cprintf("Press any key stop"); //50.
textcolor(7); //51.
cprintf("\n"); //52.
printf("\n"); //53.
printf("Find sector number: "); //54.
x=wherex(); //55.
y=wherey(); //56.
_setcursortype(_NOCURSOR); //57.隐藏光标
m=0; //58.
while(1) //59.
{ //60.
tmfp=tmpfile(); //61.
fwrite(&k,4,1,tmfp); //62.
rewind(tmfp); //63.
fread(&s4,1,1,tmfp); //64.
fread(&s3,1,1,tmfp); //65.
fread(&s2,1,1,tmfp); //66.
fread(&s1,1,1,tmfp); //67.
fclose(tmfp); //68.
RHD(s1,s2,s3,s4,ch); //69.调用读扇区汇编子程序
fp=fopen(ch,"rb"); //70.
for(i=0;i<=511;i++) //71.
h[i]=fgetc(fp); //72.
fclose(fp); //73.
if((h[0]==0xf8)&&(h[1]==0xff)) //74.判断前两个字节是否为f8 ff
{ //75.
m=3; //76.置找到扇区标志
break; //77.
} //78.
gotoxy(x,y); //79.
printf("%lu",k); //80.
if(kbhit()!=0) //81.判断是否有键按下
{ //82.
break; //83.
} //84.
if((strcmp(sh,"/+"))==0) //85.向扇区号增加的方向查找
k++; //86.
if((strcmp(sh,"/-"))==0) //87.向扇区号减少的方向查找
k--; //88.
} //89.
//90.
if(m==3) //91.找到扇区标志
{ //92.
printf("\n"); //93.
fp=fopen(ch,"rb"); //94.
for(i=1;i<=512;i++) //95.
{ //96.
c=fgetc(fp); //97.
printf("%2x",c); //98.显示十六进制数据
if(i%32==0) //99.
printf("\n"); //100.
} //101.
rewind(fp); //102.
for(i=0;i<=511;i++) //103.
fread(&fh[i],1,1,fp); //104.
fclose(fp); //105.
printf("\n"); //106.
for(i=0;i<=511;i++) //107.
t+=fh[i]; //108.字节值累加
printf("Total : %ld\n",t); //109.
x=wherex(); //110.
y=wherey(); //111.
gotoxy(x,y); //112.
printf("Sector number " //113.
"final is:%lu\n",k); //114.
_setcursortype(_NORMALCURSOR); //115.恢复光标
printf("Press any key to exit"); //116.
sou(); //117.调用发声函数
} //118.
printf("\n"); //119.
_setcursortype(_NORMALCURSOR); //120.
} //121.
} //122.
//123.
void sou(void) //124.发声函数
{ //125.
unsigned long t; //126.
unsigned i; //127.
int j; //128.
while(1) //129.
{ //130.
i=1800; //131.设置频率
for(j=0;j<=2;j++) //132.
{ //133.
sound(i); //134.发声
for(t=0;t<20000000;t++) //135.延时
; //136.
i=i+200; //137.
nosound(); //138.停止发声
} //139.
i=i-300; //140.
sound(i); //141.
for(t=0;t<20000000;t++) //142.
; //143.
nosound(); //144.
for(t=0;t<100000000;t++) //145.
; //146.
if(kbhit()!=0) //147.
break; //148.
} //149.
} //150.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -