mirror of
https://github.com/RaySollium99/libpicofe.git
synced 2025-09-05 06:47:45 -04:00
major menu unification, minor reorganization
git-svn-id: file:///home/notaz/opt/svn/PicoDrive/platform@639 be3aeb3a-fb24-0410-a615-afba39da0efa
This commit is contained in:
parent
24b24674ae
commit
049a6b3e80
21 changed files with 1638 additions and 500 deletions
203
common/config.c
203
common/config.c
|
@ -21,44 +21,8 @@ static char *mystrip(char *str);
|
|||
#include "emu.h"
|
||||
#include <pico/pico.h>
|
||||
|
||||
extern menu_entry opt_entries[];
|
||||
extern menu_entry opt2_entries[];
|
||||
extern menu_entry cdopt_entries[];
|
||||
extern menu_entry ctrlopt_entries[];
|
||||
extern const int opt_entry_count;
|
||||
extern const int opt2_entry_count;
|
||||
extern const int cdopt_entry_count;
|
||||
extern const int ctrlopt_entry_count;
|
||||
#ifdef PSP
|
||||
extern menu_entry opt3_entries[];
|
||||
extern const int opt3_entry_count;
|
||||
#endif
|
||||
|
||||
static menu_entry *cfg_opts[] =
|
||||
{
|
||||
opt_entries,
|
||||
opt2_entries,
|
||||
cdopt_entries,
|
||||
ctrlopt_entries,
|
||||
#ifdef PSP
|
||||
opt3_entries,
|
||||
#endif
|
||||
};
|
||||
|
||||
static const int *cfg_opt_counts[] =
|
||||
{
|
||||
&opt_entry_count,
|
||||
&opt2_entry_count,
|
||||
&cdopt_entry_count,
|
||||
&ctrlopt_entry_count,
|
||||
#ifdef PSP
|
||||
&opt3_entry_count,
|
||||
#endif
|
||||
};
|
||||
|
||||
#define NL "\r\n"
|
||||
|
||||
|
||||
static int seek_sect(FILE *f, const char *section)
|
||||
{
|
||||
char line[128], *tmp;
|
||||
|
@ -82,79 +46,10 @@ static int seek_sect(FILE *f, const char *section)
|
|||
|
||||
static void custom_write(FILE *f, const menu_entry *me, int no_def)
|
||||
{
|
||||
char *str, str24[24];
|
||||
char str24[24];
|
||||
|
||||
switch (me->id)
|
||||
{
|
||||
case MA_OPT_RENDERER:
|
||||
if (no_def && !((defaultConfig.s_PicoOpt^PicoOpt)&POPT_ALT_RENDERER) &&
|
||||
!((defaultConfig.EmuOpt^currentConfig.EmuOpt)&0x80)) return;
|
||||
if (PicoOpt&POPT_ALT_RENDERER)
|
||||
str =
|
||||
#ifndef PSP
|
||||
"8bit "
|
||||
#endif
|
||||
"fast";
|
||||
else if (currentConfig.EmuOpt&0x80)
|
||||
str =
|
||||
#ifndef PSP
|
||||
"16bit "
|
||||
#endif
|
||||
"accurate";
|
||||
else
|
||||
str = "8bit accurate";
|
||||
fprintf(f, "Renderer = %s", str);
|
||||
break;
|
||||
|
||||
case MA_OPT_SCALING:
|
||||
if (no_def && defaultConfig.scaling == currentConfig.scaling) return;
|
||||
#ifdef __GP2X__
|
||||
switch (currentConfig.scaling) {
|
||||
default: str = "OFF"; break;
|
||||
case 1: str = "hw horizontal"; break;
|
||||
case 2: str = "hw horiz. + vert."; break;
|
||||
case 3: str = "sw horizontal"; break;
|
||||
}
|
||||
fprintf(f, "Scaling = %s", str);
|
||||
#endif
|
||||
break;
|
||||
case MA_OPT_FRAMESKIP:
|
||||
if (no_def && defaultConfig.Frameskip == currentConfig.Frameskip) return;
|
||||
if (currentConfig.Frameskip < 0)
|
||||
strcpy(str24, "Auto");
|
||||
else sprintf(str24, "%i", currentConfig.Frameskip);
|
||||
fprintf(f, "Frameskip = %s", str24);
|
||||
break;
|
||||
case MA_OPT_SOUND_QUALITY:
|
||||
if (no_def && !((defaultConfig.s_PicoOpt^PicoOpt)&POPT_EN_STEREO) &&
|
||||
defaultConfig.s_PsndRate == PsndRate) return;
|
||||
str = (PicoOpt&POPT_EN_STEREO)?"stereo":"mono";
|
||||
fprintf(f, "Sound Quality = %i %s", PsndRate, str);
|
||||
break;
|
||||
case MA_OPT_REGION:
|
||||
if (no_def && defaultConfig.s_PicoRegion == PicoRegionOverride &&
|
||||
defaultConfig.s_PicoAutoRgnOrder == PicoAutoRgnOrder) return;
|
||||
strncpy(str24, me_region_name(PicoRegionOverride, PicoAutoRgnOrder), 23); str24[23] = 0;
|
||||
fprintf(f, "Region = %s", mystrip(str24));
|
||||
break;
|
||||
case MA_OPT_CONFIRM_STATES:
|
||||
if (no_def && !((defaultConfig.EmuOpt^currentConfig.EmuOpt)&(5<<9))) return;
|
||||
switch ((currentConfig.EmuOpt >> 9) & 5) {
|
||||
default: str = "OFF"; break;
|
||||
case 1: str = "writes"; break;
|
||||
case 4: str = "loads"; break;
|
||||
case 5: str = "both"; break;
|
||||
}
|
||||
fprintf(f, "Confirm savestate = %s", str);
|
||||
break;
|
||||
case MA_OPT_CPU_CLOCKS:
|
||||
if (no_def && defaultConfig.CPUclock == currentConfig.CPUclock) return;
|
||||
#ifdef __GP2X__
|
||||
fprintf(f, "GP2X CPU clocks = %i", currentConfig.CPUclock);
|
||||
#elif defined(PSP)
|
||||
fprintf(f, "PSP CPU clock = %i", currentConfig.CPUclock);
|
||||
#endif
|
||||
break;
|
||||
case MA_OPT2_GAMMA:
|
||||
if (no_def && defaultConfig.gamma == currentConfig.gamma) return;
|
||||
fprintf(f, "Gamma correction = %.3f", (double)currentConfig.gamma / 100.0);
|
||||
|
@ -299,7 +194,7 @@ int config_writesect(const char *fname, const char *section)
|
|||
FILE *fo = NULL, *fn = NULL; // old and new
|
||||
int no_defaults = 0; // avoid saving defaults
|
||||
menu_entry *me;
|
||||
int t, i, tlen, ret;
|
||||
int t, tlen, ret;
|
||||
char line[128], *tmp;
|
||||
|
||||
if (section != NULL)
|
||||
|
@ -368,30 +263,34 @@ write:
|
|||
if (section != NULL)
|
||||
fprintf(fn, "[%s]" NL, section);
|
||||
|
||||
for (t = 0; t < sizeof(cfg_opts) / sizeof(cfg_opts[0]); t++)
|
||||
me = me_list_get_first();
|
||||
while (me != NULL)
|
||||
{
|
||||
me = cfg_opts[t];
|
||||
tlen = *(cfg_opt_counts[t]);
|
||||
for (i = 0; i < tlen; i++, me++)
|
||||
{
|
||||
if (!me->need_to_save) continue;
|
||||
if ((me->beh != MB_ONOFF && me->beh != MB_RANGE) || me->name == NULL)
|
||||
custom_write(fn, me, no_defaults);
|
||||
else if (me->beh == MB_ONOFF) {
|
||||
if (!no_defaults || ((*(int *)me->var ^ default_var(me)) & me->mask))
|
||||
fprintf(fn, "%s = %i" NL, me->name, (*(int *)me->var & me->mask) ? 1 : 0);
|
||||
} else if (me->beh == MB_RANGE) {
|
||||
if (!no_defaults || (*(int *)me->var ^ default_var(me)))
|
||||
fprintf(fn, "%s = %i" NL, me->name, *(int *)me->var);
|
||||
}
|
||||
}
|
||||
int dummy;
|
||||
if (!me->need_to_save)
|
||||
goto next;
|
||||
if (me->beh == MB_OPT_ONOFF) {
|
||||
if (!no_defaults || ((*(int *)me->var ^ default_var(me)) & me->mask))
|
||||
fprintf(fn, "%s = %i" NL, me->name, (*(int *)me->var & me->mask) ? 1 : 0);
|
||||
} else if (me->beh == MB_OPT_RANGE) {
|
||||
if (!no_defaults || (*(int *)me->var ^ default_var(me)))
|
||||
fprintf(fn, "%s = %i" NL, me->name, *(int *)me->var);
|
||||
} else if (me->name != NULL && me->generate_name != NULL) {
|
||||
strncpy(line, me->generate_name(0, &dummy), sizeof(line));
|
||||
line[sizeof(line) - 1] = 0;
|
||||
mystrip(line);
|
||||
fprintf(fn, "%s = %s" NL, me->name, line);
|
||||
} else
|
||||
custom_write(fn, me, no_defaults);
|
||||
next:
|
||||
me = me_list_get_next();
|
||||
}
|
||||
|
||||
/* input: save device names */
|
||||
for (t = 0; t < IN_MAX_DEVS; t++)
|
||||
{
|
||||
const int *binds = in_get_dev_binds(t);
|
||||
const char *name = in_get_dev_name(t, 0);
|
||||
const char *name = in_get_dev_name(t, 0, 0);
|
||||
if (binds == NULL || name == NULL)
|
||||
continue;
|
||||
|
||||
|
@ -402,7 +301,7 @@ write:
|
|||
for (t = 0; t < IN_MAX_DEVS; t++)
|
||||
{
|
||||
const int *binds = in_get_dev_binds(t);
|
||||
const char *name = in_get_dev_name(t, 0);
|
||||
const char *name = in_get_dev_name(t, 0, 0);
|
||||
char strbind[16];
|
||||
int count;
|
||||
|
||||
|
@ -449,7 +348,7 @@ int config_writelrom(const char *fname)
|
|||
int size;
|
||||
FILE *f;
|
||||
|
||||
if (strlen(loadedRomFName) == 0) return -1;
|
||||
if (strlen(rom_fname_loaded) == 0) return -1;
|
||||
|
||||
f = fopen(fname, "r");
|
||||
if (f != NULL)
|
||||
|
@ -482,7 +381,7 @@ int config_writelrom(const char *fname)
|
|||
fwrite(old_data, 1, optr - old_data, f);
|
||||
free(old_data);
|
||||
}
|
||||
fprintf(f, "LastUsedROM = %s" NL, loadedRomFName);
|
||||
fprintf(f, "LastUsedROM = %s" NL, rom_fname_loaded);
|
||||
fclose(f);
|
||||
return 0;
|
||||
}
|
||||
|
@ -513,9 +412,9 @@ int config_readlrom(const char *fname)
|
|||
tmp++;
|
||||
mystrip(tmp);
|
||||
|
||||
len = sizeof(loadedRomFName);
|
||||
strncpy(loadedRomFName, tmp, len);
|
||||
loadedRomFName[len-1] = 0;
|
||||
len = sizeof(rom_fname_loaded);
|
||||
strncpy(rom_fname_loaded, tmp, len);
|
||||
rom_fname_loaded[len-1] = 0;
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
|
@ -773,7 +672,7 @@ static unsigned char input_dev_map[IN_MAX_DEVS];
|
|||
static void parse(const char *var, const char *val)
|
||||
{
|
||||
menu_entry *me;
|
||||
int t, i, tlen, tmp, ret = 0;
|
||||
int tmp, ret = 0;
|
||||
|
||||
if (strcasecmp(var, "LastUsedROM") == 0)
|
||||
return; /* handled elsewhere */
|
||||
|
@ -814,30 +713,30 @@ static void parse(const char *var, const char *val)
|
|||
return;
|
||||
}
|
||||
|
||||
for (t = 0; t < sizeof(cfg_opts) / sizeof(cfg_opts[0]) && ret == 0; t++)
|
||||
me = me_list_get_first();
|
||||
while (me != NULL && ret == 0)
|
||||
{
|
||||
me = cfg_opts[t];
|
||||
tlen = *(cfg_opt_counts[t]);
|
||||
for (i = 0; i < tlen && ret == 0; i++, me++)
|
||||
{
|
||||
if (!me->need_to_save) continue;
|
||||
if (me->name != NULL) {
|
||||
if (strcasecmp(var, me->name) != 0) continue; // surely not this one
|
||||
if (me->beh == MB_ONOFF) {
|
||||
tmp = atoi(val);
|
||||
if (tmp) *(int *)me->var |= me->mask;
|
||||
else *(int *)me->var &= ~me->mask;
|
||||
return;
|
||||
} else if (me->beh == MB_RANGE) {
|
||||
tmp = atoi(val);
|
||||
if (tmp < me->min) tmp = me->min;
|
||||
if (tmp > me->max) tmp = me->max;
|
||||
*(int *)me->var = tmp;
|
||||
return;
|
||||
}
|
||||
if (!me->need_to_save)
|
||||
goto next;
|
||||
if (me->name != NULL && me->name[0] != 0) {
|
||||
if (strcasecmp(var, me->name) != 0)
|
||||
goto next; /* surely not this one */
|
||||
if (me->beh == MB_OPT_ONOFF) {
|
||||
tmp = atoi(val);
|
||||
if (tmp) *(int *)me->var |= me->mask;
|
||||
else *(int *)me->var &= ~me->mask;
|
||||
return;
|
||||
} else if (me->beh == MB_OPT_RANGE) {
|
||||
tmp = atoi(val);
|
||||
if (tmp < me->min) tmp = me->min;
|
||||
if (tmp > me->max) tmp = me->max;
|
||||
*(int *)me->var = tmp;
|
||||
return;
|
||||
}
|
||||
ret = custom_read(me, var, val);
|
||||
}
|
||||
ret = custom_read(me, var, val);
|
||||
next:
|
||||
me = me_list_get_next();
|
||||
}
|
||||
if (!ret) lprintf("config_readsect: unhandled var: \"%s\"\n", var);
|
||||
}
|
||||
|
|
25
common/emu.c
25
common/emu.c
|
@ -16,6 +16,7 @@
|
|||
#include "lprintf.h"
|
||||
#include "config.h"
|
||||
#include "common.h"
|
||||
#include "plat.h"
|
||||
|
||||
#include <pico/pico_int.h>
|
||||
#include <pico/patch.h>
|
||||
|
@ -25,23 +26,21 @@
|
|||
|
||||
char *PicoConfigFile = "config.cfg";
|
||||
currentConfig_t currentConfig, defaultConfig;
|
||||
int rom_loaded = 0;
|
||||
char noticeMsg[64] = { 0, };
|
||||
int state_slot = 0;
|
||||
int config_slot = 0, config_slot_current = 0;
|
||||
char loadedRomFName[512] = { 0, };
|
||||
int kb_combo_keys = 0, kb_combo_acts = 0; // keys and actions which need button combos
|
||||
int pico_inp_mode = 0;
|
||||
int engineState = PGS_Menu;
|
||||
|
||||
/* TODO: len checking */
|
||||
char rom_fname_reload[512] = { 0, };
|
||||
char rom_fname_loaded[512] = { 0, };
|
||||
int rom_loaded = 0;
|
||||
|
||||
unsigned char *movie_data = NULL;
|
||||
static int movie_size = 0;
|
||||
|
||||
// provided by platform code:
|
||||
extern void emu_noticeMsgUpdated(void);
|
||||
extern int emu_getMainDir(char *dst, int len);
|
||||
extern void menu_romload_prepare(const char *rom_name);
|
||||
extern void menu_romload_end(void);
|
||||
|
||||
|
||||
// utilities
|
||||
static void strlwr_(char *string)
|
||||
|
@ -492,8 +491,8 @@ int emu_ReloadRom(char *rom_fname)
|
|||
if (currentConfig.EmuOpt & EOPT_USE_SRAM)
|
||||
emu_SaveLoadGame(1, 1);
|
||||
|
||||
strncpy(loadedRomFName, rom_fname, sizeof(loadedRomFName)-1);
|
||||
loadedRomFName[sizeof(loadedRomFName)-1] = 0;
|
||||
strncpy(rom_fname_loaded, rom_fname, sizeof(rom_fname_loaded)-1);
|
||||
rom_fname_loaded[sizeof(rom_fname_loaded)-1] = 0;
|
||||
rom_loaded = 1;
|
||||
return 1;
|
||||
|
||||
|
@ -518,8 +517,8 @@ static void romfname_ext(char *dst, const char *prefix, const char *ext)
|
|||
int prefix_len = 0;
|
||||
|
||||
// make save filename
|
||||
p = loadedRomFName+strlen(loadedRomFName)-1;
|
||||
for (; p >= loadedRomFName && *p != PATH_SEP_C; p--); p++;
|
||||
p = rom_fname_loaded + strlen(rom_fname_loaded) - 1;
|
||||
for (; p >= rom_fname_loaded && *p != PATH_SEP_C; p--); p++;
|
||||
*dst = 0;
|
||||
if (prefix) {
|
||||
int len = emu_getMainDir(dst, 512);
|
||||
|
@ -527,7 +526,7 @@ static void romfname_ext(char *dst, const char *prefix, const char *ext)
|
|||
prefix_len = len + strlen(prefix);
|
||||
}
|
||||
#ifdef UIQ3
|
||||
else p = loadedRomFName; // backward compatibility
|
||||
else p = rom_fname_loaded; // backward compatibility
|
||||
#endif
|
||||
strncpy(dst + prefix_len, p, 511-prefix_len);
|
||||
dst[511-8] = 0;
|
||||
|
|
|
@ -50,11 +50,14 @@ extern char noticeMsg[64];
|
|||
extern int state_slot;
|
||||
extern int config_slot, config_slot_current;
|
||||
extern unsigned char *movie_data;
|
||||
extern char loadedRomFName[512]; // last loaded ROM filename
|
||||
extern int kb_combo_keys, kb_combo_acts; // keys and actions which need button combos
|
||||
extern int pico_inp_mode;
|
||||
|
||||
extern char rom_fname_reload[512]; // ROM to try loading on next PGS_ReloadRom
|
||||
extern char rom_fname_loaded[512]; // currently loaded ROM filename
|
||||
|
||||
// engine states
|
||||
extern int engineState;
|
||||
enum TPicoGameState {
|
||||
PGS_Paused = 1,
|
||||
PGS_Running,
|
||||
|
|
|
@ -380,14 +380,14 @@ int in_menu_wait_any(int timeout_ms)
|
|||
}
|
||||
|
||||
/* wait for menu input, do autorepeat */
|
||||
int in_menu_wait(int interesting)
|
||||
int in_menu_wait(int interesting, int autorep_delay_ms)
|
||||
{
|
||||
static int inp_prev = 0;
|
||||
static int repeats = 0;
|
||||
int ret, release = 0, wait = 666;
|
||||
|
||||
if (repeats)
|
||||
wait = 33;
|
||||
wait = autorep_delay_ms;
|
||||
|
||||
ret = in_menu_wait_any(wait);
|
||||
if (ret == inp_prev)
|
||||
|
@ -439,14 +439,22 @@ int in_get_dev_bind_count(int dev_id)
|
|||
return in_bind_count(in_devices[dev_id].drv_id);
|
||||
}
|
||||
|
||||
const char *in_get_dev_name(int dev_id, int must_be_active)
|
||||
const char *in_get_dev_name(int dev_id, int must_be_active, int skip_pfix)
|
||||
{
|
||||
const char *name, *tmp;
|
||||
|
||||
if (dev_id < 0 || dev_id >= IN_MAX_DEVS)
|
||||
return NULL;
|
||||
|
||||
if (must_be_active && !in_devices[dev_id].probed)
|
||||
return NULL;
|
||||
return in_devices[dev_id].name;
|
||||
|
||||
name = in_devices[dev_id].name;
|
||||
tmp = strchr(name, ':');
|
||||
if (tmp != NULL)
|
||||
name = tmp + 1;
|
||||
|
||||
return name;
|
||||
}
|
||||
|
||||
/* never returns NULL */
|
||||
|
|
|
@ -31,7 +31,7 @@ int in_update(void);
|
|||
void in_set_blocking(int is_blocking);
|
||||
int in_update_keycode(int *dev_id, int *is_down, int timeout_ms);
|
||||
int in_menu_wait_any(int timeout_ms);
|
||||
int in_menu_wait(int interesting);
|
||||
int in_menu_wait(int interesting, int autorep_delay_ms);
|
||||
int in_get_dev_bind_count(int dev_id);
|
||||
void in_config_start(void);
|
||||
int in_config_parse_dev(const char *dev_name);
|
||||
|
@ -42,5 +42,5 @@ void in_debug_dump(void);
|
|||
|
||||
const int *in_get_dev_binds(int dev_id);
|
||||
const int *in_get_dev_def_binds(int dev_id);
|
||||
const char *in_get_dev_name(int dev_id, int must_be_active);
|
||||
const char *in_get_dev_name(int dev_id, int must_be_active, int skip_pfix);
|
||||
const char *in_get_key_name(int dev_id, int keycode);
|
||||
|
|
1685
common/menu.c
1685
common/menu.c
File diff suppressed because it is too large
Load diff
|
@ -4,9 +4,6 @@
|
|||
void menu_init(void);
|
||||
void text_out16(int x, int y, const char *texto, ...);
|
||||
void smalltext_out16(int x, int y, const char *texto, int color);
|
||||
void smalltext_out16_lim(int x, int y, const char *texto, int color, int max);
|
||||
void menu_draw_selection(int x, int y, int w);
|
||||
void debug_menu_loop(void);
|
||||
|
||||
extern char menuErrorMsg[64];
|
||||
|
||||
|
@ -15,7 +12,9 @@ typedef enum
|
|||
MB_NONE = 1, /* no auto processing */
|
||||
MB_OPT_ONOFF, /* ON/OFF setting */
|
||||
MB_OPT_RANGE, /* [min-max] setting */
|
||||
MB_OPT_CUSTOM,
|
||||
MB_OPT_CUSTOM, /* custom value */
|
||||
MB_OPT_CUSTONOFF,
|
||||
MB_OPT_CUSTRANGE,
|
||||
} menu_behavior;
|
||||
|
||||
typedef enum
|
||||
|
@ -97,6 +96,8 @@ typedef enum
|
|||
MA_CTRL_PLAYER2,
|
||||
MA_CTRL_EMU,
|
||||
MA_CTRL_TURBO_RATE,
|
||||
MA_CTRL_DEV_FIRST,
|
||||
MA_CTRL_DEV_NEXT,
|
||||
MA_CTRL_DONE,
|
||||
} menu_id;
|
||||
|
||||
|
@ -107,22 +108,47 @@ typedef struct
|
|||
menu_id id;
|
||||
void *var; /* for on-off/range settings */
|
||||
int mask; /* bit to toggle for on/off */
|
||||
signed char min; /* for ranged integer settings, to be sign-extended */
|
||||
signed char max;
|
||||
char enabled;
|
||||
char need_to_save;
|
||||
int (*submenu_handler)(menu_id id);
|
||||
const char * (*generate_name)(int is_left);
|
||||
signed short min; /* for ranged integer settings, to be sign-extended */
|
||||
signed short max;
|
||||
int enabled:1;
|
||||
int need_to_save:1;
|
||||
int selectable:1;
|
||||
int (*handler)(menu_id id, int keys);
|
||||
const char * (*generate_name)(menu_id id, int *offs);
|
||||
} menu_entry;
|
||||
|
||||
#define mee_submenu_id(name, id, handler) \
|
||||
{ name, MB_NONE, id, NULL, 0, 0, 0, 1, 0, handler, NULL }
|
||||
#define mee_handler_id(name, id, handler) \
|
||||
{ name, MB_NONE, id, NULL, 0, 0, 0, 1, 0, 1, handler, NULL }
|
||||
|
||||
#define mee_submenu(name, handler) \
|
||||
mee_submenu_id(name, MA_NONE, handler)
|
||||
#define mee_handler(name, handler) \
|
||||
mee_handler_id(name, MA_NONE, handler)
|
||||
|
||||
#define mee_handler_mkname_id(id, handler, name_func) \
|
||||
{ "", MB_NONE, id, NULL, 0, 0, 0, 1, 0, 1, handler, name_func }
|
||||
|
||||
#define mee_label(name) \
|
||||
{ name, MB_NONE, MA_NONE, NULL, 0, 0, 0, 1, 0, 0, NULL, NULL }
|
||||
|
||||
#define mee_label_mk(id, name_func) \
|
||||
{ "", MB_NONE, id, NULL, 0, 0, 0, 1, 0, 0, NULL, name_func }
|
||||
|
||||
#define mee_onoff(name, id, var, mask) \
|
||||
{ name, MB_OPT_ONOFF, id, &(var), mask, 0, 0, 1, 1, 1, NULL, NULL }
|
||||
|
||||
#define mee_range(name, id, var, min, max) \
|
||||
{ name, MB_OPT_RANGE, id, &(var), 0, min, max, 1, 1, 1, NULL, NULL }
|
||||
|
||||
#define mee_cust(name, id, handler, name_func) \
|
||||
{ name, MB_OPT_CUSTOM, id, NULL, 0, 0, 0, 1, 1, 1, handler, name_func }
|
||||
|
||||
#define mee_onoff_cust(name, id, var, mask, name_func) \
|
||||
{ name, MB_OPT_CUSTONOFF, id, &(var), mask, 0, 0, 1, 1, 1, NULL, name_func }
|
||||
|
||||
#define mee_range_cust(name, id, var, min, max, name_func) \
|
||||
{ name, MB_OPT_CUSTRANGE, id, &(var), 0, min, max, 1, 1, 1, NULL, name_func }
|
||||
|
||||
#define mee_end \
|
||||
{ NULL, 0, 0, NULL, 0, 0, 0, 0, 0, NULL, NULL }
|
||||
{ NULL, 0, 0, NULL, 0, 0, 0, 0, 0, 0, NULL, NULL }
|
||||
|
||||
typedef struct
|
||||
{
|
||||
|
@ -133,18 +159,8 @@ typedef struct
|
|||
extern me_bind_action me_ctrl_actions[15];
|
||||
extern me_bind_action emuctrl_actions[]; // platform code
|
||||
|
||||
|
||||
typedef void (me_draw_custom_f)(const menu_entry *entry, int x, int y, void *param);
|
||||
|
||||
/* TODO: move? */
|
||||
int me_id2offset(const menu_entry *entries, menu_id id);
|
||||
void me_enable(menu_entry *entries, menu_id id, int enable);
|
||||
int me_count_enabled(const menu_entry *ent);
|
||||
menu_id me_index2id(const menu_entry *entries, int index);
|
||||
void me_draw(const menu_entry *entries, int count, int x, int y, me_draw_custom_f *cust_draw, void *param);
|
||||
int me_process(menu_entry *entries, menu_id id, int is_next);
|
||||
|
||||
const char *me_region_name(unsigned int code, int auto_order);
|
||||
menu_entry *me_list_get_first(void);
|
||||
menu_entry *me_list_get_next(void);
|
||||
|
||||
void menu_darken_bg(void *dst, int pixels, int darker);
|
||||
|
||||
|
|
|
@ -1,22 +1,32 @@
|
|||
/* stuff to be implemented by platform code */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern const char * const keyNames[];
|
||||
/* stuff to be implemented by platform code */
|
||||
/* TODO rename all these */
|
||||
extern const char * const keyNames[]; // TODO rm
|
||||
void emu_prepareDefaultConfig(void);
|
||||
void emu_platformDebugCat(char *str);
|
||||
void emu_forcedFrame(int opts);
|
||||
void emu_startSound(void);
|
||||
void emu_endSound(void);
|
||||
void emu_waitSound(void);
|
||||
void emu_ResetGame(void); // TODO mv rm?
|
||||
|
||||
void emu_noticeMsgUpdated(void);
|
||||
int emu_getMainDir(char *dst, int len);
|
||||
void menu_romload_prepare(const char *rom_name);
|
||||
void menu_romload_end(void);
|
||||
|
||||
/* menu: enter (switch bpp, etc), begin/end drawing */
|
||||
void plat_video_menu_enter(int is_rom_loaded);
|
||||
void plat_video_menu_begin(void);
|
||||
void plat_video_menu_end(void);
|
||||
|
||||
int plat_is_dir(const char *path);
|
||||
|
||||
const char *plat_get_credits(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
|
13
common/posix.h
Normal file
13
common/posix.h
Normal file
|
@ -0,0 +1,13 @@
|
|||
/* define POSIX stuff: dirent, scandir, getcwd */
|
||||
#if defined(__linux__)
|
||||
|
||||
#include <dirent.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#else
|
||||
|
||||
#error "must define dirent"
|
||||
|
||||
#endif
|
||||
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue