static UI_CALLBACK(load_snapshot) { if (!ui_emulation_is_paused()) interrupt_maincpu_trigger_trap(load_snapshot_trap, (void *)0); else load_snapshot_trap(0, 0); }
static UI_CALLBACK(save_quicksnap) { char *fname = util_concat(archdep_home_path(), "/", VICEUSERDIR, "/", machine_name, ".vsf", NULL); interrupt_maincpu_trigger_trap(save_snapshot_trap, (void *)fname); }
static int trap(const HWND hwnd, int (*func)(trapaction_t*), const char *path) { const int paused = isEmulatorPaused(); #ifdef WATCOM_COMPILE trapaction_t handle; handle.pending = TRUE; handle.rc = 0; handle.path = path; handle.hwnd = hwnd; handle.execute = func; #else trapaction_t handle = { TRUE, 0, path, hwnd, func }; #endif interrupt_maincpu_trigger_trap(exec_func, &handle); emulator_resume(); while (handle.pending) { DosSleep(1); } if (paused) { emulator_pause(); } return handle.rc; }
/** \brief Display UI to save a snapshot file * * \param[in] parent parent widget * \param[in] user_data unused */ void uisnapshot_save_file(GtkWidget *parent, gpointer user_data) { if (!ui_emulation_is_paused()) { interrupt_maincpu_trigger_trap(save_snapshot_trap, NULL); } else { save_snapshot_trap(0, NULL); } }
static void network_prepare_next_frame(void) { current_frame = (current_frame + 1) % frame_delta; frame_to_play = (current_frame + 1) % frame_delta; event_clear_list(&(frame_event_list[current_frame])); event_register_event_list(&(frame_event_list[current_frame])); interrupt_maincpu_trigger_trap(network_event_record_sync_test, (void *)0); }
static UI_CALLBACK(load_quicksnap) { char *fname = util_concat(archdep_home_path(), "/", VICEUSERDIR, "/", machine_name, ".vsf", NULL); if (!ui_emulation_is_paused()) interrupt_maincpu_trigger_trap(load_snapshot_trap, (void *)fname); else load_snapshot_trap(0, (void *)fname); }
void ui_pause_emulation(int flag) { if (flag && !is_paused) { is_paused = 1; interrupt_maincpu_trigger_trap(pause_trap, 0); } else { ui_display_paused(0); is_paused = 0; } }
static void network_init_frame_event_list(void) { frame_event_list = lib_malloc(sizeof(event_list_state_t) * frame_delta); memset(frame_event_list, 0, sizeof(event_list_state_t) * frame_delta); current_frame = 0; frame_buffer_full = 0; event_register_event_list(&(frame_event_list[0])); event_init_image_list(); interrupt_maincpu_trigger_trap(network_event_record_sync_test, (void *)0); }
static void advance_hassnapshot(void) { switch (check("READY.", AUTOSTART_WAIT_BLINK)) { case YES: log_message(autostart_log, "Restoring snapshot."); interrupt_maincpu_trigger_trap(load_snapshot_trap, (void*)0); autostartmode = AUTOSTART_DONE; break; case NO: autostart_disable(); break; case NOT_YET: break; } }
void network_hook(void) { if (network_mode == NETWORK_IDLE) return; if (network_mode == NETWORK_SERVER) { if (vice_network_select_poll_one(listen_socket) != 0) { network_socket = vice_network_accept(listen_socket); if (network_socket) interrupt_maincpu_trigger_trap(network_server_connect_trap, (void *)0); } } if (network_connected()) { network_hook_connected_send(); network_hook_connected_receive(); #ifdef NETWORK_DEBUG log_debug("network_hook timing: %5ld %5ld %5ld; total: %5ld", t2-t1, t3-t2, t4-t3, t4-t1); #endif } }
static UI_CALLBACK(save_snapshot) { interrupt_maincpu_trigger_trap(save_snapshot_trap, (void *)0); }
/* Dispatch all the pending keyboard commands. */ void kbd_flush_commands(void) { int i; if (num_queued_commands == 0) { return; } for (i = 0; i < num_queued_commands; i++) { switch (command_queue[i].type) { case KCMD_HARD_RESET: vsync_suspend_speed_eval(); machine_trigger_reset(MACHINE_RESET_MODE_HARD); break; case KCMD_RESET: vsync_suspend_speed_eval(); machine_trigger_reset(MACHINE_RESET_MODE_SOFT); break; case KCMD_RESTORE_PRESSED: machine_set_restore_key(1); break; case KCMD_RESTORE_RELEASED: machine_set_restore_key(0); break; case KCMD_FREEZE: if (freeze_function != NULL) { freeze_function(); } break; case KCMD_FLIP_NEXT: fliplist_attach_head(8, 1); break; case KCMD_FLIP_PREVIOUS: fliplist_attach_head(8, 0); break; case KCMD_FLIP_ADD: fliplist_add_image(8); break; case KCMD_FLIP_REMOVE: fliplist_remove(-1, NULL); break; case KCMD_TOGGLE_WARP: resources_toggle("WarpMode", NULL); break; case KCMD_MENU: interrupt_maincpu_trigger_trap(menu_trap, (void *)command_queue[i].data); break; case KCMD_TOGGLE_STATUSBAR: if (statusbar_enabled()) { resources_set_int("ShowStatusbar", STATUSBAR_MODE_OFF); } else { resources_set_int("ShowStatusbar", STATUSBAR_MODE_ON); } break; case KCMD_DATASETTE_START: datasette_control(DATASETTE_CONTROL_START); break; case KCMD_DATASETTE_STOP: datasette_control(DATASETTE_CONTROL_STOP); break; case KCMD_DATASETTE_FORWARD: datasette_control(DATASETTE_CONTROL_FORWARD); break; case KCMD_DATASETTE_REWIND: datasette_control(DATASETTE_CONTROL_REWIND); break; case KCMD_DATASETTE_RECORD: datasette_control(DATASETTE_CONTROL_RECORD); break; default: log_error(LOG_DEFAULT, "Unknown keyboard command %d.", (int)command_queue[i].type); } } num_queued_commands = 0; }
/** \brief Gtk event handler for the QuickSave menu item * * \param[in] parent parent widget * \param[in] user_data unused */ void uisnapshot_quicksave_snapshot(GtkWidget *parent, gpointer user_data) { char *fname = quicksnap_filename(); interrupt_maincpu_trigger_trap(quicksave_snapshot_trap, (void *)fname); }
int network_connect_client(void) { vice_network_socket_address_t * server_addr; FILE *f; BYTE *buf; BYTE recv_buf4[4]; size_t buf_size; if (network_mode != NETWORK_IDLE) return -1; vsync_suspend_speed_eval(); snapshotfilename = NULL; f = archdep_mkstemp_fd(&snapshotfilename, MODE_WRITE); if (f == NULL) { ui_error(translate_text(IDGS_CANNOT_CREATE_SNAPSHOT_S_SELECT)); return -1; } server_addr = vice_network_address_generate(server_name, server_port); if (server_addr == NULL) { ui_error(translate_text(IDGS_CANNOT_RESOLVE_S), server_name); return -1; } network_socket = vice_network_client(server_addr); vice_network_address_close(server_addr); server_addr = NULL; if ( ! network_socket ) { ui_error(translate_text(IDGS_CANNOT_CONNECT_TO_S), server_name, server_port); lib_free(snapshotfilename); return -1; } ui_display_statustext(translate_text(IDGS_RECEIVING_SNAPSHOT_SERVER), 0); if (network_recv_buffer(network_socket, recv_buf4, 4) < 0) { lib_free(snapshotfilename); vice_network_socket_close(network_socket); return -1; } buf_size = (size_t)util_le_buf4_to_int(recv_buf4); buf = lib_malloc(buf_size); if (network_recv_buffer(network_socket, buf, (int)buf_size) < 0) { lib_free(snapshotfilename); vice_network_socket_close(network_socket); return -1; } if (fwrite(buf, 1, buf_size, f) <= 0) { log_debug("network_connect_client write failed."); } fclose(f); lib_free(buf); interrupt_maincpu_trigger_trap(network_client_connect_trap, (void *)0); vsync_suspend_speed_eval(); return 0; }