home *** CD-ROM | disk | FTP | other *** search
/ PC Open 19 / pcopen19.iso / Msdos / PartMana / SOURCES.ZIP / PART.H < prev    next >
Encoding:
C/C++ Source or Header  |  1998-01-12  |  7.9 KB  |  273 lines

  1. #ifndef _PART_H
  2. #define _PART_H
  3.  
  4. #include <conio.h>
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8. #include <malloc.h>
  9.  
  10. #include "conio.h"
  11. #include "diskio.h"
  12.  
  13. struct part_rec
  14.     {
  15.      unsigned char boot_flag;
  16.      unsigned char start_head;
  17.      unsigned      start_sect:6;
  18.      unsigned      start_cylH:2;
  19.      unsigned char start_cylL;
  20.      unsigned char os_id;
  21.      unsigned char end_head;
  22.      unsigned      end_sect:6;
  23.      unsigned      end_cylH:2;
  24.      unsigned char end_cylL;
  25.      unsigned long rel_sect;    /* Number os sectors before partition */
  26.      unsigned long num_sect;    /* Number of sectors in the partition */
  27.     };
  28.  
  29. struct mbr
  30.     {
  31.      unsigned char xcode[0x1BE];
  32.      struct part_rec part_rec[4];
  33.      unsigned short magic;    /* Magic number (must be 0xAA55) */
  34.     };
  35.  
  36. struct part_long
  37.     {
  38.      int num;
  39.      int active;
  40.      int valid;
  41.      int empty;
  42.      int os_id;
  43.      int os_num;
  44.      unsigned long start_cyl;
  45.      unsigned long start_head;
  46.      unsigned long start_sect;
  47.      unsigned long end_cyl;
  48.      unsigned long end_head;
  49.      unsigned long end_sect;
  50.      unsigned long rel_sect;
  51.      unsigned long num_sect;
  52.      struct disk_addr *daddr;
  53.      unsigned long container_base;
  54.     };
  55.  
  56. struct os_desc
  57.     {
  58.      int  os_id;
  59.      char *name;
  60.      int (*setup)(struct disk_info *, struct part_long *);
  61.      int (*format)(struct disk_info *, struct part_long *, char **argv, int (*func)(char*) );
  62.      int (*printinfo)(struct disk_info *, struct part_long *);
  63.     };
  64.  
  65. struct ipl_desc
  66.     {
  67.      int ipl_id;
  68.      int chk_sum;
  69.      char *name;
  70.      char *code;
  71.      int (*setup)(int ipl_id, char *code);
  72.     };
  73.  
  74. #define OS_UNKN   300    /* Anything > 256 */
  75. #define OS_HIDDEN 255
  76.  
  77. #define MODE_CHS   0
  78. #define MODE_LBA   1
  79.  
  80. #define FORMAT_OK        0
  81. #define FORMAT_FAILED   -1
  82. #define FORMAT_CANCEL   -2
  83.  
  84. #define NUM_MESSAGES   120
  85.  
  86. void html_view(char *text, char *target);
  87. void html_dump(FILE *f, char *text, char *target);
  88.  
  89. char *progress_bar(int percent);
  90.  
  91. int disk_read_rel(struct disk_info *dinfo, struct part_long *p, unsigned long sect, void *buf, int num_sect);
  92. int disk_write_rel(struct disk_info *dinfo, struct part_long *p, unsigned long sect, void *buf, int num_sect);
  93.  
  94. int generic_verify(struct disk_info *di, struct part_long *p, int bbt_size, unsigned long *bbt, int (*progress)(char*) );
  95. int generic_format(struct disk_info *di, struct part_long *p, int bbt_size, unsigned long *bbt, int (*progress)(char*) );
  96.  
  97. void start_gui(void);
  98.  
  99. int setup_mbr(struct disk_info *dinfo, struct part_long *p);
  100.  
  101. int validate_table(struct disk_info *dinfo, struct part_long *part,
  102.                    struct part_long *container, int recalculate );
  103.  
  104. int write_int(int attr, int x, int y, int w, unsigned long xx);
  105.  
  106. void parse_arg(char *str, char **argv, int argv_size);
  107.  
  108. char *sprintf_long(char *tmp, unsigned long num);
  109. char *sprintf_systype(char *tmp, int os_num);
  110. char *sprintf_os_name(char *tmp, struct part_long *);
  111. char *sprintf_partrec(char *tmp, struct part_long *);
  112.  
  113. void  detect_os_type(struct part_long *);
  114.  
  115. void unpack_part(struct part_rec *pr, struct part_long *prl);
  116. void   pack_part(struct part_long *prl, struct part_rec *pr);
  117.  
  118. void show_error(char *);
  119. void select_system_type(struct part_long *p);
  120. int  enter_string(int x, int y, char *prompt, int maxlen, char *name, char *help_target);
  121.  
  122. void format_progress_init(void);
  123. int  format_progress(char *msg);
  124. void format_progress_done(void);
  125.  
  126. void copy_xcode(struct mbr *from, struct mbr *to);
  127. int save_to_file(char *filename, void *buf, int len);
  128. int load_from_file(char *filename, void *buf, int len);
  129.  
  130. void usage(void);
  131. void command_line(int argc, char **argv);
  132.  
  133. int print_mbr(struct disk_info *dinfo, struct part_long *p );
  134. int format_ext(struct disk_info *dinfo, struct part_long *p, char **argv,
  135.                                                   int (*progress)(char*) );
  136.  
  137. int print_fat(struct disk_info *dinfo, struct part_long *p );
  138. int format_fat(struct disk_info *dinfo, struct part_long *p, char **argv,
  139.                                                   int (*progress)(char*) );
  140.  
  141. void messages_eng(void);
  142.  
  143.  
  144. #ifdef _PART_C
  145.   int  mode;
  146.   int  interactive;
  147.   char *message[NUM_MESSAGES];
  148.  
  149.   struct os_desc os_desc[] = {
  150.  
  151. /*  os_id, "123456789 123456789 123",    setup,        format,     printinfo */
  152.  
  153.  {   0x00, "Unused",            0,        0,        0        },
  154.  {   0x01, "DOS FAT-12",        0,        format_fat,     print_fat    },
  155.  {   0x04, "DOS FAT-16 (<=32Mb)",    0,        format_fat,     print_fat    },
  156.  {   0x05, "DOS Extended",        setup_mbr,    format_ext,    print_mbr    },
  157.  {   0x06, "BIGDOS FAT-16 (>=32Mb)",    0,        format_fat,     print_fat    },
  158.  {   0x07, "Windows NT NTFS",        0,        0,        0        },
  159.  {   0x0B, "Windows 95 FAT-32",        0,        0,        0        },
  160.  {   0x0C, "Windows 95 FAT-32 (LBA)",    0,        0,        0        },
  161.  {   0x0E, "LBA VFAT (BIGDOS/FAT16)",    0,        0,        0        },
  162.  {   0x0F, "LBA VFAT (DOS Extended)",    0,        0,        0        },
  163.  {   0x54, "OnTrack Disk Mgr (DDO)",    0,        0,        0        },
  164.  {   0x63, "SCO UnixWare (386/ix)",    0,        0,        0        },
  165.  {   0x81, "Linux",            0,        0,        0        },
  166.  {   0x82, "Solaris x86",        0,        0,        0        },
  167.  {   0xA5, "FreeBSD, BSD/386",        0,        0,        0        },
  168.  
  169.  {   0xFF, "Hidden (0xFF)",        0,        0,        0        },
  170.  { OS_UNKN,"End of table trailer.",    0,        0,        0        }
  171. };
  172.  
  173. #else
  174.   extern int mode;
  175.   extern int interactive;
  176.   extern struct os_desc os_desc[];
  177.   extern char *message[NUM_MESSAGES];
  178. #endif
  179.   
  180.  
  181. #define HEADER_MAIN    (message[0])
  182. #define HEADER_GET    (message[1])
  183. #define HEADER_HD    (message[2])
  184. #define HEADER_EXT    (message[3])
  185. #define HEADER_EXT2    (message[4])
  186. #define HEADER_READ    (message[5])
  187. #define HEADER_SYSTYPE    (message[6])
  188.  
  189. #define HEADER_CHS    (message[11])
  190. #define HEADER_CHS2    (message[12])
  191. #define HEADER_CHS3    (message[13])
  192.  
  193. #define HEADER_LBA    (message[14])
  194. #define HEADER_LBA2    (message[15])
  195. #define HEADER_LBA3    (message[16])
  196.  
  197.  
  198. #define MENU_HELP    (message[21])
  199. #define MENU_SAVE    (message[22])
  200. #define MENU_UNDO    (message[23])
  201. #define MENU_MODE    (message[24])
  202. #define MENU_DISK    (message[25])
  203. #define MENU_QUIT    (message[26])
  204.  
  205. #define MENU_HIDE    (message[31])
  206. #define MENU_FORMAT    (message[32])
  207. #define MENU_VERIFY    (message[33])
  208.  
  209. #define MENU_SAVE_FILE    (message[34])
  210. #define MENU_LOAD_FILE    (message[35])
  211. #define MENU_INST_CODE    (message[36])
  212.  
  213. #define MENU_INSTALL    (message[41])
  214. #define MENU_UNINSTALL    (message[42])
  215.  
  216. #define MENU_INST_EXT    (message[43])
  217. #define MENU_MOVE_PRI    (message[44])
  218.  
  219. #define ERROR_MALLOC    (message[51])
  220. #define ERROR_DISK_INFO    (message[52])
  221. #define ERROR_READ_MBR    (message[53])
  222. #define MESG_ONLY_1HD    (message[54])
  223.  
  224.  
  225. #define HINT_ACTIVE    (message[61])
  226. #define HINT_SYSTYPE    (message[62])
  227. #define HINT_LOC_CHS    (message[63])
  228. #define HINT_LOC_LBA    (message[64])
  229.  
  230. #define WARN_CONFLICT    (message[65])
  231. #define ERROR_INVALID    (message[66])
  232.  
  233. #define WARN_WRITE_MBR    (message[71])
  234. #define WARN_LOAD_FILE    (message[72])
  235. #define WARN_SAVE_FILE    (message[73])
  236.  
  237. #define MESG_MBR_SAVED    (message[74])
  238. #define MESG_INSTALL    (message[75])
  239. #define MESG_UNINSTALL    (message[76])
  240. #define MESG_FILE_SAVED    (message[77])
  241. #define MESG_FILE_LOADED    (message[78])
  242. #define MESG_NOT_SAVED    (message[79])
  243.  
  244. #define ERROR_NO_HELP    (message[81])
  245. #define ERROR_NO_FORMAT    (message[82])
  246. #define ERROR_NO_SETUP    (message[83])
  247. #define ERROR_NO_PRINT    (message[84])
  248.  
  249. #define HELP_TEXT    (message[91])
  250. #define PRESS_ESC    (message[92])
  251. #define PROMPT_FILE    (message[93])
  252. #define PROMPT_FORMAT    (message[94])
  253. #define PROMPT_FSTYPE    (message[95])
  254.  
  255. #define MESG_VERIFYING    (message[101])
  256. #define MESG_FORMATTING    (message[102])
  257.  
  258. #define MESG_FORMAT_OK        (message[103])
  259. #define WARN_FORMAT_CANCEL    (message[104])
  260. #define ERROR_FORMAT_FAILED    (message[105])
  261.  
  262. #define MESG_VERIFY_OK        (message[106])
  263. #define WARN_VERIFY_CANCEL    (message[107])
  264. #define ERROR_VERIFY_FAILED    (message[108])
  265.  
  266. #define ERROR_FIX_FIRST        (message[111])
  267. #define ERROR_FORMAT_GEN    (message[112])
  268. #define ERROR_FORMAT_WIN95    (message[113])
  269. #define ERROR_FORMAT_EMPTY    (message[114])
  270. #define ERROR_FORMAT_FRACTION    (message[115])
  271.  
  272. #endif
  273.