📄 babomain.c
字号:
//********************************************
//文件名:BABOMAIN.C
//功能:1. 调用显示汉字函数
// 2. 调用读扇区汇编子程序
// 3. 将分区表和引导扇区的数据写入文件加以保存
//********************************************
#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.声明读扇区汇编子程序
int outhz(int,int,char *,int); //10.声明汉字显示函数
void filename(char *); //11.声明文件名检测函数
char tmp[13]; //12.
void main() //13.
{ //14.
FILE *tmfp,*fp,*bafp; //15.
char sh[512]; //16.
char file[3]; //17.
char th[20]; //18.
int i,c,y; //19.
int name=1; //20.
unsigned long k=0; //21.
unsigned long data1,data2; //22.
unsigned char s1,s2,s3,s4; //23.
int gdriver=DETECT,gmode; //24.
registerbgidriver(EGAVGA_driver); //25.
initgraph(&gdriver,&gmode,""); //26.
setbkcolor(0); //27.
cleardevice(); //28.
//29.
if((bafp=fopen("senumber.txt", //30.如果打开文件成功
"rb"))!=NULL) //31.
{ //32.
fclose(bafp); //33.
setviewport(0,20,400,60,0); //34.
outhz(0,20,"本程序需要建立" //35.
"[SENUMBER.TXT]文件",7); //36.
outhz(0,40,"使用该名字的文件" //37.
"在当前目录下已经存在!",14); //38.
outhz(0,60,"是否继续运行" //39.
"(Y/N)?",15); //40.
c=toupper(getch()); //41.
while((c==78)||(c==89)) //42.
{ //43.
if(c==78) //44.
{ //45.
closegraph(); //46.
exit(0); //47.
} //48.
if(c==89) //49.
break; //50.
} //51.
} //52.
//53.
y=20; //54.坐标赋值
cleardevice(); //55.
setviewport(0,20,400,460,0); //56.
outhz(0,y,"分区表和分区引导" //57.
"记录的扇区号:",7); //58.
ltoa(k,th,10); //59.数转字符串
y=y+20; //60.坐标下移
outhz(0,y,"扇区号:",7); //61.
outhz(80,y,th,7); //62.
bafp=fopen("senumber.txt","wb"); //63.以写方式建立文件
fprintf(bafp,"分区表和分区引导" //64.将标题写入文件
"记录的扇区号:\n"); //65.
fprintf(bafp,"%lu\n",k); //66.将扇区号写入文件
tmfp=tmpfile(); //67.
fwrite(&k,4,1,tmfp); //68.
rewind(tmfp); //69.
fread(&s4,1,1,tmfp); //70.
fread(&s3,1,1,tmfp); //71.
fread(&s2,1,1,tmfp); //72.
fread(&s1,1,1,tmfp); //73.
fclose(tmfp); //74.
tmpnam(tmp); //75.返回临时文件名
RHD(s1,s2,s3,s4,tmp); //76.调用读扇区汇编子程序
fp=fopen(tmp,"rb"); //77.
for(i=0;i<=511;i++) //78.
sh[i]=fgetc(fp); //79.将文件读入数组
fseek(fp,470,0); //80.移动文件指针
fread(&data1,4,1,fp); //81.读一个双字
fclose(fp); //82.
itoa(name,file,10); //83.数转字符串
filename(file); //84.调用文件名检测函数
fp=fopen(file,"wb"); //85.以写方式建立文件
for(i=0;i<=511;i++) //86.
fputc(sh[i],fp); //87.将数组内容输出到文件
fclose(fp); //88.
name++; //89.文件名增1
k=k+63; //90.计算分区引导记录扇区号
ltoa(k,th,10); //91.数转字符串
y=y+20; //92.
outhz(0,y,"扇区号:",7); //93.
outhz(80,y,th,7); //94.显示扇区号
fprintf(bafp,"%lu\n",k); //95.将扇区号写入文件
tmfp=tmpfile(); //96.
fwrite(&k,4,1,tmfp); //97.
rewind(tmfp); //98.
fread(&s4,1,1,tmfp); //99.
fread(&s3,1,1,tmfp); //100.
fread(&s2,1,1,tmfp); //101.
fread(&s1,1,1,tmfp); //102.
fclose(tmfp); //103.
itoa(name,file,10); //104.数转字符串
filename(file); //105.调用文件名检测函数
RHD(s1,s2,s3,s4,file); //106.调用读扇区汇编子程序
name++; //107.
if(data1==0) //108.若字段值为0
exit(0); //109.退出
//110.
k=data1; //111.下一个盘符的分区表扇区号
while(1) //112.
{ //113.
ltoa(k,th,10); //114.
y=y+20; //115.
outhz(0,y,"扇区号:",7); //116.
outhz(80,y,th,7); //117.
fprintf(bafp,"%lu\n",k); //118.
tmfp=tmpfile(); //119.
fwrite(&k,4,1,tmfp); //120.
rewind(tmfp); //121.
fread(&s4,1,1,tmfp); //122.
fread(&s3,1,1,tmfp); //123.
fread(&s2,1,1,tmfp); //124.
fread(&s1,1,1,tmfp); //125.
fclose(tmfp); //126.
RHD(s1,s2,s3,s4,tmp); //127.
fp=fopen(tmp,"rb"); //128.
for(i=0;i<=511;i++) //129.
sh[i]=fgetc(fp); //130.
fseek(fp,470,0); //131.移动文件指针
fread(&data2,4,1,fp); //132.读一个双字
fclose(fp); //133.
itoa(name,file,10); //134.
filename(file); //135.
fp=fopen(file,"wb"); //136.
for(i=0;i<=511;i++) //137.
fputc(sh[i],fp); //138.
fclose(fp); //139.
name++; //140.
k=k+63; //141.计算分区引导记录扇区号
ltoa(k,th,10); //142.
y=y+20; //143.
outhz(0,y,"扇区号:",7); //144.
outhz(80,y,th,7); //145.
fprintf(bafp,"%lu\n",k); //146.
tmfp=tmpfile(); //147.
fwrite(&k,4,1,tmfp); //148.
rewind(tmfp); //149.
fread(&s4,1,1,tmfp); //150.
fread(&s3,1,1,tmfp); //151.
fread(&s2,1,1,tmfp); //152.
fread(&s1,1,1,tmfp); //153.
fclose(tmfp); //154.
itoa(name,file,10); //155.
filename(file); //156.
RHD(s1,s2,s3,s4,file); //157.
name++; //158.
if(data2==0) //159.若字段值为0
break; //160.跳出循环
k=data1+data2; //161.计算第三个盘符的分区表扇区号
} //162.
fclose(bafp); //163.
remove(tmp); //164.删除临时文件名
y=y+20; //165.
outhz(0,y,"分区表和分区引导" //166.
"记录已经建立备份文件",7); //167.
y=y+20; //168.
outhz(0,y,"按任一键退出",7); //169.
getch(); //170.
closegraph(); //171.
} //172.
//173.
void filename(char *p) //174.文件名检测函数
{ //175.
FILE *fp; //176.
int c; //177.
if((fp=fopen(p,"rb"))!=NULL) //178.如果打开文件成功
{ //179.
fclose(fp); //180.
cleardevice(); //181.
setviewport(0,0,400,20,0); //182.
outhz(0,20,"本程序需要建立" //183.
"文件:",7); //184.
outhz(180,20,p,7); //185.
outhz(0,40,"使用该名字的文件" //186.
"在当前目录下已经存在!",14); //187.
outhz(0,60,"是否继续运行" //188.
"(Y/N)?",15); //189.
c=toupper(getch()); //190.
while((c==78)||(c==89)) //191.
{ //192.
if(c==78) //193.
{ //194.
remove(tmp); //195.删除临时文件名
closegraph(); //196.
exit(0); //197.
} //198.
if(c==89) //199.
break; //200.
} //201.
} //202.
} //203.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -