?? fatmain.c
字號:
//********************************************
//文件名:FATMAIN.C
//功能:1. 調用顯示漢字函數
// 2. 調用字符處理函數
// 3. 調用讀扇區匯編子程序
// 4. 查找FAT表并建立扇區數據文件
// 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,c,m; //19.
char name[13]; //20.
char sh[13]; //21.
char fh[512]; //22.
char th[20]; //23.
unsigned long k; //24.
long t=0; //25.
unsigned char s1,s2,s3,s4; //26.
extern char gsh[16]; //27.
int gdriver=DETECT,gmode; //28.
registerbgidriver(EGAVGA_driver); //29.
initgraph(&gdriver,&gmode,""); //30.
setbkcolor(0); //31.
cleardevice(); //32.
//33.
if(argc==1) //34.
{ //35.
outhz(0,20,"輸入[HFATFIND /?]" //36.
"獲得幫助",7); //37.
outhz(0,40,"按任一鍵退出",7); //38.
getch(); //39.
closegraph(); //40.
exit(0); //41.
} //42.
strcpy(sh,argv[1]); //43.
if((strcmp(sh,"/?")==0)&&argc==2) //44.顯示幫助提示
{ //45.
outhz(0,20,"程序HFATFIND.EXE" //46.
"使用方法:",7); //47.
outhz(0,40,"1. [HFATFIND /?]" //48.
"獲得幫助",7); //49.
outhz(0,60,"2. [HFATFIND /+]" //50.
"是向扇區號增加的方向查找",7); //51.
outhz(0,80,"3. [HFATFIND /-]" //52.
"是向扇區號減少的方向查找",7); //53.
outhz(0,100,"按任一鍵退出",7); //54.
getch(); //55.
closegraph(); //56.
exit(0); //57.
} //58.
//59.
if((strcmp(sh,"/+")==0) //60.判斷程序開關
||(strcmp(sh,"/-")==0)&&argc==2) //61.
{ //62.
setviewport(0,20,400,40,0); //63.
outhz(0,20,"輸入需要建立的文件名:",7); //64.
finame(190,40); //65.
strcpy(name,gsh); //66.
if((fp=fopen(gsh,"rb"))!=NULL) //67.如果打開文件成功
{ //68.
fclose(fp); //69.
setviewport(0,40,400,60,0); //70.
strcat(gsh,"文件在當前目錄下" //71.
"已經存在!"); //72.
outhz(0,20,gsh,14); //73.
outhz(0,40,"是否繼續運行" //74.
"(Y/N)?",15); //75.
c=toupper(getch()); //76.
while((c==78)||(c==89)) //77.
{ //78.
if(c==78) //79.
{ //80.
closegraph(); //81.
exit(0); //82.
} //83.
if(c==89) //84.
break; //85.
} //86.
} //87.
cleardevice(); //88.
setviewport(0,20,400,40,0); //89.
outhz(0,20,"輸入查找的起始扇區號:",7); //90.
finame(190,40); //91.
k=atol(gsh); //92.
m=0; //93.
while(1) //94.
{ //95.
tmfp=tmpfile(); //96.
fwrite(&k,4,1,tmfp); //97.
rewind(tmfp); //98.
fread(&s4,1,1,tmfp); //99.
fread(&s3,1,1,tmfp); //100.
fread(&s2,1,1,tmfp); //101.
fread(&s1,1,1,tmfp); //102.
fclose(tmfp); //103.
RHD(s1,s2,s3,s4,name); //104.
fp=fopen(name,"rb"); //105.
for(i=0;i<=511;i++) //106.
h[i]=fgetc(fp); //107.
fclose(fp); //108.
if((h[0]==0xf8)&&(h[1]==0xff)) //109.判斷前兩個字節是否為f8 ff
{ //110.
m=3; //111.設置標志
break; //112.
} //113.
cleardevice(); //114.
setviewport(0,20,400,40,0); //115.
outhz(0,20,"當前查找的扇區號是:",7); //116.
outhz(0,40,"按任一鍵終止查找",15); //117.
ltoa(k,th,10); //118.
outhz(180,20,th,7); //119.
clearviewport(); //120.
if(kbhit()!=0) //121.判斷是否有鍵按下
{ //122.
c=toupper(getch()); //123.
if(c!=0) //124.
{ //125.
cleardevice(); //126.
setviewport(0,20,400,40,0); //127.
outhz(0,20,"目前查找扇區的" //128.
"終止編號是:",7); //129.
outhz(0,40,"按任一鍵退出",7); //130.
outhz(230,20,th,7); //131.
getch(); //132.
} //133.
break; //134.
} //135.
if((strcmp(sh,"/+"))==0) //136.向扇區號增加的方向查找
k++; //137.
if((strcmp(sh,"/-"))==0) //138.向扇區號減少的方向查找
k--; //139.
} //140.
//141.
if(m==3) //142.找到扇區標志
{ //143.
fp=fopen(name,"rb"); //144.
for(i=0;i<=511;i++) //145.
{ //146.
h[i]=fgetc(fp); //147.
} //148.
fclose(fp); //149.
cleardevice(); //150.
setviewport(0,0,620,20,0); //151.
disph(); //152.顯示十六進制數據
setviewport(0,320,400,400,0); //153.
outhz(0,0,"上面顯示的是扇區文件" //154.
"十六進制數據:",7); //155.
fp=fopen(name,"rb"); //156.
for(i=0;i<=511;i++) //157.
{ //158.
fh[i]=fgetc(fp); //159.
} //160.
fclose(fp); //161.
for(i=0;i<=511;i++) //162.
t+=fh[i]; //163.字節累加
ltoa(t,th,10); //164.
outhz(0,40,"字節總算術和是:",7); //165.
outhz(140,40,th,7); //166.
outhz(0,60,"找到需要的扇區號是:",7); //167.
ltoa(k,th,10); //168.
outhz(180,60,th,7); //169.
outhz(0,80,"按任一鍵退出",7); //170.
sou(); //171.調用發聲函數
} //172.
} //173.
closegraph(); //174.
} //175.
char gsh[16]; //176.定義全局變量
//177.
void disph() //178.十六進制顯示函數
{ //179.
FILE *tmfp; //180.
char q[2]; //181.
int x,y,m; //182.
int i,j,k,l; //183.
int x1,x2,y1,y2; //184.
x1=0; x2=600; //185.
y1=0; y2=20; //186.
i=0; j=0; //187.
while(j<16) //188.
{ //189.
setviewport(x1,y1,x2,y2,0); //190.
x=0; y=0; k=0; //191.
while(k<32) //192.
{ //193.
moveto(x,y); //194.
tmfp=tmpfile(); //195.
m=h[i]; //196.
fprintf(tmfp,"%2x",m); //197.
rewind(tmfp); //198.
l=0; //199.
while(l<2) //200.
{ //201.
*q=fgetc(tmfp); //202.
*(q+1)='\0'; //203.
settextstyle(DEFAULT_FONT, //204.
HORIZ_DIR,1); //205.
outtextxy(x,y+4,q); //206.
x+=8+1; l++; //207.
} //208.
i++; k++; //209.
fclose(tmfp); //210.
} //211.
j++; //212.
y1=y1+20; y2=y2+20; //213.
} //214.
} //215.
//216.
void sou(void) //217.發聲函數
{ //218.
unsigned long t; //219.
unsigned i; //220.
int j; //221.
while(1) //222.
{ //223.
i=1800; //224.
for(j=0;j<=2;j++) //225.
{ //226.
sound(i); //227.
for(t=0;t<20000000;t++) //228.
; //229.
i=i+200; //230.
nosound(); //231.
} //232.
i=i-300; //233.
sound(i); //234.
for(t=0;t<20000000;t++) //235.
; //236.
nosound(); //237.
for(t=0;t<100000000;t++) //238.
; //239.
if(kbhit()!=0) //240.
break; //241.
} //242.
} //243.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -