?? viewse.c
字號:
//********************************************
//文件名:VIEWSE.C
//功能:1. 調用匯編子程序讀扇區數據
// 2. 將參數傳遞給匯編子程序并接受返回值
// 3. 可以動態切換字符和十六進制顯示方式
// 4. 可以動態按遞增或遞減的方式查看扇區數據
// 5. 可以動態輸入扇區號查看扇區數據
// 6. 可以動態將扇區數據寫入文件保存
//********************************************
#include<stdio.h> //1.
#include<conio.h> //2.
#include<ctype.h> //3.
#include<stdlib.h> //4.
extern VIEWHD(int,int,int,int,int); //5.聲明讀字符匯編子程序
void main() //6.
{ //7.
FILE *tmfp,*fp; //8.
unsigned char ch[512]; //9.
char c; //10.
char sh[13]; //11.
int i,j,u=0; //12.
long t; //13.
unsigned long k; //14.
unsigned int s1,s2,s3,s4; //15.
printf("Enter sector number: "); //16.
scanf("%lu",&k); //17.輸入扇區號
while(1) //18.
{ //19.
tmfp=tmpfile(); //20.
fwrite(&k,4,1,tmfp); //21.
rewind(tmfp); //22.
fread(&s4,1,1,tmfp); //23.
fread(&s3,1,1,tmfp); //24.
fread(&s2,1,1,tmfp); //25.
fread(&s1,1,1,tmfp); //26.
fclose(tmfp); //27.
for(i=0;i<=511;i++) //28.
{ ch[i]=VIEWHD(s1,s2,s3,s4,i); } //29.調用讀字符匯編子程序
while(1) //30.
{ //31.
clrscr(); //32.清屏
printf("Sector number: %lu\n",k); //33.
if(u==65) //34.顯示字符選項
{ //35.
for(i=1;i<=512;i++) //36.
{ //37.
j=ch[i-1]; //38.
printf("%c",j); //39.
if(i%32==0) //40.
printf("\n"); //41.
} //42.
} //43.
if((u!=65)||(u==72)) //44.顯示十六進制選項
{ //45.
for(i=1;i<=512;i++) //46.
{ //47.
j=ch[i-1]; //48.
printf("%2x",j); //49.
if(i%32==0) //50.
printf("\n"); //51.
} //52.
} //53.
tmfp=tmpfile(); //54.
for(i=0;i<=511;i++) //55.
{ fputc(ch[i],tmfp); } //56.
rewind(tmfp); //57.
t=0; //58.
for(i=0;i<=511;i++) //59.
{ //60.
c=fgetc(tmfp); //61.
t+=c; //62.字節值累加
} //63.
fclose(tmfp); //64.
printf("Total: %ld",t); //65.
printf("\n"); //66.
printf("ASCII show press key [A]. " //67.選項提示
"Restore HEX show press key [H].\n"); //68.
printf("Next sector press key [+]. " //69.
"Prev sector press key [-].\n"); //70.
printf("Enter sector number " //71.
"press key [E]. " //72.
"Save data press key [S].\n"); //73.
printf("Quit press key [Esc].\n"); //74.
while(1) //75.
{ //76.
u=toupper(getch()); //77.接收字符并轉為大寫
if((u==65)||(u==72)||(u==43)||(u==45) //78.
||(u==69)||(u==83)||(u==27)) //79.
{ //80.
if(u==65) //81.若為A鍵
{ //82.
break; //83.
} //84.
if(u==72) //85.若為H鍵
{ //86.
break; //87.
} //88.
if(u==43) //89.若為+鍵
{ //90.
k++; //91.
break; //92.
} //93.
if(u==45) //94.若為-鍵
{ //95.
k--; //96.
break; //97.
} //98.
if(u==69) //99.若為E鍵
{ //100.
printf("Enter sector number: "); //101.
scanf("%lu",&k); //102.
break; //103.
} //104.
if(u==83) //105.若為S鍵
{ //106.
printf("Enter file name: "); //107.
scanf("%s",sh); //108.
fp=fopen(sh,"wb"); //109.以寫方式打開文件
for(i=0;i<=511;i++) //110.
{ fputc(ch[i],fp); } //111.
fclose(fp); //112.
break; //113.
} //114.
if(u==27) //115.若為Esc鍵
exit(0); //116.
} //117.
} //118.
break; //119.
} //120.
} //121.
} //122.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -