lastsect=boot->ClustSize+sect;
}
/* посекторне читання усього корньового каталога
або одного кластера пiдкаталога */
for (; sect<lastsect; sect++) {
Sect_to_Daddr(sect);
Read_13(dir);
/* пошук iменi у прочитаному секторi */
if ((dirnum=Find_Name())>=0) goto FIND;
}
/* до останнього кластера пiдкаталога */
}
while (clust = Next_Clust(clust));
/* увесь каталог просмотрено, а iм`я не знайдено - помилка */
printf("%s -",cname);
if (jobptr==NULL) End_of_Job(4);
else End_of_Job(5);
FIND: /* iм`я знайдено */
rootdir=0;
}
while (jobptr!=NULL);
/* знайдено iм`я файла */
/* iз змiсту отримуємо 1-й кластер */
clust=dir[dirnum].cl;
textattr(7);
gotoxy(10,4);
cprintf("Натискуйте будь-яку клавiшу ");
cprintf(" доки не з`явиться <КIНЕЦЬ ФАЙЛА>.");
textattr(12);
gotoxy(1,5);
cprintf("╒<ПОЧАТОК ФАЙЛА>");
gotoxy(1,6);
cprintf("└─>");
i=0;
int ecls = clust;
do {
i++;
if((i%10)==0) getch();
textattr(14+16);
cprintf("%4x",clust);
textattr(2);
cprintf("───>");
ecls = clust;
}while (clust = Next_Clust(clust));
//-----------------------------------------------------------
//-------------------------------------------------------------
char *buf; buf = new char[512];
for(int ind=0;ind < 10;ind++)
buf[ind]=0;
/*sect=Clust_to_Sect(ecls);
Sect_to_Daddr(sect);
Read_13(buf);
printf ("%s",buf);
getch();
*/
sect=Clust_to_Sect(ssss);
Sect_to_Daddr(sect);
Read_13(buf);
int aa= ((*(char *)(buf+1)))&0x0fff;
printf ("%x\n",aa);
delete[] buf;
textattr(12);
cprintf("<КIНЕЦЬ ФАЙЛА>\n");
gotoxy(1,wherey());
textattr(15+3*16);
cprintf("Кiлькiсть кластерiв, якi займає файл: %u ",i);
End_of_Job(7);
return 0;
}
/*-------------------------------------------------------------*/
/* Читання MBR та пошук потрiбного роздiлу */
void Read_Mbr(void) {
int i;
char ndrive;
word *EndList;
caddr.h=0;
caddr.ts=1;
ndrive='C';
mbr=(struct MBR *)buff1;
NEXT: Read_13(buff1);
for (EndList=(word *)&mbr->rt[(i=0)];
(*EndList!=0xaa55)&&(mbr->rt[i].Size>0L);
EndList=(word *)&mbr->rt[++i]) {
if (mbr->rt[i].SysCode==5) {
caddr.h=mbr->rt[i].Begin_Hd;
caddr.ts=mbr->rt[i].Begin_SecTrk;
goto NEXT;
}
if (ndrive==job[0]) {
movmem(&mbr->rt[i],&part,sizeof(struct PART));
return;
}
else ndrive++;
}
/* потрiбуний роздiл не знайдено */
printf("%c: -",job[0]);
End_of_Job(1);
}
/*-------------------------------------------------------------*/
/* Читання boot-сектора */
void Read_Boot(void) {
if (Fdisk<0x80) {
caddr.h=0;
caddr.ts=1;
}
else {
caddr.h=part.Begin_Hd;
caddr.ts=part.Begin_SecTrk;
}
Read_13(buff1);
boot=(struct BootRec *)buff1;
Get_First();
}
/*-------------------------------------------------------------*/
/* Читання FAT */
void Read_Fat(void) {
dword s, ls;
byte *f;
fat=(byte *)malloc(boot->FatSize*boot->SectSize);
if (fat==NULL) {
printf("Розмiщення FAT -");
End_of_Job(3);
}
fatalloc=1;
s=boot->ResSect;
ls=s+boot->FatSize;
for (f=fat; s<ls; s++) {
Sect_to_Daddr(s);
Read_13(f);
f+=boot->SectSize;
}
/* встановлення формату FAT */
if (Fdisk>=0x80)
if (part.SysCode==1) fat16=0;
else fat16=1;
else fat16=0;
}
/*-------------------------------------------------------------*/
/* Читання сектора за допомогою преривання 13 */
void Read_13(void *mem) {
/* mem - адреса у ОП */
union REGS rr;
struct SREGS sr;
rr.h.ah=2;
rr.h.al=1;
rr.h.dl=Fdisk;
rr.h.dh=caddr.h;
rr.x.cx=caddr.ts;
sr.es=FP_SEG(mem);
rr.x.bx=FP_OFF(mem);
int86x(0x13,&rr,&rr,&sr);
/* Перевiрка помилок читання */
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.