about summary refs log tree commit diff stats
path: root/trace.mu
diff options
context:
space:
mode:
Diffstat (limited to 'trace.mu')
-rw-r--r--trace.mu33
1 files changed, 23 insertions, 10 deletions
diff --git a/trace.mu b/trace.mu
index 6d7d9d3b..43ff9ce2 100644
--- a/trace.mu
+++ b/trace.mu
@@ -121,6 +121,7 @@
   (default-space:space-address <- new space:literal 30:literal)
   (screen:terminal-address <- next-input)
   (x:instruction-trace-address <- next-input)
+  (screen-state:space-address <- next-input)
   (print-character screen:terminal-address ((#\- literal)))
   (print-character screen:terminal-address ((#\space literal)))
   ; print call stack
@@ -146,7 +147,7 @@
   (print-character screen:terminal-address ((#\space literal)))
   (i:string-address <- get x:instruction-trace-address/deref instruction:offset)
   (print-string screen:terminal-address i:string-address)
-  (cursor-to-next-line screen:terminal-address)
+  (add-line screen-state:space-address screen:terminal-address)
   ; print children
   (ch:trace-address-array-address <- get x:instruction-trace-address/deref children:offset)
   (i:integer <- copy 0:literal)
@@ -164,7 +165,7 @@
     (print-character screen:terminal-address ((#\space literal)))
     (print-character screen:terminal-address ((#\space literal)))
     (print-trace screen:terminal-address t:trace-address)
-    (cursor-to-next-line screen:terminal-address)
+    (add-line screen-state:space-address screen:terminal-address)
     (i:integer <- add i:integer 1:literal)
     (loop)
   }
@@ -174,6 +175,7 @@
   (default-space:space-address <- new space:literal 30:literal)
   (screen:terminal <- next-input)
   (x:instruction-trace-address <- next-input)
+  (screen-state:space-address <- next-input)
   (print-character screen:terminal-address ((#\+ literal)))
   (print-character screen:terminal-address ((#\space literal)))
   ; print call stack
@@ -201,7 +203,7 @@
   (print-character screen:terminal-address ((#\space literal)))
   (i:string-address <- get x:instruction-trace-address/deref instruction:offset)
   (print-string screen:terminal-address i:string-address)
-  (cursor-to-next-line screen:terminal-address)
+  (add-line screen-state:space-address screen:terminal-address)
 ])
 
 ;; data structure
@@ -220,8 +222,8 @@
   (0:space-address/names:screen-state <- next-input)
   (screen:terminal-address <- next-input)
   { begin
-    (bottom?:boolean <- greater-or-equal cursor-row:integer/space:1 height:integer/space:1)
-    (break-if bottom?:boolean)
+    (at-bottom?:boolean <- greater-or-equal cursor-row:integer/space:1 height:integer/space:1)
+    (break-if at-bottom?:boolean)
     (cursor-row:integer/space:1 <- add cursor-row:integer/space:1 1:literal)
     (cursor-down screen:terminal-address)
   }
@@ -232,8 +234,8 @@
   (0:space-address/names:screen-state <- next-input)
   (screen:terminal-address <- next-input)
   { begin
-    (bottom?:boolean <- lesser-or-equal cursor-row:integer/space:1 0:literal)
-    (break-if bottom?:boolean)
+    (at-top?:boolean <- lesser-or-equal cursor-row:integer/space:1 0:literal)
+    (break-if at-top?:boolean)
     (cursor-row:integer/space:1 <- subtract cursor-row:integer/space:1 1:literal)
     (cursor-up screen:terminal-address)
   }
@@ -251,6 +253,19 @@
   }
 ])
 
+(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)
+  (screen:terminal-address <- next-input)
+  { begin
+    (at-bottom?:boolean <- greater-or-equal cursor-row:integer/space:1 height:integer/space:1)
+    (break-unless at-bottom?:boolean)
+    (height:integer/space:1 <- add height:integer/space:1 1:literal)
+  }
+  (cursor-row:integer/space:1 <- add cursor-row:integer/space:1 1:literal)
+  (cursor-to-next-line screen:terminal-address)
+])
+
 (function main [
   (default-space:space-address <- new space:literal 30:literal/capacity)
   (0:space-address/names:screen-state <- screen-state)
@@ -281,13 +296,11 @@ schedule:  done with routine")
     (done?:boolean <- greater-or-equal i:integer len:integer)
     (break-if done?:boolean)
     (tr:instruction-trace-address <- index arr:instruction-trace-address-array-address/deref i:integer)
-    (print-instruction-trace-collapsed nil:literal/terminal tr:instruction-trace-address)
+    (print-instruction-trace-collapsed nil:literal/terminal tr:instruction-trace-address 0:space-address/screen-state)
     (i:integer <- add i:integer 1:literal)
     (loop)
   }
   ; handle key presses
-  (cursor-row:integer/space:1 <- copy len:integer)
-  (height:integer/space:1 <- length arr:instruction-trace-address-array-address/deref)
   { begin
     next-key
     (c:character <- read-key nil:literal/keyboard silent:literal/terminal)