Compatibility with FreeBSD
[pcsx_rearmed.git] / frontend / menu.c
index 9586bae..6516e34 100644 (file)
@@ -9,6 +9,11 @@
  */
 
 #define _GNU_SOURCE 1
+#ifdef __FreeBSD__
+#define STAT stat
+#else
+#define STAT stat64
+#endif
 #include <stdio.h>
 #include <string.h>
 #include <errno.h>
@@ -36,7 +41,6 @@
 #include "../libpcsxcore/cdriso.h"
 #include "../libpcsxcore/cheat.h"
 #include "../libpcsxcore/new_dynarec/new_dynarec.h"
-#include "../plugins/dfinput/externals.h"
 #include "../plugins/dfsound/spu_config.h"
 #include "psemu_plugin_defs.h"
 #include "arm_features.h"
@@ -87,10 +91,12 @@ typedef enum
        MA_OPT_VOUT_MODE,
        MA_OPT_SCANLINES,
        MA_OPT_SCANLINE_LEVEL,
+       MA_OPT_CENTERING,
 } menu_id;
 
 static int last_vout_w, last_vout_h, last_vout_bpp;
-static int cpu_clock, cpu_clock_st, volume_boost, frameskip;
+static int cpu_clock, cpu_clock_st, volume_boost;
+static int frameskip = 1; // 0 - auto, 1 - off
 static char last_selected_fname[MAXPATHLEN];
 static int config_save_counter, region, in_type_sel1, in_type_sel2;
 static int psx_clock;
@@ -110,7 +116,7 @@ int soft_filter;
 #define DEFAULT_PSX_CLOCK_S "50"
 #endif
 
-static const char *bioses[24];
+static const char *bioses[32];
 static const char *gpu_plugins[16];
 static const char *spu_plugins[16];
 static const char *memcards[32];
@@ -213,7 +219,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 stat64 statf;
+       struct STAT statf;
        FILE *f;
 
        if (count <= 1)
@@ -262,7 +268,7 @@ static int optional_cdimg_filter(struct dirent **namelist, int count,
                                        p = buf2;
 
                                snprintf(buf, sizeof(buf), "%s/%s", basedir, p);
-                               ret = stat64(buf, &statf);
+                               ret = STAT(buf, &statf);
                                if (ret == 0) {
                                        rm_namelist_entry(namelist, count, p);
                                        good_cue = 1;
@@ -311,11 +317,13 @@ static void menu_sync_config(void)
        switch (in_type_sel1) {
        case 1:  in_type[0] = PSE_PAD_TYPE_ANALOGPAD; break;
        case 2:  in_type[0] = PSE_PAD_TYPE_NEGCON;    break;
+       case 3:  in_type[0] = PSE_PAD_TYPE_NONE;      break;
        default: in_type[0] = PSE_PAD_TYPE_STANDARD;
        }
        switch (in_type_sel2) {
        case 1:  in_type[1] = PSE_PAD_TYPE_ANALOGPAD; break;
        case 2:  in_type[1] = PSE_PAD_TYPE_NEGCON;    break;
+       case 3:  in_type[1] = PSE_PAD_TYPE_NONE;      break;
        default: in_type[1] = PSE_PAD_TYPE_STANDARD;
        }
        if (in_evdev_allow_abs_only != allow_abs_only_old) {
@@ -336,7 +344,7 @@ static void menu_set_defconfig(void)
        g_scaler = SCALE_4_3;
        g_gamma = 100;
        volume_boost = 0;
-       frameskip = 0;
+       frameskip = 1; // 1 - off
        analog_deadzone = 50;
        soft_scaling = 1;
        soft_filter = 0;
@@ -423,7 +431,7 @@ static const struct {
        CE_INTVAL(g_autostateld_opt),
        CE_INTVAL_N("adev0_is_nublike", in_adev_is_nublike[0]),
        CE_INTVAL_N("adev1_is_nublike", in_adev_is_nublike[1]),
-       CE_INTVAL_V(frameskip, 3),
+       CE_INTVAL_V(frameskip, 4),
        CE_INTVAL_P(gpu_peops.iUseDither),
        CE_INTVAL_P(gpu_peops.dwActFixes),
        CE_INTVAL_P(gpu_unai.lineskip),
@@ -450,6 +458,9 @@ static const struct {
        CE_INTVAL_P(gpu_peopsgl.iVRamSize),
        CE_INTVAL_P(gpu_peopsgl.iTexGarbageCollection),
        CE_INTVAL_P(gpu_peopsgl.dwActFixes),
+       CE_INTVAL_P(screen_centering_type),
+       CE_INTVAL_P(screen_centering_x),
+       CE_INTVAL_P(screen_centering_y),
        CE_INTVAL(spu_config.iUseReverb),
        CE_INTVAL(spu_config.iXAPitch),
        CE_INTVAL(spu_config.iUseInterpolation),
@@ -535,7 +546,7 @@ static int menu_do_last_cd_img(int is_get)
 {
        static const char *defaults[] = { "/media", "/mnt/sd", "/mnt" };
        char path[256];
-       struct stat64 st;
+       struct STAT st;
        FILE *f;
        int i, ret = -1;
 
@@ -558,7 +569,7 @@ static int menu_do_last_cd_img(int is_get)
 out:
        if (is_get) {
                for (i = 0; last_selected_fname[0] == 0
-                      || stat64(last_selected_fname, &st) != 0; i++)
+                      || STAT(last_selected_fname, &st) != 0; i++)
                {
                        if (i >= ARRAY_SIZE(defaults))
                                break;
@@ -583,7 +594,7 @@ static void parse_str_val(char *cval, const char *src)
 
 static void keys_load_all(const char *cfg);
 
-static int menu_load_config(int is_game)
+int menu_load_config(int is_game)
 {
        char cfgfile[MAXPATHLEN];
        int i, ret = -1;
@@ -1199,6 +1210,7 @@ static const char *men_in_type_sel[] = {
        "Standard (SCPH-1080)",
        "Analog (SCPH-1150)",
        "GunCon",
+       "None",
        NULL
 };
 static const char h_nub_btns[] = "Experimental, keep this OFF if unsure. Select rescan after change.";
@@ -1252,6 +1264,7 @@ static const char *men_soft_filter[] = { "None",
 #endif
        NULL };
 static const char *men_dummy[] = { NULL };
+static const char *men_centering[] = { "Auto", "Ingame", "Force", NULL };
 static const char h_scaler[]    = "int. 2x  - scales w. or h. 2x if it fits on screen\n"
                                  "int. 4:3 - uses integer if possible, else fractional";
 static const char h_cscaler[]   = "Displays the scaler layer, you can resize it\n"
@@ -1316,6 +1329,7 @@ static int menu_loop_cscaler(int id, int keys)
 
 static menu_entry e_menu_gfx_options[] =
 {
+       mee_enum      ("Screen centering",         MA_OPT_CENTERING, pl_rearmed_cbs.screen_centering_type, men_centering),
        mee_enum_h    ("Scaler",                   MA_OPT_VARSCALER, g_scaler, men_scaler, h_scaler),
        mee_enum      ("Video output mode",        MA_OPT_VOUT_MODE, plat_target.vout_method, men_dummy),
        mee_onoff     ("Software Scaling",         MA_OPT_SCALER2, soft_scaling, 1),
@@ -2444,7 +2458,8 @@ static void scan_bios_plugins(void)
                        continue;
 
                snprintf(fname, sizeof(fname), "%s/%s", Config.BiosDir, ent->d_name);
-               if (stat(fname, &st) != 0 || st.st_size != 512*1024) {
+               if (stat(fname, &st) != 0
+                   || (st.st_size != 512*1024 && st.st_size != 4*1024*1024)) {
                        printf("bad BIOS file: %s\n", ent->d_name);
                        continue;
                }
@@ -2581,7 +2596,7 @@ void menu_init(void)
 
        i = plat_target.cpu_clock_set != NULL
                && plat_target.cpu_clock_get != NULL && cpu_clock_st > 0;
-       me_enable(e_menu_gfx_options, MA_OPT_CPU_CLOCKS, i);
+       me_enable(e_menu_options, MA_OPT_CPU_CLOCKS, i);
 
        i = me_id2offset(e_menu_gfx_options, MA_OPT_VOUT_MODE);
        e_menu_gfx_options[i].data = plat_target.vout_methods;
@@ -2688,8 +2703,6 @@ void menu_prepare_emu(void)
                if (ret)
                        fprintf(stderr, "Warning: GPU_open returned %d\n", ret);
        }
-
-       dfinput_activate();
 }
 
 void menu_update_msg(const char *msg)