about summary refs log tree commit diff stats
path: root/071print.mu
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2015-05-06 12:13:04 -0700
committerKartik K. Agaram <vc@akkartik.com>2015-05-06 12:15:25 -0700
commit768bdb4dbf4e8943fe1c3fcf7f8840372ba79ec6 (patch)
treedbe277341a84707b927c322ba6ba95d9f40cf037 /071print.mu
parent4680525f84ab44e6df1b032ee4eeb7ef6ca3e466 (diff)
downloadmu-768bdb4dbf4e8943fe1c3fcf7f8840372ba79ec6.tar.gz
1293 - start porting the chessboard app over
Just to put all our new test primitives through their paces, and iron
out any kinks.

Just the one chessboard scenario is taking 1.5-2.5x all the tests we've
written so far. But we're starting from a faster baseline, that was the
point of the C++ port. I also have -O3 optimizations in my back-pocket.
Diffstat (limited to '071print.mu')
-rw-r--r--071print.mu76
1 files changed, 70 insertions, 6 deletions
diff --git a/071print.mu b/071print.mu
index 2bf1df0b..e02e8483 100644
--- a/071print.mu
+++ b/071print.mu
@@ -66,6 +66,13 @@ recipe print-character [
 #? ] #? 1
     # save character in fake screen
     row:address:integer <- get-address x:address:screen/deref, cursor-row:offset
+#?     $print [CCC: ] #? 1
+#?     $print row:address:integer #? 1
+#?     $print [ -> ] #? 1
+#?     $print row:address:integer/deref #? 1
+#?     $print [ #? 1
+#? ] #? 1
+#?     $stop-tracing #? 1
     column:address:integer <- get-address x:address:screen/deref, cursor-column:offset
     width:integer <- get x:address:screen/deref, num-columns:offset
     index:integer <- multiply row:address:integer/deref, width:integer
@@ -137,10 +144,10 @@ recipe cursor-position [
     break-unless x:address:screen
     row:integer <- get x:address:screen/deref, cursor-row:offset
     column:integer <- get x:address:screen/deref, cursor-column:offset
-    reply row:integer, column:integer
+    reply row:integer, column:integer, x:address:screen/same-as-ingredient:0
   }
   row:integer, column:integer <- cursor-position-on-display
-  reply row:integer, column:integer
+  reply row:integer, column:integer, x:address:screen/same-as-ingredient:0
 ]
 
 recipe move-cursor [
@@ -200,7 +207,20 @@ recipe cursor-down [
       at-bottom?:boolean <- greater-or-equal row:address:integer/deref, height:integer
       break-if at-bottom?:boolean
       # row = row+1
-      row:address:integer/deref <- add row:address:integer, 1:literal
+#?       $print [AAA: ] #? 1
+#?       $print row:address:integer #? 1
+#?       $print [ -> ] #? 1
+#?       $print row:address:integer/deref #? 1
+#?       $print [ #? 1
+#? ] #? 1
+      row:address:integer/deref <- add row:address:integer/deref, 1:literal
+#?       $print [BBB: ] #? 1
+#?       $print row:address:integer #? 1
+#?       $print [ -> ] #? 1
+#?       $print row:address:integer/deref #? 1
+#?       $print [ #? 1
+#? ] #? 1
+#?       $start-tracing #? 1
     }
     reply x:address:screen/same-as-ingredient:0
   }
@@ -221,7 +241,7 @@ recipe cursor-up [
       at-top?:boolean <- lesser-than row:address:integer/deref, 0:literal
       break-if at-top?:boolean
       # row = row-1
-      row:address:integer/deref <- subtract row:address:integer, 1:literal
+      row:address:integer/deref <- subtract row:address:integer/deref, 1:literal
     }
     reply x:address:screen/same-as-ingredient:0
   }
@@ -243,7 +263,7 @@ recipe cursor-right [
       at-bottom?:boolean <- greater-or-equal column:address:integer/deref, width:integer
       break-if at-bottom?:boolean
       # column = column+1
-      column:address:integer/deref <- add column:address:integer, 1:literal
+      column:address:integer/deref <- add column:address:integer/deref, 1:literal
     }
     reply x:address:screen/same-as-ingredient:0
   }
@@ -264,7 +284,7 @@ recipe cursor-left [
       at-top?:boolean <- lesser-than column:address:integer/deref, 0:literal
       break-if at-top?:boolean
       # column = column-1
-      column:address:integer/deref <- subtract column:address:integer, 1:literal
+      column:address:integer/deref <- subtract column:address:integer/deref, 1:literal
     }
     reply x:address:screen/same-as-ingredient:0
   }
@@ -272,3 +292,47 @@ recipe cursor-left [
   move-cursor-left-on-display
   reply x:address:screen/same-as-ingredient:0
 ]
+
+recipe cursor-to-start-of-line [
+  default-space:address:array:location <- new location:type, 30:literal
+  x:address:screen <- next-ingredient
+  row:integer, _, x:address:screen <- cursor-position x:address:screen
+  column:integer <- copy 0:literal
+  x:address:screen <- move-cursor x:address:screen, row:integer, column:integer
+  reply x:address:screen/same-as-ingredient:0
+]
+
+recipe cursor-to-next-line [
+  default-space:address:array:location <- new location:type, 30:literal
+  x:address:screen <- next-ingredient
+  x:address:screen <- cursor-down x:address:screen
+  x:address:screen <- cursor-to-start-of-line x:address:screen
+  reply x:address:screen/same-as-ingredient:0
+]
+
+recipe print-string [
+  default-space:address:array:location <- new location:type, 30:literal
+  x:address:screen <- next-ingredient
+  s:address:array:character <- next-ingredient
+  len:integer <- length s:address:array:character/deref
+  i:integer <- copy 0:literal
+  {
+    done?:boolean <- greater-or-equal i:integer, len:integer
+    break-if done?:boolean
+    c:character <- index s:address:array:character/deref, i:integer
+    print-character x:address:screen c:character
+    i:integer <- add i:integer, 1:literal
+    loop
+  }
+  reply x:address:screen/same-as-ingredient:0
+]
+
+recipe print-integer [
+  default-space:address:array:location <- new location:type, 30:literal
+  x:address:screen <- next-ingredient
+  n:integer <- next-ingredient
+  # todo: other bases besides decimal
+  s:address:array:character <- integer-to-decimal-string n:integer
+  print-string x:address:screen, s:address:array:character
+  reply x:address:screen/same-as-ingredient:0
+]