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

📄 editmain.c

📁 硬盘扇区读写技术-修复硬盘与恢复文件随书源代码
💻 C
字号:
//********************************************
//文件名:EDITMAIN.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 *fp;                               //15.
  char *p;                                //16.
  int i,c;                                //17.
  unsigned size,data1,data2;              //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(100,20);                         //27.调用字符处理函数
  strcpy(p,gsh);                          //28.拷贝字符串
                                          //29.
  while(1)                                //30.
  {                                       //31.
    if((fp=fopen(gsh,"rb"))==NULL)        //32.如果打开文件失败
    {                                     //33.
      cleardevice();                      //34.
      setviewport(0,0,200,20,0);          //35.
      outhz(0,20,"输入的文件名没有"       //36.
       "找到!",7);                       //37.
      outhz(0,40,"是否继续输入文件名"     //38.
       "(Y/N)?",7);                 //39.
      c=toupper(getch());                 //40.接收字符并转为大写
      while((c==78)||(c==89))             //41.判断字符的值
      {                                   //42.
        if(c==78)                         //43.
        {                                 //44.
          closegraph();                   //45.
          exit(0);                        //46.退出程序
        }                                 //47.
        if(c==89)                         //48.
        {                                 //49.
          cleardevice();                  //50.
          outhz(0,20,"输入文件名:",7);   //51.
          finame(100,20);                 //52.
          strcpy(p,gsh);                  //53.
          break;                          //54.跳出循环
        }                                 //55.
      }                                   //56.
    }                                     //57.
    else                                  //58.否则
      break;                              //59.跳出循环
  }                                       //60.
  i=open(gsh,O_CREAT);                    //61.
  if(filelength(i)!=512)                  //62.测试文件字节数
  {                                       //63.
    close(i);                             //64.
    cleardevice();                        //65.
    setviewport(0,0,200,20,0);            //66.
    outhz(0,20,"输入的扇区数据文件名"     //67.
     "错误!",7);                         //68.
    outhz(0,40,"按一个键退出",7);         //69.
    getch();                              //70.
    closegraph();                         //71.
    exit(0);                              //72.
  }                                       //73.
                                          //74.
  while(1)                                //75.
  {                                       //76.
    fp=fopen(p,"rb");                     //77.以只读方式打开文件
    for(i=1;i<=512;i++)                   //78.
    {                                     //79.
      h[i-1]=fgetc(fp);                   //80.将字符读入数组
    }                                     //81.
    fclose(fp);                           //82.
    cleardevice();                        //83.
    disph();                              //84.调用十六进制显示函数
    setviewport(0,320,0,340,0);           //85.
    outhz(0,20,"编辑字节数据按[E]键",7);  //86.
    outhz(0,40,"退出按[Esc]键",7);        //87.
                                          //88.
    c=toupper(getch());                   //89.接收字符并转为大写
    if(c==69)                             //90.
    {                                     //91.
      setviewport(0,360,0,380,0);         //92.
      outhz(0,20,"输入字节编号"           //93.
      "(1-512):",7);               //94.
      finame(250,380);                    //95.
      size=atoi(gsh);                     //96.将字符串转为int型值
      if((size<1)||(size>512))            //97.如果字节编号超界
      {                                   //98.
        setviewport(0,380,0,400,0);       //99.
        outhz(0,20,"输入的字节"           //100.
             "编号错误",7);               //101.
        outhz(0,40,"按一个键退出",7);     //102.
        getch();                          //103.
        closegraph();                     //104.
        exit(0);                          //105.
      }                                   //106.
      setviewport(0,380,0,400,0);         //107.
      outhz(0,20,"输入字节的十六进制"     //108.
       "数据:",7);                       //109.
      finame(210,400);                    //110.
      data1=gsh[0];                       //111.
      data2=gsh[1];                       //112.
      if(!((((data1>64)&&(data1<71))||    //113.如果字节数据输入错误
       ((data1>47)&&(data1<58)))&&        //114.
       (((data2>64)&&(data2<71))||        //115.
       ((data2>47)&&(data2<58)))))        //116.
      {                                   //117.
        setviewport(0,400,0,440,0);       //118.
        outhz(0,20,"输入十六进制"         //119.
             "数据错误!",7);             //120.
        outhz(0,40,"按一个键"             //121.
             "终止编辑",7);               //122.
        getch();                          //123.
      }                                   //124.
      else                                //125.否则
      {                                   //126.
        if((data1>64)&&(data1<71))        //127.如果是a-f
        {                                 //128.
          data1=data1-55;                 //129.按权展开为十进制
          data1=data1*16;                 //130.
        }                                 //131.
        if((data1>47)&&(data1<58))        //132.如果是0-9
        {                                 //133.
          data1=data1-48;                 //134.按权展开为十进制
          data1=data1*16;                 //135.
        }                                 //136.
        if((data2>64)&&(data2<71))        //137.
        {                                 //138.
          data2=data2-55;                 //139.
        }                                 //140.
        if((data2>47)&&(data2<58))        //141.
        {                                 //142.
          data2=data2-48;                 //143.
        }                                 //144.
        data1=data1+data2;                //145.高位和低位相加
        fp=fopen(p,"rb+");                //146.以读写方式打开文件
        fseek(fp,size-1,0);               //147.移动文件指针
        fwrite(&data1,1,1,fp);            //148.将数据写入字节
        fclose(fp);                       //149.
      }                                   //150.
    }                                     //151.
    if(c==27)                             //152.若为"Esc"
    {                                     //153.
      closegraph();                       //154.
      exit(0);                            //155.
    }                                     //156.
  }                                       //157.
}                                         //158.
char gsh[16];                             //159.定义全局变量
                                          //160.
void disph()                              //161.十六进制输出函数
{                                         //162.
  FILE *tmfp;                             //163.
  char q[2];                              //164.
  int x,y,m;                              //165.
  int i,j,k,l;                            //166.
  int x1,x2,y1,y2;                        //167.
  x1=0;  x2=600;                          //168.
  y1=0;  y2=20;                           //169.
  i=0;  j=0;                              //170.
  while(j<16)                             //171.
  {                                       //172.
    setviewport(x1,y1,x2,y2,0);           //173.
    x=0;  y=0;  k=0;                      //174.
    while(k<32)                           //175.
    {                                     //176.
      moveto(x,y);                        //177.
      tmfp=tmpfile();                     //178.
      m=h[i];                             //179.
      fprintf(tmfp,"%2x",m);              //180.
      rewind(tmfp);                       //181.
      l=0;                                //182.
      while(l<2)                          //183.
      {                                   //184.
        *q=fgetc(tmfp);                   //185.
        *(q+1)='\0';                      //186.
        settextstyle(DEFAULT_FONT,        //187.
        HORIZ_DIR,1);                     //188.
        outtextxy(x,y+4,q);               //189.
        x+=8+1;  l++;                     //190.
      }                                   //191.
      i++;   k++;                         //192.
      fclose(tmfp);                       //193.
    }                                     //194.
    j++;                                  //195.
    y1=y1+20;  y2=y2+20;                  //196.
  }                                       //197.
}                                         //198.

⌨️ 快捷键说明

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