about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2015-02-10 20:26:19 -0800
committerKartik K. Agaram <vc@akkartik.com>2015-02-10 20:26:19 -0800
commitb87f7bf5ecd588c6903ecd70a2e6b1a6c64f4f6f (patch)
tree72f8886df62dda92620844e0e5c2d7c4ab37912d
parenta2eac7cb56439ef37086b6febfad8c8a9fc9b856 (diff)
downloadmu-b87f7bf5ecd588c6903ecd70a2e6b1a6c64f4f6f.tar.gz
734
-rw-r--r--trace.arc.t3
-rw-r--r--trace.mu33
2 files changed, 25 insertions, 11 deletions
diff --git a/trace.arc.t b/trace.arc.t
index d0324bd5..a2971b31 100644
--- a/trace.arc.t
+++ b/trace.arc.t
@@ -26,13 +26,14 @@ schedule:  done with routine")
       (len:integer <- length arr:instruction-trace-address-array-address/deref)
       ; fake screen
       (screen:terminal-address <- init-fake-terminal 70:literal 15:literal)
+      (screen-state:space-address <- screen-state)
       ; print trace collapsed
       (i:integer <- copy 0:literal)
       { begin
         (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 screen:terminal-address tr:instruction-trace-address)
+        (print-instruction-trace-collapsed screen:terminal-address tr:instruction-trace-address screen-state:space-address)
         (i:integer <- add i:integer 1:literal)
         (loop)
       }
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)