diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2015-01-12 23:13:47 -0800 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2015-01-12 23:13:47 -0800 |
commit | 93d5dce626c6903d289338a822457401634de021 (patch) | |
tree | c33879817888ea6aa26bdf53542c25b00ac9b747 | |
parent | 02244ae2405fb22ab57d3f3e85b13e4eff294f46 (diff) | |
download | mu-93d5dce626c6903d289338a822457401634de021.tar.gz |
546 - chessboard now reads from stdin
Hacky, but it's a start.
-rw-r--r-- | chessboard-cursor.mu | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/chessboard-cursor.mu b/chessboard-cursor.mu index c4f19c40..89443f4c 100644 --- a/chessboard-cursor.mu +++ b/chessboard-cursor.mu @@ -103,7 +103,8 @@ (one:character <- copy ((#\1 literal))) (rank-base:integer <- character-to-integer one:character) ; get from-file - (c:character <- wait-for-key) + (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) { begin (quit:boolean <- equal c:character ((#\q literal))) @@ -118,7 +119,8 @@ (below-max:boolean <- lesser-or-equal from-file:integer 7:literal) (assert below-max:boolean (("from-file too high" literal))) ; get from-rank - (c:character <- wait-for-key) + (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) (from-rank:integer <- character-to-integer c:character) (from-rank:integer <- subtract from-rank:integer rank-base:integer) @@ -128,12 +130,14 @@ (below-max:boolean <- lesser-or-equal from-rank:integer 7:literal) (assert below-max:boolean (("from-rank too high" literal))) ; slurp hyphen - (c:character <- wait-for-key) + (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) (hyphen?:boolean <- equal c:character ((#\- literal))) (assert hyphen?:boolean (("expected hyphen" literal))) ; get to-file - (c:character <- wait-for-key) + (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) (to-file:integer <- character-to-integer c:character) (to-file:integer <- subtract to-file:integer file-base:integer) @@ -143,7 +147,8 @@ (below-max:boolean <- lesser-or-equal to-file:integer 7:literal) (assert below-max:boolean (("to-file too high" literal))) ; get to-rank - (c:character <- wait-for-key) + (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) (to-rank:integer <- character-to-integer c:character) (to-rank:integer <- subtract to-rank:integer rank-base:integer) @@ -190,6 +195,9 @@ (default-space:space-address <- new space:literal 30:literal) (b:board-address <- read-board) (cursor-mode) + ; 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) { begin (clear-screen) (print-primitive (("Stupid text-mode chessboard. White pieces in uppercase; black pieces in lowercase. No checking for legal moves." literal))) |