📄 ecwmain.c
字号:
//********************************************
//文件名:ECWMAIN.C
//功能:1. 将扇区文件数据用十六进制显示在屏幕上
// 2. 调用显示汉字函数
// 3. 调用字符处理函数
// 4. 调用汇编子程序将文件数据写入扇区
//********************************************
#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.
extern RHD(int,int,int,int,char *); //9.
int outhz(int,int,char *,int); //10.
void finame(int,int); //11.
void disph(void); //12.
unsigned char h[512]; //13.
extern WHD(int,int,int,int,char *); //14.
void main() //15.
{ //16.
FILE *tmfp,*fp; //17.
unsigned long k; //18.
int i,c; //19.
char *ch; //20.
char fh[512]; //21.
char sh[20]; //22.
long t=0; //23.
unsigned char s1,s2,s3,s4; //24.
extern char gsh[16]; //25.
int gdriver=DETECT,gmode; //26.
registerbgidriver(EGAVGA_driver); //27.
initgraph(&gdriver,&gmode,""); //28.
setbkcolor(0); //29.
cleardevice(); //30.
//31.
outhz(0,20,"输入扇区数据文件名:",7); //32.调用汉字显示函数
finame(180,20); //33.调用字符处理函数
strcpy(ch,gsh); //34.拷贝字符串
while(1) //35.
{ //36.
if((fp=fopen(gsh,"rb"))==NULL) //37.若打开文件失败
{ //38.
cleardevice(); //39.
setviewport(0,0,200,20,0); //40.
outhz(0,20,"输入的扇区数据文件名" //41.
"没有找到!",7); //42.
outhz(0,40,"是否继续输入扇区数据" //43.
"文件名(Y/N)?",7); //44.
c=toupper(getch()); //45.
while((c==78)||(c==89)) //46.
{ //47.
if(c==78) //48.
{ //49.
closegraph(); //50.
exit(0); //51.
} //52.
if(c==89) //53.
{ //54.
cleardevice(); //55.
outhz(0,20,"输入扇区数据" //56.
"文件名:",7); //57.
finame(180,20); //58.
strcpy(ch,gsh); //59.
break; //60.
} //61.
} //62.
} //63.
else //64.否则
break; //65.
} //66.
fclose(fp); //67.
i=open(ch,O_CREAT); //68.
if(filelength(i)!=512) //69.测试文件字节数
{ //70.
close(i); //71.
cleardevice(); //72.
setviewport(0,0,200,20,0); //73.
outhz(0,20,"输入的扇区数据文件名" //74.
"错误!",14); //75.
outhz(0,40,"按任一键退出",15); //76.
getch(); //77.
closegraph(); //78.
exit(0); //79.
} //80.
close(i); //81.
//82.
fp=fopen(ch,"rb"); //83.
for(i=0;i<=511;i++) //84.
{ //85.
h[i]=fgetc(fp); //86.读文件字符
} //87.
fclose(fp); //88.
cleardevice(); //89.
setviewport(0,0,600,320,0); //90.
disph(); //91.调用十六进制显示函数
setviewport(0,320,300,400,0); //92.
outhz(0,0,"上面是显示的扇区文件" //93.
"十六进制数据:",7); //94.
fp=fopen(ch,"rb"); //95.
for(i=0;i<=511;i++) //96.
{ //97.
fh[i]=fgetc(fp); //98.读文件字符
} //99.
fclose(fp); //100.
for(i=0;i<=511;i++) //101.
t+=fh[i]; //102.字节值累加
ltoa(t,sh,10); //103.数转字符串
outhz(0,40,"扇区文件512个" //104.
"字节的算术和是:",7); //105.
outhz(290,40,sh,7); //106.
//107.
outhz(0,60,"数据是否写入" //108.
"扇区(Y/N)?",7); //109.
c=toupper(getch()); //110.
while((c==78)||(c==89)) //111.
{ //112.
if(c==78) //113.
{ //114.
closegraph(); //115.
exit(0); //116.
} //117.
if(c==89) //118.
break; //119.
} //120.
outhz(0,80,"输入写数据的扇区号:",7); //121.
finame(180,400); //122.
k=atol(gsh); //123.字符串转数
tmfp=tmpfile(); //124.
fwrite(&k,4,1,tmfp); //125.扇区数写入临时文件
rewind(tmfp); //126.调整文件指针
fread(&s4,1,1,tmfp); //127.读一个字节
fread(&s3,1,1,tmfp); //128.
fread(&s2,1,1,tmfp); //129.
fread(&s1,1,1,tmfp); //130.
fclose(tmfp); //131.
WHD(s1,s2,s3,s4,ch); //132.调用汇编子程序写入扇区
fclose(tmfp); //133.
setviewport(0,400,300,440,0); //134.
outhz(0,20,"数据已经写入扇区",7); //135.
outhz(0,40,"按任一键退出",7); //136.
getch(); //137.
closegraph(); //138.
} //139.
char gsh[16]; //140.定义全局变量
//141.
void disph() //142.十六进制显示函数
{ //143.
FILE *tmfp; //144.
char q[2]; //145.
int x,y,m; //146.
int i,j,k,l; //147.
int x1,x2,y1,y2; //148.
x1=0; x2=600; //149.
y1=0; y2=20; //150.
i=0; j=0; //151.
while(j<16) //152.
{ //153.
setviewport(x1,y1,x2,y2,0); //154.
x=0; y=0; k=0; //155.
while(k<32) //156.
{ //157.
moveto(x,y); //158.
tmfp=tmpfile(); //159.
m=h[i]; //160.
fprintf(tmfp,"%2x",m); //161.
rewind(tmfp); //162.
l=0; //163.
while(l<2) //164.
{ //165.
*q=fgetc(tmfp); //166.
*(q+1)='\0'; //167.
settextstyle(DEFAULT_FONT, //168.
HORIZ_DIR,1); //169.
outtextxy(x,y+4,q); //170.
x+=8+1; l++; //171.
} //172.
i++; k++; //173.
fclose(tmfp); //174.
} //175.
j++; //176.
y1=y1+20; y2=y2+20; //177.
} //178.
} //179.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -