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

📄 fdiskio.c

📁 Fdisk 1.2.1 Freedos下硬盘分区软件
💻 C
📖 第 1 页 / 共 2 页
字号:
	  if(flags.allow_4gb_fat16==UNCHANGED)
	    {
	    printf("Error encountered on line %d of the \"fdisk.ini\" file...Program Terminated.\n",line_counter);
	    exit(3);
	    }
	  command_ok=TRUE;
	  }

	/* Check for the ALLOW_ABORT statement */
	if(0==stricmp(command_buffer,"ALLOW_ABORT"))
	  {
	  if(0==stricmp(setting_buffer,"ON")) flags.allow_abort=TRUE;
	  if(0==stricmp(setting_buffer,"OFF")) flags.allow_abort=FALSE;
	  if(flags.allow_abort==UNCHANGED)
	    {
	    printf("Error encountered on line %d of the \"fdisk.ini\" file...Program Terminated.\n",line_counter);
	    exit(3);
	    }
	  command_ok=TRUE;
	  }

	/* Check for the AMBR statement */
	if(0==stricmp(command_buffer,"AMBR"))
	  {
	  if(0==stricmp(setting_buffer,"ON")) flags.use_ambr=TRUE;
	  if(0==stricmp(setting_buffer,"OFF")) flags.use_ambr=FALSE;
	  if(flags.use_ambr==UNCHANGED)
	    {
	    printf("Error encountered on line %d of the \"fdisk.ini\" file...Program Terminated.\n",line_counter);
	    exit(3);
	    }
	  command_ok=TRUE;
	  }

	/* Check for the CHECKEXTRA statement */
	if(0==stricmp(command_buffer,"CHECKEXTRA"))
	  {
	  if(0==stricmp(setting_buffer,"ON")) flags.check_for_extra_cylinder=TRUE;
	  if(0==stricmp(setting_buffer,"OFF")) flags.check_for_extra_cylinder=FALSE;
	  if(flags.check_for_extra_cylinder==UNCHANGED)
	    {
	    printf("Error encountered on line %d of the \"fdisk.ini\" file...Program Terminated.\n",line_counter);
	    exit(3);
	    }
	  command_ok=TRUE;
	  }

	/* Check for the COLORS statement */
	if(0==stricmp(command_buffer,"COLORS"))
	  {
	  number=atoi(setting_buffer);

	  if( (number>=0) && (number<=127) )
	    {
	    flags.screen_color=number;
	    }

	  if(flags.screen_color==UNCHANGED)
	    {
	    printf("Error encountered on line %d of the \"fdisk.ini\" file...Program Terminated.\n",line_counter);
	    exit(3);
	    }
	  command_ok=TRUE;
	  }

#ifdef DEBUG
	/* Check for the D_ALL statement */
	if(0==stricmp(command_buffer,"D_ALL"))
	  {
	  if(0==stricmp(setting_buffer,"ON")) debug.all=TRUE;
	  if(0==stricmp(setting_buffer,"OFF")) debug.all=FALSE;
	  if(debug.all==UNCHANGED)
	    {
	    printf("Error encountered on line %d of the \"fdisk.ini\" file...Program Terminated.\n",line_counter);
	    exit(3);
	    }
	  command_ok=TRUE;
	  }

	/* Check for the D_CMD_ARG statement */
	if(0==stricmp(command_buffer,"D_CMD_ARG"))
	  {
	  if(0==stricmp(setting_buffer,"ON")) debug.command_line_arguments=TRUE;
	  if(0==stricmp(setting_buffer,"OFF")) debug.command_line_arguments=FALSE;
	  if(debug.command_line_arguments==UNCHANGED)
	    {
	    printf("Error encountered on line %d of the \"fdisk.ini\" file...Program Terminated.\n",line_counter);
	    exit(3);
	    }
	  command_ok=TRUE;
	  }

	/* Check for the D_CR_PART statement */
	if(0==stricmp(command_buffer,"D_CR_PART"))
	  {
	  if(0==stricmp(setting_buffer,"ON")) debug.create_partition=TRUE;
	  if(0==stricmp(setting_buffer,"OFF")) debug.create_partition=FALSE;
	  if(debug.create_partition==UNCHANGED)
	    {
	    printf("Error encountered on line %d of the \"fdisk.ini\" file...Program Terminated.\n",line_counter);
	    exit(3);
	    }
	  command_ok=TRUE;
	  }

	/* Check for the D_DET_FR_SPC statement */
	if(0==stricmp(command_buffer,"D_DET_FR_SPC"))
	  {
	  if(0==stricmp(setting_buffer,"ON")) debug.determine_free_space=TRUE;
	  if(0==stricmp(setting_buffer,"OFF")) debug.determine_free_space=FALSE;
	  if(debug.determine_free_space==UNCHANGED)
	    {
	    printf("Error encountered on line %d of the \"fdisk.ini\" file...Program Terminated.\n",line_counter);
	    exit(3);
	    }
	  command_ok=TRUE;
	  }

	/* Check for the D_INPUT statement */
	if(0==stricmp(command_buffer,"D_INPUT"))
	  {
	  if(0==stricmp(setting_buffer,"ON")) debug.input_routine=TRUE;
	  if(0==stricmp(setting_buffer,"OFF")) debug.input_routine=FALSE;
	  if(debug.input_routine==UNCHANGED)
	    {
	    printf("Error encountered on line %d of the \"fdisk.ini\" file...Program Terminated.\n",line_counter);
	    exit(3);
	    }
	  command_ok=TRUE;
	  }

	/* Check for the D_LBA statement */
	if(0==stricmp(command_buffer,"D_LBA"))
	  {
	  if(0==stricmp(setting_buffer,"ON")) debug.lba=TRUE;
	  if(0==stricmp(setting_buffer,"OFF")) debug.lba=FALSE;
	  if(debug.lba==UNCHANGED)
	    {
	    printf("Error encountered on line %d of the \"fdisk.ini\" file...Program Terminated.\n",line_counter);
	    exit(3);
	    }
	  command_ok=TRUE;
	  }

	/* Check for the D_PATH statement */
	if(0==stricmp(command_buffer,"D_PATH"))
	  {
	  if(0==stricmp(setting_buffer,"ON")) debug.path=TRUE;
	  if(0==stricmp(setting_buffer,"OFF")) debug.path=FALSE;
	  if(debug.path==UNCHANGED)
	    {
	    printf("Error encountered on line %d of the \"fdisk.ini\" file...Program Terminated.\n",line_counter);
	    exit(3);
	    }
	  command_ok=TRUE;
	  }

	/* Check for the D_READ_S statement */
	if(0==stricmp(command_buffer,"D_READ_S"))
	  {
	  if(0==stricmp(setting_buffer,"ON")) debug.read_sector=TRUE;
	  if(0==stricmp(setting_buffer,"OFF")) debug.read_sector=FALSE;
	  if(debug.read_sector==UNCHANGED)
	    {
	    printf("Error encountered on line %d of the \"fdisk.ini\" file...Program Terminated.\n",line_counter);
	    exit(3);
	    }
	  command_ok=TRUE;
	  }
#endif

	/* Check for the DEL_ND_LOG statement */
	if(0==stricmp(command_buffer,"DEL_ND_LOG"))
	  {
	  if(0==stricmp(setting_buffer,"ON")) flags.del_non_dos_log_drives=TRUE;
	  if(0==stricmp(setting_buffer,"OFF")) flags.del_non_dos_log_drives=FALSE;
	  if(flags.del_non_dos_log_drives==UNCHANGED)
	    {
	    printf("Error encountered on line %d of the \"fdisk.ini\" file...Program Terminated.\n",line_counter);
	    exit(3);
	    }
	  command_ok=TRUE;
	  }

	/* Check for the DRIVE statement */
	if(0==stricmp(command_buffer,"DRIVE"))
	  {
	  if(13!=strlen(setting_buffer)) command_ok=FALSE;
	  else
	    {
	    int drive;

	    char conversion_buffer[5];

	    drive=setting_buffer[0]-'1';

	    conversion_buffer[4]=0;
	    conversion_buffer[3]=0;
	    conversion_buffer[2]=0;

	    conversion_buffer[0]=setting_buffer[11];
	    conversion_buffer[1]=setting_buffer[12];

	    user_defined_chs_settings[drive].total_sectors
	     =atol( (const char *) conversion_buffer);

	    conversion_buffer[0]=setting_buffer[7];
	    conversion_buffer[1]=setting_buffer[8];
	    conversion_buffer[2]=setting_buffer[9];

	    user_defined_chs_settings[drive].total_heads
	     =atol( (const char *) conversion_buffer);

	    conversion_buffer[0]=setting_buffer[2];
	    conversion_buffer[1]=setting_buffer[3];
	    conversion_buffer[2]=setting_buffer[4];
	    conversion_buffer[3]=setting_buffer[5];

	    user_defined_chs_settings[drive].total_cylinders
	     =atol( (const char *) conversion_buffer);

	    user_defined_chs_settings[drive].defined=TRUE;

	    command_ok=TRUE;
	    }
	  }

#ifdef DEBUG
	/* Check for the EMULATE_DISK statement */
	if(0==stricmp(command_buffer,"EMULATE_DISK"))
	  {
	  if(0==stricmp(setting_buffer,"OFF")) debug.emulate_disk=0;
	  if(0==stricmp(setting_buffer,"1")) debug.emulate_disk=1;
	  if(0==stricmp(setting_buffer,"2")) debug.emulate_disk=2;
	  if(0==stricmp(setting_buffer,"3")) debug.emulate_disk=3;
	  if(0==stricmp(setting_buffer,"4")) debug.emulate_disk=4;
	  if(0==stricmp(setting_buffer,"5")) debug.emulate_disk=5;
	  if(0==stricmp(setting_buffer,"6")) debug.emulate_disk=6;
	  if(0==stricmp(setting_buffer,"7")) debug.emulate_disk=7;
	  if(0==stricmp(setting_buffer,"8")) debug.emulate_disk=8;
	  if(debug.emulate_disk==UNCHANGED)
	    {
	    printf("Error encountered on line %d of the \"fdisk.ini\" file...Program Terminated.\n",line_counter);
	    exit(3);
	    }
	  command_ok=TRUE;
	  }
#endif

	/* Check for the FLAG_SECTOR statement */
	if(0==stricmp(command_buffer,"FLAG_SECTOR"))
	  {
	  number=atoi(setting_buffer);
	  if(number==0) flags.flag_sector=0;
	  if( (number>=2) && (number<=64) ) flags.flag_sector=number;
	  if(number==256) flags.flag_sector=part_table[0].total_sect;
	  if(flags.flag_sector==UNCHANGED)
	    {
	    printf("Error encountered on line %d of the \"fdisk.ini\" file...Program Terminated.\n",line_counter);
	    exit(3);
	    }
	  command_ok=TRUE;
	  }

	/* Check for the LABEL statement */
	if(0==stricmp(command_buffer,"LABEL"))
	  {
	  if(0==stricmp(setting_buffer,"ON")) flags.label=TRUE;
	  if(0==stricmp(setting_buffer,"OFF")) flags.label=FALSE;
	  if(flags.label==UNCHANGED)
	    {
	    printf("Error encountered on line %d of the \"fdisk.ini\" file...Program Terminated.\n",line_counter);
	    exit(3);
	    }
	  command_ok=TRUE;
	  }

	/* Check for the MONO statement */
	if(0==stricmp(command_buffer,"MONO"))
	  {
	  if(0==stricmp(setting_buffer,"ON")) flags.monochrome=TRUE;
	  if(0==stricmp(setting_buffer,"OFF")) flags.monochrome=FALSE;

	  if(flags.monochrome==UNCHANGED)
	    {
	    printf("Error encountered on line %d of the \"fdisk.ini\" file...Program Terminated.\n",line_counter);
	    exit(3);
	    }
	  command_ok=TRUE;
	  }

	/* Check for the REBOOT statement */
	if(0==stricmp(command_buffer,"REBOOT"))
	  {
	  if(0==stricmp(setting_buffer,"ON")) flags.reboot=TRUE;
	  if(0==stricmp(setting_buffer,"OFF")) flags.reboot=FALSE;

	  if(flags.reboot==UNCHANGED)
	    {
	    printf("Error encountered on line %d of the \"fdisk.ini\" file...Program Terminated.\n",line_counter);
	    exit(3);
	    }
	  command_ok=TRUE;
	  }

	/* Check for the SET_ANY_ACT statement */
	if(0==stricmp(command_buffer,"SET_ANY_ACT"))
	  {
	  if(0==stricmp(setting_buffer,"ON")) flags.set_any_pri_part_active=TRUE;
	  if(0==stricmp(setting_buffer,"OFF")) flags.set_any_pri_part_active=FALSE;

	  if(flags.set_any_pri_part_active==UNCHANGED)
	    {
	    printf("Error encountered on line %d of the \"fdisk.ini\" file...Program Terminated.\n",line_counter);
	    exit(3);
	    }
	  command_ok=TRUE;
	  }


	/* Check for the VERSION statement */
	if(0==stricmp(command_buffer,"VERSION"))
	  {
	  if(0==stricmp(setting_buffer,"4")) flags.version=FOUR;
	  if(0==stricmp(setting_buffer,"5")) flags.version=FIVE;
	  if(0==stricmp(setting_buffer,"6")) flags.version=SIX;
	  if(0==stricmp(setting_buffer,"W95")) flags.version=W95;
	  if(0==stricmp(setting_buffer,"W95B")) flags.version=W95B;
	  if(0==stricmp(setting_buffer,"W98")) flags.version=W98;
	  if(0==stricmp(setting_buffer,"FD"))
	    {
	    flags.use_freedos_label=TRUE;
	    flags.version=FREEDOS_VERSION;
	    }
	  if(flags.version==UNCHANGED)
	    {
	    printf("Error encountered on line %d of the \"fdisk.ini\" file...Program Terminated.\n",line_counter);
	    exit(3);
	    }
	  command_ok=TRUE;
	  }

	/* Check for the XO statement */
	if(0==stricmp(command_buffer,"XO"))
	  {
	  if(0==stricmp(setting_buffer,"ON")) flags.extended_options_flag=TRUE;
	  if(0==stricmp(setting_buffer,"OFF")) flags.extended_options_flag=FALSE;
	  if(flags.extended_options_flag==UNCHANGED)
	    {
	    printf("Error encountered on line %d of the \"fdisk.ini\" file...Program Terminated.\n",line_counter);
	    exit(3);
	    }
	  command_ok=TRUE;
	  }

