Skip to content

Commit a8565b9

Browse files
committed
Removed app.options entirely, now rely on the handler
The advantage is that the menu entries are generated on demand, so they'll always be up to date irt language. I think it would be better if the options_handler was in charge of showing the dialog too. It would allow in-app menus and it will also avoid the careless unbounded copying. But this first step preserves the previous behavior.
1 parent 92da1ec commit a8565b9

File tree

12 files changed

+96
-72
lines changed

12 files changed

+96
-72
lines changed

components/retro-go/rg_gui.c

+2-6
Original file line numberDiff line numberDiff line change
@@ -1570,6 +1570,7 @@ void rg_gui_options_menu(void)
15701570
#ifdef RG_ENABLE_NETWORKING
15711571
*opt++ = (rg_gui_option_t){0, _("Wi-Fi options"), NULL, RG_DIALOG_FLAG_NORMAL, &wifi_cb};
15721572
#endif
1573+
*opt++ = (rg_gui_option_t)RG_DIALOG_END;
15731574
}
15741575
// App settings that are shown only inside a game
15751576
else
@@ -1579,14 +1580,9 @@ void rg_gui_options_menu(void)
15791580
*opt++ = (rg_gui_option_t){0, _("Filter"), "-", RG_DIALOG_FLAG_NORMAL, &filter_update_cb};
15801581
*opt++ = (rg_gui_option_t){0, _("Border"), "-", RG_DIALOG_FLAG_NORMAL, &border_update_cb};
15811582
*opt++ = (rg_gui_option_t){0, _("Speed"), "-", RG_DIALOG_FLAG_NORMAL, &speedup_update_cb};
1583+
*opt++ = (rg_gui_option_t)RG_DIALOG_END;
15821584
}
15831585

1584-
size_t extra_options = get_dialog_items_count(app->options);
1585-
for (size_t i = 0; i < extra_options; i++)
1586-
*opt++ = app->options[i];
1587-
1588-
*opt++ = (rg_gui_option_t)RG_DIALOG_END;
1589-
15901586
if (app->handlers.options)
15911587
app->handlers.options(options + get_dialog_items_count(options));
15921588

components/retro-go/rg_system.c

+9-5
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@ typedef struct
3737
rg_stats_t statistics;
3838
} panic_trace_t;
3939

40+
typedef struct
41+
{
42+
uint32_t magicWord;
43+
} boot_config_t;
44+
4045
typedef struct
4146
{
4247
int32_t totalFrames, fullFrames, partFrames, ticks;
@@ -78,6 +83,7 @@ static struct
7883

7984
// The trace will survive a software reset
8085
static RTC_NOINIT_ATTR panic_trace_t panicTrace;
86+
// static RTC_NOINIT_ATTR boot_config_t bootConfig;
8187
static RTC_NOINIT_ATTR time_t rtcValue;
8288
static bool panicTraceCleared = false;
8389
static bool exitCalled = false;
@@ -367,21 +373,20 @@ static void platform_init(void)
367373
#endif
368374
}
369375

370-
rg_app_t *rg_system_reinit(int sampleRate, const rg_handlers_t *handlers, const rg_gui_option_t *options)
376+
rg_app_t *rg_system_reinit(int sampleRate, const rg_handlers_t *handlers, void *_unused)
371377
{
372378
if (!app.initialized)
373-
return rg_system_init(sampleRate, handlers, options);
379+
return rg_system_init(sampleRate, handlers, NULL);
374380

375381
app.sampleRate = sampleRate;
376382
if (handlers)
377383
app.handlers = *handlers;
378-
app.options = options;
379384
rg_audio_set_sample_rate(app.sampleRate);
380385

381386
return &app;
382387
}
383388

384-
rg_app_t *rg_system_init(int sampleRate, const rg_handlers_t *handlers, const rg_gui_option_t *options)
389+
rg_app_t *rg_system_init(int sampleRate, const rg_handlers_t *handlers, void *_unused)
385390
{
386391
RG_ASSERT(app.initialized == false, "rg_system_init() was already called.");
387392
bool enterRecoveryMode = false;
@@ -414,7 +419,6 @@ rg_app_t *rg_system_init(int sampleRate, const rg_handlers_t *handlers, const rg
414419
.isRelease = false,
415420
.logLevel = RG_LOG_DEBUG,
416421
#endif
417-
.options = options, // TO DO: We should make a copy of it?
418422
};
419423

420424
// Do this very early, may be needed to enable serial console

components/retro-go/rg_system.h

+2-3
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,6 @@ typedef struct
185185
int logLevel;
186186
int saveSlot;
187187
const char *romPath;
188-
const rg_gui_option_t *options;
189188
rg_handlers_t handlers;
190189
bool initialized;
191190
} rg_app_t;
@@ -210,8 +209,8 @@ typedef struct
210209
int freeStackMain;
211210
} rg_stats_t;
212211

