Genesis-Plus-GX/gcw0/config.c

139 lines
4.5 KiB
C

#include "osd.h"
t_config config;
static int config_load(void)
{
//TODO: extract to function
const char *homedir;
if ((homedir = getenv("HOME")) == NULL) {
homedir = getpwuid(getuid())->pw_dir;
}
/* open configuration file */
char fname[MAXPATHLEN];
sprintf (fname, "%s%s/config.ini", homedir, DEFAULT_PATH);
FILE *fp = fopen(fname, "rb");
if (fp)
{
/* check file size */
fseek(fp, 0, SEEK_END);
if (ftell(fp) != sizeof(config))
{
fclose(fp);
return 0;
}
/* read file */
fseek(fp, 0, SEEK_SET);
fread(&config, sizeof(config), 1, fp);
fclose(fp);
return 1;
}
return 0;
}
void set_config_defaults(void)
{
int i;
/* sound options */
config.psg_preamp = 150;
config.fm_preamp = 100;
config.cdda_volume = 100;
config.pcm_volume = 100;
config.hq_fm = 1;
config.hq_psg = 1;
config.filter = 1;
config.low_freq = 200;
config.high_freq = 8000;
config.lg = 100;
config.mg = 100;
config.hg = 100;
config.lp_range = 0x9999; /* 0.6 in 0.16 fixed point */
config.ym2612 = YM2612_DISCRETE;
config.ym2413 = 1; /* = AUTO (0 = always OFF, 1 = always ON) */
config.mono = 0;
/* system options */
config.system = 0; /* = AUTO (or SYSTEM_SG, SYSTEM_SGII, SYSTEM_SGII_RAM_EXT, SYSTEM_MARKIII, SYSTEM_SMS, SYSTEM_SMS2, SYSTEM_GG, SYSTEM_MD) */
config.region_detect = 0; /* = AUTO (1 = USA, 2 = EUROPE, 3 = JAPAN/NTSC, 4 = JAPAN/PAL) */
config.vdp_mode = 0; /* = AUTO (1 = NTSC, 2 = PAL) */
config.master_clock = 0; /* = AUTO (1 = NTSC, 2 = PAL) */
config.force_dtack = 0;
config.addr_error = 1;
config.bios = 0;
config.lock_on = 0; /* = OFF (or TYPE_SK, TYPE_GG & TYPE_AR) */
config.add_on = 0; /* = HW_ADDON_AUTO (or HW_ADDON_MEGACD, HW_ADDON_MEGASD & HW_ADDON_NONE) */
config.cd_latency = 1;
/* display options */
config.overscan = 0; /* 3 = all borders (0 = no borders , 1 = vertical borders only, 2 = horizontal borders only) */
config.gg_extra = 0; /* 1 = show extended Game Gear screen (256x192) */
config.render = 0; /* 1 = double resolution output (only when interlaced mode 2 is enabled) */
config.ntsc = 0;
config.lcd = 0; /* 0.8 fixed point */
config.gcw0_fullscreen = 1; /* 1 = use IPU scaling */
config.keepaspectratio = 1; /* 1 = aspect ratio correct with black bars, 0 = fullscreen without correct aspect ratio */
config.gg_scanlines = 1; /* 1 = use scanlines on Game Gear */
config.smsmaskleftbar = 1; /* 1 = Mask left bar on SMS (better for horizontal scrolling) */
config.sl_autoresume = 1; /* 1 = Automatically resume when saving and loading snapshots */
config.a_stick = 1; /* 1 = A-Stick on */
config.lightgun_speed = 1; /* 1 = simple speed multiplier for lightgun */
config.gcw0_frameskip = 0; /* 0 = off, 1 = skip alternate frames, 2 = skip 2 in 3 frames, etc. Useful for FMV in MCD. */
config.enhanced_vscroll = 0;
config.enhanced_vscroll_limit = 8;
/* controllers options */
config.cursor = 0; /* different cursor designs */
input.system[0] = SYSTEM_GAMEPAD;
input.system[1] = SYSTEM_GAMEPAD;
config.gun_cursor[0] = 1;
config.gun_cursor[1] = 1;
config.invert_mouse = 0;
for (i=0; i<MAX_INPUTS; i++)
{
/* autodetected control pad type */
config.input[i].padtype = DEVICE_PAD2B | DEVICE_PAD3B | DEVICE_PAD6B;
}
config.buttons[A] = SDLK_LSHIFT;//x
config.buttons[B] = SDLK_LALT;//b
config.buttons[C] = SDLK_LCTRL;//a
config.buttons[X] = SDLK_TAB;//l
config.buttons[Y] = SDLK_SPACE;//y
config.buttons[Z] = SDLK_BACKSPACE;//r
config.buttons[START] = SDLK_RETURN;//start
config.buttons[MODE] = SDLK_ESCAPE;//select
/* try to restore user config */
int loaded = config_load();
if (!loaded) {
printf("Default Settings restored\n");
}
}
void config_save(void)
{
//TODO: extract to function
const char *homedir;
if ((homedir = getenv("HOME")) == NULL) {
homedir = getpwuid(getuid())->pw_dir;
}
/* open configuration file */
char fname[MAXPATHLEN];
sprintf (fname, "%s%s/config.ini", homedir, DEFAULT_PATH);
//printf(fname);
FILE *fp = fopen(fname, "wb");
if (fp)
{
/* write file */
fwrite(&config, sizeof(config), 1, fp);
fclose(fp);
}
}