1.31 release
[libpicofe.git] / gp2x / menu.c
index 032616a..30f681a 100644 (file)
@@ -286,6 +286,25 @@ static int scandir_cmp(const void *p1, const void *p2)
        return alphasort(d1, d2);\r
 }\r
 \r
+static char *filter_exts[] = { ".mp3", ".MP3", ".srm", ".brm", "s.gz", ".mds", "bcfg", ".txt", ".htm", "html", ".gpe" };\r
+\r
+static int scandir_filter(const struct dirent *ent)\r
+{\r
+       const char *p;\r
+       int i;\r
+\r
+       if (ent == NULL || ent->d_name == NULL) return 0;\r
+       if (strlen(ent->d_name) < 5) return 1;\r
+\r
+       p = ent->d_name + strlen(ent->d_name) - 4;\r
+\r
+       for (i = 0; i < sizeof(filter_exts)/sizeof(filter_exts[0]); i++)\r
+       {\r
+               if (strcmp(p, filter_exts[i]) == 0) return 0;\r
+       }\r
+\r
+       return 1;\r
+}\r
 \r
 static char *romsel_loop(char *curr_path)\r
 {\r
@@ -305,10 +324,10 @@ static char *romsel_loop(char *curr_path)
                fname = p+1;\r
        }\r
 \r
-       n = scandir(curr_path, &namelist, 0, scandir_cmp);\r
+       n = scandir(curr_path, &namelist, scandir_filter, scandir_cmp);\r
        if (n < 0) {\r
                // try root\r
-               n = scandir(curr_path, &namelist, 0, scandir_cmp);\r
+               n = scandir("/", &namelist, scandir_filter, scandir_cmp);\r
                if (n < 0) {\r
                        // oops, we failed\r
                        printf("dir: "); printf(curr_path); printf("\n");\r
@@ -407,7 +426,7 @@ static void draw_patchlist(int sel)
                if (pos < 0)  continue;\r
                if (pos > 23) break;\r
                gp2x_smalltext8_lim(14,     pos*10, PicoPatches[i].active ? "ON " : "OFF", 3);\r
-               gp2x_smalltext8_lim(14+6*4, pos*10, PicoPatches[i].name, 53-5);\r
+               gp2x_smalltext8_lim(14+6*4, pos*10, PicoPatches[i].name, 53-6);\r
        }\r
        pos = start + i;\r
        if (pos < 24) gp2x_smalltext8_lim(14, pos*10, "done", 4);\r
@@ -729,6 +748,10 @@ static void kc_sel_loop(void)
 static void draw_cd_menu_options(int menu_sel, char *b_us, char *b_eu, char *b_jp)\r
 {\r
        int tl_x = 25, tl_y = 60, y;\r
+       char ra_buff[16];\r
+\r
+       if (PicoCDBuffers > 1) sprintf(ra_buff, "%5iK", PicoCDBuffers * 2);\r
+       else strcpy(ra_buff, "     OFF");\r
 \r
        y = tl_y;\r
        //memset(gp2x_screen, 0, 320*240);\r
@@ -740,7 +763,9 @@ static void draw_cd_menu_options(int menu_sel, char *b_us, char *b_eu, char *b_j
        gp2x_text_out8(tl_x, (y+=10), "CD LEDs                    %s", (currentConfig.EmuOpt &0x0400)?"ON":"OFF"); // 3\r
        gp2x_text_out8(tl_x, (y+=10), "CDDA audio (using mp3s)    %s", (currentConfig.PicoOpt&0x0800)?"ON":"OFF"); // 4\r
        gp2x_text_out8(tl_x, (y+=10), "PCM audio                  %s", (currentConfig.PicoOpt&0x0400)?"ON":"OFF"); // 5\r
-       gp2x_text_out8(tl_x, (y+=10), "Better sync (very slow)    %s", (currentConfig.PicoOpt&0x2000)?"ON":"OFF"); // 6\r
+       gp2x_text_out8(tl_x, (y+=10), "ReadAhead buffer      %s", ra_buff); // 6\r
+       gp2x_text_out8(tl_x, (y+=10), "Scale/Rot. fx (buggy,slow) %s", (currentConfig.PicoOpt&0x1000)?"ON":"OFF"); // 7\r
+       gp2x_text_out8(tl_x, (y+=10), "Better sync (slow)         %s", (currentConfig.PicoOpt&0x2000)?"ON":"OFF"); // 8\r
        gp2x_text_out8(tl_x, (y+=10), "Done");\r
 \r
        // draw cursor\r
@@ -756,7 +781,7 @@ static void draw_cd_menu_options(int menu_sel, char *b_us, char *b_eu, char *b_j
 \r
 static void cd_menu_loop_options(void)\r
 {\r
-       int menu_sel = 0, menu_sel_max = 7;\r
+       int menu_sel = 0, menu_sel_max = 9;\r
        unsigned long inp = 0;\r
        char bios_us[32], bios_eu[32], bios_jp[32], *bios, *p;\r
 \r
@@ -786,8 +811,19 @@ static void cd_menu_loop_options(void)
                                case  3: currentConfig.EmuOpt ^=0x0400; break;\r
                                case  4: currentConfig.PicoOpt^=0x0800; break;\r
                                case  5: currentConfig.PicoOpt^=0x0400; break;\r
-                               case  6: currentConfig.PicoOpt^=0x2000; break;\r
-                               case  7: return;\r
+                               case  6:\r
+                                       if (inp & GP2X_LEFT) {\r
+                                               PicoCDBuffers >>= 1;\r
+                                               if (PicoCDBuffers < 64) PicoCDBuffers = 0;\r
+                                       } else {\r
+                                               if (PicoCDBuffers < 64) PicoCDBuffers = 64;\r
+                                               else PicoCDBuffers <<= 1;\r
+                                               if (PicoCDBuffers > 8*1024) PicoCDBuffers = 8*1024; // 16M\r
+                                       }\r
+                                       break;\r
+                               case  7: currentConfig.PicoOpt^=0x1000; break;\r
+                               case  8: currentConfig.PicoOpt^=0x2000; break;\r
+                               case  9: return;\r
                        }\r
                }\r
                if(inp & (GP2X_X|GP2X_A)) return;\r