void RefreshScreen(void) { if (CV.psp_skip_cur_frame <= 0) { CV.psp_skip_cur_frame = CV.psp_skip_max_frame; if (CV.cv_render_mode == CV_RENDER_NORMAL) PutImage_normal(); else PutImage_fit(); if (psp_kbd_is_danzeff_mode()) { danzeff_moveTo(-30, -65); danzeff_render(); } if (CV.cv_view_fps) { char buffer[32]; sprintf(buffer, "%03d %3d", CV.cv_current_clock, (int)CV.cv_current_fps ); psp_sdl_fill_print(0, 0, buffer, 0xffffff, 0 ); } if (CV.cv_vsync) { psp_cv_wait_vsync(); } psp_sdl_flip(); if (psp_screenshot_mode) { psp_screenshot_mode--; if (psp_screenshot_mode <= 0) { psp_sdl_save_screenshot(); psp_screenshot_mode = 0; } } } else if (CV.psp_skip_max_frame) { CV.psp_skip_cur_frame--; } cv_synchronize(); }
void psp_keyboard_menu(void) { gp2xCtrlData c; long new_pad; long old_pad; int last_time; int end_menu; int kbd_id; int hugo_key; int danzeff_mode; int danzeff_key; psp_kbd_wait_no_button(); old_pad = 0; last_time = 0; end_menu = 0; kbd_id = 0; danzeff_key = 0; danzeff_mode = 0; memcpy(loc_kbd_mapping , psp_kbd_mapping , sizeof(psp_kbd_mapping)); memcpy(loc_kbd_mapping_L, psp_kbd_mapping_L, sizeof(psp_kbd_mapping_L)); memcpy(loc_kbd_mapping_R, psp_kbd_mapping_R, sizeof(psp_kbd_mapping_R)); while (! end_menu) { psp_display_screen_kbd_menu(); if (danzeff_mode) { danzeff_moveTo(-10, -50); danzeff_render( HUGO.danzeff_trans ); } psp_sdl_flip(); while (1) { gp2xCtrlPeekBufferPositive(&c, 1); c.Buttons &= PSP_ALL_BUTTON_MASK; new_pad = c.Buttons; if ((old_pad != new_pad) || ((c.TimeStamp - last_time) > PSP_MENU_MIN_TIME)) { last_time = c.TimeStamp; old_pad = new_pad; break; } } if (danzeff_mode) { danzeff_key = danzeff_readInput( &c); if (danzeff_key > DANZEFF_START) { hugo_key = hugo_get_key_from_ascii(danzeff_key); if (hugo_key != -1) { if ((cur_menu_id >= MENU_KBD_UP ) && (cur_menu_id <= MENU_KBD_JOY_RIGHT)) { kbd_id = psp_kbd_menu_id_to_key_id(cur_menu_id); if (menu_kbd_selected == -1) loc_kbd_mapping[kbd_id] = hugo_key; else if (menu_kbd_selected == KBD_LTRIGGER_MAPPING) loc_kbd_mapping_L[kbd_id] = hugo_key; else if (menu_kbd_selected == KBD_RTRIGGER_MAPPING) loc_kbd_mapping_R[kbd_id] = hugo_key; } } } else if ((danzeff_key == DANZEFF_START ) || (danzeff_key == DANZEFF_SELECT)) { danzeff_mode = 0; old_pad = new_pad = 0; psp_kbd_wait_no_button(); } if (danzeff_key >= -1) { continue; } } if (new_pad & GP2X_CTRL_LTRIGGER) { psp_keyboard_select_change(-1); psp_kbd_wait_no_button(); } else if (new_pad & GP2X_CTRL_RTRIGGER) { psp_keyboard_select_change(+1); psp_kbd_wait_no_button(); } else if ((new_pad == GP2X_CTRL_LEFT ) || (new_pad == GP2X_CTRL_RIGHT) || (new_pad == GP2X_CTRL_CROSS) || (new_pad == GP2X_CTRL_CIRCLE)) { int step = 0; if (new_pad & GP2X_CTRL_RIGHT) { step = 1; } else if (new_pad & GP2X_CTRL_LEFT) { step = -1; } if ((cur_menu_id >= MENU_KBD_UP ) && (cur_menu_id <= MENU_KBD_JOY_RIGHT)) { kbd_id = psp_kbd_menu_id_to_key_id(cur_menu_id); psp_keyboard_menu_mapping(kbd_id, step); } else { switch (cur_menu_id ) { case MENU_KBD_SKIN : psp_keyboard_menu_skin(step); break; case MENU_KBD_KBD_SELECT : psp_keyboard_select_change(step); break; case MENU_KBD_LOAD : psp_keyboard_menu_load(); old_pad = new_pad = 0; menu_kbd_selected = -1; break; case MENU_KBD_SAVE : psp_keyboard_menu_save(); break; case MENU_KBD_HOTKEYS : psp_keyboard_menu_hotkeys(); break; case MENU_KBD_RESET : psp_keyboard_menu_reset_kbd(); break; case MENU_KBD_BACK : end_menu = 1; break; } } } else if(new_pad & GP2X_CTRL_UP) { if (cur_menu_id > 0) cur_menu_id--; else cur_menu_id = MAX_MENU_KBD_ITEM-1; } else if(new_pad & GP2X_CTRL_DOWN) { if (cur_menu_id < (MAX_MENU_KBD_ITEM-1)) cur_menu_id++; else cur_menu_id = 0; } else if(new_pad & GP2X_CTRL_SQUARE) { /* Cancel */ end_menu = -1; } else if(new_pad & GP2X_CTRL_SELECT) { /* Back to Main Menu */ end_menu = 1; } else if(new_pad & GP2X_CTRL_START) { if ((cur_menu_id < MENU_KBD_UP ) || (cur_menu_id > MENU_KBD_JOY_RIGHT)) { cur_menu_id = MENU_KBD_UP; } danzeff_mode = 1; } } if (end_menu > 0) { /* Validate */ psp_keyboard_menu_update_lr(); memcpy(psp_kbd_mapping , loc_kbd_mapping , sizeof(psp_kbd_mapping)); memcpy(psp_kbd_mapping_L, loc_kbd_mapping_L, sizeof(psp_kbd_mapping_L)); memcpy(psp_kbd_mapping_R, loc_kbd_mapping_R, sizeof(psp_kbd_mapping_R)); } psp_kbd_wait_no_button(); }
/* input text */ void input(SDL_Surface *dst, int x, int y, char *text, int max) { SDL_Event event; int action, active = 0, flip = 0; int up = 0, down = 0; #ifdef _PSP_FW_VERSION /* danzeff */ if (config.danzeff) { strcpy(text, ""); danzeff_load(); danzeff_set_screen(dst); danzeff_moveTo(165, 110); for (;;) { SceCtrlData ctrl = getCtrlFromJoystick(joystick); int c = danzeff_readInput(ctrl); switch (c) { case 0: break; case '\10': case DANZEFF_LEFT: if (active > 0) { active--; text[active] = '\0'; } break; case DANZEFF_RIGHT: if (active < max) { text[active] = ' '; active++; text[active] = '\0'; } break; case DANZEFF_SELECT: case DANZEFF_START: return; default: if (active < max) { text[active] = c; active++; text[active] = '\0'; } break; } danzeff_render(); input_update(dst, x, y, text, active, flip); flip++; SDL_Delay(50); /* flush events */ while (SDL_PollEvent(&event)); } } else #endif /* arcade */ { strcpy(text, " "); for (;;) { while (SDL_PollEvent(&event)) { switch (event.type) { case SDL_QUIT: quit(); break; case SDL_KEYDOWN: case SDL_JOYBUTTONDOWN: if (event.type == SDL_KEYDOWN) action = event.key.keysym.sym; else action = event.jbutton.button; switch (action) { case SDLK_ESCAPE: case SDLK_SPACE: case PSP_BUTTON_START: return; case SDLK_LEFT: case PSP_BUTTON_LEFT: case PSP_BUTTON_L: case PSP_BUTTON_A: if (active > 0) { text[active] = '\0'; active--; } break; case SDLK_RIGHT: case PSP_BUTTON_RIGHT: case PSP_BUTTON_R: case PSP_BUTTON_B: case PSP_BUTTON_Y: case PSP_BUTTON_X: if (active < max) { active++; text[active] = ' '; text[active+1] = '\0'; } break; case SDLK_UP: case PSP_BUTTON_UP: up = 1; break; case SDLK_DOWN: case PSP_BUTTON_DOWN: down = 1; break; default: break; } break; case SDL_KEYUP: case SDL_JOYBUTTONUP: if (event.type == SDL_KEYUP) action = event.key.keysym.sym; else action = event.jbutton.button; switch (action) { case SDLK_UP: case PSP_BUTTON_UP: up = 0; break; case SDLK_DOWN: case PSP_BUTTON_DOWN: down = 0; break; } break; } } if (up == 1 || up > 10) { if ((text[active] >= 'A' && text[active] < 'Z') || (text[active] >= '0' && text[active] < '9')) text[active]++; else if (text[active] == 'Z') text[active] = '0'; else if (text[active] == '9') text[active] = ' '; else if (text[active] == ' ') text[active] = 'A'; } if (up) up++; if (down == 1 || down > 10) { if ((text[active] > 'A' && text[active] <= 'Z') || (text[active] > '0' && text[active] <= '9')) text[active]--; else if (text[active] == 'A') text[active] = ' '; else if (text[active] == ' ') text[active] = '9'; else if (text[active] == '0') text[active] = 'Z'; } if (down) down++; input_update(dst, x, y, text, active, flip); flip++; SDL_Delay(50); } } }
int psp_file_request(char *out, char *pszStartPath) { static int sel=0; gp2xCtrlData c; int last_time; int tmp; long color; int top, rows=20, x, y, i, up=0; char path[PSP_FMGR_MAX_PATH]; char oldDir[PSP_FMGR_MAX_NAME]; char buffer[PSP_FMGR_MAX_NAME]; char *p; long new_pad; long old_pad; int file_selected; int check_last; int danzeff_mode; int danzeff_key; danzeff_key = 0; danzeff_mode = 0; memset(files, 0x00, sizeof(struct dirent) * PSP_FMGR_MAX_ENTRY); memset(sortfiles, 0x00, sizeof(struct dirent *) * PSP_FMGR_MAX_ENTRY); nfiles = 0; strcpy(path, pszStartPath); getDir(path); last_time = 0; old_pad = 0; top = 0; file_selected = 0; if (sel >= nfiles) sel = 0; check_last = 0; for(;;) { x = 0; y = 15; psp_display_screen_fmgr(); for(i=0; i<rows; i++){ if(top+i >= nfiles) break; if(top+i == sel) color = PSP_MENU_SEL_COLOR; else color = PSP_MENU_TEXT_COLOR; strncpy(buffer, sortfiles[top+i]->d_name, 28); string_fill_with_space(buffer, 28); psp_sdl_back2_print(x, y, buffer, color); y += 10; } if (danzeff_mode) { danzeff_moveTo(0, -90); danzeff_render(); } psp_sdl_flip(); while (1) { gp2xCtrlPeekBufferPositive(&c, 1); c.Buttons &= PSP_ALL_BUTTON_MASK; new_pad = c.Buttons; if ((old_pad != new_pad) || ((c.TimeStamp - last_time) > GP2X_FMGR_MIN_TIME)) { last_time = c.TimeStamp; old_pad = new_pad; break; } } if (danzeff_mode) { danzeff_key = danzeff_readInput(c); if (danzeff_key > DANZEFF_START) { if (danzeff_key > ' ') { int new_sel = psp_file_find_first(danzeff_key, check_last); check_last = 1; if (new_sel >= 0) { sel = new_sel; goto lab_end; } } } else if ((danzeff_key == DANZEFF_START ) || (danzeff_key == DANZEFF_SELECT)) { danzeff_mode = 0; old_pad = new_pad = 0; psp_kbd_wait_no_button(); } if (danzeff_key == ' ') { new_pad |= GP2X_CTRL_CROSS; } else if (danzeff_key >= -1) { continue; } } if (new_pad & GP2X_CTRL_START) { danzeff_mode = 1; } else if ((new_pad & GP2X_CTRL_CROSS) || (new_pad & GP2X_CTRL_CIRCLE)) { if (sortfiles[sel]->d_type == DT_DIR) { check_last = 0; if(!strcmp(sortfiles[sel]->d_name,"..")){ up=1; } else { strcat(path,sortfiles[sel]->d_name); getDir(path); sel=0; } }else{ strcpy(out, path); strcat(out, sortfiles[sel]->d_name); strcpy(pszStartPath,path); file_selected = 1; break; } } else if(new_pad & GP2X_CTRL_TRIANGLE){ check_last = 0; up=1; } else if((new_pad & GP2X_CTRL_SQUARE) || (new_pad & GP2X_CTRL_SELECT)) { /* Cancel */ file_selected = 0; break; } else if(new_pad & GP2X_CTRL_UP){ sel--; check_last = 0; } else if(new_pad & GP2X_CTRL_DOWN){ sel++; check_last = 0; } else if(new_pad == GP2X_CTRL_LEFT){ sel-=10; check_last = 0; } else if(new_pad == GP2X_CTRL_RIGHT){ sel+=10; check_last = 0; } else if(new_pad & GP2X_CTRL_RTRIGGER){ if (sortfiles[sel]->d_type != DT_DIR) { strcpy(out, path); strcat(out, sortfiles[sel]->d_name); strcpy(pszStartPath,path); if (psp_fmgr_ask_confirm()) { for (tmp = sel; tmp < (nfiles - 1); tmp++) { sortfiles[tmp] = sortfiles[tmp + 1]; } nfiles--; remove(out); } check_last = 0; } } if(up) { check_last = 0; if(strcmp(path,"./")){ p=strrchr(path,'/'); *p=0; p=strrchr(path,'/'); p++; strcpy(oldDir,p); strcat(oldDir,"/"); *p=0; getDir(path); sel=0; for(i=0; i<nfiles; i++) { if(!strcmp(oldDir, sortfiles[i]->d_name)) { sel=i; top=sel-3; break; } } } up=0; } lab_end: if(top > nfiles-rows) top=nfiles-rows; if(top < 0) top=0; if(sel >= nfiles) sel=nfiles-1; if(sel < 0) sel=0; if(sel >= top+rows) top=sel-rows+1; if(sel < top) top=sel; } return file_selected; }