⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bootmain.c

📁 查找系统数据扇区的缘代码
💻 C
字号:
//********************************************
//文件名:BOOTMAIN.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.
#include<dos.h>                             //9.
extern RHD(int,int,int,int,char *);         //10.声明读扇区汇编子程序
int outhz(int,int,char *,int);              //11.声明汉字显示函数
void finame(int,int);                       //12.声明字符处理函数
void disph(void);                           //13.声明十六进制显示函数
void sou(void);                             //14.声明发声函数
unsigned char h[512];                       //15.
void main(int argc,char *argv[])            //16.
{                                           //17.
  FILE *tmfp,*fp;                           //18.
  int i,c;                                  //19.
  int bit1,bit2;                            //20.
  int x,y,m;                                //21.
  char name[13];                            //22.
  char sh[13];                              //23.
  char fh[512];                             //24.
  char th[20];                              //25.
  unsigned long k;                          //26.
  long t=0;                                 //27.
  unsigned char s1,s2,s3,s4;                //28.
  extern char gsh[16];                      //29.
  int gdriver=DETECT,gmode;                 //30.
  registerbgidriver(EGAVGA_driver);         //31.
  initgraph(&gdriver,&gmode,"");            //32.
  setbkcolor(0);                            //33.
  cleardevice();                            //34.
                                            //35.
  if(argc==1)                               //36.若命令行参数为1
  {                                         //37.
    outhz(0,20,"输入[HBOFIND /?]"           //38.
    "获得帮助",7);                          //39.
    outhz(0,40,"按任一键退出",7);           //40.
    getch();                                //41.
    closegraph();                           //42.
    exit(0);                                //43.
  }                                         //44.
  strcpy(sh,argv[1]);                       //45.拷贝字符串
  if((strcmp(sh,"/?")==0)&&argc==2)         //46.显示帮助提示
  {                                         //47.
    outhz(0,20,"程序HBOFIND.EXE"            //48.
    "使用方法:",7);                        //49.
    outhz(0,40,"1. [HBOFIND /?]"            //50.
    "获得帮助",7);                          //51.
    outhz(0,60,"2. [HBOFIND /+]"            //52.
    "是向扇区号增加的方向查找",7);          //53.
    outhz(0,80,"3. [HBOFIND /-]"            //54.
    "是向扇区号减少的方向查找",7);          //55.
    outhz(0,100,"按任一键退出",7);          //56.
    getch();                                //57.
    closegraph();                           //58.
    exit(0);                                //59.
  }                                         //60.
                                            //61.
  if((strcmp(sh,"/+")==0)                   //62.判断功能开关
   ||(strcmp(sh,"/-")==0)&&argc==2)         //63.
  {                                         //64.
    setviewport(0,20,400,40,0);             //65.
    outhz(0,20,"输入需要建立的文件名:",7); //66.
    finame(190,40);                         //67.
    strcpy(name,gsh);                       //68.
    if((fp=fopen(gsh,"rb"))!=NULL)          //69.若打开文件成功
    {                                       //70.
      fclose(fp);                           //71.
      setviewport(0,40,400,60,0);           //72.
      strcat(gsh,"文件在当前目录下"         //73.
      "已经存在!");                        //74.
      outhz(0,20,gsh,14);                   //75.
      outhz(0,40,"是否继续运行"             //76.
      "(Y/N)?",15);                   //77.
      c=toupper(getch());                   //78.
      while((c==78)||(c==89))               //79.
      {                                     //80.
        if(c==78)                           //81.
        {                                   //82.
          closegraph();                     //83.
          exit(0);                          //84.
        }                                   //85.
        if(c==89)                           //86.
          break;                            //87.
      }                                     //88.
    }                                       //89.
    cleardevice();                          //90.
    setviewport(0,20,400,40,0);             //91.
    outhz(0,20,"输入查找的起始扇区号:",7); //92.
    finame(190,40);                         //93.
    k=atol(gsh);                            //94.字符串转数
    m=0;                                    //95.
    while(1)                                //96.
    {                                       //97.
      tmfp=tmpfile();                       //98.
      fwrite(&k,4,1,tmfp);                  //99.
      rewind(tmfp);                         //100.
      fread(&s4,1,1,tmfp);                  //101.
      fread(&s3,1,1,tmfp);                  //102.
      fread(&s2,1,1,tmfp);                  //103.
      fread(&s1,1,1,tmfp);                  //104.
      fclose(tmfp);                         //105.
      RHD(s1,s2,s3,s4,name);                //106.调用读扇区汇编子程序
      fp=fopen(name,"rb");                  //107.
      fseek(fp,510,0);                      //108.移动文件指针
      bit1=fgetc(fp);                       //109.读一个字节
      bit2=fgetc(fp);                       //110.读下一个字节
      fclose(fp);                           //111.
      if((bit1==0x55)&&(bit2==0xaa))        //112.判断最后两字节是否为55 aa
      {                                     //113.
        m=3;                                //114.设置找到扇区的标志
        break;                              //115.
      }                                     //116.
      cleardevice();                        //117.
      setviewport(0,20,400,40,0);           //118.
      outhz(0,20,"当前查找的扇区号是:",7); //119.
      outhz(0,40,"按任一键终止查找",15);    //120.
      ltoa(k,th,10);                        //121.数转字符串
      outhz(180,20,th,7);                   //122.显示扇区号
      clearviewport();                      //123.
      if(kbhit()!=0)                        //124.判断是否有键按下
      {                                     //125.
        c=toupper(getch());                 //126.
        if(c!=0)                            //127.
        {                                   //128.
          cleardevice();                    //129.
          setviewport(0,20,400,40,0);       //130.
          outhz(0,20,"目前查找扇区的"       //131.
          "终止编号是:",7);                //132.
          outhz(0,40,"按任一键退出",7);     //133.
          outhz(230,20,th,7);               //134.
          getch();                          //135.
        }                                   //136.
        break;                              //137.
      }                                     //138.
      if((strcmp(sh,"/+"))==0)              //139.向扇区号增加的方向查找
        k++;                                //140.
      if((strcmp(sh,"/-"))==0)              //141.向扇区号减少的方向查找
        k--;                                //142.
    }                                       //143.
                                            //144.
    if(m==3)                                //145.找到扇区的标志
    {                                       //146.
      fp=fopen(name,"rb");                  //147.
      for(i=0;i<=511;i++)                   //148.
      {                                     //149.
        h[i]=fgetc(fp);                     //150.
      }                                     //151.
      fclose(fp);                           //152.
      cleardevice();                        //153.
      setviewport(0,0,620,20,0);            //154.
      disph();                              //155.调用十六进制显示函数
      setviewport(0,320,400,400,0);         //156.
      outhz(0,0,"上面显示的是扇区文件"      //157.
      "十六进制数据:",7);                  //158.
      fp=fopen(name,"rb");                  //159.
      for(i=0;i<=511;i++)                   //160.
      {                                     //161.
        fh[i]=fgetc(fp);                    //162.
      }                                     //163.
      fclose(fp);                           //164.
      for(i=0;i<=511;i++)                   //165.
        t+=fh[i];                           //166.字节累加
      ltoa(t,th,10);                        //167.数转字符串
      outhz(0,40,"字节总算术和是:",7);     //168.
      outhz(140,40,th,7);                   //169.
      outhz(0,60,"找到需要的扇区号是:",7); //170.
      ltoa(k,th,10);                        //171.数转字符串
      outhz(180,60,th,7);                   //172.
      outhz(0,80,"按任一键退出",7);         //173.
      sou();                                //174.调用发声函数
    }                                       //175.
  }                                         //176.
  closegraph();                             //177.
}                                           //178.
char gsh[16];                               //179.定义全局变量
                                            //180.
