#include <stdio.h>
#include <dos.h>
#include "sysp.h"

void main(void);
void main(void) {

  DISK_CONFIG cfg;
  MBOOT mb;
  int i,j, k, status;

  printf("\n"
			"\nТаблицы разделов диска"
			"\n  (C)Фролов А., 1991"
			"\n");

// Определяем конфигурацию дисковой подсистемы

  disk_cfg(&cfg);

// Записываем в переменную i количество
// установленных в системе НМД

  j = cfg.n_hard;
  printf("\nУстановлено дисков: %d", j);

// Для каждого НМД выводим содержимое
// таблицы разделов

  for(i=0;i<j;i++) {

// Читаем главную загрузочную запись

		status = getmboot(&mb,i);
		if(status != 0) {
			printf("\nОшибка чтения диска %d, код ошибки: %d",
					i, status);
			exit(1);
		}

		printf("\n\nТаблица разделов диска %d",i);
		printf("\n"

"\n------------------------------------------------------------"
"\n|Флаг|Начало раздела |Конец раздела  |Код  |Размер |Отн.   |"
"\n|    |---------------|---------------|сист.|раздела|номер  |"
"\n|    |Гол.|Сект.|Цил.|Гол.|Сект.|Цил.|     |       |сектора|"
"\n|----|----|-----|----|----|-----|----|-----|-------|-------|"
"\n");

		for(k=0; k<4; k++) {
			printf("|%3d |%4d|%4d |%4d|%4d|%4d |%4d|%5d|%7u|",
			mb.part_table[k].flag,
			mb.part_table[k].beg_head,
			mb.part_table[k].beg_sec_cyl & 0x3f,
			(mb.part_table[k].beg_sec_cyl >> 6) & 0x3ff,
			mb.part_table[k].end_head,
			mb.part_table[k].end_sec_cyl & 0x3f,
			(mb.part_table[k].end_sec_cyl >> 6) & 0x3ff,
			mb.part_table[k].sys,
			mb.part_table[k].size);
			printf("%7u|\n",
				mb.part_table[k].rel_sec);
		}
		printf("------------------------------------------------------------");
  }
}