213-
rg_app_t *rg_system_init(int sampleRate, const rg_handlers_t *handlers, const rg_gui_option_t *options);
214-
rg_app_t *rg_system_reinit(int sampleRate, const rg_handlers_t *handlers, const rg_gui_option_t *options);
212+
rg_app_t *rg_system_init(int sampleRate, const rg_handlers_t *handlers, void *_unused);
213+
rg_app_t *rg_system_reinit(int sampleRate, const rg_handlers_t *handlers, void *_unused);
215214
void rg_system_panic(const char *context, const char *message) __attribute__((noreturn));
216215
void rg_system_shutdown(void) __attribute__((noreturn));
217216
void rg_system_sleep(void) __attribute__((noreturn));

fmsx/main/main.c

+9-7
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,13 @@ static void audioTask(void *arg)
410410
}
411411
}
412412

413+
static void options_handler(rg_gui_option_t *dest)
414+
{
415+
*dest++ = (rg_gui_option_t){0, _("Input"), "-", RG_DIALOG_FLAG_NORMAL, &input_select_cb};
416+
*dest++ = (rg_gui_option_t){0, _("Crop"), "-", RG_DIALOG_FLAG_NORMAL, &crop_select_cb};
417+
*dest++ = (rg_gui_option_t)RG_DIALOG_END;
418+
}
419+
413420
void app_main(void)
414421
{
415422
const rg_handlers_t handlers = {
@@ -418,15 +425,10 @@ void app_main(void)
418425
.reset = &reset_handler,
419426
.screenshot = &screenshot_handler,
420427
.event = &event_handler,
421-
};
422-
const rg_gui_option_t options[] = {
423-
{0, _("Input"), "-", RG_DIALOG_FLAG_NORMAL, &input_select_cb},
424-
{0, _("Crop"), "-", RG_DIALOG_FLAG_NORMAL, &crop_select_cb},
425-
// {0, "fMSX Menu", NULL, RG_DIALOG_FLAG_NORMAL, &fmsx_menu_cb},
426-
RG_DIALOG_END,
428+
.options = &options_handler,
427429
};
428430

429-
app = rg_system_init(AUDIO_SAMPLE_RATE, &handlers, options);
431+
app = rg_system_init(AUDIO_SAMPLE_RATE, &handlers, NULL);
430432
// This is probably not right, but the emulator outputs 440 samples per frame??
431433
rg_system_set_tick_rate(55);
432434

gwenesis/main/main.c

+10-7
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,14 @@ static void event_handler(int event, void *arg)
189189
}
190190
}
191191

192+
static void options_handler(rg_gui_option_t *dest)
193+
{
194+
*dest++ = (rg_gui_option_t){0, _("YM2612 audio "), "-", RG_DIALOG_FLAG_NORMAL, &yfm_update_cb};
195+
*dest++ = (rg_gui_option_t){0, _("SN76489 audio"), "-", RG_DIALOG_FLAG_NORMAL, &sn76489_update_cb};
196+
*dest++ = (rg_gui_option_t){0, _("Z80 emulation"), "-", RG_DIALOG_FLAG_NORMAL, &z80_update_cb};
197+
*dest++ = (rg_gui_option_t)RG_DIALOG_END;
198+
}
199+
192200
void app_main(void)
193201
{
194202
const rg_handlers_t handlers = {
@@ -197,15 +205,10 @@ void app_main(void)
197205
.reset = &reset_handler,
198206
.screenshot = &screenshot_handler,
199207
.event = &event_handler,
200-
};
201-
const rg_gui_option_t options[] = {
202-
{0, _("YM2612 audio "), "-", RG_DIALOG_FLAG_NORMAL, &yfm_update_cb},
203-
{0, _("SN76489 audio"), "-", RG_DIALOG_FLAG_NORMAL, &sn76489_update_cb},
204-
{0, _("Z80 emulation"), "-", RG_DIALOG_FLAG_NORMAL, &z80_update_cb},
205-
RG_DIALOG_END
208+
.options = &options_handler,
206209
};
207210

208-
app = rg_system_init(AUDIO_SAMPLE_RATE / 2, &handlers, options);
211+
app = rg_system_init(AUDIO_SAMPLE_RATE / 2, &handlers, NULL);
209212

210213
yfm_enabled = rg_settings_get_number(NS_APP, SETTING_YFM_EMULATION, 1);
211214
sn76489_enabled = rg_settings_get_number(NS_APP, SETTING_SN76489_EMULATION, 0);

prboom-go/main/main.c

+8-5
Original file line numberDiff line numberDiff line change
@@ -524,6 +524,12 @@ bool is_iwad(const char *path)
524524
return header[0] == 'I' && header[1] == 'W';
525525
}
526526

527+
static void options_handler(rg_gui_option_t *dest)
528+
{
529+
*dest++ = (rg_gui_option_t){0, _("Gamma Boost"), "-", RG_DIALOG_FLAG_NORMAL, &gamma_update_cb};
530+
*dest++ = (rg_gui_option_t)RG_DIALOG_END;
531+
}
532+
527533
void app_main()
528534
{
529535
const rg_handlers_t handlers = {
@@ -532,13 +538,10 @@ void app_main()
532538
.reset = &reset_handler,
533539
.screenshot = &screenshot_handler,
534540
.event = &event_handler,
535-
};
536-
const rg_gui_option_t options[] = {
537-
{0, _("Gamma Boost"), "-", RG_DIALOG_FLAG_NORMAL, &gamma_update_cb},
538-
RG_DIALOG_END
541+
.options = &options_handler,
539542
};
540543

541-
app = rg_system_init(AUDIO_SAMPLE_RATE, &handlers, options);
544+
app = rg_system_init(AUDIO_SAMPLE_RATE, &handlers, NULL);
542545
rg_system_set_tick_rate(TICRATE);
543546

544547
const rg_display_t *display = rg_display_get_info();

retro-core/main/main_gbc.c

+11-8
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,15 @@ static void audio_callback(void *buffer, size_t length)
232232
audio_time += rg_system_timer() - startTime;
233233
}
234234

235+
static void options_handler(rg_gui_option_t *dest)
236+
{
237+
*dest++ = (rg_gui_option_t){0, _("Palette"), "-", RG_DIALOG_FLAG_NORMAL, &palette_update_cb};
238+
*dest++ = (rg_gui_option_t){0, _("RTC config"), "-", RG_DIALOG_FLAG_NORMAL, &rtc_update_cb};
239+
*dest++ = (rg_gui_option_t){0, _("SRAM autosave"), "-", RG_DIALOG_FLAG_NORMAL, &sram_autosave_cb};
240+
*dest++ = (rg_gui_option_t){0, _("Enable BIOS"), "-", RG_DIALOG_FLAG_NORMAL, &enable_bios_cb};
241+
*dest++ = (rg_gui_option_t)RG_DIALOG_END;
242+
}
243+
235244
void gbc_main(void)
236245
{
237246
const rg_handlers_t handlers = {
@@ -240,16 +249,10 @@ void gbc_main(void)
240249
.reset = &reset_handler,
241250
.screenshot = &screenshot_handler,
242251
.event = &event_handler,
243-
};
244-
const rg_gui_option_t options[] = {
245-
{0, _("Palette"), "-", RG_DIALOG_FLAG_NORMAL, &palette_update_cb},
246-
{0, _("RTC config"), "-", RG_DIALOG_FLAG_NORMAL, &rtc_update_cb},
247-
{0, _("SRAM autosave"), "-", RG_DIALOG_FLAG_NORMAL, &sram_autosave_cb},
248-
{0, _("Enable BIOS"), "-", RG_DIALOG_FLAG_NORMAL, &enable_bios_cb},
249-
RG_DIALOG_END
252+
.options = &options_handler,
250253
};
251254

252-
app = rg_system_reinit(AUDIO_SAMPLE_RATE, &handlers, options);
255+
app = rg_system_reinit(AUDIO_SAMPLE_RATE, &handlers, NULL);
253256

254257
updates[0] = rg_surface_create(GB_WIDTH, GB_HEIGHT, RG_PIXEL_565_BE, MEM_ANY);
255258
updates[1] = rg_surface_create(GB_WIDTH, GB_HEIGHT, RG_PIXEL_565_BE, MEM_ANY);

retro-core/main/main_lynx.cpp

+8-6
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,12 @@ static bool reset_handler(bool hard)
179179
return true;
180180
}
181181

182+
static void options_handler(rg_gui_option_t *dest)
183+
{
184+
*dest++ = (rg_gui_option_t){0, _("Rotation"), (char *)"-", RG_DIALOG_FLAG_NORMAL, &rotation_cb};
185+
*dest++ = (rg_gui_option_t)RG_DIALOG_END;
186+
}
187+
182188
extern "C" void lynx_main(void)
183189
{
184190
const rg_handlers_t handlers = {
@@ -192,12 +198,8 @@ extern "C" void lynx_main(void)
192198
.options = NULL,
193199
.about = NULL,
194200
};
195-
const rg_gui_option_t options[] = {
196-
{0, _("Rotation"), (char *)"-", RG_DIALOG_FLAG_NORMAL, &rotation_cb},
197-
RG_DIALOG_END
198-
};
199201

200-
app = rg_system_reinit(AUDIO_SAMPLE_RATE, &handlers, options);
202+
app = rg_system_reinit(AUDIO_SAMPLE_RATE, &handlers, NULL);
201203

202204
// the HANDY_SCREEN_WIDTH * HANDY_SCREEN_WIDTH is deliberate because of rotation
203205
updates[0] = rg_surface_create(HANDY_SCREEN_WIDTH, HANDY_SCREEN_WIDTH, RG_PIXEL_565_BE, MEM_FAST);
@@ -213,7 +215,7 @@ extern "C" void lynx_main(void)
213215
}
214216

215217
gPrimaryFrameBuffer = (UBYTE*)currentUpdate->data;
216-
gAudioBuffer = (SWORD*)malloc(AUDIO_BUFFER_LENGTH * 4);
218+
gAudioBuffer = new SWORD[AUDIO_BUFFER_LENGTH * 2];
217219
gAudioEnabled = 1;
218220

219221
if (app->bootFlags & RG_BOOT_RESUME)

retro-core/main/main_nes.c

+11-8
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,15 @@ static void nsf_draw_overlay(void)
179179
}
180180

181181

182+
static void options_handler(rg_gui_option_t *dest)
183+
{
184+
*dest++ = (rg_gui_option_t){0, _("Palette"), "-", RG_DIALOG_FLAG_NORMAL, &palette_update_cb};
185+
*dest++ = (rg_gui_option_t){0, _("Overscan"), "-", RG_DIALOG_FLAG_NORMAL, &overscan_update_cb};
186+
*dest++ = (rg_gui_option_t){0, _("Crop sides"), "-", RG_DIALOG_FLAG_NORMAL, &autocrop_update_cb};
187+
*dest++ = (rg_gui_option_t){0, _("Sprite limit"), "-", RG_DIALOG_FLAG_NORMAL, &sprite_limit_cb};
188+
*dest++ = (rg_gui_option_t)RG_DIALOG_END;
189+
}
190+
182191
void nes_main(void)
183192
{
184193
const rg_handlers_t handlers = {
@@ -187,16 +196,10 @@ void nes_main(void)
187196
.reset = &reset_handler,
188197
.event = &event_handler,
189198
.screenshot = &screenshot_handler,
190-
};
191-
const rg_gui_option_t options[] = {
192-
{0, _("Palette"), "-", RG_DIALOG_FLAG_NORMAL, &palette_update_cb},
193-
{0, _("Overscan"), "-", RG_DIALOG_FLAG_NORMAL, &overscan_update_cb},
194-
{0, _("Crop sides"), "-", RG_DIALOG_FLAG_NORMAL, &autocrop_update_cb},
195-
{0, _("Sprite limit"), "-", RG_DIALOG_FLAG_NORMAL, &sprite_limit_cb},
196-
RG_DIALOG_END
199+
.options = &options_handler,
197200
};
198201

199-
app = rg_system_reinit(AUDIO_SAMPLE_RATE, &handlers, options);
202+
app = rg_system_reinit(AUDIO_SAMPLE_RATE, &handlers, NULL);
200203

201204
overscan = rg_settings_get_number(NS_APP, SETTING_OVERSCAN, 1);
202205
autocrop = rg_settings_get_number(NS_APP, SETTING_AUTOCROP, 0);

retro-core/main/main_pce.c

+8-5
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,12 @@ static bool reset_handler(bool hard)
181181
return true;
182182
}
183183

