Операционная система MS DOS (том 2)


Файлы и каталоги - часть 6


// Определяем формат таблицы FAT

total_sectors = boot_rec->bpb.totsecs;

// Если мы работаем с расширенным разделом диска, // общее количество секторов на диска берем из // расширенного PBP

if(total_sectors == 0) total_sectors = boot_rec->bpb.drvsecs;

// Формат FAT определяем исходя из общего // количества секторов на логическом диске

if(total_sectors > 20791) { printf("\nFAT имеет 16-битовый формат"); fat=16; } else { printf("\nFAT имеет 12-битовый формат"); fat=12; }

// Определяем количество секторов, занимаемых FAT

fat_sectors = boot_rec->bpb.fatsize;

// Заказываем буфер для FAT

fat_buffer = _fmalloc(fat_sectors * boot_rec->bpb.sectsize);

// Вычисляем номер первого сектора FAT

j = boot_rec->bpb.ressecs;

// Читаем FAT в буфер fat_buffer

// Заполняем регистровые структуры для вызова // прерывания DOS INT 25h

reg.x.ax = drive; reg.x.bx = FP_OFF(fat_buffer); segreg.ds = FP_SEG(fat_buffer); reg.x.cx = fat_sectors; reg.x.dx = j; int86x(0x25, &reg, &reg, &segreg);

// Извлекаем из стека оставшееся там после // вызова прерывания слово

_asm pop ax

// Вычисляем номер первого сектора корневого каталога

root_begin = j + fat_sectors * boot_rec->bpb.fatcnt;

// Вычисляем длину корневого каталога

root_sectors = (boot_rec->bpb.rootsize * 32) / boot_rec->bpb.sectsize;

// Заказываем буфер для корневого каталога

root_buffer = _fmalloc(root_sectors * boot_rec->bpb.sectsize);

// Читаем корневой каталог в буфер root_buffer

reg.x.ax = drive; reg.x.bx = FP_OFF(root_buffer); segreg.ds = FP_SEG(root_buffer); reg.x.cx = root_sectors; reg.x.dx = root_begin; int86x(0x25, &reg, &reg, &segreg); _asm pop ax

// Показываем содержимое корневого каталога

printf("\n" "\nИмя файла Аттр. Дата Время Кластер Размер" "\n------------ ----- ---------- -------- ------- ------");

for(rptr = root_buffer;;rptr++) { printf("\n");

// Признак конца каталога - нулевой байт в начале // имени файла




- Начало -  - Назад -  - Вперед -