#ifdef DEBUG
	/* Check for the WRITE statement */
	if(0==stricmp(command_buffer,"WRITE"))
	  {
	  if(0==stricmp(setting_buffer,"ON")) debug.write=TRUE;
	  if(0==stricmp(setting_buffer,"OFF")) debug.write=FALSE;
	  if(debug.write==UNCHANGED)
	    {
	    printf("Error encountered on line %d of the \"fdisk.ini\" file...Program Terminated.\n",line_counter);
	    exit(3);
	    }
	  command_ok=TRUE;
	  }
#endif

	if(command_ok==FALSE)
	  {
	  printf("Error encountered on line %d of the \"fdisk.ini\" file...Program Terminated.\n",line_counter);
	  exit(3);
	  }

	}

      if( (0==strncmp(line_buffer,"999",3))
       && (0==strncmp(line_buffer,"end",3))
       && (0==strncmp(line_buffer,"END",3))  )
       end_of_file_marker_encountered=TRUE;

      line_counter++;
      }

    fclose(file);
    }

  /* Set options to defaults, if not already set */
#ifdef DEBUG
  if(debug.all==UNCHANGED) debug.all=FALSE;
  if(debug.command_line_arguments==UNCHANGED) debug.command_line_arguments=FALSE;
  if(debug.create_partition==UNCHANGED) debug.create_partition=FALSE;
  if(debug.determine_free_space==UNCHANGED) debug.determine_free_space=FALSE;
  if(debug.emulate_disk==UNCHANGED) debug.emulate_disk=0;
  if(debug.lba==UNCHANGED) debug.lba=FALSE;
  if(debug.input_routine==UNCHANGED) debug.input_routine=FALSE;
  if(debug.path==UNCHANGED) debug.path=FALSE;
  if(debug.read_sector==UNCHANGED) debug.read_sector=FALSE;
  if(debug.write==UNCHANGED) debug.write=TRUE;
