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

📄 fdtmain.c

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

⌨️ 快捷键说明

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