frontend: change how exit is done
[pcsx_rearmed.git] / frontend / menu.c
index e1402de..b25e192 100644 (file)
@@ -8,7 +8,7 @@
  * See the COPYING file in the top-level directory.
  */
 
-#define _GNU_SOURCE
+#define _GNU_SOURCE 1
 #include <stdio.h>
 #include <string.h>
 #include <errno.h>
@@ -251,7 +251,9 @@ static int optional_cdimg_filter(struct dirent **namelist, int count,
                                p = strrchr(buf2, '/');
                                if (p == NULL)
                                        p = strrchr(buf2, '\\');
-                               if (p == NULL)
+                               if (p != NULL)
+                                       p++;
+                               else
                                        p = buf2;
 
                                snprintf(buf, sizeof(buf), "%s/%s", basedir, p);
@@ -327,6 +329,7 @@ static void menu_set_defconfig(void)
 
        g_opts = 0;
        g_scaler = SCALE_4_3;
+       g_gamma = 100;
        volume_boost = 0;
        frameskip = 0;
        analog_deadzone = 50;
@@ -391,6 +394,7 @@ static const struct {
        CE_CONFIG_VAL(Cpu),
        CE_INTVAL(region),
        CE_INTVAL_V(g_scaler, 2),
+       CE_INTVAL(g_gamma),
        CE_INTVAL(g_layer_x),
        CE_INTVAL(g_layer_y),
        CE_INTVAL(g_layer_w),
@@ -666,7 +670,7 @@ fail:
 
 static const char *filter_exts[] = {
        "bin", "img", "mdf", "iso", "cue", "z",
-       "bz",  "znx", "pbp", "cbn"
+       "bz",  "znx", "pbp", "cbn", NULL
 };
 
 // rrrr rggg gggb bbbb
@@ -681,7 +685,7 @@ static unsigned short fname2color(const char *fname)
        if (ext == NULL)
                return 0xffff;
        ext++;
-       for (i = 0; i < array_size(filter_exts); i++)
+       for (i = 0; filter_exts[i] != NULL; i++)
                if (strcasecmp(ext, filter_exts[i]) == 0)
                        return 0x7bff;
        for (i = 0; i < array_size(other_exts); i++)
@@ -1696,10 +1700,10 @@ out:
 
 static void handle_memcard_sel(void)
 {
-       Config.Mcd1[0] = 0;
+       strcpy(Config.Mcd1, "none");
        if (memcard1_sel != 0)
                snprintf(Config.Mcd1, sizeof(Config.Mcd1), ".%s%s", MEMCARD_DIR, memcards[memcard1_sel]);
-       Config.Mcd2[0] = 0;
+       strcpy(Config.Mcd2, "none");
        if (memcard2_sel != 0)
                snprintf(Config.Mcd2, sizeof(Config.Mcd2), ".%s%s", MEMCARD_DIR, memcards[memcard2_sel]);
        LoadMcds(Config.Mcd1, Config.Mcd2);
@@ -1828,7 +1832,6 @@ static void menu_bios_warn(void)
 // ------------ main menu ------------
 
 static menu_entry e_menu_main[];
-void OnFile_Exit();
 
 static void draw_frame_main(void)
 {
@@ -1936,10 +1939,11 @@ static int run_bios(void)
 
 static int run_exe(void)
 {
+       const char *exts[] = { "exe", NULL };
        const char *fname;
 
        fname = menu_loop_romsel(last_selected_fname,
-               sizeof(last_selected_fname), NULL);
+               sizeof(last_selected_fname), exts, NULL);
        if (fname == NULL)
                return -1;
 
@@ -1994,7 +1998,8 @@ static int romsel_run(void)
        const char *fname;
 
        fname = menu_loop_romsel(last_selected_fname,
-               sizeof(last_selected_fname), optional_cdimg_filter);
+                       sizeof(last_selected_fname), filter_exts,
+                       optional_cdimg_filter);
        if (fname == NULL)
                return -1;
 
@@ -2025,10 +2030,11 @@ static int romsel_run(void)
 
 static int swap_cd_image(void)
 {
-       char *fname;
+       const char *fname;
 
        fname = menu_loop_romsel(last_selected_fname,
-               sizeof(last_selected_fname), optional_cdimg_filter);
+                       sizeof(last_selected_fname), filter_exts,
+                       optional_cdimg_filter);
        if (fname == NULL)
                return -1;
 
@@ -2074,11 +2080,12 @@ static int swap_cd_multidisk(void)
 
 static void load_pcsx_cht(void)
 {
+       const char *exts[] = { "cht", NULL };
+       const char *fname;
        char path[256];
-       char *fname;
 
        path[0] = 0;
-       fname = menu_loop_romsel(path, sizeof(path), NULL);
+       fname = menu_loop_romsel(path, sizeof(path), exts, NULL);
        if (fname == NULL)
                return;
 
@@ -2145,8 +2152,8 @@ static int main_menu_handler(int id, int keys)
                in_menu_wait(PBTN_MOK|PBTN_MBACK, NULL, 70);
                break;
        case MA_MAIN_EXIT:
-               OnFile_Exit();
-               break;
+               emu_core_ask_exit();
+               return 1;
        default:
                lprintf("%s: something unknown selected\n", __FUNCTION__);
                break;
@@ -2232,7 +2239,7 @@ void menu_loop(void)
 
        do {
                me_loop_d(e_menu_main, &sel, NULL, draw_frame_main);
-       } while (!ready_to_go);
+       } while (!ready_to_go && !g_emu_want_quit);
 
        /* wait until menu, ok, back is released */
        while (in_menu_wait_any(NULL, 50) & (PBTN_MENU|PBTN_MOK|PBTN_MBACK))