about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2014-12-31 01:11:01 -0800
committerKartik K. Agaram <vc@akkartik.com>2014-12-31 01:11:01 -0800
commit954dd99d4981261c7b3726a13be280d1567daf6e (patch)
treeccfe1a6c5b798bb2ec6bb6824a7c5f2422a8c591
parenta83d8656063a908ef48a0852126888163ead5673 (diff)
downloadmu-954dd99d4981261c7b3726a13be280d1567daf6e.tar.gz
474
-rw-r--r--chessboard-rawterm.mu88
1 files changed, 88 insertions, 0 deletions
diff --git a/chessboard-rawterm.mu b/chessboard-rawterm.mu
new file mode 100644
index 00000000..d7faac5b
--- /dev/null
+++ b/chessboard-rawterm.mu
@@ -0,0 +1,88 @@
+(function read-board [
+  (default-scope:scope-address <- new scope:literal 30:literal)
+  (initial-position:list-address <- init-list R:literal P:literal _:literal _:literal _:literal _:literal p:literal r:literal
+                                              N:literal P:literal _:literal _:literal _:literal _:literal p:literal n:literal
+                                              B:literal P:literal _:literal _:literal _:literal _:literal p:literal b:literal
+                                              Q:literal P:literal _:literal _:literal _:literal _:literal p:literal q:literal
+                                              K:literal P:literal _:literal _:literal _:literal _:literal p:literal k:literal
+                                              B:literal P:literal _:literal _:literal _:literal _:literal p:literal b:literal
+                                              N:literal P:literal _:literal _:literal _:literal _:literal p:literal n:literal
+                                              R:literal P:literal _:literal _:literal _:literal _:literal p:literal r:literal)
+  ; assert(length(initial-position) == 64)
+;?   (print-primitive (("list-length\n" literal)))
+  (len:integer <- list-length initial-position:list-address)
+  (correct-length?:boolean <- equal len:integer 64:literal)
+  (assert correct-length?:boolean "chessboard had incorrect size")
+  (b:board-address <- new board:literal 8:literal)
+  (col:integer <- copy 0:literal)
+  (curr:list-address <- copy initial-position:list-address)
+  { begin
+    (done?:boolean <- equal col:integer 8:literal)
+    (break-if done?:boolean)
+;?     (print-primitive col:integer)
+;?     (print-primitive (("\n" literal)))
+    (file:file-address-address <- index-address b:board-address/deref col:integer)
+    (file:file-address-address/deref curr:list-address <- read-file curr:list-address)
+    (col:integer <- add col:integer 1:literal)
+    (loop)
+  }
+  (reply b:board-address)
+])
+
+(function read-file [
+  (default-scope:scope-address <- new scope:literal 30:literal)
+  (cursor:list-address <- next-input)
+  (result:file-address <- new file:literal 8:literal)
+  (row:integer <- copy 0:literal)
+  { begin
+    (done?:boolean <- equal row:integer 8:literal)
+    (break-if done?:boolean)
+;?     (print-primitive (("  " literal)))
+;?     (print-primitive row:integer)
+;?     (print-primitive (("\n" literal)))
+    (src:tagged-value-address <- list-value-address cursor:list-address)
+    (dest:square-address <- index-address result:file-address/deref row:integer)
+    (dest:square-address/deref <- get src:tagged-value-address/deref payload:offset)  ; unsafe typecast
+    (cursor:list-address <- list-next cursor:list-address)
+    (row:integer <- add row:integer 1:literal)
+    (loop)
+  }
+  (reply result:file-address cursor:list-address)
+])
+
+(function print-board [
+  (default-scope:scope-address <- new scope:literal 30:literal)
+  (b:board-address <- next-input)
+  (row:integer <- copy 7:literal)
+  (screen-y:integer <- copy 1:literal)
+  ; print each row
+  { begin
+    (cursor 1:literal screen-y:integer)
+    (done?:boolean <- less-than row:integer 0:literal)
+    (break-if done?:boolean)
+    ; print each square in the row
+    (col:integer <- copy 0:literal)
+    { begin
+      (done?:boolean <- equal col:integer 8:literal)
+      (break-if done?:boolean)
+      (f:file-address <- index b:board-address/deref col:integer)
+      (s:square <- index f:file-address/deref row:integer)
+      (print-primitive s:square)
+      (print-primitive ((" " literal)))
+      (col:integer <- add col:integer 1:literal)
+      (loop)
+    }
+    (row:integer <- subtract row:integer 1:literal)
+    (screen-y:integer <- add screen-y:integer 1:literal)
+    (loop)
+  }
+])
+
+(function main [
+;?   (print-primitive (("\u2654 \u265a" literal)))
+  (b:board-address <- read-board)
+  (console-on)
+  (clear-screen)
+  (print-board b:board-address)
+  (console-off)
+])