MS-DOS для программиста


Программа FATSCAN - часть 2


// Запрашиваем диск, для которого необходимо // выполнить чтение загрузочной записи. printf("\nВведите обозначение диска (C, D, ...):"); drive = getche(); drive = toupper(drive) - 'A'; if(drive < 2) { printf("\nМожно указывать только НМД"); free(boot_rec); return(-1); }

// Читаем загрузочную запись в буфер status = getboot((BOOT _far*)boot_rec, drive); if(status) { printf("\nОшибка при чтении загрузочного сектора"); free(boot_rec); return(-1); }

// Определяем формат таблицы FAT total_sectors = boot_rec->bpb.totsecs;

// Если мы работаем с расширенным разделом диска, // общее количество секторов на диска берем из // расширенного PBP if(total_sectors == 0) total_sectors = boot_rec->bpb.drvsecs;

// Определяем формат FAT if(!strncmp(boot_rec->fat_format, "FAT16", 5)) { printf("\nFAT имеет 16-битовый формат"); ffat = 16; } else { printf("\nFAT имеет 12-битовый формат"); ffat = 12; }

// Определяем количество секторов, занимаемых FAT fat_sectors = boot_rec->bpb.fatsize;

// Заказываем буфер для FAT fat_buffer = (unsigned int*) farmalloc((long)fat_sectors * boot_rec->bpb.sectsize); if(fat_buffer == NULL) { printf("\nМало памяти"); free(boot_rec); return -1; }

// Вычисляем номер первого сектора FAT j = boot_rec->bpb.ressecs;

// Читаем FAT в буфер fat_buffer // Заполняем регистровые структуры для вызова // прерывания DOS INT 25h cb.first_sect = j; cb.nsect = fat_sectors; cb.buf = (void far*)fat_buffer;

_BX = FP_OFF(&cb); _DS = FP_SEG(&cb); _CX = 0xffff; _DX = 0; _AX = drive; asm int 25h 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 = (FITEM far *) farmalloc(root_sectors * boot_rec->bpb.sectsize); if(root_buffer == NULL) { printf("\nМало памяти"); free(boot_rec); farfree(fat_buffer); return -1; }




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



Книжный магазин