преривання 13 */
void Sect_to_Daddr(dword sect); /* Формування фiзичноє дисковоє
адреси з # сектора */
dword Clust_to_Sect(word clust); /* Пiдрахування номера сектора
з номера кластера */
word Next_Clust(word clust); /* Вибiрка наступного кластера
за FAT */
char *Get_Name(char *s, char *d); /* Видiлення наступного елемен-
та з рядка-завдання */
int Find_Name(); /* Пошук iменi у каталозi */
void End_of_Job(int n); /* Завершення (при n=0-5 -
аварiйне) */
/*-------------------------------------------------------------*/
/* Змiннi */
struct PART part; /* поточний елемент роздiлу */
byte buff1[512]; /* буфер MBR та boot */
struct MBR *mbr; /* покажчик на таблицю роздiлiв */
struct BootRec *boot; /* покажчик на корньовий запис */
byte buff2[512]; /* буфер каталога та текста */
struct Dir_Item *dir; /* покажчик на частину каталога */
char *text; /* покажчик на текстовий буфер */
byte *fat; /* покажчик на FAT */
char job[81]; /* рядок-завдання */
char *jobptr; /* поточний покажчик у job */
char cname[12]; /* поточне iм`я для пошуку */
byte Fdisk; /* фiзичний номер диска */
daddr caddr; /* поточна дискова адреса */
dword sect; /* поточний номер сектора */
word clust; /* поточний номер кластера */
byte fat16; /* ознака формату FAT */
dword fsize; /* розмiр файла */
int dirnum; /* номер елемента у змiстi */
dword FirstSect; /* абс.сектор початку */
byte rootdir=1; /* ознака корньового каталога
або пiдкаталога (1/0) */
word lastsect; /* останнiй сектор при читаннi */
byte fatalloc=0; /* ознака видiлення пам`яти */
/*------------------------------------------------------------*/
int main() {
int n,i;
textattr(14);
clrscr();
/* ввод iменi файла */
cprintf(" Просмотр таблицi FAT. ");
cprintf("Вкажiть повне iм`я файла -->");
scanf("%s",job);
/* переклад у верхнiй регiстр */
strupr(job);
/* перевiрка вiрностi iдентифiкатора диска */
if ((!isalpha(job[0]))||(job[1]!=':')||(job[2]!='\\')) {
printf("%c%c%c -",job[0],job[1],job[2]);
End_of_Job(0);
}
textattr(10);
clrscr();
printf(" Лабораторная робота N10");
printf(" Дисковi структури даних DOS.");
textattr(14);
cprintf("Файл %s у FAT зймає такi кластери :\n",job);
jobptr=job+3;
if (job[0]>'A') {
/* для жорсткого диска - фiзичний номер та читання MBR */
Fdisk=0x80;
Read_Mbr();
}
else /* для гнучкого диска - фiзичний номер */
Fdisk=job[0]-'A';
Read_Boot(); /* читання boot-сектора */
printf("\n%s\n",boot->FatForm);
Read_Fat(); /* читання FAT */
dir=(struct Dir_Item *)buff2;
do { /* рух по каталогам */
if (!rootdir) clust=dir[dirnum].cl; /* початковий кластер */
/* видiлення наступного елемента з рядка-завдання */
jobptr=Get_Name(jobptr,cname);
do { /* доки не дойдемо до останнього кластера */
if (rootdir) { /* корньовий каталог */
/* поч.сектор корньового кат. та кiлькiсть секторiв */
sect=boot->ResSect+boot->FatSize*boot->FatCnt;
lastsect=boot->RootSize*32/boot->SectSize+sect;
}
else { /* пiдкаталог */
sect=Clust_to_Sect(clust);
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.