📄 part.h
字号:
#ifndef _PART_H
#define _PART_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include "conio.h"
#include "diskio.h"
#define SECT_SIZE 512 /* Must not be changed */
#define EMP_SIZE 43
struct part_rec
{
unsigned char boot_flag;
unsigned char start_head;
unsigned start_sect:6;
unsigned start_cylH:2;
unsigned char start_cylL;
unsigned char os_id;
unsigned char end_head;
unsigned end_sect:6;
unsigned end_cylH:2;
unsigned char end_cylL;
unsigned long rel_sect; /* Number os sectors before partition */
unsigned long num_sect; /* Number of sectors in the partition */
};
struct part_long
{
int level;
int empty;
int valid;
int active;
int os_num;
int mbr_err;
int range_err;
int overlap_err;
int inconsist_err;
int boot_record_err;
unsigned short os_id;
unsigned long start_cyl;
unsigned long start_head;
unsigned long start_sect;
unsigned long end_cyl;
unsigned long end_head;
unsigned long end_sect;
unsigned long rel_sect;
unsigned long num_sect;
int changed;
int orig_row;
int inh_changed;
int inh_invalid;
struct part_long *container;
unsigned long container_base;
};
#define ADV_MBR_MAGIC 0x334D4241L /* "ABM3" */
#define ADV_DATA_SIGNATURE "AdvBootManager\0"
#define ADV_DATA_VERSION 3
struct mbr
{
union
{
struct x_std
{
/* unsigned char code[0x1BE]; */
unsigned char code[0x100];
}std;
struct x_ipl
{
unsigned char code[0x1B6];
unsigned short dot_len;
unsigned char vir_chk;
unsigned char def_part;
unsigned char fd_params[4];
}ipl;
struct x_adv_old
{
unsigned char code[0x1A0];
unsigned char signature[15]; /* AdvBootManager\0 */
unsigned char version; /* Data structure version */
unsigned long rel_sect;
unsigned char act_menu;
unsigned char reserved[9];
}adv_old;
struct x_adv /* 0123456789ABCD */
{ /* rrrr____aoABM3 */
/* rrrrffffatABM3 */
unsigned char code[0x1B0];
unsigned long rel_sect;
unsigned long reserved;
unsigned char act_menu;
unsigned char boptions;
unsigned long adv_mbr_magic;
}adv;
struct x_adv_new
{
unsigned char code[0x1AE];
unsigned long bm_chs;
unsigned long fd_chs;
unsigned long bm_rel_sect;
unsigned char timeout;
unsigned char Default;
unsigned short bm_sign; /* 'BM' = 0x4D42 */
}new;
}x;
struct part_rec part_rec[4];
unsigned short magic_num; /* Magic number (must be 0xAA55) */
};
#define MBR_MAGIC_NUM (0xAA55)
#define BM_238_SIGN (0x4D42)
#define MENU_BOOT_EMPTY 0
#define MENU_BOOT_PART 1
#define MENU_BOOT_NEXT_HD 2
#define MENU_BOOT_FLOPPY 3
#define SHOW_NONE 0
#define SHOW_LAST 1
#define SHOW_NEXT 2
#define SHOW_PREV 3
#define SHOW_LAST3 4
#define MENU_OPT_PASSW 1
struct adv_menu_rec /* 80 bytes */
{
unsigned char boot_type; /* if 0 - empty */
unsigned char options;
unsigned char name[30];
union
{
struct x_part
{
unsigned char tag;
unsigned char show;
unsigned char reserved[14];
unsigned short num_keys;
unsigned short keys[15];
}part;
}x;
};
struct adv_part_rec /* 16 bytes */
{
unsigned short os_id;
unsigned char tag;
unsigned char orig_row;
unsigned char reserved[4];
unsigned long rel_sect;
unsigned long num_sect;
};
#define MAX_MENU_ROWS 16
#define MAX_PART_ROWS 32
#define ADV_CODE_SIZE 8192
#define ADV_DATA_SIZE 2048
#define ADV_CODE_SECT (ADV_CODE_SIZE/SECT_SIZE)
#define ADV_DATA_SECT (ADV_DATA_SIZE/SECT_SIZE)
#define ADV_NUM_SECTS (ADV_CODE_SECT+ADV_DATA_SECT)
#define ADV_OPT_VIR_CHECK 1
#define ADV_OPT_CLEAR_SCR 2
#define ADV_OPT_DEF_MENU 4
#define ADV_OPT_IGN_UNUSED 8
struct adv /* 80+1280+512+176=2048 */
{
unsigned char signature[15]; /* AdvBootManager\0 */
unsigned char version; /* Data structure version */
unsigned char def_menu;
unsigned char timeout;
unsigned char options;
unsigned char options2;
unsigned int password; /* code to validate password */
unsigned char reserved2[26];
unsigned char adv_title[32];
struct adv_menu_rec menu[MAX_MENU_ROWS]; /* 1280 */
struct adv_part_rec part[MAX_PART_ROWS]; /* 512 */
unsigned char reserved[176];
};
struct os_desc
{
unsigned short os_id;
char *name;
unsigned short flags;
int (*setup)(struct part_long *);
int (*format)(struct part_long *, char **argv );
int (*print)(struct part_long *);
};
#define OS_EXT 0x0500
#define OS_HIDDEN 0xFF80
#define OS_ADV 0xFF81
#define OS_UNKN 0xFFFF
#define MODE_CHS 0
#define MODE_LBA 1
#define VIEW_MBR 0
#define VIEW_ADV 1
#define VIEW_EMBR 2
#define OK 0
#define FAILED -1
#define CANCEL -2
#define BORDER_COLOR (Yellow +BakBlue)
#define HEADER_COLOR (BrCyan +BakBlue)
#define TITLE_COLOR (BrWhite+BakBlue)
#define TABLE_COLOR (BrWhite+BakBlue)
#define INVAL_COLOR (BrRed +BakBlue)
#define ACTIVE_COLOR (BrWhite+BakBlack)
#define MENU_COLOR (BrCyan +BakBlue)
#define HINT_COLOR (Yellow +BakBlue)
#define MESG_COLOR (BrGreen+BakBlue)
#define WARN_COLOR (BrRed +BakBlue)
#define MAIN_BORDER "赏缓 喝图"
#define VERT_BORDER "
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -