input: in_sdl: preliminary joystick support
[libpicofe.git] / common / menu_pico.c
index b9f1d7f..f6e9b26 100644 (file)
@@ -1,4 +1,7 @@
+#include <string.h>
+
 #include "emu.h"
+#include "menu_pico.h"
 
 #include <version.h>
 #include <revision.h>
@@ -22,6 +25,11 @@ static unsigned short fname2color(const char *fname)
        return 0xffff;
 }
 
+static const char *filter_exts[] = {
+       ".mp3", ".MP3", ".srm", ".brm", "s.gz", ".mds", "bcfg", ".txt", ".htm", "html",
+       ".jpg", ".gpe"
+};
+
 #include "menu.c"
 
 /* platform specific options and handlers */
@@ -185,7 +193,8 @@ static void menu_loop_patches(void)
        for (;;)
        {
                draw_patchlist(menu_sel);
-               inp = in_menu_wait(PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT|PBTN_L|PBTN_R|PBTN_MOK|PBTN_MBACK, 33);
+               inp = in_menu_wait(PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT|PBTN_L|PBTN_R
+                               |PBTN_MOK|PBTN_MBACK, NULL, 33);
                if (inp & PBTN_UP  ) { menu_sel--; if (menu_sel < 0) menu_sel = PicoPatchCount; }
                if (inp & PBTN_DOWN) { menu_sel++; if (menu_sel > PicoPatchCount) menu_sel = 0; }
                if (inp &(PBTN_LEFT|PBTN_L))  { menu_sel-=10; if (menu_sel < 0) menu_sel = 0; }
@@ -306,7 +315,7 @@ static int menu_loop_keyconfig(int id, int keys)
        static int sel = 0;
 
        me_enable(e_menu_keyconfig, MA_OPT_SAVECFG_GAME, rom_loaded);
-       me_loop(e_menu_keyconfig, &sel, NULL);
+       me_loop(e_menu_keyconfig, &sel);
        return 0;
 }
 
@@ -362,7 +371,7 @@ static menu_entry e_menu_cd_options[] =
 static int menu_loop_cd_options(int id, int keys)
 {
        static int sel = 0;
-       me_loop(e_menu_cd_options, &sel, NULL);
+       me_loop(e_menu_cd_options, &sel);
        return 0;
 }
 
@@ -399,8 +408,8 @@ static const char *mgn_opt_sh2cycles(int id, int *offs)
 static const char h_32x_enable[] = "Enable emulation of the 32X addon";
 static const char h_pwm[]        = "Disabling may improve performance, but break sound";
 static const char h_sh2cycles[]  = "Cycles/millisecond (similar to DOSBox)\n"
-       "lower values speed up emulation but break games\n"
-       "at least 11000 recommended for compatibility";
+                                  "lower values speed up emulation but break games\n"
+                                  "at least 11000 recommended for compatibility";
 
 static menu_entry e_menu_32x_options[] =
 {
@@ -417,7 +426,7 @@ static int menu_loop_32x_options(int id, int keys)
        static int sel = 0;
 
        me_enable(e_menu_32x_options, MA_32XOPT_RENDERER, renderer_names32x[0] != NULL);
-       me_loop(e_menu_32x_options, &sel, NULL);
+       me_loop(e_menu_32x_options, &sel);
 
        return 0;
 }
@@ -444,7 +453,7 @@ static menu_entry e_menu_adv_options[] =
 static int menu_loop_adv_options(int id, int keys)
 {
        static int sel = 0;
-       me_loop(e_menu_adv_options, &sel, NULL);
+       me_loop(e_menu_adv_options, &sel);
        return 0;
 }
 
@@ -462,7 +471,7 @@ static int menu_loop_gfx_options(int id, int keys)
        static int sel = 0;
 
        me_enable(e_menu_gfx_options, MA_OPT_RENDERER, renderer_names[0] != NULL);
-       me_loop(e_menu_gfx_options, &sel, NULL);
+       me_loop(e_menu_gfx_options, &sel);
 
        return 0;
 }
@@ -668,7 +677,7 @@ static int menu_loop_options(int id, int keys)
        me_enable(e_menu_options, MA_OPT_SAVECFG_GAME, rom_loaded);
        me_enable(e_menu_options, MA_OPT_LOADCFG, config_slot != config_slot_current);
 
-       me_loop(e_menu_options, &sel, NULL);
+       me_loop(e_menu_options, &sel);
 
        return 0;
 }
@@ -686,7 +695,7 @@ static void mplayer_loop(void)
        while (1)
        {
                PDebugZ80Frame();
-               if (in_menu_wait_any(0) & PBTN_MA3)
+               if (in_menu_wait_any(NULL, 0) & PBTN_MA3)
                        break;
                pemu_sound_wait();
        }
@@ -782,7 +791,7 @@ static void debug_menu_loop(void)
                menu_draw_end();
 
                inp = in_menu_wait(PBTN_MOK|PBTN_MBACK|PBTN_MA2|PBTN_MA3|PBTN_L|PBTN_R |
-                                       PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT, 70);
+                                       PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT, NULL, 70);
                if (inp & PBTN_MBACK) return;
                if (inp & PBTN_L) { mode--; if (mode < 0) mode = 4; }
                if (inp & PBTN_R) { mode++; if (mode > 4) mode = 0; }
@@ -793,13 +802,13 @@ static void debug_menu_loop(void)
                                        PDebugCPUStep();
                                if (inp & PBTN_MA3) {
                                        while (inp & PBTN_MA3)
-                                               inp = in_menu_wait_any(-1);
+                                               inp = in_menu_wait_any(NULL, -1);
                                        mplayer_loop();
                                }
                                if ((inp & (PBTN_MA2|PBTN_LEFT)) == (PBTN_MA2|PBTN_LEFT)) {
                                        mkdir("dumps", 0777);
                                        PDebugDumpMem();
-                                       while (inp & PBTN_MA2) inp = in_menu_wait_any(-1);
+                                       while (inp & PBTN_MA2) inp = in_menu_wait_any(NULL, -1);
                                        dumped = 1;
                                }
                                break;
@@ -814,7 +823,7 @@ static void debug_menu_loop(void)
                                        PicoSkipFrame = 1;
                                        PicoFrame();
                                        PicoSkipFrame = 0;
-                                       while (inp & PBTN_MOK) inp = in_menu_wait_any(-1);
+                                       while (inp & PBTN_MOK) inp = in_menu_wait_any(NULL, -1);
                                }
                                break;
                        case 3:
@@ -828,6 +837,26 @@ static void debug_menu_loop(void)
 
 // ------------ main menu ------------
 
+static const char credits[] =
+       "PicoDrive v" VERSION " (c) notaz, 2006-2011\n\n\n"
+       "Credits:\n"
+       "fDave: Cyclone 68000 core,\n"
+       "      base code of PicoDrive\n"
+       "Reesy & FluBBa: DrZ80 core\n"
+       "MAME devs: YM2612 and SN76496 cores\n"
+       "Inder, ketchupgun: graphics\n"
+#ifdef __GP2X__
+       "rlyeh and others: minimal SDK\n"
+       "Squidge: mmuhack\n"
+       "Dzz: ARM940 sample\n"
+#endif
+       "\n"
+       "special thanks (for docs, ideas):\n"
+       " Charles MacDonald, Haze,\n"
+       " Stephane Dallongeville,\n"
+       " Lordus, Exophase, Rokas,\n"
+       " Nemesis, Tasco Deluxe";
+
 static char *romsel_run(void)
 {
        char *ret, *sel_name;
@@ -875,8 +904,8 @@ static int main_menu_handler(int id, int keys)
                }
                break;
        case MA_MAIN_CREDITS:
-               draw_menu_credits();
-               in_menu_wait(PBTN_MOK|PBTN_MBACK, 70);
+               draw_menu_message(credits, NULL);
+               in_menu_wait(PBTN_MOK|PBTN_MBACK, NULL, 70);
                break;
        case MA_MAIN_EXIT:
                engineState = PGS_Quit;
@@ -927,13 +956,13 @@ void menu_loop(void)
 
        menu_enter(rom_loaded);
        in_set_config_int(0, IN_CFG_BLOCKING, 1);
-       me_loop(e_menu_main, &sel, menu_main_plat_draw);
+       me_loop_d(e_menu_main, &sel, NULL, menu_main_plat_draw);
 
        if (rom_loaded) {
                if (engineState == PGS_Menu)
                        engineState = PGS_Running;
                /* wait until menu, ok, back is released */
-               while (in_menu_wait_any(50) & (PBTN_MENU|PBTN_MOK|PBTN_MBACK))
+               while (in_menu_wait_any(NULL, 50) & (PBTN_MENU|PBTN_MOK|PBTN_MBACK))
                        ;
        }
 
@@ -976,14 +1005,14 @@ int menu_loop_tray(void)
        menu_enter(rom_loaded);
 
        in_set_config_int(0, IN_CFG_BLOCKING, 1);
-       me_loop(e_menu_tray, &sel, NULL);
+       me_loop(e_menu_tray, &sel);
 
        if (engineState != PGS_RestartRun) {
                engineState = PGS_RestartRun;
                ret = 0; /* no CD inserted */
        }
 
-       while (in_menu_wait_any(50) & (PBTN_MENU|PBTN_MOK|PBTN_MBACK));
+       while (in_menu_wait_any(NULL, 50) & (PBTN_MENU|PBTN_MOK|PBTN_MBACK));
        in_set_config_int(0, IN_CFG_BLOCKING, 0);
 
        return ret;