diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2015-06-06 10:38:51 -0700 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2015-06-06 10:48:59 -0700 |
commit | 548cd00ab03cc064e3fa06d23282627759dd9214 (patch) | |
tree | 2ce6a4ebe096dbb1f3ef566dc2ba3ac32f76811d /078run_interactive.cc | |
parent | 3434223916977d98cbd767dc8342b03d607dc2a2 (diff) | |
download | mu-548cd00ab03cc064e3fa06d23282627759dd9214.tar.gz |
1535 - repl: less hacky printing of results
Diffstat (limited to '078run_interactive.cc')
-rw-r--r-- | 078run_interactive.cc | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/078run_interactive.cc b/078run_interactive.cc index 910147f1..73ebcbe5 100644 --- a/078run_interactive.cc +++ b/078run_interactive.cc @@ -37,13 +37,13 @@ void run_interactive(long long int address) { if (Recipe_number.find("interactive") == Recipe_number.end()) Recipe_number["interactive"] = Next_recipe_number++; if (is_integer(tmp.str())) { - cerr << "=> " << Memory[to_integer(tmp.str())] << '\n'; + print_value_of_location_as_response(to_integer(tmp.str())); ++current_step_index(); return; } //? exit(0); //? 1 if (Name[Recipe_number["interactive"]].find(tmp.str()) != Name[Recipe_number["interactive"]].end()) { - cerr << "=> " << Memory[Name[Recipe_number["interactive"]][tmp.str()]] << '\n'; + print_value_of_location_as_response(Name[Recipe_number["interactive"]][tmp.str()]); ++current_step_index(); return; } @@ -62,6 +62,30 @@ void run_interactive(long long int address) { Current_routine->calls.push_front(call(Recipe_number["interactive"])); } +void print_value_of_location_as_response(long long int address) { + // convert to string + ostringstream out; + out << "=> " << Memory[address]; + string result = out.str(); + // handle regular I/O + if (!tb_is_active()) { + cerr << result << '\n'; + return; + } + // raw I/O; use termbox to print + long long int bound = SIZE(result); + if (bound > tb_width()) bound = tb_width(); + for (long long int i = 0; i < bound; ++i) { + tb_change_cell(i, Display_row, result.at(i), /*computer's color*/245, TB_BLACK); + } + // newline + if (Display_row < tb_height()-1) + ++Display_row; + Display_column = 0; + tb_set_cursor(Display_column, Display_row); + tb_present(); +} + //:: debugging tool :(before "End Primitive Recipe Declarations") |