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


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


cb.first_sect = root_begin; cb.nsect = root_sectors; cb.buf = (void far*)root_buffer; _BX = FP_OFF(&cb); _DS = FP_SEG(&cb); _CX = 0xffff; _DX = 0; _AX = drive; asm int 25h asm pop ax

// Показываем содержимое корневого каталога printf("\n" "\nИмя файла Аттр. " "Дата Время Кластер Размер" "\n------------ ----- " "---------- -------- ------- ------");

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

// Признак конца каталога - нулевой байт в начале // имени файла if(rptr->name[0] == 0) break;

// Выводим содержимое дескриптора файла for(i=0; i<8; i++) printf("%c",rptr->name[i]); printf("."); for(i=0; i<3; i++) printf("%c",rptr->ext[i]); printf(" %02X %02d-%02d-%02d %02d:%02d:%02d ", rptr->attr, rptr->date.day, rptr->date.month, rptr->date.year + 1980, rptr->time.hour, rptr->time.min, rptr->time.sec * 2); printf(" %-6ld %lu", (long)rptr->cluster_nu, (long)rptr->size); }

// Получаем буфер для чтения кластеров каталога clust_buffer = (char far*) farmalloc(boot_rec->bpb.clustsize * boot_rec->bpb.sectsize);

if(clust_buffer == NULL) { printf("\nМало памяти"); farfree(root_buffer); free(boot_rec); farfree(fat_buffer); return -1; }

printf("\nНомер первого кластера каталога:"); gets(cbuf); cur_clust = atol(cbuf);

// Переменная k используется в качестве флага. // При первом просмотре каталога ее значение равно 0, // затем эта переменная устанавливается в 1. k = 0;

for(;;) { // Сохраняем номер кластера каталога unsigned long j = cur_clust;

// Вычисляем номер следующего кластера, распределенного // каталогу cur_clust = fat((char far*)fat_buffer, ffat, cur_clust); printf("%d ", cur_clust);

// Читаем кластер в буфер clust_buffer cb.first_sect = root_begin + root_sectors + ((j-2)*boot_rec->bpb.clustsize); cb.nsect = boot_rec->bpb.clustsize; cb.buf = (void far*)clust_buffer;

_BX = FP_OFF(&cb); _DS = FP_SEG(&cb); _CX = 0xffff; _DX = 0; _AX = drive; asm int 25h asm pop ax




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



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