From 768bdb4dbf4e8943fe1c3fcf7f8840372ba79ec6 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Wed, 6 May 2015 12:13:04 -0700 Subject: 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. --- 071print.mu | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 70 insertions(+), 6 deletions(-) (limited to '071print.mu') 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 +] -- cgit 1.4.1-2-gfad0