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