diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2015-02-26 15:15:24 -0800 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2015-02-26 15:15:24 -0800 |
commit | c93ff8ffb3811a690c8aafed55e7a6eb2d8a3544 (patch) | |
tree | 8c624eadc52a254966d9774ab47957cac2ee37ae | |
parent | 4e64c5418b64d53163346939664a8e5ef9145130 (diff) | |
download | mu-c93ff8ffb3811a690c8aafed55e7a6eb2d8a3544.tar.gz |
837 - pagination in the trace browser
Still not finished; we're maybe halfway through the necessary tests.
-rw-r--r-- | trace.arc.t | 81 | ||||
-rw-r--r-- | trace.mu | 67 |
2 files changed, 123 insertions, 25 deletions
diff --git a/trace.arc.t b/trace.arc.t index 53e14da6..5df9f533 100644 --- a/trace.arc.t +++ b/trace.arc.t @@ -537,5 +537,86 @@ schedule: done with routine") "+ main/ 2 : 4 => ((3 integer)) ")) (prn "F - process-key: navigation moves between top-level lines only")) +;; manage screen height + +(reset) +(new-trace "trace-paginate") +(add-code:readfile "trace.mu") +(add-code + '((function! main [ + (default-space:space-address <- new space:literal 30:literal/capacity) + (x:string-address <- new +"run: main 0: a b c +mem: 0 a +run: main 1: d e f +mem: 1 a +mem: 1 b +mem: 1 c +run: main 2: g hi +run: main 3: j +mem: 3 a +run: main 4: k +run: main 5: l +run: main 6: m +run: main 7: n +run: main 8: o") + (s:stream-address <- init-stream x:string-address) + (traces:instruction-trace-address-array-address <- parse-traces s:stream-address) + (len:integer <- length traces:instruction-trace-address-array-address/deref) + (2:terminal-address/raw <- init-fake-terminal 17:literal 15:literal) + (3:space-address/raw/screen-state <- screen-state traces:instruction-trace-address-array-address 3:literal/screen-height) + (print-traces-collapsed 3:space-address/raw/screen-state 2:terminal-address/raw) + (4:string-address/raw <- get 2:terminal-address/raw/deref data:offset) + ]))) +(run 'main) +(each routine completed-routines* + (awhen rep.routine!error + (prn "error - " it))) +; screen shows a subset of collapsed trace lines +(when (~screen-contains memory*.4 17 + (+ "+ main/ 0 : a b c" + "+ main/ 1 : d e f" + "+ main/ 2 : g hi ")) + (prn "F - print-traces-collapsed can show just one 'page' of a larger trace")) +; expand top line +(run-code main2 + (default-space:space-address <- new space:literal 30:literal/capacity) + (s:string-address <- new "kkk\n") + (k:keyboard-address <- init-keyboard s:string-address) + (process-key 3:space-address/raw/screen-state k:keyboard-address 2:terminal-address/raw) + (process-key 3:space-address/raw/screen-state k:keyboard-address 2:terminal-address/raw) + (process-key 3:space-address/raw/screen-state k:keyboard-address 2:terminal-address/raw) + (process-key 3:space-address/raw/screen-state k:keyboard-address 2:terminal-address/raw) + ) +; screen shows just first trace line fully expanded +(when (~screen-contains memory*.4 17 + (+ "- main/ 0 : a b c" + " mem : 0 a " + "+ main/ 1 : d e f" + " ")) + (prn "F - expanding doesn't print past end of page")) +; expand line below without first collapsing previously expanded line +(run-code main3 + (default-space:space-address <- new space:literal 30:literal/capacity) + (s:string-address <- new "j\n") + (k:keyboard-address <- init-keyboard s:string-address) + (process-key 3:space-address/raw/screen-state k:keyboard-address 2:terminal-address/raw) + (process-key 3:space-address/raw/screen-state k:keyboard-address 2:terminal-address/raw) + ) +; screen shows part of the second trace line expanded +(when (~screen-contains memory*.4 17 + (+ "+ main/ 0 : a b c" + "- main/ 1 : d e f" + " mem : 1 a " + " " + " ")) + (prn "F - expanding below expanded line respects screen/page height")) + +; todo +; respect screen height expanding and collapsing below +; pgup/pgdn to navigate pages (minimize up/down responsibilities for performance) +; expanded trace straddles page boundary +; what if entire page is within an expanded trace? + (reset) ;? (print-times) ;? 2 diff --git a/trace.mu b/trace.mu index eb25395d..ba68a484 100644 --- a/trace.mu +++ b/trace.mu @@ -124,7 +124,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) + (0:space-address/names:screen-state <- next-input) (clear-line screen:terminal-address) (print-character screen:terminal-address ((#\- literal))) (print-character screen:terminal-address ((#\space literal))) @@ -151,7 +151,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) - (add-line screen-state:space-address screen:terminal-address) + (add-line 0:space-address/screen-state screen:terminal-address) ; print children (ch:trace-address-array-address <- get x:instruction-trace-address/deref children:offset) (i:integer <- copy 0:literal) @@ -162,14 +162,18 @@ } (len:integer <- length ch:trace-address-array-address/deref) { begin + ; until done with trace (done?:boolean <- greater-or-equal i:integer len:integer) (break-if done?:boolean) + ; or screen ends + (screen-done?:boolean <- greater-or-equal cursor-row:integer/space:1 screen-height:integer/space:1) + (break-if screen-done?:boolean) (t:trace-address <- index ch:trace-address-array-address/deref i:integer) (print-character screen:terminal-address ((#\space literal))) (print-character screen:terminal-address ((#\space literal))) (print-character screen:terminal-address ((#\space literal))) (print-trace screen:terminal-address t:trace-address) - (add-line screen-state:space-address screen:terminal-address) + (add-line 0:space-address/screen-state screen:terminal-address) (i:integer <- add i:integer 1:literal) (loop) } @@ -336,6 +340,13 @@ { begin (at-bottom?:boolean <- greater-or-equal cursor-row:integer/space:1 printed-height:integer/space:1) (break-unless at-bottom?:boolean) + { begin + (screen-full?:boolean <- greater-or-equal app-height:integer/space:1 screen-height:integer/space:1) + (break-unless screen-full?:boolean) + (cursor-to-next-line screen:terminal-address) + (cursor-up screen:terminal-address) + (reply) + } (printed-height:integer/space:1 <- add printed-height:integer/space:1 1:literal) ; update app-height if necessary { begin @@ -360,27 +371,32 @@ (default-space:space-address <- new space:literal 30:literal/capacity) (0:space-address/names:screen-state <- next-input) (screen:terminal-address <- next-input) - (i:integer <- next-input) + (trace-index:integer <- next-input) (len:integer <- length traces:instruction-trace-address-array-address/space:1/deref) + (height:integer <- min len:integer screen-height:integer/space:1) ; print remaining traces collapsed { begin - (done?:boolean <- greater-or-equal i:integer len:integer) - (break-if done?:boolean) - (tr:instruction-trace-address <- index traces:instruction-trace-address-array-address/space:1/deref i:integer) + ; until trace ends + (trace-done?:boolean <- greater-or-equal trace-index:integer len:integer) + (break-if trace-done?:boolean) + ; or screen ends + (screen-done?:boolean <- greater-or-equal cursor-row:integer/space:1 screen-height:integer/space:1) + (break-if screen-done?:boolean) + ; continue printing trace lines + (tr:instruction-trace-address <- index traces:instruction-trace-address-array-address/space:1/deref trace-index:integer) (print-instruction-trace-collapsed screen:terminal-address tr:instruction-trace-address 0:space-address/screen-state) - (i:integer <- add i:integer 1:literal) + (trace-index:integer <- add trace-index:integer 1:literal) (loop) } ; empty any remaining lines -;? ($print i:integer) ;? 1 +;? ($print trace-index:integer) ;? 1 ;? ($print ((#\space literal))) ;? 1 ;? ($print app-height:integer/space:1) ;? 1 { begin - (done?:boolean <- greater-or-equal i:integer app-height:integer/space:1) + (done?:boolean <- greater-or-equal cursor-row:integer/space:1 app-height:integer/space:1) (break-if done?:boolean) (clear-line screen:terminal-address) (down 0:space-address/screen-state screen:terminal-address) - (i:integer <- add i:integer 1:literal) (loop) } ]) @@ -540,18 +556,19 @@ (function main [ (default-space:space-address <- new space:literal 30:literal/capacity) (x:string-address <- new -"schedule: main -run: main 0: (((1 integer)) <- ((copy)) ((1 literal))) -run: main 0: 1 => ((1 integer)) -mem: ((1 integer)): 1 <= 1 -run: main 1: (((2 integer)) <- ((copy)) ((3 literal))) -run: main 1: 3 => ((2 integer)) -mem: ((2 integer)): 2 <= 3 -run: main 2: (((3 integer)) <- ((add)) ((1 integer)) ((2 integer))) -mem: ((1 integer)) => 1 -mem: ((2 integer)) => 3 -run: main 2: 4 => ((3 integer)) -mem: ((3 integer)): 3 <= 4 -schedule: done with routine") - (browse-trace x:string-address) +"run: main 0: a b c +mem: 0 +run: main 1: d e f +mem: 1 +mem: 1 +mem: 1 +run: main 2: g hi +run: main 3: j +mem: 3 +run: main 4: k +run: main 5: l +run: main 6: m +run: main 7: n +run: main 8: o") + (browse-trace x:string-address 5:literal/screen-height) ]) |