/* * p1probe.c — интерактивный набор платформенных проб Sprinter Commander. * * Программа ничего не удаляет и не изменяет в текущем каталоге. EMM-тест * пишет исключительно в выделенный блок памяти, дочерняя программа также * не выполняет дисковых записей. */ #include #include #include #include "p1_platform.h" void p1_heading(const char *title) { clrscr_attr(0x17); gotoxy(0, 0); textattr(0x1F); cprintf("Sprinter Commander - P1 platform probe\r\n"); textattr(0x17); cprintf("%s\r\n\r\n", title); } void p1_pause(void) { textattr(0x1E); cputs("\r\nPress any key to return to menu..."); (void)getkey(); } static void show_menu(void) { p1_heading("Main menu"); cputs("1 Directory and F_FIRST/F_NEXT\r\n"); cputs("2 EMM allocation and page access\r\n"); cputs("3 WINREST full/partial screen\r\n"); cputs("4 Keyboard event codes\r\n"); cputs("5 EXEC child and return\r\n"); cputs("6 DSKINFO current disk\r\n"); cputs("A Automatic non-visual probes (1, 2, 6)\r\n"); cputs("0 Exit\r\n\r\n"); textattr(0x1E); cputs("Select: "); } static void report_result(int rc) { if (rc == 0) { textattr(0x2F); cputs("\r\nRESULT: PASS\r\n"); } else { textattr(0x4F); cputs("\r\nRESULT: FAIL\r\n"); } } static void run_automatic(void) { int failed = 0; p1_heading("Automatic non-visual probes"); cputs("[1/3] Directory\r\n"); if (p1_test_directory() != 0) failed++; cputs("\r\n[2/3] EMM\r\n"); if (p1_test_emm() != 0) failed++; cputs("\r\n[3/3] DSKINFO\r\n"); if (p1_test_disk_info() != 0) failed++; textattr(failed ? 0x4F : 0x2F); cprintf("\r\nAutomatic result: %u failed\r\n", (unsigned)failed); p1_pause(); } int main(void) { uint16_t key; uint8_t ch; int rc; if (settextmode(TEXT_MODE_80x32) != 0) { puts("Cannot set 80x32 text mode."); return 1; } for (;;) { show_menu(); key = getkey(); ch = (uint8_t)key; if (ch >= 'a' && ch <= 'z') ch = (uint8_t)(ch - 'a' + 'A'); if (ch == '0' || ch == 0x1B) break; if (ch == 'A') { run_automatic(); continue; } rc = -1; switch (ch) { case '1': rc = p1_test_directory(); break; case '2': rc = p1_test_emm(); break; case '3': rc = p1_test_screen(); break; case '4': rc = p1_test_keyboard(); break; case '5': rc = p1_test_exec(); break; case '6': rc = p1_test_disk_info(); break; default: continue; } report_result(rc); p1_pause(); } textattr(0x0F); clrscr(); return 0; }