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

📄 boot.c

📁 查找系统数据扇区的缘代码
💻 C
字号:
//********************************************
//文件名:BOOT.C
//功能:1. 调用读扇区汇编子程序
//      2. 查找分区表和引导扇区并建立扇区数据文件
//      3. 将找到的扇区数据用十六进制显示
//********************************************
#include<stdio.h>                              //1.
#include<conio.h>                              //2.
#include<stdlib.h>                             //3.
#include<string.h>                             //4.
#include<dos.h>                                //5.
extern RHD(int,int,int,int,char *);            //6. 声明读扇区汇编子程序
void sou(void);                                //7. 声明发声函数
void main(int argc,char *argv[])               //8.
{                                              //9.
  FILE *tmfp,*fp;                              //10.
  int i,c;                                     //11.
  int bit1,bit2;                               //12.
  int x,y,m;                                   //13.
  char *ch="";                                 //14.
  char sh[13];                                 //15.
  char h[512];                                 //16.
  unsigned long k;                             //17.
  long t=0;                                    //18.
  unsigned char s1,s2,s3,s4;                   //19.
					       //20.
  if(argc==1)                                  //21. 若命令行参数为1
  {                                            //22.
    printf("Enter BOOTFIND /? to get help.");  //23.
    printf("\n");                              //24.
    exit(0);                                   //25.
  }                                            //26.
  strcpy(sh,argv[1]);                          //27. 拷贝字符串
  if((strcmp(sh,"/?")==0)&&argc==2)            //28. 显示帮助提示
  {                                            //29.
    printf("The syntax of BOOTFIND.EXE is:");  //30.
    printf("\n");                              //31.
    printf("1.BOOTFIND [/?] is to get help."); //32.
    printf("\n");                              //33.
    printf("2.BOOTFIND [/+] is find "          //34.
    "increase sector number.");                //35.
    printf("\n");                              //36.
    printf("3.BOOTFIND [/-] is find "          //37.
    "reduce sector number.");                  //38.
    printf("\n");                              //39.
  }                                            //40.
					       //41.
  if((strcmp(sh,"/+")==0)                      //42. 判断功能开关
   ||(strcmp(sh,"/-")==0)&&argc==2)            //43.
  {                                            //44.
    printf("Enter create file name: ");        //45.
    scanf("%s",ch);                            //46.
    printf("Enter sector number: ");           //47.
    scanf("%lu",&k);                           //48.
    textcolor(15);                             //49.
    cprintf("Press any key stop");             //50.
    textcolor(7);                              //51.
    cprintf("\n");                             //52.
    printf("\n");                              //53.
    printf("Find sector number: ");            //54.
    x=wherex();                                //55. 取得光标X值
    y=wherey();                                //56. 取得光标Y值
    _setcursortype(_NOCURSOR);                 //57. 隐藏光标
    m=0;                                       //58.
    while(1)                                   //59.
    {                                          //60.
      tmfp=tmpfile();                          //61.
      fwrite(&k,4,1,tmfp);                     //62.
      rewind(tmfp);                            //63.
      fread(&s4,1,1,tmfp);                     //64.
      fread(&s3,1,1,tmfp);                     //65.
      fread(&s2,1,1,tmfp);                     //66.
      fread(&s1,1,1,tmfp);                     //67.
      fclose(tmfp);                            //68.
      RHD(s1,s2,s3,s4,ch);                     //69. 调用读扇区汇编子程序
      fp=fopen(ch,"rb");                       //70. 打开扇区数据文件
      fseek(fp,510,0);                         //71. 移动文件指针
      bit1=fgetc(fp);                          //72. 读一个字符
      bit2=fgetc(fp);                          //73. 读下一个字符
      fclose(fp);                              //74.
      if((bit1==0x55)&&(bit2==0xaa))           //75. 判断最后两字节是否为55 aa
      {                                        //76.
	m=3;                                   //77.
	break;                                 //78.
      }                                        //79.
      gotoxy(x,y);                             //80. 移动光标
      printf("%lu",k);                         //81. 显示扇区号
      if(kbhit()!=0)                           //82. 判断是否有键按下
      {                                        //83.
	break;                                 //84.
      }                                        //85.
      if((strcmp(sh,"/+"))==0)                 //86. 扇区号增加
	k++;                                   //87.
      if((strcmp(sh,"/-"))==0)                 //88. 扇区号减少
	k--;                                   //89.
    }                                          //90.
					       //91.
    if(m==3)                                   //92.
    {                                          //93.
      printf("\n");                            //94.
      fp=fopen(ch,"rb");                       //95.
      for(i=1;i<=512;i++)                      //96.
      {                                        //97.
	c=fgetc(fp);                           //98.
	printf("%2x",c);                       //99. 用十六进制显示数据
	if(i%32==0)                            //100.
	printf("\n");                          //101.
      }                                        //102.
      rewind(fp);                              //103. 调整文件指针
      for(i=0;i<=511;i++)                      //104.
      fread(&h[i],1,1,fp);                     //105.
      fclose(fp);                              //106.
      printf("\n");                            //107.
      for(i=0;i<=511;i++)                      //108.
	t+=h[i];                               //109. 字节累加
      printf("Total : %ld\n",t);               //110.
      x=wherex();                              //111.
      y=wherey();                              //112.
      gotoxy(x,y);                             //113.
      printf("Sector number "                  //114. 显示找到的扇区号
      "final is:%lu\n",k);                     //115.
      _setcursortype(_NORMALCURSOR);           //116. 恢复光标
      printf("Press any key to exit");         //117.
      sou();                                   //118. 调用发声函数
    }                                          //119.
    printf("\n");                              //120.
    _setcursortype(_NORMALCURSOR);             //121.
  }                                            //122.
}                                              //123.
					       //124.
void sou(void)                                 //125. 发声函数
{                                              //126.
  unsigned long t;                             //127.
  unsigned i;                                  //128.
  int j;                                       //129.
  while(1)                                     //130.
  {                                            //131.
    i=1800;                                    //132. 设定频率
    for(j=0;j<=2;j++)                          //133.
    {                                          //134.
      sound(i);                                //135. 发声
      for(t=0;t<20000000;t++)                  //136. 延时
      ;                                        //137.
      i=i+200;                                 //138.
      nosound();                               //139. 停止发声
    }                                          //140.
    i=i-300;                                   //141.
    sound(i);                                  //142.
    for(t=0;t<20000000;t++)                    //143.
    ;                                          //144.
    nosound();                                 //145.
    for(t=0;t<100000000;t++)                   //146.
    ;                                          //147.
    if(kbhit()!=0)                             //148. 判断是否有键按下
      break;                                   //149.
  }                                            //150.
}                                              //151.

⌨️ 快捷键说明

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