about summary refs log tree commit diff stats
path: root/071print.mu
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2015-06-16 14:21:00 -0700
committerKartik K. Agaram <vc@akkartik.com>2015-06-16 14:22:35 -0700
commitcee0e7d5d34212831ac78b5dbe8f7fcc19ea05a1 (patch)
treea92060f92955783d8efddf5fcbb1114484926116 /071print.mu
parent17c20c9ca2c1bfccf674fca813c1d150f7e4b7d9 (diff)
downloadmu-cee0e7d5d34212831ac78b5dbe8f7fcc19ea05a1.tar.gz
1569
Diffstat (limited to '071print.mu')
-rw-r--r--071print.mu30
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