?? editmain.c
字號:
//********************************************
//文件名:EDITMAIN.C
//功能:1. 調用顯示漢字函數
// 2. 調用字符處理函數
// 3. 對扇區數據文件進行字節編輯
//********************************************
#include<string.h> //1.
#include<graphics.h> //2.
#include<stdio.h> //3.
#include<conio.h> //4.
#include<stdlib.h> //5.
#include<ctype.h> //6.
#include<fcntl.h> //7.
#include<io.h> //8.
int outhz(int,int,char *,int); //9.對調用函數的聲明
void finame(int,int); //10.對調用函數的聲明
void disph(void); //11.對調用函數的聲明
unsigned char h[512]; //12.
void main() //13.
{ //14.
FILE *fp; //15.
char *p; //16.
int i,c; //17.
unsigned size,data1,data2; //18.
extern char gsh[16]; //19.聲明數組是外部變量
int gdriver=DETECT,gmode; //20.
registerbgidriver(EGAVGA_driver); //21.
initgraph(&gdriver,&gmode,""); //22.
setbkcolor(0); //23.
cleardevice(); //24.
//25.
outhz(0,20,"輸入文件名:",7); //26.調用顯示函數并傳遞參數
finame(100,20); //27.調用字符處理函數
strcpy(p,gsh); //28.拷貝字符串
//29.
while(1) //30.
{ //31.
if((fp=fopen(gsh,"rb"))==NULL) //32.如果打開文件失敗
{ //33.
cleardevice(); //34.
setviewport(0,0,200,20,0); //35.
outhz(0,20,"輸入的文件名沒有" //36.
"找到!",7); //37.
outhz(0,40,"是否繼續輸入文件名" //38.
"(Y/N)?",7); //39.
c=toupper(getch()); //40.接收字符并轉為大寫
while((c==78)||(c==89)) //41.判斷字符的值
{ //42.
if(c==78) //43.
{ //44.
closegraph(); //45.
exit(0); //46.退出程序
} //47.
if(c==89) //48.
{ //49.
cleardevice(); //50.
outhz(0,20,"輸入文件名:",7); //51.
finame(100,20); //52.
strcpy(p,gsh); //53.
break; //54.跳出循環
} //55.
} //56.
} //57.
else //58.否則
break; //59.跳出循環
} //60.
i=open(gsh,O_CREAT); //61.
if(filelength(i)!=512) //62.測試文件字節數
{ //63.
close(i); //64.
cleardevice(); //65.
setviewport(0,0,200,20,0); //66.
outhz(0,20,"輸入的扇區數據文件名" //67.
"錯誤!",7); //68.
outhz(0,40,"按一個鍵退出",7); //69.
getch(); //70.
closegraph(); //71.
exit(0); //72.
} //73.
//74.
while(1) //75.
{ //76.
fp=fopen(p,"rb"); //77.以只讀方式打開文件
for(i=1;i<=512;i++) //78.
{ //79.
h[i-1]=fgetc(fp); //80.將字符讀入數組
} //81.
fclose(fp); //82.
cleardevice(); //83.
disph(); //84.調用十六進制顯示函數
setviewport(0,320,0,340,0); //85.
outhz(0,20,"編輯字節數據按[E]鍵",7); //86.
outhz(0,40,"退出按[Esc]鍵",7); //87.
//88.
c=toupper(getch()); //89.接收字符并轉為大寫
if(c==69) //90.
{ //91.
setviewport(0,360,0,380,0); //92.
outhz(0,20,"輸入字節編號" //93.
"(1-512):",7); //94.
finame(250,380); //95.
size=atoi(gsh); //96.將字符串轉為int型值
if((size<1)||(size>512)) //97.如果字節編號超界
{ //98.
setviewport(0,380,0,400,0); //99.
outhz(0,20,"輸入的字節" //100.
"編號錯誤",7); //101.
outhz(0,40,"按一個鍵退出",7); //102.
getch(); //103.
closegraph(); //104.
exit(0); //105.
} //106.
setviewport(0,380,0,400,0); //107.
outhz(0,20,"輸入字節的十六進制" //108.
"數據:",7); //109.
finame(210,400); //110.
data1=gsh[0]; //111.
data2=gsh[1]; //112.
if(!((((data1>64)&&(data1<71))|| //113.如果字節數據輸入錯誤
((data1>47)&&(data1<58)))&& //114.
(((data2>64)&&(data2<71))|| //115.
((data2>47)&&(data2<58))))) //116.
{ //117.
setviewport(0,400,0,440,0); //118.
outhz(0,20,"輸入十六進制" //119.
"數據錯誤!",7); //120.
outhz(0,40,"按一個鍵" //121.
"終止編輯",7); //122.
getch(); //123.
} //124.
else //125.否則
{ //126.
if((data1>64)&&(data1<71)) //127.如果是a-f
{ //128.
data1=data1-55; //129.按權展開為十進制
data1=data1*16; //130.
} //131.
if((data1>47)&&(data1<58)) //132.如果是0-9
{ //133.
data1=data1-48; //134.按權展開為十進制
data1=data1*16; //135.
} //136.
if((data2>64)&&(data2<71)) //137.
{ //138.
data2=data2-55; //139.
} //140.
if((data2>47)&&(data2<58)) //141.
{ //142.
data2=data2-48; //143.
} //144.
data1=data1+data2; //145.高位和低位相加
fp=fopen(p,"rb+"); //146.以讀寫方式打開文件
fseek(fp,size-1,0); //147.移動文件指針
fwrite(&data1,1,1,fp); //148.將數據寫入字節
fclose(fp); //149.
} //150.
} //151.
if(c==27) //152.若為"Esc"
{ //153.
closegraph(); //154.
exit(0); //155.
} //156.
} //157.
} //158.
char gsh[16]; //159.定義全局變量
//160.
void disph() //161.十六進制輸出函數
{ //162.
FILE *tmfp; //163.
char q[2]; //164.
int x,y,m; //165.
int i,j,k,l; //166.
int x1,x2,y1,y2; //167.
x1=0; x2=600; //168.
y1=0; y2=20; //169.
i=0; j=0; //170.
while(j<16) //171.
{ //172.
setviewport(x1,y1,x2,y2,0); //173.
x=0; y=0; k=0; //174.
while(k<32) //175.
{ //176.
moveto(x,y); //177.
tmfp=tmpfile(); //178.
m=h[i]; //179.
fprintf(tmfp,"%2x",m); //180.
rewind(tmfp); //181.
l=0; //182.
while(l<2) //183.
{ //184.
*q=fgetc(tmfp); //185.
*(q+1)='\0'; //186.
settextstyle(DEFAULT_FONT, //187.
HORIZ_DIR,1); //188.
outtextxy(x,y+4,q); //189.
x+=8+1; l++; //190.
} //191.
i++; k++; //192.
fclose(tmfp); //193.
} //194.
j++; //195.
y1=y1+20; y2=y2+20; //196.
} //197.
} //198.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -