Mercurial > repos > blastem
diff blastem.c @ 1423:9a3e003bdcb3
Make drag and drop play nice with the menu
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 30 Jun 2017 18:42:52 -0700 |
parents | 909c72c4e5a1 |
children | 2540c05520f2 |
line wrap: on
line diff
--- a/blastem.c Fri Jun 30 00:36:18 2017 -0700 +++ b/blastem.c Fri Jun 30 18:42:52 2017 -0700 @@ -23,6 +23,7 @@ #include "terminal.h" #include "arena.h" #include "config.h" +#include "menu.h" #define BLASTEM_VERSION "0.5.1-pre" @@ -116,14 +117,14 @@ char * save_filename; system_header *current_system; -system_header *menu_context; -system_header *game_context; +system_header *menu_system; +system_header *game_system; void persist_save() { - if (!game_context) { + if (!game_system) { return; } - game_context->persist_save(game_context); + game_system->persist_save(game_system); } char *title; @@ -189,6 +190,17 @@ } current_system->next_rom = strdup(filename); current_system->request_exit(current_system); + if (menu_system && menu_system->type == SYSTEM_GENESIS) { + genesis_context *gen = (genesis_context *)menu_system; + if (gen->extra) { + menu_context *menu = gen->extra; + menu->external_game_load = 1; + } else { + puts("No extra"); + } + } else { + puts("no menu"); + } } int main(int argc, char ** argv) @@ -408,9 +420,9 @@ setup_saves(&cart, &info, current_system); update_title(info.name); if (menu) { - menu_context = current_system; + menu_system = current_system; } else { - game_context = current_system; + game_system = current_system; } current_system->debugger_type = dtype; @@ -424,14 +436,14 @@ if (current_system->next_rom) { char *next_rom = current_system->next_rom; current_system->next_rom = NULL; - if (game_context) { - game_context->persist_save(game_context); + if (game_system) { + game_system->persist_save(game_system); //swap to game context arena and mark all allocated pages in it free if (menu) { - current_system->arena = set_current_arena(game_context->arena); + current_system->arena = set_current_arena(game_system->arena); } mark_all_free(); - game_context->free_context(game_context); + game_system->free_context(game_system); } else { //start a new arena and save old one in suspended genesis context current_system->arena = start_new_arena(); @@ -449,28 +461,28 @@ fatal_error("Failed to detect system type for %s\n", next_rom); } //allocate new system context - game_context = alloc_config_system(stype, &cart, opts,force_region, &info); - if (!game_context) { + game_system = alloc_config_system(stype, &cart, opts,force_region, &info); + if (!game_system) { fatal_error("Failed to configure emulated machine for %s\n", next_rom); } - menu_context->next_context = game_context; - game_context->next_context = menu_context; - setup_saves(&cart, &info, game_context); + menu_system->next_context = game_system; + game_system->next_context = menu_system; + setup_saves(&cart, &info, game_system); update_title(info.name); free(next_rom); menu = 0; - current_system = game_context; + current_system = game_system; current_system->debugger_type = dtype; current_system->enter_debugger = start_in_debugger && menu == debug_target; current_system->start_context(current_system, statefile); - } else if (menu && game_context) { - current_system->arena = set_current_arena(game_context->arena); - current_system = game_context; + } else if (menu && game_system) { + current_system->arena = set_current_arena(game_system->arena); + current_system = game_system; menu = 0; current_system->resume_context(current_system); - } else if (!menu && menu_context) { - current_system->arena = set_current_arena(menu_context->arena); - current_system = menu_context; + } else if (!menu && menu_system) { + current_system->arena = set_current_arena(menu_system->arena); + current_system = menu_system; menu = 1; current_system->resume_context(current_system); } else {