diff --git a/cli_main.c b/cli_main.c index 649bddb..9f65527 100644 --- a/cli_main.c +++ b/cli_main.c @@ -1,6 +1,7 @@ #include "bank.h" #include "base.h" #include "field.h" +#include "gbuffer.h" #include "sim.h" #include @@ -102,6 +103,8 @@ int main(int argc, char** argv) { oevent_list_init(&oevent_list); Usz max_ticks = (Usz)ticks; for (Usz i = 0; i < max_ticks; ++i) { + mbuffer_clear(mbuf_r.buffer, field.height, field.width); + oevent_list_clear(&oevent_list); orca_run(field.buffer, mbuf_r.buffer, field.height, field.width, i, &oevent_list, 0); } diff --git a/sim.c b/sim.c index c44d69a..aceb5a2 100644 --- a/sim.c +++ b/sim.c @@ -741,8 +741,6 @@ void orca_run(Glyph* restrict gbuf, Mark* restrict mbuf, Usz height, Usz width, Usz tick_number, Oevent_list* oevent_list, Usz random_seed) { Glyph vars_slots[Glyphs_index_count]; memset(vars_slots, '.', sizeof(vars_slots)); - mbuffer_clear(mbuf, height, width); - oevent_list_clear(oevent_list); Oper_extra_params extras; extras.vars_slots = &vars_slots[0]; extras.oevent_list = oevent_list; diff --git a/tui_main.c b/tui_main.c index 4a0b408..71f435d 100644 --- a/tui_main.c +++ b/tui_main.c @@ -1097,6 +1097,14 @@ double ged_secs_to_deadline(Ged const* a) { void ged_reset_clock(Ged* a) { a->clock = stm_now(); } +void clear_and_run_vm(Glyph* restrict gbuf, Mark* restrict mbuf, Usz height, + Usz width, Usz tick_number, Oevent_list* oevent_list, + Usz random_seed) { + mbuffer_clear(mbuf, height, width); + oevent_list_clear(oevent_list); + orca_run(gbuf, mbuf, height, width, tick_number, oevent_list, random_seed); +} + void ged_do_stuff(Ged* a) { double secs_span = 60.0 / (double)a->bpm / 4.0; Oosc_dev* oosc_dev = a->oosc_dev; @@ -1143,8 +1151,9 @@ void ged_do_stuff(Ged* a) { if (do_play) { apply_time_to_sustained_notes(oosc_dev, midi_mode, secs_span, &a->susnote_list, &a->time_to_next_note_off); - orca_run(a->field.buffer, a->mbuf_r.buffer, a->field.height, a->field.width, - a->tick_num, &a->oevent_list, a->random_seed); + clear_and_run_vm(a->field.buffer, a->mbuf_r.buffer, a->field.height, + a->field.width, a->tick_num, &a->oevent_list, + a->random_seed); ++a->tick_num; a->needs_remarking = true; a->is_draw_dirty = true; @@ -1234,9 +1243,9 @@ void ged_draw(Ged* a, WINDOW* win) { a->field.width); field_copy(&a->field, &a->scratch_field); mbuf_reusable_ensure_size(&a->mbuf_r, a->field.height, a->field.width); - orca_run(a->scratch_field.buffer, a->mbuf_r.buffer, a->field.height, - a->field.width, a->tick_num, &a->scratch_oevent_list, - a->random_seed); + clear_and_run_vm(a->scratch_field.buffer, a->mbuf_r.buffer, a->field.height, + a->field.width, a->tick_num, &a->scratch_oevent_list, + a->random_seed); a->needs_remarking = false; } int win_h = a->win_h; @@ -1641,8 +1650,9 @@ void ged_input_cmd(Ged* a, Ged_input_cmd ev) { break; case Ged_input_cmd_step_forward: undo_history_push(&a->undo_hist, &a->field, a->tick_num); - orca_run(a->field.buffer, a->mbuf_r.buffer, a->field.height, a->field.width, - a->tick_num, &a->oevent_list, a->random_seed); + clear_and_run_vm(a->field.buffer, a->mbuf_r.buffer, a->field.height, + a->field.width, a->tick_num, &a->oevent_list, + a->random_seed); ++a->tick_num; a->activity_counter += a->oevent_list.count; a->needs_remarking = true;