diff options
Diffstat (limited to 'buffered-stdin.mu')
-rw-r--r-- | buffered-stdin.mu | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/buffered-stdin.mu b/buffered-stdin.mu index 7db3e291..a0e39154 100644 --- a/buffered-stdin.mu +++ b/buffered-stdin.mu @@ -1,4 +1,4 @@ -; reads lines, prints when you hit 'enter' +; reads lines, prints them back when you hit 'enter' ; dies if you wait a while, because so far we never free memory (function main [ (default-space:space-address <- new space:literal 30:literal) @@ -10,18 +10,20 @@ ; buffer stdin (buffered-stdin:channel-address <- init-channel 1:literal) (fork-helper buffer-stdin:fn nil:literal/globals nil:literal/limit stdin:channel-address buffered-stdin:channel-address) - ; now read characters from the buffer until a 'enter' is typed - (s:string-address <- new "? ") - (print-string nil:literal/terminal s:string-address) { begin - (x:tagged-value stdin:channel-address/deref <- read buffered-stdin:channel-address) - (c:character <- maybe-coerce x:tagged-value character:literal) -;? (print-primitive-to-host (("AAA " literal))) ;? 0 -;? (print-primitive-to-host c:character) ;? 0 -;? (print-primitive-to-host (("\n" literal))) ;? 0 - (done?:boolean <- equal c:character ((#\newline literal))) - (break-if done?:boolean) - (print-character nil:literal/terminal c:character) + ; now read characters from the buffer until 'enter' is typed + (s:string-address <- new "? ") + (print-string nil:literal/terminal s:string-address) + { begin + (x:tagged-value stdin:channel-address/deref <- read buffered-stdin:channel-address) + (c:character <- maybe-coerce x:tagged-value character:literal) +;? (print-primitive-to-host (("AAA " literal))) ;? 1 +;? (print-primitive-to-host c:character) ;? 1 +;? (print-primitive-to-host (("\n" literal))) ;? 1 + (print-character nil:literal/terminal c:character) + (line-done?:boolean <- equal c:character ((#\newline literal))) + (loop-unless line-done?:boolean) + } (loop) } ]) |