📄 hallmain.c
字号:
//********************************************
//文件名:HALLMAIN.C
//功能:1. 调用显示汉字函数
// 2. 调用字符处理函数
// 3. 调用读扇区汇编子程序
// 4. 调用写扇区汇编子程序
// 5. 对扇区数据进行十六进制读、字符读、
// 备份、拷贝、搬移、写入、清零操作
//********************************************
#include<string.h> //1.
#include<graphics.h> //2.
#include<stdio.h> //3.
#include<conio.h> //4.
#include<ctype.h> //5.
#include<fcntl.h> //6.
#include<io.h> //7.
#include<stdlib.h> //8.
extern RHD(int,int,int,int,char *); //9.声明读扇区汇编子程序
extern WHD(int,int,int,int,char *); //10.声明写扇区汇编子程序
int outhz(int,int,char *,int); //11.声明汉字显示函数
void finame(int,int); //12.声明字符处理函数
void disph(void); //13.声明十六进制显示函数
unsigned char h[512]; //14.
void main(int argc,char *argv[]) //15.
{ //16.
FILE *tmfp,*fp; //17.
char sh[13]; //18.
char name[13]; //19.
char th[20]; //20.
char fh[512]; //21.
char ch[2]; //22.
int i,j,c; //23.
int y1,y2; //24.
unsigned long k,k1; //25.
long t=0; //26.
extern char gsh[16]; //27.
unsigned char s1,s2,s3,s4; //28.
int gdriver=DETECT,gmode; //29.
registerbgidriver(EGAVGA_driver); //30.
initgraph(&gdriver,&gmode,""); //31.
setbkcolor(0); //32.
cleardevice(); //33.
//34.
if(argc==1) //35.如果命令行参数为1
{ //36.
outhz(0,20,"输入[HEALLSE /?]" //37.
"获得帮助",7); //38.
outhz(0,40,"按任一键退出",7); //39.
getch(); //40.
closegraph(); //41.
exit(0); //42.
} //43.
strcpy(sh,argv[1]); //44.拷贝字符串
if((strcmp(sh,"/?")==0)&&argc==2) //45.显示帮助提示
{ //46.
outhz(0,20,"程序HEALLSE.EXE" //47.
"使用方法:",7); //48.
outhz(0,40,"1. [HEALLSE /?]" //49.
"获得帮助",7); //50.
outhz(0,60,"2. [HEALLSE /RH]" //51.
"显示十六进制数据",7); //52.
outhz(0,80,"3. [HEALLSE /RC]" //53.
"显示字符",7); //54.
outhz(0,100,"4. [HEALLSE /B]" //55.
"备份扇区数据",7); //56.
outhz(0,120,"5. [HEALLSE /C]" //57.
"拷贝扇区数据",7); //58.
outhz(0,140,"6. [HEALLSE /M]" //59.
"搬移扇区数据",7); //60.
outhz(0,160,"7. [HEALLSE /W]" //61.
"文件数据写入扇区",7); //62.
outhz(0,180,"8. [HEALLSE /CLE]" //63.
"扇区清零",7); //64.
outhz(0,200,"按任一键退出",7); //65.
getch(); //66.
closegraph(); //67.
exit(0); //68.
} //69.
//70.
if((strcmp(sh,"/rh")==0) //71.用十六进制读扇区数据
||(strcmp(sh,"/RH")==0)&&argc==2) //72.
{ //73.
setviewport(0,20,400,40,0); //74.
outhz(0,20,"输入扇区号:",7); //75.调用汉字显示函数
finame(100,40); //76.调用字符处理函数
k=atol(gsh); //77.
tmfp=tmpfile(); //78.
fwrite(&k,4,1,tmfp); //79.
rewind(tmfp); //80.
fread(&s4,1,1,tmfp); //81.
fread(&s3,1,1,tmfp); //82.
fread(&s2,1,1,tmfp); //83.
fread(&s1,1,1,tmfp); //84.
fclose(tmfp); //85.
tmpnam(name); //86.
RHD(s1,s2,s3,s4,name); //87.调用读扇区汇编子程序
fp=fopen(name,"rb"); //88.
for(i=0;i<=511;i++) //89.
{ //90.
h[i]=fgetc(fp); //91.
} //92.
fclose(fp); //93.
cleardevice(); //94.
setviewport(0,0,620,20,0); //95.
disph(); //96.调用十六进制显示函数
setviewport(0,320,400,400,0); //97.
outhz(0,0,"上面显示的是扇区文件" //98.
"十六进制数据:",7); //99.
fp=fopen(name,"rb"); //100.
for(i=0;i<=511;i++) //101.
{ //102.
fh[i]=fgetc(fp); //103.
} //104.
fclose(fp); //105.
remove(name); //106.
for(i=0;i<=511;i++) //107.
t+=fh[i]; //108.字节值累加
ltoa(t,th,10); //109.
outhz(0,40,"字节总算术和是:",7); //110.
outhz(0,60,"按任一键退出",7); //111.
outhz(140,40,th,7); //112.
} //113.
//114.
if((strcmp(sh,"/rc")==0) //115.以字符形式读扇区数据
||(strcmp(sh,"/RC")==0)&&argc==2) //116.
{ //117.
setviewport(0,20,400,40,0); //118.
outhz(0,20,"输入扇区号:",7); //119.
finame(100,40); //120.
k=atol(gsh); //121.
tmfp=tmpfile(); //122.
fwrite(&k,4,1,tmfp); //123.
rewind(tmfp); //124.
fread(&s4,1,1,tmfp); //125.
fread(&s3,1,1,tmfp); //126.
fread(&s2,1,1,tmfp); //127.
fread(&s1,1,1,tmfp); //128.
fclose(tmfp); //129.
tmpnam(name); //130.
RHD(s1,s2,s3,s4,name); //131.
cleardevice(); //132.
y1=0; //133.
y2=20; //134.
settextstyle(0,0,1); //135.
fp=fopen(name,"rb"); //136.
for(j=1;j<=16;j++) //137.显示16行
{ //138.
setviewport(0,y1,600,y2,0); //139.
for(i=1;i<=32;i++) //140.显示32列
{ //141.
ch[0]=fgetc(fp); //142.读字符
ch[1]='\0'; //143.补结束符
outtext(ch); //144.显示
} //145.
y1=y1+20; //146.坐标调整
y2=y2+20; //147.坐标调整
} //148.
fclose(fp); //149.
setviewport(0,320,300,400,0); //150.
outhz(0,0,"上面显示的是扇区文件" //151.
"ASCII字符:",7); //152.
fp=fopen(name,"rb"); //153.
for(i=0;i<=511;i++) //154.
{ //155.
fh[i]=fgetc(fp); //156.
} //157.
fclose(fp); //158.
remove(name); //159.
for(i=0;i<=511;i++) //160.
t+=fh[i]; //161.
ltoa(t,th,10); //162.
outhz(0,40,"字节总算术和是:",7); //163.
outhz(0,60,"按任一键退出",7); //164.
outhz(140,40,th,7); //165.
} //166.
//167.
if((strcmp(sh,"/b")==0) //168.将扇区数据备份到文件
||(strcmp(sh,"/B")==0)&&argc==2) //169.
{ //170.
setviewport(0,20,400,40,0); //171.
outhz(0,20,"输入扇区号:",7); //172.
finame(100,40); //173.
k=atol(gsh); //174.
setviewport(0,40,400,60,0); //175.
outhz(0,20,"输入需要建立的文件名:",7); //176.
finame(190,60); //177.
strcpy(name,gsh); //178.
if((fp=fopen(gsh,"rb"))!=NULL) //179.如果打开文件成功
{ //180.
fclose(fp); //181.
setviewport(0,60,400,80,0); //182.
strcat(gsh,"文件在当前目录下" //183.
"已经存在!"); //184.
outhz(0,20,gsh,14); //185.
outhz(0,40,"是否继续运行" //186.
"(Y/N)?",15); //187.
c=toupper(getch()); //188.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -