Системное программное обеспечение персональных ЭВМ


Пример 5 - часть 2


диска больше 32 Мбайт? (y/n) >"); sys=getche(); switch(sys) { case 'y' : sys=1; break; case 'n' : sys=0; break; default: goto ASK2; } } else sys=0; /* Чтение при помощи прерывания DOS 25 */ rr.h.al=drive-'a'; /* Диск */ if (!sys) { /* диск < 32 Мбайт */ rr.x.cx=1; /* Секторов 1 */ rr.x.dx=0; /* Логический сектор 0 */ sr.ds=FP_SEG(buffer); /* Адрес буфера в ОП */ rr.x.bx=FP_OFF(buffer); } else { /* диск > 32 Мбайт */ parm.first_sect=0;/* Логический сектор 0 */ parm.count=1; /* Секторов 1 */ parm.ptr=buffer; /* Адрес буфера в ОП */ sr.ds=FP_SEG(&parm); /* Адрес области параметров */ rr.x.bx=FP_OFF(&parm); rr.x.cx=0xffff; } int86x(0x25,&rr,&rr,&sr); /* Проверка ошибок чтения */ if (rr.x.cflag) { printf("\nОшибка чтения: %x. ",rr.h.ah); printf("Нажмите любую клавишу...\n\7"); getch(); exit(); } rt=(struct RootRec *)buffer; /* Вывод результатов */ clrscr(); printf("Загрузочная запись дискеты/диска %c:\n",drive-32); printf("==================================\n\n"); printf("Команда JMP -------------------> "); for(i=0;i<3;printf("%02x",rt->jmp[i++]));printf("H\n"); printf("Тип носителя ------------------> %02xH\n", rt->Media); printf("Система -----------------------> "); for(i=0;i<8;printf("%c",rt->ident[i++]));printf("\n"); if (rt->DOS4_flag==41) printf("==== Расширенный блок параметров BIOS ====\n"); else printf("========== Блок параметров BIOS ==========\n"); printf("Байт в секторе ----------------> %u\n", rt->SectSize); printf("Секторов в кластере -----------> %u\n", rt->ClustSize); printf("Секторов на дорожке -----------> %u\n", rt->TrkSecs); printf("Число головок -----------------> %u\n", rt->HeadCnt); printf("Резервных секторов ------------> %u\n", rt->ResSect); printf("Скрытых секторов --------------> "); if (!sys && rt->DOS4_flag==41) printf("%u\n", rt->HidnSecL); else printf("%lu\n",(dword)rt->HidnSecL); printf("Всего секторов ----------------> "); if (rt->TotSecs>0) printf("%u\n",rt->TotSecs); else printf("%lu\n",rt->LongTotSecs); printf("Копий FAT ---------------------> %u\n", rt->FatCnt); printf("Секторов в одной FAT ----------> %u\n", rt->FatSize); if (rt->DOS4_flag==41) { printf("Формат FAT --------------------> "); for(i=0;i<8;printf("%c",rt->FatForm[i++])); printf("\n"); } printf("Элементов в корневом каталоге -> %u\n", rt->RootSize); if (rt->DOS4_flag==41) { printf("\nНомер дисковода ---------------> %xH\n", rt->Drive); printf("Серийный номер диска ----------> %08xH\n", rt->VolNum); printf("Метка тома --------------------> "); for(i=0; i<11; printf("%c",rt->VolLabel[i++])); printf("\n"); } printf("\nНажмите любую клавишу...\n"); getch(); }




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