#endif

  if(flags.allow_4gb_fat16==UNCHANGED) flags.allow_4gb_fat16=FALSE;
  if(flags.allow_abort==UNCHANGED) flags.allow_abort=FALSE;
  if(flags.check_for_extra_cylinder==UNCHANGED) flags.check_for_extra_cylinder=TRUE;
  if(flags.del_non_dos_log_drives==UNCHANGED) flags.del_non_dos_log_drives=FALSE;
  if(flags.extended_options_flag==UNCHANGED) flags.extended_options_flag=FALSE;
  if(flags.flag_sector==UNCHANGED) flags.flag_sector=2;
  if(flags.label==UNCHANGED) flags.label=FALSE;
  if(flags.monochrome==UNCHANGED) flags.monochrome=FALSE;
  if(flags.reboot==UNCHANGED) flags.reboot=FALSE;
  if(flags.screen_color==UNCHANGED) flags.screen_color=0x07; /* light grey on black */
  if(flags.set_any_pri_part_active==UNCHANGED) flags.set_any_pri_part_active=TRUE;
  if(flags.use_ambr==UNCHANGED) flags.use_ambr=FALSE;
  #pragma warn -ccc
  #pragma warn -rch
  if(flags.version==UNCHANGED)
    {
    if(DEFAULT_VERSION!=FD)
      {
      flags.version=DEFAULT_VERSION;
      }
    else
      {
      flags.use_freedos_label=TRUE;
      flags.version=FREEDOS_VERSION;
      }
    }
  #pragma warn +ccc
  #pragma warn +rch

#ifdef DEBUG
  /* If debug.all==TRUE then set all debugging options to true */
  if(debug.all==TRUE)
    {
    debug.command_line_arguments=TRUE;
    debug.create_partition=TRUE;
    debug.determine_free_space=TRUE;
    debug.input_routine=TRUE;
    debug.lba=TRUE;
    debug.path=TRUE;
    debug.read_sector=TRUE;
    debug.write=FALSE;
    }

  /* If an emulated disk is specified, do not write anything to the disk. */
  if(debug.emulate_disk!=0) debug.write=FALSE;
#endif
}

/* Remove MBR */
void Remove_MBR()
{
  int index=0;

  Read_Physical_Sectors((flags.drive_number),0,0,1,1);

  do
    {
    sector_buffer[index]=0x00;
    index++;
    }while(index<0x1be);

  Write_Physical_Sectors((flags.drive_number),0,0,1,1);
}

/* Save MBR */
void Save_MBR()
{
  int index=0;

  FILE *file_pointer;

  Read_Physical_Sectors(flags.drive_number,0,0,1,1);

  file_pointer = fopen("boot.mbr","wb");

  if(!file_pointer)
    {
    printf("\nError opening or creating \"BOOT.MBR\" for writing...Program Terminated.\n");
    exit(8);
    }

  do
    {
    fputc(sector_buffer[index],file_pointer);
    index++;
    }while(index<0x1be);

  do{
    fputc(0,file_pointer);
    index++;
    }while(index<512);

  fclose(file_pointer);
}

/* Set the flag */
void Set_Flag(int flag_number,int flag_value)
{
  if(flags.flag_sector!=0)
    {
    Read_Physical_Sectors((flags.drive_number),0,0,(flags.flag_sector),1);
    sector_buffer[(446+(flag_number-1))]=flag_value;
    Write_Physical_Sectors((flags.drive_number),0,0,(flags.flag_sector),1);
    }
  else
    {
    printf("\nSector flagging functions have been disabled...Program Terminated.\n");
    exit(9);
    }
}

/* Test the flag */
int Test_Flag(int flag_number)
{
  if(flags.flag_sector!=0)
    {
    Read_Physical_Sectors((flags.drive_number),0,0,(flags.flag_sector),1);
    }
  else
    {
    printf("\nSector flagging functions have been disabled...Program Terminated.\n");
    exit(9);
    }
  return(sector_buffer[(446+flag_number-1)]);
}

⌨️ 快捷键说明

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