void disph()                                //181.十六进制显示函数
{                                           //182.
  FILE *tmfp;                               //183.
  char q[2];                                //184.
  int x,y,m;                                //185.
  int i,j,k,l;                              //186.
  int x1,x2,y1,y2;                          //187.
  x1=0;  x2=600;                            //188.
  y1=0;  y2=20;                             //189.
  i=0;  j=0;                                //190.
  while(j<16)                               //191.
  {                                         //192.
    setviewport(x1,y1,x2,y2,0);             //193.
    x=0;  y=0;  k=0;                        //194.
    while(k<32)                             //195.
    {                                       //196.
      moveto(x,y);                          //197.
      tmfp=tmpfile();                       //198.
      m=h[i];                               //199.
      fprintf(tmfp,"%2x",m);                //200.
      rewind(tmfp);                         //201.
      l=0;                                  //202.
      while(l<2)                            //203.
      {                                     //204.
        *q=fgetc(tmfp);                     //205.
        *(q+1)='\0';                        //206.
        settextstyle(DEFAULT_FONT,          //207.
        HORIZ_DIR,1);                       //208.
        outtextxy(x,y+4,q);                 //209.
        x+=8+1;  l++;                       //210.
      }                                     //211.
      i++;   k++;                           //212.
      fclose(tmfp);                         //213.
    }                                       //214.
    j++;                                    //215.
    y1=y1+20;  y2=y2+20;                    //216.
  }                                         //217.
}                                           //218.
                                            //219.
void sou(void)                              //220.发声函数
{                                           //221.
  unsigned long t;                          //222.
  unsigned i;                               //223.
  int j;                                    //224.
  while(1)                                  //225.
  {                                         //226.
    i=1800;                                 //227.
    for(j=0;j<=2;j++)                       //228.
    {                                       //229.
      sound(i);                             //230.
      for(t=0;t<20000000;t++)               //231.
      ;                                     //232.
      i=i+200;                              //233.
      nosound();                            //234.
    }                                       //235.
    i=i-300;                                //236.
    sound(i);                               //237.
    for(t=0;t<20000000;t++)                 //238.
    ;                                       //239.
    nosound();                              //240.
    for(t=0;t<100000000;t++)                //241.
    ;                                       //242.
    if(kbhit()!=0)                          //243.
      break;                                //244.
  }                                         //245.
}                                           //246.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -