about summary refs log tree commit diff stats
path: root/archive/1.vm.arc/stdin.mu
diff options
context:
space:
mode:
Diffstat (limited to 'archive/1.vm.arc/stdin.mu')
-rw-r--r--archive/1.vm.arc/stdin.mu27
1 files changed, 27 insertions, 0 deletions
diff --git a/archive/1.vm.arc/stdin.mu b/archive/1.vm.arc/stdin.mu
new file mode 100644
index 00000000..87598667
--- /dev/null
+++ b/archive/1.vm.arc/stdin.mu
@@ -0,0 +1,27 @@
+; reads and prints keys until you hit 'q'
+; no need to hit 'enter', and 'enter' has no special meaning
+; dies if you wait a while, because so far we never free memory
+(function main [
+  (default-space:space-address <- new space:literal 30:literal)
+  (cursor-mode)
+  ; hook up stdin
+  (stdin:channel-address <- init-channel 1:literal)
+;?   ($print (("main: stdin is " literal)))
+;?   ($print stdin:channel-address)
+;?   ($print (("\n" literal)))
+  (fork-helper send-keys-to-stdin:fn nil:literal/globals nil:literal/limit nil:literal/keyboard stdin:channel-address)
+  ; now read characters from stdin until a 'q' is typed
+  ($print (("? " literal)))
+  { begin
+    (x:tagged-value stdin:channel-address/deref <- read stdin:channel-address)
+    (c:character <- maybe-coerce x:tagged-value character:literal)
+;?     ($print (("main: stdin is " literal)))
+;?     ($print stdin:channel-address)
+;?     ($print (("\n" literal)))
+;?     ($print (("check: " literal)))
+;?     ($print c:character)
+    (done?:boolean <- equal c:character ((#\q literal)))
+    (break-if done?:boolean)
+    (loop)
+  }
+])