#include "fsctl/menu.h" #include "fsctl/fugue.h" #include "fsctl/utils/fs_table.h" #include "fsctl/utils/display.h" //--- // Internal //--- /* internal information */ static int test_selected; static int __find_ls; static int __find_lb; static int __find_fs; static int __find_fb; /* test_search() : search Fugue entry using sector */ static void __test_search( int *info, uintptr_t start, uintptr_t end, size_t block ) { uintptr_t saved_start; fugue_fs_t fs; int counter; dclear(C_WHITE); _printXY(0, 0, "search from %p...", start); dupdate(); counter = 0; saved_start = start; while (start < end) { if (fugue_fs_mount(&fs, (void *)start) == 0) { dclear(C_WHITE); _printXY(0, 0, "search from %p...", saved_start); _printXY(0, 1, "- found = %d", counter); dupdate(); *info += 1; } start += block; } dclear(C_WHITE); } /* test_search_sector() : search Fugue entry using sector */ static void test_search_sector(int *info, uintptr_t start, uintptr_t end) { __test_search(info, start, end, 512); } /* test_search_byte() : search Fugue entry using byte */ static void test_search_byte(int *info, uintptr_t start, uintptr_t end) { __test_search(info, start, end, 1); } //--- // Public //--- /* test_menu_init() : init menu */ void test_menu_init(void) { test_selected = -1; __find_ls = 0; __find_lb = 0; __find_fs = 0; __find_fb = 0; } /* test_menu_display() : display menu */ void test_menu_display(void) { int y; y = 0; switch(test_selected) { case 1: test_search_sector(&__find_ls, 0xa1000000, 0xa2000000); break; case 2: test_search_byte(&__find_ls, 0xa1000000, 0xa2000000); break; case 3: test_search_sector(&__find_ls, 0xa0000000, 0xa1000000); break; case 4: test_search_byte(&__find_ls, 0xa0000000, 0xa1000000); break; } test_selected = -1; _printXY(0, ++y, "[1] last 16Mo entry search (sector)"); _printXY(0, ++y, "[2] last 16Mo entry search (byte)"); _printXY(0, ++y, "[3] first 16Mo entry search (sector)"); _printXY(0, ++y, "[4] first 16Mo entry search (byte)"); _printXY(0, ++y, ""); _printXY(0, ++y, ""); _printXY(0, ++y, "last 16Mo sector found = %d", __find_ls); _printXY(0, ++y, "last 16Mo byte found = %d", __find_lb); _printXY(0, ++y, "first 16Mo sector found = %d", __find_fs); _printXY(0, ++y, "first 16Mo byte found = %d", __find_fb); } /* test_menu_keyboard() : handle keyboard */ void test_menu_keyboard(int key) { switch (key) { case KEY_1: test_selected = 1; break; case KEY_2: test_selected = 2; break; case KEY_3: test_selected = 3; break; case KEY_4: test_selected = 4; break; } }