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

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

  BOOT _far *boot_rec;
  int i,j, k, status;
  char drive;

  printf("\n"
			"\nЧтение загрузочной записи логического диска"
			"\n  (C)Фролов А., 1991"
			"\n");


// Заказываем буфер для чтения BOOT-записи.
// Адрес буфера присваиваем FAR-указателю.

  boot_rec = _fmalloc(sizeof(*boot_rec));

// Запрашиваем диск, для которого необходимо
// выполнить чтение загрузочной записи.

  printf("\n"
			"\nВведите обозначение диска, для просмотра"
			"\nзагрузочной записи (A, B, ...):");

  drive = getche();

// Вычисляем номер дисковода

  drive = toupper(drive) - 'A';

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

  status = getboot((BOOT _far*)boot_rec, drive);

// Если произошла ошибка (например, неправильно указано
// обозначение диска), завершааем работу программы

  if(status) {
		printf("\nОшибка при чтении BOOT-сектора");
		exit(-1);
  }

  printf("\nСодержимое BOOT-сектора для диска %c",drive+'A');
  printf("\n"
			"\nOEM - название фирмы и версия DOS - ");

  for(i=0;i<8;i++) printf("%c",boot_rec->oem[i]);

  printf("\nНомер диска                       - %x"
			"\nПризнак расширенной BOOT-записи   - %c"
			"\nСерийный номер диска              - %04X-%04X"
			"\nМетка диска                       - ",
			(unsigned char)boot_rec->drive,
			boot_rec->signature,
			boot_rec->volser_hi,
			boot_rec->volser_lo);

  for(i=0;i<11;i++) printf("%c",boot_rec->label[i]);

  printf("\nФормат FAT                        - ");
  for(i=0;i<8;i++) printf("%c",boot_rec->fat_format[i]);

  printf("\n\nИнформация из BPB:\n");

  printf("\nКоличество байтов в секторе       - %d"
			"\nКоличество секторов в кластере    - %d"
			"\nЗарезервировано секторов          - %d"
			"\nКоличество копий FAT              - %d"
			"\nМакс. количество файлов в корневом каталоге - %d"
			"\nОбщее количество секторов на диске          - %d"
			"\nБайт-описатель среды              - %x"
			"\nКоличество секторов в FAT         - %d",
			boot_rec->bpb.sectsize,
			boot_rec->bpb.clustsize,
			boot_rec->bpb.ressecs,
			boot_rec->bpb.fatcnt,
			boot_rec->bpb.rootsize,
			boot_rec->bpb.totsecs,
			(unsigned char)boot_rec->bpb.media,
			boot_rec->bpb.fatsize);

  printf("\n\nИнформация из расширения BPB:\n");

  printf("\nСекторов на дорожке               - %d"
			"\nКоличество головок                - %d"
			"\nСкрытых секторов для диска < 32M  - %d"
			"\nСкрытых секторов для диска >= 32M - %d"
			"\nВсего секторов на диске           - %u",
			boot_rec->bpb.seccnt,
			boot_rec->bpb.headcnt,
			boot_rec->bpb.hiddensec_low,
			boot_rec->bpb.hiddensec_hi,
			boot_rec->bpb.totsecs);

// Освобождаем буфер

  _ffree(boot_rec);
}
