frontend: save gamma too
[pcsx_rearmed.git] / frontend / menu.c
index 8e182bf..3a6ae9c 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++) {
@@ -255,7 +255,7 @@ static int optional_cdimg_filter(struct dirent **namelist, int count,
                                        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 +327,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 +392,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 +512,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 +535,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 +668,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 +683,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 +723,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;
        }
@@ -1936,10 +1938,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 +1997,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 +2029,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 +2079,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;
 
@@ -2499,9 +2505,12 @@ void menu_prepare_emu(void)
        plat_video_menu_leave();
 
        psxCpu = (Config.Cpu == CPU_INTERPRETER) ? &psxInt : &psxRec;
-       if (psxCpu != prev_cpu)
+       if (psxCpu != prev_cpu) {
+               prev_cpu->Shutdown();
+               psxCpu->Init();
                // note that this does not really reset, just clears drc caches
                psxCpu->Reset();
+       }
 
        // core doesn't care about Config.Cdda changes,
        // so handle them manually here