?? boot.c
字號:
//********************************************
//文件名:BOOT.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,c; //11.
int bit1,bit2; //12.
int x,y,m; //13.
char *ch=""; //14.
char sh[13]; //15.
char h[512]; //16.
unsigned long k; //17.
long t=0; //18.
unsigned char s1,s2,s3,s4; //19.
//20.
if(argc==1) //21. 若命令行參數為1
{ //22.
printf("Enter BOOTFIND /? 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 BOOTFIND.EXE is:"); //30.
printf("\n"); //31.
printf("1.BOOTFIND [/?] is to get help."); //32.
printf("\n"); //33.
printf("2.BOOTFIND [/+] is find " //34.
"increase sector number."); //35.
printf("\n"); //36.
printf("3.BOOTFIND [/-] 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. 取得光標X值
y=wherey(); //56. 取得光標Y值
_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. 打開扇區數據文件
fseek(fp,510,0); //71. 移動文件指針
bit1=fgetc(fp); //72. 讀一個字符
bit2=fgetc(fp); //73. 讀下一個字符
fclose(fp); //74.
if((bit1==0x55)&&(bit2==0xaa)) //75. 判斷最后兩字節是否為55 aa
{ //76.
m=3; //77.
break; //78.
} //79.
gotoxy(x,y); //80. 移動光標
printf("%lu",k); //81. 顯示扇區號
if(kbhit()!=0) //82. 判斷是否有鍵按下
{ //83.
break; //84.
} //85.
if((strcmp(sh,"/+"))==0) //86. 扇區號增加
k++; //87.
if((strcmp(sh,"/-"))==0) //88. 扇區號減少
k--; //89.
} //90.
//91.
if(m==3) //92.
{ //93.
printf("\n"); //94.
fp=fopen(ch,"rb"); //95.
for(i=1;i<=512;i++) //96.
{ //97.
c=fgetc(fp); //98.
printf("%2x",c); //99. 用十六進制顯示數據
if(i%32==0) //100.
printf("\n"); //101.
} //102.
rewind(fp); //103. 調整文件指針
for(i=0;i<=511;i++) //104.
fread(&h[i],1,1,fp); //105.
fclose(fp); //106.
printf("\n"); //107.
for(i=0;i<=511;i++) //108.
t+=h[i]; //109. 字節累加
printf("Total : %ld\n",t); //110.
x=wherex(); //111.
y=wherey(); //112.
gotoxy(x,y); //113.
printf("Sector number " //114. 顯示找到的扇區號
"final is:%lu\n",k); //115.
_setcursortype(_NORMALCURSOR); //116. 恢復光標
printf("Press any key to exit"); //117.
sou(); //118. 調用發聲函數
} //119.
printf("\n"); //120.
_setcursortype(_NORMALCURSOR); //121.
} //122.
} //123.
//124.
void sou(void) //125. 發聲函數
{ //126.
unsigned long t; //127.
unsigned i; //128.
int j; //129.
while(1) //130.
{ //131.
i=1800; //132. 設定頻率
for(j=0;j<=2;j++) //133.
{ //134.
sound(i); //135. 發聲
for(t=0;t<20000000;t++) //136. 延時
; //137.
i=i+200; //138.
nosound(); //139. 停止發聲
} //140.
i=i-300; //141.
sound(i); //142.
for(t=0;t<20000000;t++) //143.
; //144.
nosound(); //145.
for(t=0;t<100000000;t++) //146.
; //147.
if(kbhit()!=0) //148. 判斷是否有鍵按下
break; //149.
} //150.
} //151.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -