X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=gp2x%2Fmenu.c;h=432a41a748e4adccd8c0d641731bf7d583fa3dea;hb=dd5fd4778d797a1ef4767604b1c57c924ed0f64b;hp=df5ff8a436a11df01890e274874d787e2ea2d7bf;hpb=8e708f920ffd20b026aed616e58c8c8e94c8fb8d;p=libpicofe.git diff --git a/gp2x/menu.c b/gp2x/menu.c index df5ff8a..432a41a 100644 --- a/gp2x/menu.c +++ b/gp2x/menu.c @@ -124,6 +124,8 @@ static unsigned long wait_for_input_usbjoy(unsigned long interesting, int *joy) // handle only 1 event at a time for (i = 1; i != 0; i <<= 1) if (ret & i) { ret &= i; break; } + // ... but allow select + ret |= inp_prev & GP2X_SELECT; return ret; } @@ -275,6 +277,31 @@ static int scandir_filter(const struct dirent *ent) return 1; } +static void do_delete(const char *fpath, const char *fname) +{ + int len, inp; + + gp2x_pd_clone_buffer2(); + + if (!rom_loaded) + menu_darken_bg(gp2x_screen, 320*240, 0); + + len = strlen(fname); + if (len > 320/6) len = 320/6; + + text_out16(320/2 - 15*8/2, 80, "About to delete"); + smalltext_out16_lim(320/2 - len*6/2, 95, fname, 0xbdff, len); + text_out16(320/2 - 13*8/2, 110, "Are you sure?"); + text_out16(320/2 - 25*8/2, 120, "(Y - confirm, X - cancel)"); + menu_flip(); + + + while (gp2x_joystick_read(1) & (GP2X_A|GP2X_SELECT)) usleep(50*1000); + inp = wait_for_input(GP2X_Y|GP2X_X); + if (inp & GP2X_Y) + remove(fpath); +} + static char *romsel_loop(char *curr_path) { struct dirent **namelist; @@ -283,6 +310,7 @@ static char *romsel_loop(char *curr_path) unsigned long inp = 0; char *ret = NULL, *fname = NULL; +rescan: // is this a dir or a full path? if ((dir = opendir(curr_path))) { closedir(dir); @@ -319,24 +347,39 @@ static char *romsel_loop(char *curr_path) for (;;) { draw_dirlist(curr_path, namelist, n, sel); - inp = wait_for_input(GP2X_UP|GP2X_DOWN|GP2X_LEFT|GP2X_RIGHT|GP2X_L|GP2X_R|GP2X_B|GP2X_X); + inp = wait_for_input(GP2X_UP|GP2X_DOWN|GP2X_LEFT|GP2X_RIGHT|GP2X_L|GP2X_R|GP2X_A|GP2X_B|GP2X_X|GP2X_SELECT); if(inp & GP2X_UP ) { sel--; if (sel < 0) sel = n-2; } if(inp & GP2X_DOWN) { sel++; if (sel > n-2) sel = 0; } if(inp & GP2X_LEFT) { sel-=10; if (sel < 0) sel = 0; } if(inp & GP2X_L) { sel-=24; if (sel < 0) sel = 0; } if(inp & GP2X_RIGHT) { sel+=10; if (sel > n-2) sel = n-2; } if(inp & GP2X_R) { sel+=24; if (sel > n-2) sel = n-2; } - if(inp & GP2X_B) { // enter dir/select + if ((inp & GP2X_B) || (inp & (GP2X_SELECT|GP2X_A)) == (GP2X_SELECT|GP2X_A)) // enter dir/select || delete + { again: - if (namelist[sel+1]->d_type == DT_REG) { + if (namelist[sel+1]->d_type == DT_REG) + { strcpy(romFileName, curr_path); strcat(romFileName, "/"); strcat(romFileName, namelist[sel+1]->d_name); - ret = romFileName; - break; - } else if (namelist[sel+1]->d_type == DT_DIR) { - int newlen = strlen(curr_path) + strlen(namelist[sel+1]->d_name) + 2; - char *p, *newdir = malloc(newlen); + if (inp & GP2X_B) { // return sel + ret = romFileName; + break; + } + do_delete(romFileName, namelist[sel+1]->d_name); + if (n > 0) { + while (n--) free(namelist[n]); + free(namelist); + } + goto rescan; + } + else if (namelist[sel+1]->d_type == DT_DIR) + { + int newlen; + char *p, *newdir; + if (!(inp & GP2X_B)) continue; + newlen = strlen(curr_path) + strlen(namelist[sel+1]->d_name) + 2; + newdir = malloc(newlen); if (strcmp(namelist[sel+1]->d_name, "..") == 0) { char *start = curr_path; p = start + strlen(start) - 1; @@ -354,7 +397,9 @@ static char *romsel_loop(char *curr_path) ret = romsel_loop(newdir); free(newdir); break; - } else { + } + else + { // unknown file type, happens on NTFS mounts. Try to guess. FILE *tstf; int tmp; strcpy(romFileName, curr_path); @@ -375,7 +420,7 @@ static char *romsel_loop(char *curr_path) } if (n > 0) { - while(n--) free(namelist[n]); + while (n--) free(namelist[n]); free(namelist); } @@ -508,7 +553,7 @@ static void draw_savestate_bg(int slot) } if (file) { - if (PicoMCD & 1) { + if (PicoAHW & PAHW_MCD) { PicoCdLoadStateGfx(file); } else { areaSeek(file, 0x10020, SEEK_SET); // skip header and RAM in state file @@ -737,7 +782,8 @@ static void key_config_loop(const me_bind_action *opts, int opt_cnt, int player_ draw_key_config(opts, opt_cnt, player_idx, sel); inp = wait_for_input_usbjoy(CONFIGURABLE_KEYS, &joy); // printf("got %08lX from joy %i\n", inp, joy); - if (joy == 0) { + if (joy == 0) + { if (!(inp & GP2X_SELECT)) { prev_select = 0; if(inp & GP2X_UP ) { sel--; if (sel < 0) sel = menu_sel_max; continue; } @@ -832,7 +878,7 @@ static void kc_sel_loop(void) { int menu_sel = 3, menu_sel_max = 3; unsigned long inp = 0; - int is_6button = PicoOpt & 0x020; + int is_6button = PicoOpt & POPT_6BTN_PAD; while (1) { @@ -960,9 +1006,9 @@ static void cd_menu_loop_options(void) selected_id == MA_CDOPT_READAHEAD) { if (inp & GP2X_LEFT) { PicoCDBuffers >>= 1; - if (PicoCDBuffers < 64) PicoCDBuffers = 0; + if (PicoCDBuffers < 2) PicoCDBuffers = 0; } else { - if (PicoCDBuffers < 64) PicoCDBuffers = 64; + if (PicoCDBuffers < 2) PicoCDBuffers = 2; else PicoCDBuffers <<= 1; if (PicoCDBuffers > 8*1024) PicoCDBuffers = 8*1024; // 16M } @@ -1016,6 +1062,7 @@ menu_entry opt2_entries[] = { "Emulate Z80", MB_ONOFF, MA_OPT2_ENABLE_Z80, &PicoOpt, 0x00004, 0, 0, 1, 1 }, { "Emulate YM2612 (FM)", MB_ONOFF, MA_OPT2_ENABLE_YM2612, &PicoOpt, 0x00001, 0, 0, 1, 1 }, { "Emulate SN76496 (PSG)", MB_ONOFF, MA_OPT2_ENABLE_SN76496,&PicoOpt, 0x00002, 0, 0, 1, 1 }, + { "Disable sprite limit", MB_ONOFF, MA_OPT2_NO_SPRITE_LIM, &PicoOpt, 0x40000, 0, 0, 1, 1 }, { "gzip savestates", MB_ONOFF, MA_OPT2_GZIP_STATES, ¤tConfig.EmuOpt, 0x0008, 0, 0, 1, 1 }, { "Don't save last used ROM", MB_ONOFF, MA_OPT2_NO_LAST_ROM, ¤tConfig.EmuOpt, 0x0020, 0, 0, 1, 1 }, { "needs restart:", MB_NONE, MA_NONE, NULL, 0, 0, 0, 1, 0 }, @@ -1127,7 +1174,7 @@ static void menu_opt_cust_draw(const menu_entry *entry, int x, int y, void *para switch (entry->id) { case MA_OPT_RENDERER: - if (PicoOpt&0x10) + if (PicoOpt & POPT_ALT_RENDERER) str = " 8bit fast"; else if (currentConfig.EmuOpt&0x80) str = "16bit accurate"; @@ -1151,7 +1198,7 @@ static void menu_opt_cust_draw(const menu_entry *entry, int x, int y, void *para text_out16(x, y, "Frameskip %s", str24); break; case MA_OPT_SOUND_QUALITY: - str = (PicoOpt&0x08)?"stereo":"mono"; + str = (PicoOpt & POPT_EN_STEREO) ? "stereo" : "mono"; text_out16(x, y, "Sound Quality: %5iHz %s", PsndRate, str); break; case MA_OPT_REGION: @@ -1241,7 +1288,7 @@ static void menu_options_save(void) // force setting possibly changed.. Pico.m.pal = (PicoRegionOverride == 2 || PicoRegionOverride == 8) ? 1 : 0; } - if (!(PicoOpt & 0x20)) { + if (!(PicoOpt & POPT_6BTN_PAD)) { // unbind XYZ MODE, just in case unbind_action(0xf00, -1, -1); }