diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2015-06-16 14:21:00 -0700 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2015-06-16 14:22:35 -0700 |
commit | cee0e7d5d34212831ac78b5dbe8f7fcc19ea05a1 (patch) | |
tree | a92060f92955783d8efddf5fcbb1114484926116 /071print.mu | |
parent | 17c20c9ca2c1bfccf674fca813c1d150f7e4b7d9 (diff) | |
download | mu-cee0e7d5d34212831ac78b5dbe8f7fcc19ea05a1.tar.gz |
1569
Diffstat (limited to '071print.mu')
-rw-r--r-- | 071print.mu | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/071print.mu b/071print.mu index 6eb72853..d3c6af79 100644 --- a/071print.mu +++ b/071print.mu @@ -103,6 +103,8 @@ recipe print-character [ reply x:address:screen/same-as-ingredient:0 } # save character in fake screen +#? $print row:address:number/deref, [, ], column:address:number/deref, [ +#? ] #? 1 index:number <- multiply row:address:number/deref, width:number index:number <- add index:number, column:address:number/deref buf:address:array:screen-cell <- get x:address:screen/deref, data:offset @@ -134,7 +136,8 @@ recipe print-character [ cursor-color:address:number/deref <- copy color:number # increment column unless it's already all the way to the right { - at-right?:boolean <- equal column:address:number/deref, width:number + right:number <- subtract width:number, 1:literal + at-right?:boolean <- greater-or-equal column:address:number/deref, right:number break-if at-right?:boolean column:address:number/deref <- add column:address:number/deref, 1:literal } @@ -222,7 +225,7 @@ recipe clear-line [ # if x exists, clear line in fake screen { break-unless x:address:screen - n:number <- get x:address:screen/deref, num-columns:offset + width:number <- get x:address:screen/deref, num-columns:offset column:address:number <- get-address x:address:screen/deref, cursor-column:offset original-column:number <- copy column:address:number/deref # space over the entire line @@ -230,7 +233,8 @@ recipe clear-line [ { #? $print column:address:number/deref, [ #? ] #? 1 - done?:boolean <- greater-or-equal column:address:number/deref, n:number + right:number <- subtract width:number, 1:literal + done?:boolean <- greater-or-equal column:address:number/deref, right:number break-if done?:boolean print-character x:address:screen, [ ] # implicitly updates 'column' loop @@ -467,6 +471,26 @@ recipe print-string [ reply x:address:screen/same-as-ingredient:0 ] +scenario print-string-stops-at-right-margin [ + run [ + 1:address:screen <- init-fake-screen 3:literal/width, 2:literal/height + 2:address:array:character <- new [abcd] + 1:address:screen <- print-string 1:address:screen, 2:address:array:character + 3:address:array:screen-cell <- get 1:address:screen/deref, data:offset + 4:array:screen-cell <- copy 3:address:array:screen-cell/deref + ] + memory-should-contain [ + 4 <- 6 # width*height + 5 <- 97 # 'a' + 6 <- 7 # white + 7 <- 98 # 'b' + 8 <- 7 # white + 9 <- 100 # 'd' overwrites 'c' + 10 <- 7 # white + 11 <- 0 # unused + ] +] + recipe print-integer [ default-space:address:array:location <- new location:type, 30:literal x:address:screen <- next-ingredient |