static void load_snapshot_trap(WORD unused_addr, void *unused_data) { if (autostart_program_name && machine_read_snapshot((char *)autostart_program_name, 0) < 0) { snapshot_display_error(); } ui_update_menus(); }
/** \brief CPU trap handler for the QuickSave snapshot menu item * * \param[in] addr memory address (unused) * \param[in] data quicksave snapshot filename */ static void quicksave_snapshot_trap(uint16_t addr, void *data) { char *filename = (char *)data; vsync_suspend_speed_eval(); debug_gtk3("Quicksaving file '%s'.", filename); if (machine_write_snapshot(filename, TRUE, TRUE, 0) < 0) { snapshot_display_error(); } lib_free(filename); }
/** \brief CPU trap handler for the load snapshot dialog * * \param[in] addr memory address (unused) * \param[in] data unused */ static void load_snapshot_trap(uint16_t addr, void *data) { const char *filters[] = { "*.vsf", NULL }; gchar *filename; gchar buffer[1024]; vsync_suspend_speed_eval(); filename = vice_gtk3_open_file_dialog("Open snapshot file", "Snapshot files", filters, NULL); if (filename != NULL) { /* load snapshot */ if (machine_read_snapshot(filename, 0) < 0) { snapshot_display_error(); g_snprintf(buffer, 1024, "Failed to load snapshot '%s'", filename); } else { g_snprintf(buffer, 1024, "Loaded snapshot '%s'", filename); } g_free(filename); } }
/** \brief Show dialog to save a snapshot */ static void save_snapshot_dialog(void) { GtkWidget *dialog; GtkWidget *extra; GtkWidget *roms_widget; GtkWidget *disks_widget; gint response_id; int save_roms; int save_disks; dialog = gtk_file_chooser_dialog_new("Save snapshot file", ui_get_active_window(), GTK_FILE_CHOOSER_ACTION_SAVE, "Save", GTK_RESPONSE_ACCEPT, "Cancel", GTK_RESPONSE_CANCEL, NULL); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), create_file_chooser_filter(file_chooser_filter_snapshot, FALSE)); /* create extras widget */ extra = gtk_grid_new(); gtk_grid_set_column_spacing(GTK_GRID(extra), 16); disks_widget = gtk_check_button_new_with_label("Save attached disks"); roms_widget = gtk_check_button_new_with_label("Save attached ROMs"); gtk_grid_attach(GTK_GRID(extra), disks_widget, 0, 0, 1, 1); gtk_grid_attach(GTK_GRID(extra), roms_widget, 1, 0, 1, 1); gtk_widget_show_all(extra); gtk_file_chooser_set_extra_widget(GTK_FILE_CHOOSER(dialog), extra); response_id = gtk_dialog_run(GTK_DIALOG(dialog)); save_roms = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(roms_widget)); save_disks = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(disks_widget)); debug_gtk3("response_id = %d.", response_id); debug_gtk3("save disks = %s.", save_disks ? "YES" : "NO"); debug_gtk3("save ROMs = %s.", save_roms ? "YES" : "NO"); if (response_id == GTK_RESPONSE_ACCEPT) { gchar *filename; filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); if (filename != NULL) { char *fname_copy; char buffer[1024]; fname_copy = util_add_extension_const(filename, "vsf"); if (machine_write_snapshot(fname_copy, save_roms, save_disks, 0) < 0) { snapshot_display_error(); g_snprintf(buffer, 1024, "Failed to save snapshot '%s'", fname_copy); } else { debug_gtk3("Wrote snapshot file '%s'.", fname_copy); g_snprintf(buffer, 1024, "Saved snapshot '%s'", fname_copy); } lib_free(fname_copy); g_free(filename); } } gtk_widget_destroy(dialog); }