diff options
-rw-r--r-- | trace.arc.t | 21 | ||||
-rw-r--r-- | trace.mu | 21 |
2 files changed, 42 insertions, 0 deletions
diff --git a/trace.arc.t b/trace.arc.t index bf81f3f9..a4389e04 100644 --- a/trace.arc.t +++ b/trace.arc.t @@ -325,5 +325,26 @@ schedule: done with routine") " mem : ((3 integer)): 3 <= 4 " " schedule : done with routine ")) (prn "F - process-key expands current trace segment on <enter>")) +; and cursor should remain on the top-level line +(run-code main3 + (replace-character 2:terminal-address/raw ((#\* literal))) + ) +(when (~memory-contains-array memory*.4 + (+ " " + " " + "+ main/ 0 : (((1 integer)) <- ((copy)) ((1 literal))) " + "+ main/ 0 : 1 => ((1 integer)) " + "+ main/ 1 : (((2 integer)) <- ((copy)) ((3 literal))) " + "+ main/ 1 : 3 => ((2 integer)) " + "+ main/ 2 : (((3 integer)) <- ((add)) ((1 integer)) ((2 integer))) " + "* main/ 2 : 4 => ((3 integer)) " + ;^cursor + " mem : ((1 integer)): 1 <= 1 " + " mem : ((2 integer)): 2 <= 3 " + " mem : ((1 integer)) => 1 " + " mem : ((2 integer)) => 3 " + " mem : ((3 integer)): 3 <= 4 " + " schedule : done with routine ")) + (prn "F - process-key positions cursor on top of trace after expanding")) (reset) diff --git a/trace.mu b/trace.mu index 7bce1e8d..295d0f24 100644 --- a/trace.mu +++ b/trace.mu @@ -253,6 +253,25 @@ } ]) +(function back-to [ + (default-space:space-address <- new space:literal 30:literal/capacity) + (0:space-address/names:screen-state <- next-input) + (screen:terminal-address <- next-input) + (target-row:integer <- next-input) + { begin + (below-target?:boolean <- greater-than cursor-row:integer/space:1 target-row:integer) + (break-unless below-target?:boolean) + (up 0:space-address screen:terminal-address) + (loop) + } + { begin + (above-target?:boolean <- less-than cursor-row:integer/space:1 target-row:integer) + (break-unless above-target?:boolean) + (down 0:space-address screen:terminal-address) + (loop) + } +]) + (function add-line [ ; move down, adding line if necessary (default-space:space-address <- new space:literal 30:literal/capacity) (0:space-address/names:screen-state <- next-input) @@ -326,8 +345,10 @@ { begin (toggle?:boolean <- equal c:character ((#\newline literal))) (break-unless toggle?:boolean) + (target-row:integer <- copy cursor-row:integer/space:1) (tr:instruction-trace-address <- index traces:instruction-trace-address-array-address/deref cursor-row:integer/space:1) (print-instruction-trace screen:terminal-address tr:instruction-trace-address 0:space-address/screen-state) + (back-to 0:space-address/screen-state screen:terminal-address target-row:integer) (reply nil:literal) } (reply nil:literal) |