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

📄 sbmain.c

📁 硬盘修复参考源码。其中包括对扇区读写剪切等操作的具体代码。
💻 C
字号:
//********************************************
//文件名:SBMAIN.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 *fp1,*fp2;                        //15.
  char *sp1,*sp2;                        //16.
  int i,j,k;                             //17.
  char ch;                               //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(160,20);                        //27. 调用字符处理函数
  strcpy(sp1,gsh);                       //28. 拷贝字符串
  while(1)                               //29.
  {                                      //30.
    if((fp1=fopen(sp1,"rb"))==NULL)      //31. 如果打开文件失败
    {                                    //32.
      cleardevice();                     //33. 清屏
      setviewport(0,0,200,20,0);         //34. 设置视区
      outhz(0,20,"输入的源扇区文件名"    //35.
      "没有找到!",7);                   //36.
      outhz(0,40,"是否继续输入源扇区"    //37.
      "文件名(Y/N)?",7);           //38.
      k=toupper(getch());                //39. 接收一字符并转为大写
      while((k==78)||(k==89))            //40.
      {                                  //41.
        if(k==78)                        //42. 若为"N"
        {                                //43.
          closegraph();                  //44. 关闭图形方式
          exit(0);                       //45.
        }                                //46.
        if(k==89)                        //47. 若为"Y"
        {                                //48.
          cleardevice();                 //49.
          outhz(0,20,"输入源扇区"        //50.
          "文件名:",7);                 //51.
          finame(160,20);                //52.
          strcpy(sp1,gsh);               //53.
          break;                         //54.
        }                                //55.
      }                                  //56.
    }                                    //57.
    else                                 //58. 否则
      break;                             //59. 跳出循环
  }                                      //60.
  fclose(fp1);                           //61.
  i=open(sp1,O_CREAT);                   //62.
  if(filelength(i)!=512)                 //63. 测试文件字节数
  {                                      //64.
    close(i);                            //65.
    cleardevice();                       //66.
    setviewport(0,0,200,20,0);           //67.
    outhz(0,20,"输入的源扇区文件名"      //68.
     "错误!",14);                       //69.
    outhz(0,40,"按一个键退出",15);       //70.
    getch();                             //71.
    closegraph();                        //72.
    exit(0);                             //73.
  }                                      //74.
  close(i);                              //75.
                                         //76.
  cleardevice();                         //77.
  setviewport(0,0,200,20,0);             //78.
  outhz(0,20,"输入目的扇区文件名:",7);  //79.
  finame(180,20);                        //80.
  strcpy(sp2,gsh);                       //81. 拷贝字符串
  while(1)                               //82.
  {                                      //83.
    if((fp2=fopen(sp2,"rb"))==NULL)      //84. 如果打开文件失败
    {                                    //85.
      cleardevice();                     //86.
      setviewport(0,0,200,20,0);         //87.
      outhz(0,20,"输入的目的扇区文件名"  //88.
      "没有找到!",7);                   //89.
      outhz(0,40,"是否继续输入目的扇区"  //90.
      "文件名(Y/N)?",7);           //91.
      k=toupper(getch());                //92.
      while((k==78)||(k==89))            //93.
      {                                  //94.
        if(k==78)                        //95.
        {                                //96.
          closegraph();                  //97.
          exit(0);                       //98.
        }                                //99.
        if(k==89)                        //100.
        {                                //101.
          cleardevice();                 //102.
          outhz(0,20,"输入目的扇区"      //103.
          "文件名:",7);                 //104.
          finame(180,20);                //105.
          strcpy(sp2,gsh);               //106.
          break;                         //107.
        }                                //108.
      }                                  //109.
    }                                    //110.
    else                                 //111.
      break;                             //112.
  }                                      //113.
  fclose(fp2);                           //114.
  i=open(sp2,O_CREAT);                   //115.
  if(filelength(i)!=512)                 //116.
  {                                      //117.
    close(i);                            //118.
    cleardevice();                       //119.
    setviewport(0,0,200,20,0);           //120.
    outhz(0,20,"输入的目的扇区文件名"    //121.
     "错误!",14);                       //122.
    outhz(0,40,"按一个键退出",15);       //123.
    getch();                             //124.
    closegraph();                        //125.
    exit(0);                             //126.
  }                                      //127.
  close(i);                              //128.
                                         //129.
  cleardevice();                         //130. 清屏
  setviewport(0,320,0,340,0);            //131. 设置视区
  outhz(0,20,"显示源扇区文件数据"        //132.
  "按[S]键",7);                          //133.
  outhz(0,40,"显示目的扇区文件数据"      //134.
  "按[T]键",7);                          //135.
  outhz(0,60,"拷贝文件数据块按[C]键",7); //136.
  outhz(0,80,"退出按[Esc]键",7);         //137.
  while(1)                               //138.
  {                                      //139.
    k=toupper(getch());                  //140. 接收一字符并转为大写
    if(k==83)                            //141. 若为"S"
    {                                    //142.
      cleardevice();                     //143.
      setviewport(0,320,0,340,0);        //144.
      outhz(0,20,"显示源扇区文件数据"    //145.
      "按[S]键",7);                      //146.
      outhz(0,40,"显示目的扇区文件数据"  //147.
      "按[T]键",7);                      //148.
      outhz(0,60,"拷贝文件数据块"        //149.
      "按[C]键",7);                      //150.
      outhz(0,80,"退出按[Esc]键",7);     //151.
      fp1=fopen(sp1,"rb");               //152. 打开源文件
      for(i=1;i<=512;i++)                //153.
      {                                  //154.
        h[i-1]=fgetc(fp1);               //155.
      }                                  //156.
      fclose(fp1);                       //157.
      disph();                           //158. 调用十六进制显示函数
    }                                    //159.
    if(k==84)                            //160. 若为"T"
    {                                    //161.
      cleardevice();                     //162.
      setviewport(0,320,0,340,0);        //163.
      outhz(0,20,"显示源扇区文件数据"    //164.
      "按[S]键",7);                      //165.
      outhz(0,40,"显示目的扇区文件数据"  //166.
      "按[T]键",7);                      //167.
      outhz(0,60,"拷贝文件数据块"        //168.
      "按[C]键",7);                      //169.
      outhz(0,80,"退出按[Esc]键",7);     //170.
      fp2=fopen(sp2,"rb");               //171. 打开目的文件
      for(i=1;i<=512;i++)                //172.
      {                                  //173.
        h[i-1]=fgetc(fp2);               //174.
      }                                  //175.
      fclose(fp2);                       //176.
      disph();                           //177. 调用十六进制显示函数
    }                                    //178.
    if(k==67)                            //179. 若为"C"
    {                                    //180.
      setviewport(0,400,400,420,0);      //181. 设置视区
      outhz(0,20,"输入起始字节"          //182.
      "编号(1-512):",10);         //183.
      finame(290,420);                   //184.
      i=atoi(gsh);                       //185. 将字符串转为int型数
      if((i<1)||(i>512))                 //186. 若超界
      {                                  //187.
        setviewport(0,420,0,440,0);      //188.
        outhz(0,20,"输入的起始字节"      //189.
         "编号错误!",14);               //190.
        outhz(0,40,"按一个键退出",15);   //191.
        getch();                         //192.
        closegraph();                    //193.
        exit(0);                         //194.
      }                                  //195.
      setviewport(0,420,400,440,0);      //196.
      clearviewport();                   //197. 清除前面的视区内容
      setviewport(0,400,400,420,0);      //198.
      outhz(0,20,"输入终止字节"          //199.
      "编号(1-512):",13);         //200.
      finame(290,420);                   //201.
      j=atoi(gsh);                       //202. 将字符串转为int型数
      if((j<1)||(j>512))                 //203.
      {                                  //204.
        setviewport(0,420,0,440,0);      //205.
        outhz(0,20,"输入的终止字节"      //206.
         "编号错误!",14);               //207.
        outhz(0,40,"按一个键退出",15);   //208.
        getch();                         //209.
        closegraph();                    //210.
        exit(0);                         //211.
      }                                  //212.
      fp1=fopen(sp1,"rb");               //213. 打开源文件
      fp2=fopen(sp2,"rb+");              //214. 打开目的文件
      fseek(fp1,i-1,0);                  //215. 移动源文件指针
      fseek(fp2,i-1,0);                  //216. 移动目的文件指针
      for(;i<=j;i++)                     //217. 限定起止区间
      {                                  //218.
        ch=fgetc(fp1);                   //219. 读字符
        fputc(ch,fp2);                   //220. 写字符
      }                                  //221.
      fclose(fp1);                       //222.
      fclose(fp2);                       //223.
      cleardevice();                     //224.
      setviewport(0,320,0,340,0);        //225.
      outhz(0,20,"显示源扇区文件数据"    //226.
      "按[S]键",7);                      //227.
      outhz(0,40,"显示目的扇区文件数据"  //228.
      "按[T]键",7);                      //229.
      outhz(0,60,"拷贝文件数据块"        //230.
      "按[C]键",7);                      //231.
      outhz(0,80,"退出按[Esc]键",7);     //232.
    }                                    //233.
    if(k==27)                            //234. 若为"Esc"
    {                                    //235.
      closegraph();                      //236.
      exit(0);                           //237.
    }                                    //238.
  }                                      //239.
}                                        //240.
char gsh[16];                            //241. 定义全局变量
                                         //242.
void disph()                             //243. 十六进制显示函数
{                                        //244.
  FILE *tmfp;                            //245.
  char q[2];                             //246.
  int x,y,m;                             //247.
  int i,j,k,l;                           //248.
  int x1,x2,y1,y2;                       //249.
  x1=0;  x2=600;                         //250.
  y1=0;  y2=20;                          //251.
  i=0;  j=0;                             //252.
  while(j<16)                            //253.
  {                                      //254.
    setviewport(x1,y1,x2,y2,0);          //255.
    x=0;  y=0;  k=0;                     //256.
    while(k<32)                          //257.
    {                                    //258.
      moveto(x,y);                       //259.
      tmfp=tmpfile();                    //260.
      m=h[i];                            //261.
      fprintf(tmfp,"%2x",m);             //262.
      rewind(tmfp);                      //263.
      l=0;                               //264.
      while(l<2)                         //265.
      {                                  //266.
        *q=fgetc(tmfp);                  //267.
        *(q+1)='\0';                     //268.
        settextstyle(DEFAULT_FONT,       //269.
        HORIZ_DIR,1);                    //270.
        outtextxy(x,y+4,q);              //271.
        x+=8+1;  l++;                    //272.
      }                                  //273.
      i++;   k++;                        //274.
      fclose(tmfp);                      //275.
    }                                    //276.
    j++;                                 //277.
    y1=y1+20;  y2=y2+20;                 //278.
  }                                      //279.
}                                        //280.

⌨️ 快捷键说明

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