📄 fdt.c
字号:
//********************************************
//文件名:FDT.C
//功能:1. 调用读扇区汇编子程序
// 2. 查找文件目录登记项并建立扇区数据文件
// 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,j,c,d; //11.
int x,y,m; //12.
char *ch=""; //13.
char sh[13]; //14.
char fh[512]; //15.
char fstr[13]; //16.
char fdtch[32],fdtstr[12]; //17.
unsigned long k; //18.
long t=0; //19.
unsigned char s1,s2,s3,s4; //20.
//21.
if(argc==1) //22.
{ //23.
printf("Enter FDTFIND /? to get help."); //24.
printf("\n"); //25.
exit(0); //26.
} //27.
strcpy(sh,argv[1]); //28.
if((strcmp(sh,"/?")==0)&&argc==2) //29.
{ //30.
printf("The syntax of FDTFIND.EXE is:"); //31.
printf("\n"); //32.
printf("1.FDTFIND [/?] is to get help."); //33.
printf("\n"); //34.
printf("2.FDTFIND [/+] is find " //35.
"increase sector number."); //36.
printf("\n"); //37.
printf("3.FDTFIND [/-] is find " //38.
"reduce sector number."); //39.
printf("\n"); //40.
} //41.
//42.
if((strcmp(sh,"/+")==0) //43.判断功能开关
||(strcmp(sh,"/-")==0)&&argc==2) //44.
{ //45.
printf("Enter find file name: "); //46.
gets(fstr); //47.接收字符串(含空格)
printf("Enter sector number: "); //48.
scanf("%lu",&k); //49.
printf("Enter create file name: "); //50.
scanf("%s",ch); //51.
strcpy(fstr,strupr(fstr)); //52.转大写并拷贝字符串
textcolor(143); //53.定义字符颜色并使之闪烁
cprintf("Press any key stop"); //54.
textcolor(7); //55.
cprintf("\n"); //56.
printf("\n"); //57.
printf("Find sector number: "); //58.
x=wherex(); //59.
y=wherey(); //60.
_setcursortype(_NOCURSOR); //61.隐藏光标
m=0; //62.
while(1) //63.
{ //64.
tmfp=tmpfile(); //65.
fwrite(&k,4,1,tmfp); //66.
rewind(tmfp); //67.
fread(&s4,1,1,tmfp); //68.
fread(&s3,1,1,tmfp); //69.
fread(&s2,1,1,tmfp); //70.
fread(&s1,1,1,tmfp); //71.
fclose(tmfp); //72.
RHD(s1,s2,s3,s4,ch); //73.调用读扇区汇编子程序
fp=fopen(ch,"rb"); //74.
for(j=1;j<=16;j++) //75.每扇区16个登记项
{ //76.
for(i=0;i<=31;i++) //77.每登记项32个字节
fdtch[i]=fgetc(fp); //78.
for(d=0;d<11;d++) //79.文件名占用11个字节
fdtstr[d]=fdtch[d]; //80.
fdtstr[d]='\0'; //81.补结束符
if(!(strstr(fdtstr,fstr)==NULL)) //82.若找到字符串
{ //83.
m=3; //84.置标志
break; //85.跳出循环
} //86.
} //87.
gotoxy(x,y); //88.
printf("%lu",k); //89.
fclose(fp); //90.
if(kbhit()!=0) //91.判断是否有键按下
{ //92.
break; //93.跳出循环
} //94.
if(m==3) //95.若找到扇区
{ //96.
break; //97.跳出循环
} //98.
if((strcmp(sh,"/+"))==0) //99.向扇区号增加的方向查找
k++; //100.
if((strcmp(sh,"/-"))==0) //101.向扇区号减少的方向查找
k--; //102.
} //103.
//104.
if(m==3) //105.若找到扇区
{ //106.
printf("\n"); //107.
fp=fopen(ch,"rb"); //108.
for(i=1;i<=512;i++) //109.
{ //110.
c=fgetc(fp); //111.
printf("%2x",c); //112.显示十六进制数据
if(i%32==0) //113.
printf("\n"); //114.
} //115.
rewind(fp); //116.
for(i=0;i<=511;i++) //117.
fread(&fh[i],1,1,fp); //118.
fclose(fp); //119.
printf("\n"); //120.
for(i=0;i<=511;i++) //121.
t+=fh[i]; //122.字节累加
printf("Total : %ld\n",t); //123.
x=wherex(); //124.
y=wherey(); //125.
gotoxy(x,y); //126.
printf("Sector number " //127.
"final is: %lu\n",k); //128.
_setcursortype(_NORMALCURSOR); //129.恢复光标
printf("Press any key to exit"); //130.
sou(); //131.调用发声函数
} //132.
printf("\n"); //133.
_setcursortype(_NORMALCURSOR); //134.
} //135.
} //136.
//137.
void sou(void) //138.发声函数
{ //139.
unsigned long t; //140.
unsigned i; //141.
int j; //142.
while(1) //143.
{ //144.
i=1800; //145.
for(j=0;j<=2;j++) //146.
{ //147.
sound(i); //148.
for(t=0;t<20000000;t++) //149.
; //150.
i=i+200; //151.
nosound(); //152.
} //153.
i=i-300; //154.
sound(i); //155.
for(t=0;t<20000000;t++) //156.
; //157.
nosound(); //158.
for(t=0;t<100000000;t++) //159.
; //160.
if(kbhit()!=0) //161.
break; //162.
} //163.
} //164.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -