📄 sbmain.c
字号:
//********************************************
//文件名:SBMAIN.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 *fp1,*fp2; //15.
char *sp1,*sp2; //16.
int i,j,k; //17.
char ch; //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(160,20); //27. 调用字符处理函数
strcpy(sp1,gsh); //28. 拷贝字符串
while(1) //29.
{ //30.
if((fp1=fopen(sp1,"rb"))==NULL) //31. 如果打开文件失败
{ //32.
cleardevice(); //33. 清屏
setviewport(0,0,200,20,0); //34. 设置视区
outhz(0,20,"输入的源扇区文件名" //35.
"没有找到!",7); //36.
outhz(0,40,"是否继续输入源扇区" //37.
"文件名(Y/N)?",7); //38.
k=toupper(getch()); //39. 接收一字符并转为大写
while((k==78)||(k==89)) //40.
{ //41.
if(k==78) //42. 若为"N"
{ //43.
closegraph(); //44. 关闭图形方式
exit(0); //45.
} //46.
if(k==89) //47. 若为"Y"
{ //48.
cleardevice(); //49.
outhz(0,20,"输入源扇区" //50.
"文件名:",7); //51.
finame(160,20); //52.
strcpy(sp1,gsh); //53.
break; //54.
} //55.
} //56.
} //57.
else //58. 否则
break; //59. 跳出循环
} //60.
fclose(fp1); //61.
i=open(sp1,O_CREAT); //62.
if(filelength(i)!=512) //63. 测试文件字节数
{ //64.
close(i); //65.
cleardevice(); //66.
setviewport(0,0,200,20,0); //67.
outhz(0,20,"输入的源扇区文件名" //68.
"错误!",14); //69.
outhz(0,40,"按一个键退出",15); //70.
getch(); //71.
closegraph(); //72.
exit(0); //73.
} //74.
close(i); //75.
//76.
cleardevice(); //77.
setviewport(0,0,200,20,0); //78.
outhz(0,20,"输入目的扇区文件名:",7); //79.
finame(180,20); //80.
strcpy(sp2,gsh); //81. 拷贝字符串
while(1) //82.
{ //83.
if((fp2=fopen(sp2,"rb"))==NULL) //84. 如果打开文件失败
{ //85.
cleardevice(); //86.
setviewport(0,0,200,20,0); //87.
outhz(0,20,"输入的目的扇区文件名" //88.
"没有找到!",7); //89.
outhz(0,40,"是否继续输入目的扇区" //90.
"文件名(Y/N)?",7); //91.
k=toupper(getch()); //92.
while((k==78)||(k==89)) //93.
{ //94.
if(k==78) //95.
{ //96.
closegraph(); //97.
exit(0); //98.
} //99.
if(k==89) //100.
{ //101.
cleardevice(); //102.
outhz(0,20,"输入目的扇区" //103.
"文件名:",7); //104.
finame(180,20); //105.
strcpy(sp2,gsh); //106.
break; //107.
} //108.
} //109.
} //110.
else //111.
break; //112.
} //113.
fclose(fp2); //114.
i=open(sp2,O_CREAT); //115.
if(filelength(i)!=512) //116.
{ //117.
close(i); //118.
cleardevice(); //119.
setviewport(0,0,200,20,0); //120.
outhz(0,20,"输入的目的扇区文件名" //121.
"错误!",14); //122.
outhz(0,40,"按一个键退出",15); //123.
getch(); //124.
closegraph(); //125.
exit(0); //126.
} //127.
close(i); //128.
//129.
cleardevice(); //130. 清屏
setviewport(0,320,0,340,0); //131. 设置视区
outhz(0,20,"显示源扇区文件数据" //132.
"按[S]键",7); //133.
outhz(0,40,"显示目的扇区文件数据" //134.
"按[T]键",7); //135.
outhz(0,60,"拷贝文件数据块按[C]键",7); //136.
outhz(0,80,"退出按[Esc]键",7); //137.
while(1) //138.
{ //139.
k=toupper(getch()); //140. 接收一字符并转为大写
if(k==83) //141. 若为"S"
{ //142.
cleardevice(); //143.
setviewport(0,320,0,340,0); //144.
outhz(0,20,"显示源扇区文件数据" //145.
"按[S]键",7); //146.
outhz(0,40,"显示目的扇区文件数据" //147.
"按[T]键",7); //148.
outhz(0,60,"拷贝文件数据块" //149.
"按[C]键",7); //150.
outhz(0,80,"退出按[Esc]键",7); //151.
fp1=fopen(sp1,"rb"); //152. 打开源文件
for(i=1;i<=512;i++) //153.
{ //154.
h[i-1]=fgetc(fp1); //155.
} //156.
fclose(fp1); //157.
disph(); //158. 调用十六进制显示函数
} //159.
if(k==84) //160. 若为"T"
{ //161.
cleardevice(); //162.
setviewport(0,320,0,340,0); //163.
outhz(0,20,"显示源扇区文件数据" //164.
"按[S]键",7); //165.
outhz(0,40,"显示目的扇区文件数据" //166.
"按[T]键",7); //167.
outhz(0,60,"拷贝文件数据块" //168.
"按[C]键",7); //169.
outhz(0,80,"退出按[Esc]键",7); //170.
fp2=fopen(sp2,"rb"); //171. 打开目的文件
for(i=1;i<=512;i++) //172.
{ //173.
h[i-1]=fgetc(fp2); //174.
} //175.
fclose(fp2); //176.
disph(); //177. 调用十六进制显示函数
} //178.
if(k==67) //179. 若为"C"
{ //180.
setviewport(0,400,400,420,0); //181. 设置视区
outhz(0,20,"输入起始字节" //182.
"编号(1-512):",10); //183.
finame(290,420); //184.
i=atoi(gsh); //185. 将字符串转为int型数
if((i<1)||(i>512)) //186. 若超界
{ //187.
setviewport(0,420,0,440,0); //188.
outhz(0,20,"输入的起始字节" //189.
"编号错误!",14); //190.
outhz(0,40,"按一个键退出",15); //191.
getch(); //192.
closegraph(); //193.
exit(0); //194.
} //195.
setviewport(0,420,400,440,0); //196.
clearviewport(); //197. 清除前面的视区内容
setviewport(0,400,400,420,0); //198.
outhz(0,20,"输入终止字节" //199.
"编号(1-512):",13); //200.
finame(290,420); //201.
j=atoi(gsh); //202. 将字符串转为int型数
if((j<1)||(j>512)) //203.
{ //204.
setviewport(0,420,0,440,0); //205.
outhz(0,20,"输入的终止字节" //206.
"编号错误!",14); //207.
outhz(0,40,"按一个键退出",15); //208.
getch(); //209.
closegraph(); //210.
exit(0); //211.
} //212.
fp1=fopen(sp1,"rb"); //213. 打开源文件
fp2=fopen(sp2,"rb+"); //214. 打开目的文件
fseek(fp1,i-1,0); //215. 移动源文件指针
fseek(fp2,i-1,0); //216. 移动目的文件指针
for(;i<=j;i++) //217. 限定起止区间
{ //218.
ch=fgetc(fp1); //219. 读字符
fputc(ch,fp2); //220. 写字符
} //221.
fclose(fp1); //222.
fclose(fp2); //223.
cleardevice(); //224.
setviewport(0,320,0,340,0); //225.
outhz(0,20,"显示源扇区文件数据" //226.
"按[S]键",7); //227.
outhz(0,40,"显示目的扇区文件数据" //228.
"按[T]键",7); //229.
outhz(0,60,"拷贝文件数据块" //230.
"按[C]键",7); //231.
outhz(0,80,"退出按[Esc]键",7); //232.
} //233.
if(k==27) //234. 若为"Esc"
{ //235.
closegraph(); //236.
exit(0); //237.
} //238.
} //239.
} //240.
char gsh[16]; //241. 定义全局变量
//242.
void disph() //243. 十六进制显示函数
{ //244.
FILE *tmfp; //245.
char q[2]; //246.
int x,y,m; //247.
int i,j,k,l; //248.
int x1,x2,y1,y2; //249.
x1=0; x2=600; //250.
y1=0; y2=20; //251.
i=0; j=0; //252.
while(j<16) //253.
{ //254.
setviewport(x1,y1,x2,y2,0); //255.
x=0; y=0; k=0; //256.
while(k<32) //257.
{ //258.
moveto(x,y); //259.
tmfp=tmpfile(); //260.
m=h[i]; //261.
fprintf(tmfp,"%2x",m); //262.
rewind(tmfp); //263.
l=0; //264.
while(l<2) //265.
{ //266.
*q=fgetc(tmfp); //267.
*(q+1)='\0'; //268.
settextstyle(DEFAULT_FONT, //269.
HORIZ_DIR,1); //270.
outtextxy(x,y+4,q); //271.
x+=8+1; l++; //272.
} //273.
i++; k++; //274.
fclose(tmfp); //275.
} //276.
j++; //277.
y1=y1+20; y2=y2+20; //278.
} //279.
} //280.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -