jobptr - поточний покажчик у job;
cname[12] - поточне iм`я для пошуку;
sect - поточний номер сектора;
cl - поточний номер кластера;
fat16 - ознака формату FAT;
fsize - розмiр файла;
dirnum - номер елемента у змiстi;
FirstSect - абсолютний номер сектора початку;
rootdir=1 - ознака корiнного каталога або пiдкаталога (1/0);
fatalloc=0 - ознака видiлення пам`ятi.
sys=0 -ознака,що логiчний диск < 32 Mбайт.
Опис алгоритму програми:
Функції:
main - запитує iм`я файла, потiм оброблює його i, якщо все нормально, то запускає допомiжнi функцi∙ необхiднi для перегляду FAT заданого файла.
Read_Mbr - виконує вибiрку елемента таблицi роздiлiв для заданого диску.
Read_Boot - зчитує boot-сектор логiчного диска, причому для логiчного диску адреса цього сектора назначається - 0, 0, 1.
Read_Fat - зчитує у пам`ять FAT цiлком, адреса початку FAT на диску та її розмiр визначаються з ранiш прочитаного Boot-сектора.
Read_13 - читає один сектор за допомогою преривання BIOS.
Read_25 - читає size секторiв за допомогою преривання 25 починаючи з sect сектора у область пам`ятi mem .
Clust_to_Sect - перетворює номер кластера у номер сектора.
Next_Clust - визначає номер наступного кластера, аналiзуючи FAT. Для останнього кластера (i для корiнного каталога) ця функцiя повертає нульове значення.
Get_Name - призначена для лексичного розбору завдання, вона видiляє з завдання чергове слово та переназначає jobptr. Пусте (NULL) значення jobptr - свiдотство про вичерпання завдання.
Find_Name - здiйснює пошук iмени у каталозi. Тут cname - потрiбне iм`я, функцiя повертає iндекс знайденого елемента у масивi dir або (-1).
End_of_Job - здiйснює видачу на екран рiзних повiдомлень при помилках або при завершеннi програми.
Текст програми:
#include <dos.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <mem.h>
#include <conio.h>
#include <ctype.h>
#include <iostream.h>
/*-------------------------------------------------------------*/
/* Типи та структури даних */
#define byte unsigned char
#define word unsigned int
#define dword unsigned long
#define daddr struct DADDR
dword ssss;
struct DADDR { /* фiзична дискова адреса */
byte h;
word s, t, ts;
};
struct PART { /* структура елемента роздiлу */
byte Boot, Begin_Hd;
word Begin_SecTrk;
byte SysCode, End_Hd;
word End_SecTrk;
dword RelSec, Size;
};
struct MBR
{ /* стpуктуpа Головного Завантажуючого Запису */
char LoadCode[0x1be];
struct PART rt[4];
word EndFlag;
};
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
{ /* структура елемента змiсту */
char fname[11];
byte attr;
char reserved[10];
word time, date, cl;
dword size;
};
/*-------------------------------------------------------------*/
/* Описи функцiй */
void Read_Mbr(void); /* Читание MBR та пошук потрiб-
ного роздiлу */
void Read_Boot(void); /* Читання boot-сектора */
void Get_First(void); /* Визначення абсолютного номе-
ра сектора початку логiчного
диска */
void Read_Fat(void); /* Читання FAT */
void Read_13(void *mem); /* Читання сектора за допомогою
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.