about summary refs log tree commit diff stats
path: root/chessboard-cursor.mu
diff options
context:
space:
mode:
Diffstat (limited to 'chessboard-cursor.mu')
-rw-r--r--chessboard-cursor.mu26
1 files changed, 21 insertions, 5 deletions
diff --git a/chessboard-cursor.mu b/chessboard-cursor.mu
index 89443f4c..568b8224 100644
--- a/chessboard-cursor.mu
+++ b/chessboard-cursor.mu
@@ -96,6 +96,19 @@
 
 (address move-address (move))
 
+(function print [
+  (default-space:space-address <- new space:literal 30:literal)
+  { begin
+    ; stdout not initialized? skip all prints.
+    (break-if 2:channel-address/raw)
+    (reply)
+  }
+  ; base case prints characters
+  (c:character <- next-input)
+  (x:tagged-value <- save-type c:character)
+  (2:channel-address/raw/deref <- write 2:channel-address/raw x:tagged-value)
+])
+
 (function read-move [
   (default-space:space-address <- new space:literal 30:literal)
   (a:character <- copy ((#\a literal)))
@@ -105,7 +118,7 @@
   ; get from-file
   (x:tagged-value 1:channel-address/raw/deref <- read 1:channel-address/raw)
   (c:character <- maybe-coerce x:tagged-value character:literal)
-  (print-primitive c:character)
+  (print c:character)
   { begin
     (quit:boolean <- equal c:character ((#\q literal)))
     (break-unless quit:boolean)
@@ -121,7 +134,7 @@
   ; get from-rank
   (x:tagged-value 1:channel-address/raw/deref <- read 1:channel-address/raw)
   (c:character <- maybe-coerce x:tagged-value character:literal)
-  (print-primitive c:character)
+  (print c:character)
   (from-rank:integer <- character-to-integer c:character)
   (from-rank:integer <- subtract from-rank:integer rank-base:integer)
   ; assert('1' <= from-rank <= '8')
@@ -132,13 +145,13 @@
   ; slurp hyphen
   (x:tagged-value 1:channel-address/raw/deref <- read 1:channel-address/raw)
   (c:character <- maybe-coerce x:tagged-value character:literal)
-  (print-primitive c:character)
+  (print c:character)
   (hyphen?:boolean <- equal c:character ((#\- literal)))
   (assert hyphen?:boolean (("expected hyphen" literal)))
   ; get to-file
   (x:tagged-value 1:channel-address/raw/deref <- read 1:channel-address/raw)
   (c:character <- maybe-coerce x:tagged-value character:literal)
-  (print-primitive c:character)
+  (print c:character)
   (to-file:integer <- character-to-integer c:character)
   (to-file:integer <- subtract to-file:integer file-base:integer)
   ; assert('a' <= to-file <= 'h')
@@ -149,7 +162,7 @@
   ; get to-rank
   (x:tagged-value 1:channel-address/raw/deref <- read 1:channel-address/raw)
   (c:character <- maybe-coerce x:tagged-value character:literal)
-  (print-primitive c:character)
+  (print c:character)
   (to-rank:integer <- character-to-integer c:character)
   (to-rank:integer <- subtract to-rank:integer rank-base:integer)
   ; assert('1' <= to-rank <= '8')
@@ -198,6 +211,9 @@
   ; hook up stdin
   (1:channel-address/raw <- init-channel 1:literal)
   (fork-helper send-keys-to-stdin:fn nil:literal/globals nil:literal/limit 1:channel-address/raw)
+  ; hook up stdout
+  (2:channel-address/raw <- init-channel 1:literal)
+  (fork-helper send-prints-to-stdout:fn nil:literal/globals nil:literal/limit 2:channel-address/raw)
   { begin
     (clear-screen)
     (print-primitive (("Stupid text-mode chessboard. White pieces in uppercase; black pieces in lowercase. No checking for legal moves." literal)))