184+
static void options_handler(rg_gui_option_t *dest)
185+
{
186+
*dest++ = (rg_gui_option_t){0, _("Overscan"), "-", RG_DIALOG_FLAG_NORMAL, &overscan_update_cb};
187+
*dest++ = (rg_gui_option_t)RG_DIALOG_END;
188+
}
189+
184190
void pce_main(void)
185191
{
186192
const rg_handlers_t handlers = {
@@ -189,13 +195,10 @@ void pce_main(void)
189195
.reset = &reset_handler,
190196
.screenshot = &screenshot_handler,
191197
.event = &event_handler,
192-
};
193-
const rg_gui_option_t options[] = {
194-
{0, _("Overscan"), "-", RG_DIALOG_FLAG_NORMAL, &overscan_update_cb},
195-
RG_DIALOG_END
198+
.options = &options_handler,
196199
};
197200

198-
app = rg_system_reinit(AUDIO_SAMPLE_RATE, &handlers, options);
201+
app = rg_system_reinit(AUDIO_SAMPLE_RATE, &handlers, NULL);
199202
overscan = rg_settings_get_number(NS_APP, SETTING_OVERSCAN, 1);
200203

201204
updates[0] = rg_surface_create(XBUF_WIDTH, XBUF_HEIGHT, RG_PIXEL_PAL565_BE, MEM_FAST);

retro-core/main/main_sms.c

+8-5
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,12 @@ static rg_gui_event_t palette_update_cb(rg_gui_option_t *opt, rg_gui_event_t eve
9393
return RG_DIALOG_VOID;
9494
}
9595

96+
static void options_handler(rg_gui_option_t *dest)
97+
{
98+
*dest++ = (rg_gui_option_t){0, _("Palette"), "-", RG_DIALOG_FLAG_NORMAL, &palette_update_cb};
99+
*dest++ = (rg_gui_option_t)RG_DIALOG_END;
100+
}
101+
96102
void sms_main(void)
97103
{
98104
const rg_handlers_t handlers = {
@@ -101,13 +107,10 @@ void sms_main(void)
101107
.reset = &reset_handler,
102108
.screenshot = &screenshot_handler,
103109
.event = &event_handler,
104-
};
105-
const rg_gui_option_t options[] = {
106-
{0, _("Palette"), "-", RG_DIALOG_FLAG_NORMAL, &palette_update_cb},
107-
RG_DIALOG_END
110+
.options = &options_handler,
108111
};
109112

110-
app = rg_system_reinit(AUDIO_SAMPLE_RATE, &handlers, options);
113+
app = rg_system_reinit(AUDIO_SAMPLE_RATE, &handlers, NULL);
111114

112115
updates[0] = rg_surface_create(SMS_WIDTH, SMS_HEIGHT, RG_PIXEL_PAL565_BE, MEM_FAST);
113116
updates[1] = rg_surface_create(SMS_WIDTH, SMS_HEIGHT, RG_PIXEL_PAL565_BE, MEM_FAST);

retro-core/main/main_snes.c

+10-7
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,14 @@ static void S9xAudioCallback(void)
284284
}
285285
#endif
286286

287+
static void options_handler(rg_gui_option_t *dest)
288+
{
289+
*dest++ = (rg_gui_option_t){0, _("Audio enable"), "-", RG_DIALOG_FLAG_NORMAL, &apu_toggle_cb};
290+
*dest++ = (rg_gui_option_t){0, _("Audio filter"), "-", RG_DIALOG_FLAG_NORMAL, &lowpass_filter_cb};
291+
*dest++ = (rg_gui_option_t){0, _("Controls"), "-", RG_DIALOG_FLAG_NORMAL, &menu_keymap_cb};
292+
*dest++ = (rg_gui_option_t)RG_DIALOG_END;
293+
}
294+
287295
void snes_main(void)
288296
{
289297
const rg_handlers_t handlers = {
@@ -292,14 +300,9 @@ void snes_main(void)
292300
.reset = &reset_handler,
293301
.screenshot = &screenshot_handler,
294302
.event = &event_handler,
303+
.options = &options_handler,
295304
};
296-
const rg_gui_option_t options[] = {
297-
{0, _("Audio enable"), "-", RG_DIALOG_FLAG_NORMAL, &apu_toggle_cb},
298-
{0, _("Audio filter"), "-", RG_DIALOG_FLAG_NORMAL, &lowpass_filter_cb},
299-
{0, _("Controls"), "-", RG_DIALOG_FLAG_NORMAL, &menu_keymap_cb},
300-
RG_DIALOG_END,
301-
};
302-
app = rg_system_reinit(AUDIO_SAMPLE_RATE, &handlers, options);
305+
app = rg_system_reinit(AUDIO_SAMPLE_RATE, &handlers, NULL);
303306

304307
apu_enabled = rg_settings_get_number(NS_APP, SETTING_APU_EMULATION, 1);
305308

0 commit comments

Comments
 (0)