int main_thread(SceSize size, void *argp) { int thid; u32 psp_model; thid = get_thread_id("SCE_VSH_GRAPHICS"); if(thid < 0) { no_vsh = 1; } sctrlSEGetConfig(&g_config); vpl_init(); suspend_vsh_thread(); proDebugScreenInit(); psp_model = kuKernelGetModel(); fontlist_init(&g_font_list); get_fontlist(&g_font_list, fontpath); get_fontlist(&g_font_list, fontgopath); load_recovery_font_select(); if(g_cur_font_select[0] != '\0') { proDebugScreenSetFontFile(g_cur_font_select, 1); } if(zenkaku!=0){ fontlist_init(&g_font_list); get_fontlist(&g_font_list, kanji); get_fontlist(&g_font_list, kanjigo); } proDebugScreenClearLineDisable(); get_confirm_button(); main_menu(); recovery_exit(); return 0; }
// exit menu when returns 1 static int menu_ctrl(struct Menu *menu) { u32 key; char buf[80]; int NEW_MAX_MENU_NUMBER_PER_PAGE = ((g_messages == g_messages_chs) || (g_messages == g_messages_cht)) ? (MAX_MENU_NUMBER_PER_PAGE-10) : (MAX_MENU_NUMBER_PER_PAGE);///+ key = ctrl_read(); if(key & PSP_CTRL_UP) { get_sel_index(menu, -1); } else if(key & PSP_CTRL_DOWN) { get_sel_index(menu, +1); } else if(key & PSP_CTRL_RIGHT) { menu_change_value(menu, 1); } else if(key & PSP_CTRL_LEFT) { menu_change_value(menu, -1); } else if(key & PSP_CTRL_LTRIGGER) { if(menu->cur_sel > NEW_MAX_MENU_NUMBER_PER_PAGE) {///|if(menu->cur_sel > MAX_MENU_NUMBER_PER_PAGE) { menu->cur_sel -= NEW_MAX_MENU_NUMBER_PER_PAGE;///|menu->cur_sel -= MAX_MENU_NUMBER_PER_PAGE; } else { menu->cur_sel = 0; } } else if(key & PSP_CTRL_RTRIGGER) { if(menu->cur_sel + NEW_MAX_MENU_NUMBER_PER_PAGE < menu->submenu_size) {///|if(menu->cur_sel + MAX_MENU_NUMBER_PER_PAGE < menu->submenu_size) { menu->cur_sel += NEW_MAX_MENU_NUMBER_PER_PAGE;///|menu->cur_sel += MAX_MENU_NUMBER_PER_PAGE; } else { menu->cur_sel = menu->submenu_size; } } else if(key & g_ctrl_OK) { struct MenuEntry *entry; int (*enter_callback)(struct MenuEntry *); if(menu->cur_sel == 0) { goto exit; } entry = &menu->submenu[menu->cur_sel-1]; enter_callback = entry->enter_callback; if(entry->type == TYPE_SUBMENU) { sprintf(buf, "> %s...", g_messages[ENTERING]); set_bottom_info(buf, 0xFF); frame_end(); sceKernelDelayThread(ENTER_DELAY); set_bottom_info("", 0); } if(enter_callback != NULL) { (*enter_callback)(entry); } } else if(key & g_ctrl_CANCEL) { exit: sprintf(buf, "> %s...", g_messages[EXITING]); set_bottom_info(buf, 0xFF); frame_end(); sceKernelDelayThread(EXIT_DELAY); set_bottom_info("", 0); return 1; } else if(key & PSP_CTRL_SELECT) { recovery_exit(); return 1; } return 0; }