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

📄 viewmain.c

📁 硬盘扇区读写技术-修复硬盘与恢复文件随书源代码
💻 C
字号:
//********************************************
//文件名:VIEWMAIN.C
//功能:1. 调用显示汉字函数
//      2. 调用字符处理函数
//      3. 调用汇编子程序读扇区数据
//      4. 将参数传递给汇编子程序并接受返回值
//      5. 可以动态切换字符和十六进制显示方式
//      6. 可以动态按递增或递减的方式查看扇区数据
//      7. 可以动态输入扇区号查看扇区数据
//      8. 可以动态将扇区数据写入文件保存
//********************************************
#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 VIEWHD(int,int,int,int,int);              //9.声明读字符汇编子程序
int outhz(int,int,char *,int);                   //10.声明汉字显示函数
void finame(int,int);                            //11.声明字符处理函数
void dispc(void);                                //12.声明字符显示函数
void disph(void);                                //13.声明十六进制显示函数
unsigned char h[512];                            //14.
                                                 //15.
void main()                                      //16.
{                                                //17.
  FILE *tmfp,*fp;                                //18.
  char c;                                        //19.
  unsigned char sh[512];                         //20.
  char name[13];                                 //21.
  char ch[20];                                   //22.
  int i,u=0;                                     //23.
  long t;                                        //24.
  unsigned long k;                               //25.
  unsigned int s1,s2,s3,s4;                      //26.
  extern char gsh[16];                           //27.
  int gdriver=DETECT,gmode;                      //28.
  registerbgidriver(EGAVGA_driver);              //29.
  initgraph(&gdriver,&gmode,"");                 //30.
  setbkcolor(0);                                 //31.
  cleardevice();                                 //32.
                                                 //33.
  outhz(0,20,"输入需要查看的扇区号:",7);        //34.
  finame(190,20);                                //35.
  k=atol(gsh);                                   //36.
  while(1)                                       //37.
  {                                              //38.
    tmfp=tmpfile();                              //39.
    fwrite(&k,4,1,tmfp);                         //40.
    rewind(tmfp);                                //41.
    fread(&s4,1,1,tmfp);                         //42.
    fread(&s3,1,1,tmfp);                         //43.
    fread(&s2,1,1,tmfp);                         //44.
    fread(&s1,1,1,tmfp);                         //45.
    fclose(tmfp);                                //46.
    for(i=0;i<=511;i++)                          //47.
    {  h[i]=VIEWHD(s1,s2,s3,s4,i);  }            //48.调用读字符汇编子程序
    for(i=0;i<=511;i++)                          //49.
      sh[i]=h[i];                                //50.将数据转存内部数组
                                                 //51.
    while(1)                                     //52.
    {                                            //53.
      if(u==65)                                  //54.
      {                                          //55.
        cleardevice();                           //56.
        dispc();                                 //57.调用字符显示函数
      }                                          //58.
      if((u!=65)||(u==72))                       //59.
      {                                          //60.
        cleardevice();                           //61.
        disph();                                 //62.调用十六进制显示函数
      }                                          //63.
      tmfp=tmpfile();                            //64.
      for(i=0;i<=511;i++)                        //65.
      { fputc(h[i],tmfp); }                      //66.
      rewind(tmfp);                              //67.
      t=0;                                       //68.
      for(i=0;i<=511;i++)                        //69.
      {                                          //70.
        c=fgetc(tmfp);                           //71.
        t+=c;                                    //72.字节值累加
      }                                          //73.
      fclose(tmfp);                              //74.
      setviewport(0,320,620,400,0);              //75.
      outhz(0,0,"当前查看的扇区号是:",7);       //76.
      ltoa(k,ch,10);                             //77.
      outhz(170,0,ch,7);                         //78.
      outhz(280,0,"512个字节的"               //79.
      "算术和是:",7);                           //80.
      ltoa(t,ch,10);                             //81.
      outhz(490,0,ch,7);                         //82.
      outhz(0,20,"按[A]键查看扇区ASCII字符。"   //83.选项提示
      "     按[H]键查看扇区十六进制数据。",7);   //84.
      outhz(0,40,"按[+]键查看下一个扇区。"       //85.
      "        按[-]键查看上一个扇区。",7);      //86.
      outhz(0,60,"按[E]键输入查看的扇区号。"     //87.
      "      按[S]键将当前数据存入文件。",7);    //88.
      outhz(0,80,"按[Esc]键退出程序。",7);       //89.
                                                 //90.
      while(1)                                   //91.
      {                                          //92.
        u=toupper(getch());                      //93.
        if((u==65)||(u==72)||(u==43)||(u==45)    //94.
          ||(u==69)||(u==83)||(u==27))           //95.
        {                                        //96.
          if(u==65)                              //97.
          {                                      //98.
            break;                               //99.
          }                                      //100.
          if(u==72)                              //101.
          {                                      //102.
            break;                               //103.
          }                                      //104.
          if(u==43)                              //105.
          {                                      //106.
            k++;                                 //107.
            break;                               //108.
          }                                      //109.
          if(u==45)                              //110.
          {                                      //111.
            k--;                                 //112.
            break;                               //113.
          }                                      //114.
          if(u==69)                              //115.
          {                                      //116.
            outhz(0,100,"输入需要查看的"         //117.
            "扇区号:",7);                       //118.
            finame(190,420);                     //119.
            k=atol(gsh);                         //120.
            break;                               //121.
          }                                      //122.
          if(u==83)                              //123.
          {                                      //124.
            setviewport(0,420,400,440,0);        //125.
            outhz(0,0,"输入建立的文件名:",7);   //126.
            finame(160,420);                     //127.
            strcpy(name,gsh);                    //128.
            if((fp=fopen(gsh,"rb"))!=NULL)       //129.若打开文件成功
            {                                    //130.
              fclose(fp);                        //131.
              setviewport(0,440,400,460,0);      //132.
              strcat(gsh,"文件在当前目录下已经"  //133.
              "存在!是否继续运行(Y/N)?"); //134.
              outhz(0,0,gsh,14);                 //135.
              c=toupper(getch());                //136.
              while((c==78)||(c==89))            //137.
              {                                  //138.
                if(c==78)                        //139.
                {                                //140.
                  closegraph();                  //141.
                  exit(0);                       //142.
                }                                //143.
                if(c==89)                        //144.
                  break;                         //145.
              }                                  //146.
            }                                    //147.
                                                 //148.
            fp=fopen(name,"wb");                 //149.以写方式打开文件
            for(i=0;i<=511;i++)                  //150.
            {  fputc(sh[i],fp);  }               //151.将数据输出到文件
            fclose(fp);                          //152.
            break;                               //153.
          }                                      //154.
          if(u==27)                              //155.
          {                                      //156.
            closegraph();                        //157.
            exit(0);                             //158.
          }                                      //159.
        }                                        //160.
      }                                          //161.
      break;                                     //162.
    }                                            //163.
  }                                              //164.
}                                                //165.
char gsh[16];                                    //166.
                                                 //167.
