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

📄 viewse.c

📁 硬盘扇区读写技术-修复硬盘与恢复文件随书源代码
💻 C
字号:
//********************************************
//文件名:VIEWSE.C
//功能:1. 调用汇编子程序读扇区数据
//      2. 将参数传递给汇编子程序并接受返回值
//      3. 可以动态切换字符和十六进制显示方式
//      4. 可以动态按递增或递减的方式查看扇区数据
//      5. 可以动态输入扇区号查看扇区数据
//      6. 可以动态将扇区数据写入文件保存
//********************************************
#include<stdio.h>                             //1.
#include<conio.h>                             //2.
#include<ctype.h>                             //3.
#include<stdlib.h>                            //4.
extern VIEWHD(int,int,int,int,int);           //5.声明读字符汇编子程序
void main()                                   //6.
{                                             //7.
  FILE *tmfp,*fp;                             //8.
  unsigned char ch[512];                      //9.
  char c;                                     //10.
  char sh[13];                                //11.
  int i,j,u=0;                                //12.
  long t;                                     //13.
  unsigned long k;                            //14.
  unsigned int s1,s2,s3,s4;                   //15.
  printf("Enter sector number: ");            //16.
  scanf("%lu",&k);                            //17.输入扇区号
  while(1)                                    //18.
  {                                           //19.
    tmfp=tmpfile();                           //20.
    fwrite(&k,4,1,tmfp);                      //21.
    rewind(tmfp);                             //22.
    fread(&s4,1,1,tmfp);                      //23.
    fread(&s3,1,1,tmfp);                      //24.
    fread(&s2,1,1,tmfp);                      //25.
    fread(&s1,1,1,tmfp);                      //26.
    fclose(tmfp);                             //27.
    for(i=0;i<=511;i++)                       //28.
    {  ch[i]=VIEWHD(s1,s2,s3,s4,i);  }        //29.调用读字符汇编子程序
    while(1)                                  //30.
    {                                         //31.
      clrscr();                               //32.清屏
      printf("Sector number: %lu\n",k);       //33.
      if(u==65)                               //34.显示字符选项
      {                                       //35.
        for(i=1;i<=512;i++)                   //36.
        {                                     //37.
          j=ch[i-1];                          //38.
          printf("%c",j);                     //39.
          if(i%32==0)                         //40.
          printf("\n");                       //41.
        }                                     //42.
      }                                       //43.
      if((u!=65)||(u==72))                    //44.显示十六进制选项
      {                                       //45.
        for(i=1;i<=512;i++)                   //46.
        {                                     //47.
          j=ch[i-1];                          //48.
          printf("%2x",j);                    //49.
          if(i%32==0)                         //50.
            printf("\n");                     //51.
        }                                     //52.
      }                                       //53.
      tmfp=tmpfile();                         //54.
      for(i=0;i<=511;i++)                     //55.
      { fputc(ch[i],tmfp); }                  //56.
      rewind(tmfp);                           //57.
      t=0;                                    //58.
      for(i=0;i<=511;i++)                     //59.
      {                                       //60.
        c=fgetc(tmfp);                        //61.
        t+=c;                                 //62.字节值累加
      }                                       //63.
      fclose(tmfp);                           //64.
      printf("Total: %ld",t);                 //65.
      printf("\n");                           //66.
      printf("ASCII show press key [A].  "    //67.选项提示
      "Restore HEX show press key [H].\n");   //68.
      printf("Next sector press key [+].  "   //69.
      "Prev sector press key [-].\n");        //70.
      printf("Enter sector number "           //71.
      "press key [E].  "                      //72.
      "Save data press key [S].\n");          //73.
      printf("Quit press key [Esc].\n");      //74.
      while(1)                                //75.
      {                                       //76.
        u=toupper(getch());                   //77.接收字符并转为大写
        if((u==65)||(u==72)||(u==43)||(u==45) //78.
          ||(u==69)||(u==83)||(u==27))        //79.
        {                                     //80.
          if(u==65)                           //81.若为A键
          {                                   //82.
            break;                            //83.
          }                                   //84.
          if(u==72)                           //85.若为H键
          {                                   //86.
            break;                            //87.
          }                                   //88.
          if(u==43)                           //89.若为+键
          {                                   //90.
            k++;                              //91.
            break;                            //92.
          }                                   //93.
          if(u==45)                           //94.若为-键
          {                                   //95.
            k--;                              //96.
            break;                            //97.
          }                                   //98.
          if(u==69)                           //99.若为E键
          {                                   //100.
            printf("Enter sector number: ");  //101.
            scanf("%lu",&k);                  //102.
            break;                            //103.
          }                                   //104.
          if(u==83)                           //105.若为S键
          {                                   //106.
            printf("Enter file name: ");      //107.
            scanf("%s",sh);                   //108.
            fp=fopen(sh,"wb");                //109.以写方式打开文件
            for(i=0;i<=511;i++)               //110.
            {  fputc(ch[i],fp);  }            //111.
            fclose(fp);                       //112.
            break;                            //113.
          }                                   //114.
          if(u==27)                           //115.若为Esc键
            exit(0);                          //116.
        }                                     //117.
      }                                       //118.
      break;                                  //119.
    }                                         //120.
  }                                           //121.
}                                             //122.

⌨️ 快捷键说明

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