void menubar_create(menubar_t *m) { memset(m,0,sizeof(menubar_t)); m->info.type = G_MENUBAR; m->info.x = 0; m->info.y = 0; m->info.w = 256; m->info.h = 14; m->info.draw = (drawfunc_t)menubar_draw; m->info.event = (eventfunc_t)menubar_event; //this needs to be configurable, passed thru in a struct menu_create(&m->menus[0],"\x1",4,recentitems); menu_create(&m->menus[1],"Game",m->menus[0].info.x + m->menus[0].info.w + 4,gameitems); menu_create(&m->menus[2],"Config",m->menus[1].info.x + m->menus[1].info.w + 4,configitems); menu_create(&m->menus[3],"Cheat",m->menus[2].info.x + m->menus[2].info.w + 4,miscitems); menu_create(&m->menus[4],"Debug",m->menus[3].info.x + m->menus[3].info.w + 4,debugitems); button_create(&m->buttons[0],"x",(256 - 9) - 3,3,click_quit); button_create(&m->buttons[1],"\x9",(256 - 33) - 1,3,click_minimize); button_create(&m->buttons[2],"\x8",(256 - 21) - 3,3,click_togglefullscreen); load_create(&m->load); video_create(&m->video); input_create(&m->input); gui_input_create(&m->guiinput); sound_create(&m->sound); devices_create(&m->devices); palette_create(&m->palette); options_create(&m->options); mappers_create(&m->mappers); paths_create(&m->paths); supported_mappers_create(&m->supported_mappers); rom_info_create(&m->rom_info); tracer_create(&m->tracer); memory_viewer_create(&m->memory_viewer); nt_create(&m->nametable_viewer); pt_create(&m->patterntable_viewer); about_create(&m->about); m->menus[0].click = click_recent; m->menus[1].click = click_game; m->menus[2].click = click_config; m->menus[3].click = click_debug; m->menus[4].click = click_misc; m->menus[0].user = m; m->menus[1].user = m; m->menus[2].user = m; m->menus[3].user = m; m->menus[4].user = m; //'hack' to update the 'freeze data' caption click_freezedata(); click_freezedata(); }
int main(int argc, char **argv) { const char *appdir = fs_appdir(); if (!fs_mkdir(appdir)) { LOG_FATAL("Failed to create app directory %s", appdir); } // load base options from config char config[PATH_MAX] = {0}; snprintf(config, sizeof(config), "%s" PATH_SEPARATOR "config", appdir); options_read(config); // override options from the command line options_parse(&argc, &argv); if (OPTION_help) { options_print_help(); return EXIT_SUCCESS; } if (!exception_handler_install()) { LOG_WARNING("Failed to initialize exception handler"); return EXIT_FAILURE; } struct window *window = win_create(); if (!window) { LOG_WARNING("Failed to initialize window"); return EXIT_FAILURE; } const char *load = argc > 1 ? argv[1] : NULL; if (load && strstr(load, ".trace")) { struct tracer *tracer = tracer_create(window); tracer_run(tracer, load); tracer_destroy(tracer); } else { struct emu *emu = emu_create(window); emu_run(emu, load); emu_destroy(emu); } win_destroy(window); exception_handler_uninstall(); // persist options for next run options_write(config); return EXIT_SUCCESS; }