frontend: change how exit is done
[pcsx_rearmed.git] / frontend / menu.c
index eb004d8..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>
@@ -211,7 +211,7 @@ static int optional_cdimg_filter(struct dirent **namelist, int count,
        const char *ext, *p;
        char buf[256], buf2[256];
        int i, d, ret, good_cue;
-       struct stat statf;
+       struct stat64 statf;
        FILE *f;
 
        for (i = 1; i < count; i++) {
@@ -251,11 +251,13 @@ 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);
-                               ret = stat(buf, &statf);
+                               ret = stat64(buf, &statf);
                                if (ret == 0) {
                                        rm_namelist_entry(namelist, count, p);
                                        good_cue = 1;
@@ -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),
@@ -510,7 +514,7 @@ static int menu_do_last_cd_img(int is_get)
 {
        static const char *defaults[] = { "/media", "/mnt/sd", "/mnt" };
        char path[256];
-       struct stat st;
+       struct stat64 st;
        FILE *f;
        int i, ret = -1;
 
@@ -533,7 +537,7 @@ static int menu_do_last_cd_img(int is_get)
 out:
        if (is_get) {
                for (i = 0; last_selected_fname[0] == 0
-                      || stat(last_selected_fname, &st) != 0; i++)
+                      || stat64(last_selected_fname, &st) != 0; i++)
                {
                        if (i >= ARRAY_SIZE(defaults))
                                break;
@@ -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++)
@@ -721,8 +725,8 @@ static void draw_savestate_bg(int slot)
        if (f == NULL)
                return;
 
-       if (gzseek(f, 0x29933d, SEEK_SET) != 0x29933d) {
-               fprintf(stderr, "gzseek failed\n");
+       if ((ret = (int)gzseek(f, 0x29933d, SEEK_SET)) != 0x29933d) {
+               fprintf(stderr, "gzseek failed: %d\n", ret);
                gzclose(f);
                return;
        }
@@ -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))