В программе описаны структуры такого вида:
Физический дисковый адрес:
struct DADDR {
byte h; /* головка */
word s, /* сектор */
t, /* дорожка */
ts; /* сектор, дорожка упакованные */
};
Структура элемента раздела;
struct PART {
byte Boot, /* признак активного */
/* физический адрес начала раздела */
Begin_Hd; /* # головки */
word Begin_SecTrk; /* # сектора и дорожки */
byte SysCode, /* код системы */
/* физический адрес конца раздела */
End_Hd; /* # головки */
word End_SecTrk; /* # сектора и дорожки */
dword RelSec, /* # сектора початку */
Size; /* количество секторов */
};
Стpуктуpа Главной Загрузочной Записи:
struct MBR
{
char LoadCode[0x1be]; /* программа загрузки */
struct PART rt[4]; /* 4 элемента разделов */
word EndFlag; /* подпись MBR */
};
Структура загрузочной записи логического диска:
struct BootRec {
byte jmp[3], ident[8];
word SectSize;
byte ClustSize;
word ResSect;
byte FatCnt;
word RootSize, TotSecs;
byte Media;
word FatSize, TrkSecs, HeadCnt;
word HidnSecL, HidnSecH;
dword LongTotSecs;
byte Drive, reserved1, DOS4_flag;
dword VolNum; char VolLabel[11], FatForm[8];
};
Структура элемента каталога:
struct Dir_Item {
char fname[11]; /* имя файла */
byte attr; /* атрибут */
byte reserved[10];
word time; /* время */
word date; /* дата */
word cl; /* номер 1-го кластера */
dword size; /* размер файла */
};
Переменные, глобальные для всей программы:
u part — текущий элемент раздела;
u buff1[512] — буфер MBR и boot;
u *mbr — указатель на таблицу разделов;
u *boot — указатель на корневую запись;
u buff2[512] — буфер каталога и текста;
u *dir — указатель на часть каталога;
u *text — указатель на текстовый буфер;
u *fat — указатель на FAT;
u job[81] — строка-задание;
u jobptr — текущий указатель в job;
u cname[12] — текущее имя для поиска;
u Fdisk — физический номер диска;
u caddr — текущий дисковый адрес;
u sect — текущий номер сектора;
u clust — текущий номер кластера;
u fat16 — признак формата FAT;
u fsize — размер файла;
u dirnum — номер элемента в каталоге;
u FirstSect — абсолютный номер сектора начала;
u rootdir=1 — признак корневого каталога или подкаталога (1/0);
u lastsect — последний сектор при чтении;
u fatalloc=0 — признак выделения памяти.