diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2015-01-26 20:29:55 -0800 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2015-01-26 20:29:55 -0800 |
commit | e0511280e692810c84693eb11f40756bb23ce11f (patch) | |
tree | f9e7443e9bd8add0f60cfed6625041b385723477 | |
parent | da31c4245227d6e05080d4e289e34c5360aa933d (diff) | |
download | mu-e0511280e692810c84693eb11f40756bb23ce11f.tar.gz |
635
-rw-r--r-- | mu.arc | 17 | ||||
-rw-r--r-- | mu.arc.t | 40 |
2 files changed, 54 insertions, 3 deletions
diff --git a/mu.arc b/mu.arc index fc8fc9fc..14d23f95 100644 --- a/mu.arc +++ b/mu.arc @@ -2113,6 +2113,9 @@ (i:integer <- copy 0:literal) (line-contents:string-address <- get line:buffer-address/deref data:offset) (max:integer <- get line:buffer-address/deref length:offset) +;? (print-primitive-to-host (("len: " literal))) ;? 1 +;? (print-primitive-to-host max:integer) ;? 1 +;? (print-primitive-to-host (("\n" literal))) ;? 1 { begin (done?:boolean <- greater-or-equal i:integer max:integer) (break-if done?:boolean) @@ -2120,9 +2123,11 @@ (curr:tagged-value <- save-type c:character) ;? ($dump-channel 1093:literal) ;? 1 ;? ($start-tracing) ;? 1 -;? (print-primitive-to-host (("print: " literal))) ;? 1 +;? (print-primitive-to-host (("bufferout: " literal))) ;? 2 ;? (print-primitive-to-host c:character) ;? 1 -;? (print-primitive-to-host (("\n" literal))) ;? 1 +;? (x:integer <- character-to-integer c:character) ;? 1 +;? (print-primitive-to-host x:integer) ;? 1 +;? (print-primitive-to-host (("\n" literal))) ;? 2 (buffered-stdin:channel-address/deref <- write buffered-stdin:channel-address curr:tagged-value) ;? ($stop-tracing) ;? 1 ;? ($dump-channel 1093:literal) ;? 1 @@ -2372,11 +2377,19 @@ (default-space:space-address <- new space:literal 30:literal) (screen:terminal-address <- next-input) (stdout:channel-address <- next-input) +;? (i:integer <- copy 0:literal) ;? 1 { begin (x:tagged-value stdout:channel-address/deref <- read stdout:channel-address) (c:character <- maybe-coerce x:tagged-value character:literal) (done?:boolean <- equal c:character ((#\null literal))) (break-if done?:boolean) +;? (print-primitive-to-host (("printing " literal))) ;? 1 +;? (print-primitive-to-host i:integer) ;? 1 +;? (print-primitive-to-host ((" -- " literal))) ;? 1 +;? (x:integer <- character-to-integer c:character) ;? 1 +;? (print-primitive-to-host x:integer) ;? 1 +;? (print-primitive-to-host (("\n" literal))) ;? 1 +;? (i:integer <- add i:integer 1:literal) ;? 1 (print-character screen:terminal-address c:character) (loop) } diff --git a/mu.arc.t b/mu.arc.t index 4409d70e..f2bbd7f3 100644 --- a/mu.arc.t +++ b/mu.arc.t @@ -4352,6 +4352,42 @@ (prn "F - 'buffer-stdin' prints lines to screen")) (reset) +(new-trace "print-buffered-contents-right-at-newline") +(add-code + '((function main [ + (default-space:space-address <- new space:literal 30:literal) + (s:string-address <- new "foo\n") + (k:keyboard-address <- init-keyboard s:string-address) + (stdin:channel-address <- init-channel 1:literal) + (fork send-keys-to-stdin:fn nil:literal/globals nil:literal/limit k:keyboard-address stdin:channel-address) + (buffered-stdin:channel-address <- init-channel 1:literal) + (r:integer/routine <- fork buffer-stdin:fn nil:literal/globals nil:literal/limit stdin:channel-address buffered-stdin:channel-address) + (screen:terminal-address <- init-fake-terminal 20:literal 10:literal) + (5:string-address/raw <- get screen:terminal-address/deref data:offset) + (fork-helper send-prints-to-stdout:fn nil:literal/globals nil:literal/limit screen:terminal-address buffered-stdin:channel-address) + (sleep until-routine-done:literal r:integer/routine) + ; hack: give helper some time to finish printing + (sleep for-some-cycles:literal 500:literal) + ]))) +;? (= dump-trace* (obj whitelist '("schedule" "run"))) ;? 1 +(run 'main) +(each routine completed-routines* + (awhen rep.routine!error + (prn "error - " it))) +(when (~memory-contains-array memory*.5 + (+ "foo\n " + " " + " " + " " + " " + " " + " " + " " + " " + " ")) + (prn "F - 'buffer-stdin' prints lines to screen immediately on newline")) + +(reset) (new-trace "buffered-contents-skip-backspace") (add-code '((function main [ @@ -4390,7 +4426,7 @@ (add-code '((function main [ (default-space:space-address <- new space:literal 30:literal) - (s:string-address <- new "a\b\bfoo\nbar") + (s:string-address <- new "a\b\bfoo\n") (k:keyboard-address <- init-keyboard s:string-address) (stdin:channel-address <- init-channel 1:literal) (fork send-keys-to-stdin:fn nil:literal/globals nil:literal/limit k:keyboard-address stdin:channel-address) @@ -4400,6 +4436,8 @@ (5:string-address/raw <- get screen:terminal-address/deref data:offset) (fork-helper send-prints-to-stdout:fn nil:literal/globals nil:literal/limit screen:terminal-address buffered-stdin:channel-address) (sleep until-routine-done:literal r:integer/routine) + ; hack: give helper some time to finish printing + (sleep for-some-cycles:literal 500:literal) ]))) ;? (= dump-trace* (obj whitelist '("schedule" "run"))) ;? 1 (run 'main) |