inline static void debug_history_step(const char *st) { if (event_record_active()) { if (debug_buffer_ptr + DEBUG_MAXLINELEN >= DEBUG_HISTORY_MAXFILESIZE) { debug_create_new_file(); } debug_buffer_ptr += sprintf(debug_buffer + debug_buffer_ptr, "%s\n", st); } if (event_playback_active()) { char tempstr[DEBUG_MAXLINELEN]; int line_len = sprintf(tempstr, "%s\n", st); if (debug_buffer_ptr >= debug_buffer_size) { debug_open_new_file(); } debug_file_line++; if (strncmp(st, debug_buffer + debug_buffer_ptr, strlen(st)) != 0) { event_playback_stop(); ui_error(translate_text(IDGS_PLAYBACK_ERROR_DIFFERENT) , st, debug_file_line, debug_file_current - 1); } debug_buffer_ptr += line_len; } }
static void ui_update_event_checkbox (GtkWidget *w, gpointer data) { if (data) { event_playback_stop(); } else { event_record_stop(); } }
static UI_CALLBACK(playback_events_stop) { event_playback_stop(); }
static UI_CALLBACK(event_playback_button_callback) { event_playback_stop(); XtUnmanageChild(event_playback_button); }
static void event_alarm_handler(CLOCK offset, void *data) { alarm_unset(event_alarm); /* when recording set a timestamp */ if (record_active) { ui_display_event_time(current_timestamp++, 0); next_timestamp_clk = next_timestamp_clk + machine_get_cycles_per_second(); alarm_set(event_alarm, next_timestamp_clk); return; } /*log_debug("EVENT PLAYBACK %i CLK %i", event_list_current->type, event_list_current->clk);*/ switch (event_list->current->type) { case EVENT_KEYBOARD_MATRIX: keyboard_event_playback(offset, event_list->current->data); break; case EVENT_KEYBOARD_RESTORE: keyboard_restore_event_playback(offset, event_list->current->data); break; case EVENT_JOYSTICK_VALUE: joystick_event_playback(offset, event_list->current->data); break; case EVENT_DATASETTE: datasette_event_playback(offset, event_list->current->data); break; case EVENT_ATTACHIMAGE: event_playback_attach_image(event_list->current->data, event_list->current->size); break; case EVENT_ATTACHDISK: case EVENT_ATTACHTAPE: { /* old style attach via absolute filename and detach*/ unsigned int unit; const char *filename; unit = (unsigned int)((char*)event_list->current->data)[0]; filename = &((char*)event_list->current->data)[1]; if (unit == 1) tape_image_event_playback(unit, filename); else file_system_event_playback(unit, filename); } break; case EVENT_RESETCPU: machine_reset_event_playback(offset, event_list->current->data); break; case EVENT_TIMESTAMP: ui_display_event_time(current_timestamp++, playback_time); break; case EVENT_LIST_END: event_playback_stop(); break; case EVENT_OVERFLOW: break; default: log_error(event_log, "Unknow event type %i.", event_list->current->type); } if (event_list->current->type != EVENT_LIST_END && event_list->current->type != EVENT_RESETCPU) { next_current_list(); next_alarm_set(); } }
/** \brief Gtk event handler for the "Stop playing back events" menu item * * \param[in] parent parent widget * \param[in] user_data unused */ void uisnapshot_history_playback_stop(GtkWidget *parent, gpointer user_data) { event_playback_stop(); }