about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--trace.mu44
1 files changed, 40 insertions, 4 deletions
diff --git a/trace.mu b/trace.mu
index 664f5354..2f72b850 100644
--- a/trace.mu
+++ b/trace.mu
@@ -222,14 +222,50 @@ schedule:  done with routine")
     (loop)
   }
   ; handle key presses
-  (i:integer <- copy 0:literal)
+  (cursor-row:integer <- copy len:integer)
   { begin
-    (c:character <- read-key nil:literal/keyboard)
+    next-key
+    (c:character <- read-key nil:literal/keyboard silent:literal/terminal)
     (loop-unless c:character)
     (quit?:boolean <- equal c:character ((#\q literal)))
     (break-if quit?:boolean)
-    ($print i:integer)
-    (i:integer <- add i:integer 1:literal)
+    ; up/down navigation
+    { begin
+      (up?:boolean <- equal c:character ((up literal)))
+      (break-unless up?:boolean)
+      (at-top?:boolean <- lesser-or-equal cursor-row:integer 0:literal)
+      (break-if at-top?:boolean)
+      (cursor-row:integer <- subtract cursor-row:integer 1:literal)
+      (cursor-up-on-host)
+      (jump next-key:offset)  ; loop
+    }
+    { begin
+      (down?:boolean <- equal c:character ((down literal)))
+      (break-unless down?:boolean)
+      (at-bottom?:boolean <- greater-or-equal cursor-row:integer len:integer)
+      (break-if at-bottom?:boolean)
+      (cursor-row:integer <- add cursor-row:integer 1:literal)
+      (cursor-down-on-host)
+      (jump next-key:offset)  ; loop
+    }
+    ; enter: expand current row
+    { begin
+      (toggle?:boolean <- equal c:character ((#\newline literal)))
+      (break-unless toggle?:boolean)
+      (tr:instruction-trace-address <- index arr:instruction-trace-address-array-address/deref cursor-row:integer)
+      (print-instruction-trace tr:instruction-trace-address)
+      (jump next-key:offset)  ; loop
+    }
+    ; debugging: print cursor-row
+    ($print cursor-row:integer)
+    (loop)
+  }
+  ; move cursor to bottom before exiting
+  { begin
+    (at-bottom?:boolean <- greater-or-equal cursor-row:integer len:integer)
+    (break-if at-bottom?:boolean)
+    (cursor-down-on-host)
+    (cursor-row:integer <- add cursor-row:integer 1:literal)
     (loop)
   }
 ])