📄 fdtmain.c
字号:
//********************************************
//文件名:FDTMAIN.C
//功能:1. 调用显示汉字函数
// 2. 调用字符处理函数
// 3. 调用读扇区汇编子程序
// 4. 查找文件目录登记项并建立扇区数据文件
// 5. 将找到的扇区数据用十六进制显示
//********************************************
#include<string.h> //1.
#include<graphics.h> //2.
#include<stdio.h> //3.
#include<conio.h> //4.
#include<ctype.h> //5.
#include<fcntl.h> //6.
#include<io.h> //7.
#include<stdlib.h> //8.
#include<dos.h> //9.
extern RHD(int,int,int,int,char *); //10.声明读扇区汇编子程序
int outhz(int,int,char *,int); //11.声明汉字显示函数
void finame(int,int); //12.声明字符处理函数
void disph(void); //13.声明十六进制显示函数
void sou(void); //14.声明发声函数
unsigned char h[512]; //15.
void main(int argc,char *argv[]) //16.
{ //17.
FILE *tmfp,*fp; //18.
int i,j,c,d; //19.
int m; //20.
char name[13]; //21.
char sh[13]; //22.
char fh[512]; //23.
char th[20]; //24.
char fstr[13]; //25.
char fdtch[32],fdtstr[12]; //26.
unsigned long k; //27.
long t=0; //28.
unsigned char s1,s2,s3,s4; //29.
extern char gsh[16]; //30.
int gdriver=DETECT,gmode; //31.
registerbgidriver(EGAVGA_driver); //32.
initgraph(&gdriver,&gmode,""); //33.
setbkcolor(0); //34.
cleardevice(); //35.
//36.
if(argc==1) //37.
{ //38.
outhz(0,20,"输入[HFDTFIND /?]" //39.
"获得帮助",7); //40.
outhz(0,40,"按任一键退出",7); //41.
getch(); //42.
closegraph(); //43.
exit(0); //44.
} //45.
strcpy(sh,argv[1]); //46.
if((strcmp(sh,"/?")==0)&&argc==2) //47.
{ //48.
outhz(0,20,"程序HFDTFIND.EXE" //49.
"使用方法:",7); //50.
outhz(0,40,"1. [HFDTFIND /?]" //51.
"获得帮助",7); //52.
outhz(0,60,"2. [HFDTFIND /+]" //53.
"是向扇区号增加的方向查找",7); //54.
outhz(0,80,"3. [HFDTFIND /-]" //55.
"是向扇区号减少的方向查找",7); //56.
outhz(0,100,"按任一键退出",7); //57.
getch(); //58.
closegraph(); //59.
exit(0); //60.
} //61.
//62.
if((strcmp(sh,"/+")==0) //63.判断功能开关
||(strcmp(sh,"/-")==0)&&argc==2) //64.
{ //65.
setviewport(0,20,400,40,0); //66.
outhz(0,20,"输入需要查找的文件名:",7); //67.
finame(190,40); //68.
strcpy(fstr,gsh); //69.
setviewport(0,40,400,60,0); //70.
outhz(0,20,"输入查找的起始扇区号:",7); //71.
finame(190,60); //72.
k=atol(gsh); //73.
setviewport(0,60,400,80,0); //74.
outhz(0,20,"输入建立的扇区" //75.
"数据文件名:",7); //76.
finame(230,80); //77.
strcpy(name,gsh); //78.
if((fp=fopen(gsh,"rb"))!=NULL) //79.若打开文件成功
{ //80.
fclose(fp); //81.
setviewport(0,80,400,120,0); //82.
strcat(gsh,"文件在当前目录下" //83.
"已经存在!"); //84.
outhz(0,20,gsh,14); //85.
outhz(0,40,"是否继续运行" //86.
"(Y/N)?",15); //87.
c=toupper(getch()); //88.
while((c==78)||(c==89)) //89.
{ //90.
if(c==78) //91.
{ //92.
closegraph(); //93.
exit(0); //94.
} //95.
if(c==89) //96.
break; //97.
} //98.
} //99.
//100.
m=0; //101.
while(1) //102.
{ //103.
tmfp=tmpfile(); //104.
fwrite(&k,4,1,tmfp); //105.
rewind(tmfp); //106.
fread(&s4,1,1,tmfp); //107.
fread(&s3,1,1,tmfp); //108.
fread(&s2,1,1,tmfp); //109.
fread(&s1,1,1,tmfp); //110.
fclose(tmfp); //111.
RHD(s1,s2,s3,s4,name); //112.调用读扇区汇编子程序
fp=fopen(name,"rb"); //113.
for(j=1;j<=16;j++) //114.每扇区16个登记项
{ //115.
for(i=0;i<=31;i++) //116.每登记项32个字节
fdtch[i]=fgetc(fp); //117.
c=0; //118.
for(d=0;d<11;d++) //119.文件名占用11个字节
{ //120.
fdtstr[c]=fdtch[d]; //121.
if(fdtch[d]==32) //122.判断是否为空格
; //123.去掉空格
else //124.
c++; //125.
} //126.
fdtstr[d]='\0'; //127.补结束符
if(!(strstr(fdtstr,fstr)==NULL)) //128.若找到字符串
{ //129.
m=3; //130.置标志
break; //131.跳出循环
} //132.
} //133.
fclose(fp); //134.
if(m==3) //135.若找到扇区
{ //136.
break; //137.跳出循环
} //138.
cleardevice(); //139.
setviewport(0,20,400,40,0); //140.
outhz(0,20,"当前查找的扇区号是:",7); //141.
outhz(0,40,"按任一键终止查找",15); //142.
ltoa(k,th,10); //143.
outhz(180,20,th,7); //144.
clearviewport(); //145.
if(kbhit()!=0) //146.若有键按下
{ //147.
c=toupper(getch()); //148.
if(c!=0) //149.
{ //150.
cleardevice(); //151.
setviewport(0,20,400,40,0); //152.
outhz(0,20,"目前查找扇区的" //153.
"终止编号是:",7); //154.
outhz(0,40,"按任一键退出",7); //155.
outhz(230,20,th,7); //156.
getch(); //157.
} //158.
break; //159.跳出循环
} //160.
if((strcmp(sh,"/+"))==0) //161.向扇区号增加的方向查找
k++; //162.
if((strcmp(sh,"/-"))==0) //163.向扇区号减少的方向查找
k--; //164.
} //165.
//166.
if(m==3) //167.若找到扇区
{ //168.
fp=fopen(name,"rb"); //169.
for(i=0;i<=511;i++) //170.
{ //171.
h[i]=fgetc(fp); //172.
} //173.
fclose(fp); //174.
cleardevice(); //175.
setviewport(0,0,620,20,0); //176.
disph(); //177.调用十六进制显示函数
setviewport(0,320,400,400,0); //178.
outhz(0,0,"上面显示的是扇区文件" //179.
"十六进制数据:",7); //180.
fp=fopen(name,"rb"); //181.
for(i=0;i<=511;i++) //182.
{ //183.
fh[i]=fgetc(fp); //184.
} //185.
fclose(fp); //186.
for(i=0;i<=511;i++) //187.
t+=fh[i]; //188.字节累加
ltoa(t,th,10); //189.
outhz(0,40,"字节总算术和是:",7); //190.
outhz(140,40,th,7); //191.
outhz(0,60,"找到需要的扇区号是:",7); //192.
ltoa(k,th,10); //193.
outhz(180,60,th,7); //194.
outhz(0,80,"文件目录登记项" //195.
"显示的行数是:",7); //196.
itoa(j,th,10); //197.
outhz(250,80,th,7); //198.
outhz(0,100,"按任一键退出",7); //199.
sou(); //200.调用发声函数
} //201.
} //202.
closegraph(); //203.
} //204.
char gsh[16]; //205.定义全局变量
//206.
void disph() //207.十六进制显示函数
{ //208.
FILE *tmfp; //209.
char q[2]; //210.
int x,y,m; //211.
int i,j,k,l; //212.
int x1,x2,y1,y2; //213.
x1=0; x2=600; //214.
y1=0; y2=20; //215.
i=0; j=0; //216.
while(j<16) //217.
{ //218.
setviewport(x1,y1,x2,y2,0); //219.
x=0; y=0; k=0; //220.
while(k<32) //221.
{ //222.
moveto(x,y); //223.
tmfp=tmpfile(); //224.
m=h[i]; //225.
fprintf(tmfp,"%2x",m); //226.
rewind(tmfp); //227.
l=0; //228.
while(l<2) //229.
{ //230.
*q=fgetc(tmfp); //231.
*(q+1)='\0'; //232.
settextstyle(DEFAULT_FONT, //233.
HORIZ_DIR,1); //234.
outtextxy(x,y+4,q); //235.
x+=8+1; l++; //236.
} //237.
i++; k++; //238.
fclose(tmfp); //239.
} //240.
j++; //241.
y1=y1+20; y2=y2+20; //242.
} //243.
} //244.
//245.
void sou(void) //246.发声函数
{ //247.
unsigned long t; //248.
unsigned i; //249.
int j; //250.
while(1) //251.
{ //252.
i=1800; //253.
for(j=0;j<=2;j++) //254.
{ //255.
sound(i); //256.
for(t=0;t<20000000;t++) //257.
; //258.
i=i+200; //259.
nosound(); //260.
} //261.
i=i-300; //262.
sound(i); //263.
for(t=0;t<20000000;t++) //264.
; //265.
nosound(); //266.
for(t=0;t<100000000;t++) //267.
; //268.
if(kbhit()!=0) //269.
break; //270.
} //271.
} //272.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -