Как узнать параметры корневого каталога(головка, цилиндр, сектор)
Всем привет, столкнулся с проблемой при чтении корневого каталога. У меня есть его адрес, BOOT-sector но нету понимания как вычислить параметры каталога(цилиндр, головку, сектор).
Код который мне дали для вычисления (цилиндра, головки, сектора). Но он не помог
int cyl = rootKatalog/(trk_sec*head_cnt);
int head = (rootKatalog%(trk_sec*head_cnt))/trk_sec;
int sec = (rootKatalog%(trk_sec*head_cnt))%trk_sec+1;
Главная цель программы прочитать информацию о файлах в этом каталоге и вывести на экран. Читаю этот каталог при помощи функции 2 и 13 прерывания. Работаю на win98 в BorlandC++.
Код самой программы
#include <dos.h>
#include <stdio.h>
#include <conio.h>
struct sec_cat{
unsigned char name[8];
unsigned char name_e[3];
unsigned char atr;
unsigned char rez[10];
unsigned short time;
unsigned short date;
unsigned short n_clast;
unsigned long size ;
}*sec;
unsigned char buf[512];
const unsigned int rootKatalog = 0xF002;
int read_sector(int cyl, int head, int sec) {
union REGS in, out;
struct SREGS sr;
sr.es = FP_SEG(buf);
in.x.bx = FP_OFF(buf);
in.h.ah = 0x02;
in.h.al = 1;
in.h.dl = 0x80;
in.h.dh = head;
in.h.cl = sec;
in.h.ch = cyl;
int86x(0x13, &in, &out, &sr);
if (out.x.cflag || out.h.ah)
return 1;
return 0;
}
void print_files_info(){
int i = 0;
int j = 0;
printf("Name: ");
for(;j < 16; j++)
printf("%c", sec->name[j]);
printf("\nType: ");
for(j = 0; j < 12; j++)
printf("%c", sec->name_e[j]);/*
printf("\nAtributs: %c", sec->atr);
printf("\nTime create: %d\.%d\.%d", (sec->time & 0x1F), ((sec->time >> 5) & 0x3F), ((sec->time >> 11) & 0x1F));
printf("\nDate create: %d\.%d\.%d", (sec->date & 0x1F), ((sec->date >> 5) & 0xF), ((sec->date >> 9) & 0x13F));
printf("\nClaster: %d", sec->n_clast);
printf("\nSize: %d\n\n\n", sec->size); */
}
int main() {
int i = 0;
int j = 0;
int trk_sec = 255;
int head_cnt = 63;
int cyl = rootKatalog/(trk_sec*head_cnt);
int head = (rootKatalog%(trk_sec*head_cnt))/trk_sec;
int sect = (rootKatalog%(trk_sec*head_cnt))%trk_sec+1;
clrscr();
if (read_sector(cyl,head,sect))
printf("Error reading sector\n");
else
printf("Sector read successfully\n");
//printf("Name file Type file Atributs Time create Date create Claster Size\n");
for(;i < 1; i++){
sec = (struct set_cat*)&buf[i * 32];
print_files_info();
}
getch();
return 0;
}