📄 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 + -