void dispc()                                     //168.字符显示函数
{                                                //169.
  char q[2];                                     //170.
  int x,y,i,j,k;                                 //171.
  int x1,x2,y1,y2;                               //172.
  x1=0;  x2=600;                                 //173.
  y1=0;  y2=20;                                  //174.
  i=0;  j=0;                                     //175.
  while(j<16)                                    //176.
  {                                              //177.
    setviewport(x1,y1,x2,y2,0);                  //178.
    x=0;  y=0;  k=0;                             //179.
    while(k<32)                                  //180.
    {                                            //181.
      moveto(x,y);                               //182.
      *q=h[i];                                   //183.
      *(q+1)='\0';                               //184.
      settextstyle(DEFAULT_FONT,                 //185.
      HORIZ_DIR,1);                              //186.
      outtextxy(x,y+4,q);                        //187.
      x+=8+1;  i++;   k++;                       //188.
    }                                            //189.
    j++;                                         //190.
    y1=y1+20;  y2=y2+20;                         //191.
  }                                              //192.
}                                                //193.
                                                 //194.
void disph()                                     //195.十六进制显示函数
{                                                //196.
  FILE *tmfp;                                    //197.
  char q[2];                                     //198.
  int x,y,m;                                     //199.
  int i,j,k,l;                                   //200.
  int x1,x2,y1,y2;                               //201.
  x1=0;  x2=600;                                 //202.
  y1=0;  y2=20;                                  //203.
  i=0;  j=0;                                     //204.
  while(j<16)                                    //205.
  {                                              //206.
    setviewport(x1,y1,x2,y2,0);                  //207.
    x=0;  y=0;  k=0;                             //208.
    while(k<32)                                  //209.
    {                                            //210.
      moveto(x,y);                               //211.
      tmfp=tmpfile();                            //212.
      m=h[i];                                    //213.
      fprintf(tmfp,"%2x",m);                     //214.
      rewind(tmfp);                              //215.
      l=0;                                       //216.
      while(l<2)                                 //217.
      {                                          //218.
        *q=fgetc(tmfp);                          //219.
        *(q+1)='\0';                             //220.
        settextstyle(DEFAULT_FONT,               //221.
        HORIZ_DIR,1);                            //222.
        outtextxy(x,y+4,q);                      //223.
        x+=8+1;  l++;                            //224.
      }                                          //225.
      i++;   k++;                                //226.
      fclose(tmfp);                              //227.
    }                                            //228.
    j++;                                         //229.
    y1=y1+20;  y2=y2+20;                         //230.
  }                                              //231.
}                                                //232.

⌨️ 快捷键说明

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