static TUI_MENU_CALLBACK(attach_cartridge_callback) { const char *s; int type = (int)param; if (been_activated) { char *default_item, *directory; char *name; s = cartridge_get_file_name(cartridge_type_to_address(type)); if (s == NULL) { directory = default_item = NULL; } else { util_fname_split(s, &directory, &default_item); } name = tui_file_selector("Attach cartridge image", directory, "*", default_item, NULL, NULL, NULL); if (name != NULL && (s == NULL || strcasecmp(name, s) != 0) && cartridge_attach_image(type, name) < 0) { tui_error("Invalid cartridge image."); } ui_update_menus(); lib_free(name); } /* This is redundant if `been_activated' is nonzero, but let's stay on the safe side. */ s = cartridge_get_file_name(cartridge_type_to_address(type)); if (s == NULL || *s == '\0') { return "(none)"; } else { return s; } }
static TUI_MENU_CALLBACK(load_rom_file_callback) { if (been_activated) { char *name; name = tui_file_selector("Load ROM file", NULL, "*", NULL, NULL, NULL, NULL); if (name != NULL) { if (resources_set_string(param, name) < 0) { ui_error("Could not load ROM file '%s'", name); } lib_free(name); } } return NULL; }
static TUI_MENU_CALLBACK(load_romset_callback) { if (been_activated) { char *name; name = tui_file_selector("Load custom ROM set definition", NULL, "*.vrs", NULL, NULL, NULL, NULL); if (name != NULL) { if (machine_romset_file_load(name) < 0) { ui_error("Could not load ROM set file '%s'", name); } lib_free(name); } } return NULL; }
static TUI_MENU_CALLBACK(attach_cartridge_callback) { if (been_activated) { char *name; int type = (int)param; name = tui_file_selector("Attach cartridge image", NULL, "*", NULL, NULL, NULL, NULL); if (name != NULL && cartridge_attach_image(type, name) < 0) { tui_error("Invalid cartridge image."); } ui_update_menus(); lib_free(name); } return NULL; }
static TUI_MENU_CALLBACK(attach_disk_callback) { const char *s; if (been_activated) { char *default_item, *directory; char *name, *file; unsigned int file_number = 0; s = file_system_get_disk_name((unsigned int)param); util_fname_split(s, &directory, &default_item); name = tui_file_selector("Attach a disk image", directory, "*.d64;*.d71;*.d81;*.g64;*.g41;*.x64;*.p64;*.d80;*.d82;*.d67;*.d1m;*.d2m;*.d4m;" "*.d6z;*.d7z;*.d8z;*.g6z;*.g4z;*.x6z;*.zip;*.gz;*.lzh", default_item, diskcontents_filesystem_read, &file, &file_number); if (file_number > 0) { if (autostart_disk(name, NULL, file_number, AUTOSTART_MODE_RUN) < 0) { tui_error("Cannot autostart disk image."); } else { *behavior = TUI_MENU_BEH_RESUME; } } else if (name != NULL && (s == NULL || strcasecmp(name, s) != 0) && file_system_attach_disk((int)param, name) < 0) { tui_error("Invalid disk image."); } lib_free(file); ui_update_menus(); lib_free(directory); lib_free(default_item); lib_free(name); } s = file_system_get_disk_name((unsigned int)param); if (s == NULL || *s == '\0') { return "(none)"; } else { return s; } }
static TUI_MENU_CALLBACK(custom_palette_callback) { char *resource = (char *)param; if (been_activated) { char *name; name = tui_file_selector("Load custom palette", NULL, "*.vpl", NULL, NULL, NULL, NULL); if (name != NULL) { if (resources_set_string(resource, name) < 0) { tui_error("Invalid palette file"); } ui_update_menus(); lib_free(name); } } return NULL; }
static TUI_MENU_CALLBACK(attach_cartridge_callback) { if (been_activated) { char *default_item, *directory; char *name; const char *s, *filter; int type = (int)param; s = cartridge_get_file_name((WORD)0); util_fname_split(s, &directory, &default_item); filter = (type == CARTRIDGE_CRT) ? "*.crt" : "*"; name = tui_file_selector("Attach cartridge image", directory, filter, default_item, NULL, NULL, NULL); if (name != NULL && (s == NULL || strcasecmp(name, s) != 0) && cartridge_attach_image(type, name) < 0) { tui_error("Invalid cartridge image."); } ui_update_menus(); lib_free(name); } return NULL; }
static TUI_MENU_CALLBACK(attach_tape_callback) { const char *s; if (been_activated) { char *directory, *default_item; char *name, *file; s = tape_get_file_name(); util_fname_split(s, &directory, &default_item); name = tui_file_selector("Attach a tape image", directory, "*.t64;*.tap;*.t6z;*.taz;*.zip;*.gz;*.lzh", default_item, tapecontents_read, &file, NULL); if (file != NULL) { if (autostart_tape(name, file, 0, AUTOSTART_MODE_RUN) < 0) { tui_error("Cannot autostart tape image."); } else { *behavior = TUI_MENU_BEH_RESUME; } lib_free(file); } else if (name != NULL && (s == NULL || strcasecmp(s, name) != 0) && tape_image_attach(1, name) < 0) { tui_error("Invalid tape image."); } ui_update_menus(); lib_free(directory); lib_free(default_item); lib_free(name); } s = tape_get_file_name(); if (s == NULL || *s == '\0') { return "(none)"; } else { return s; } }
static TUI_MENU_CALLBACK(create_disk_image_name_callback) { if (been_activated) { char new_file_name[PATH_MAX]; if (file_name == NULL) { memset(new_file_name, 0, PATH_MAX); } else { strcpy(new_file_name, file_name); } while (tui_input_string("Create disk image", "Enter file name:", new_file_name, PATH_MAX) != -1) { util_remove_spaces(new_file_name); if (*new_file_name == 0) { char *tmp; tmp = tui_file_selector("Create disk image", NULL, "*.d64", NULL, NULL, NULL, NULL); if (tmp != NULL) { strcpy(new_file_name, tmp); lib_free(tmp); } } else { char *extension; char *last_dot; last_dot = strrchr(new_file_name, '.'); if (last_dot == NULL) { extension = image_type_name[file_type]; } else { char *last_slash, *last_backslash, *last_path_separator; last_slash = strrchr(new_file_name, '/'); last_backslash = strrchr(new_file_name, '\\'); if (last_slash == NULL) { last_path_separator = last_backslash; } else if (last_backslash == NULL) { last_path_separator = last_slash; } else if (last_backslash < last_slash) { last_path_separator = last_slash; } else { last_path_separator = last_backslash; } if (last_path_separator == NULL || last_path_separator < last_dot) { extension = ""; } else { extension = image_type_name[file_type]; } } if (file_name == NULL) { file_name = util_concat(new_file_name, extension, NULL); } else { int len = strlen(new_file_name); file_name = lib_realloc(file_name, len + strlen(extension) + 1); memcpy(file_name, new_file_name, len); strcpy(file_name + len, extension); } break; } } } return file_name; }
static char *screenshot_selector(const char *title, char *extension) { return tui_file_selector(title, NULL, extension, NULL, NULL, NULL, NULL); }