diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2015-07-17 18:51:14 -0700 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2015-07-17 18:51:14 -0700 |
commit | b75300444bd320a45d1366b093177c538d35c0a6 (patch) | |
tree | 862a44688e412ebcd74281f0fa867e387e09015d | |
parent | e52972cb0aaa749e901b518c0b594dd14d687fa6 (diff) | |
download | mu-b75300444bd320a45d1366b093177c538d35c0a6.tar.gz |
1808 - helper to print newlines during debugging
The recent session makes me weary of deleting comment counts from inside strings, and the newlines everywhere take up vertical space. Considered println like pascal/ruby, but I'd like something I can add/remove at the end of existing prints. So this hack for $print.
-rw-r--r-- | 029debug.cc | 5 | ||||
-rw-r--r-- | 060string.mu | 35 | ||||
-rw-r--r-- | 061channel.mu | 14 | ||||
-rw-r--r-- | 071print.mu | 18 | ||||
-rw-r--r-- | chessboard.mu | 82 | ||||
-rw-r--r-- | edit.mu | 36 |
6 files changed, 54 insertions, 136 deletions
diff --git a/029debug.cc b/029debug.cc index e185a314..753375cc 100644 --- a/029debug.cc +++ b/029debug.cc @@ -9,7 +9,10 @@ case _PRINT: { for (long long int i = 0; i < SIZE(ingredients); ++i) { if (is_literal(current_instruction().ingredients.at(i))) { trace(Primitive_recipe_depth, "run") << "$print: " << current_instruction().ingredients.at(i).name; - cout << current_instruction().ingredients.at(i).name; + if (has_property(current_instruction().ingredients.at(i), "newline")) + cout << '\n'; + else + cout << current_instruction().ingredients.at(i).name; } else { for (long long int j = 0; j < SIZE(ingredients.at(i)); ++j) { diff --git a/060string.mu b/060string.mu index 6cfbc318..74db7fe1 100644 --- a/060string.mu +++ b/060string.mu @@ -105,8 +105,7 @@ container buffer [ recipe new-buffer [ local-scope -#? $print default-space:address:array:location, [ -#? ] +#? $print default-space:address:array:location, 10:literal/newline result:address:buffer <- new buffer:type len:address:number <- get-address result:address:buffer/deref, length:offset len:address:number/deref <- copy 0:literal @@ -114,8 +113,7 @@ recipe new-buffer [ capacity:number, found?:boolean <- next-ingredient assert found?:boolean, [new-buffer must get a capacity argument] s:address:address:array:character/deref <- new character:type, capacity:number -#? $print s:address:address:array:character/deref, [ -#? ] +#? $print s:address:address:array:character/deref, 10:literal/newline reply result:address:buffer ] @@ -174,13 +172,10 @@ recipe buffer-append [ in:address:buffer <- grow-buffer in:address:buffer } s:address:array:character <- get in:address:buffer/deref, data:offset -#? $print [array underlying buf: ], s:address:array:character, [ -#? ] #? 1 -#? $print [index: ], len:address:number/deref, [ -#? ] #? 1 +#? $print [array underlying buf: ], s:address:array:character, 10:literal/newline +#? $print [index: ], len:address:number/deref, 10:literal/newline dest:address:character <- index-address s:address:array:character/deref, len:address:number/deref -#? $print [storing ], c:character, [ in ], dest:address:character, [ -#? ] #? 1 +#? $print [storing ], c:character, [ in ], dest:address:character, 10:literal/newline dest:address:character/deref <- copy c:character len:address:number/deref <- add len:address:number/deref, 1:literal reply in:address:buffer/same-as-ingredient:0 @@ -196,20 +191,6 @@ scenario buffer-append-works [ x:address:buffer <- buffer-append x:address:buffer, 99:literal # 'c' s2:address:array:character <- get x:address:buffer/deref, data:offset 1:boolean/raw <- equal s1:address:array:character, s2:address:array:character -#? $print s2:address:array:character, [ -#? ] -#? $print 1060:number/raw, [ -#? ] -#? $print 1061:number/raw, [ -#? ] -#? $print 1062:number/raw, [ -#? ] -#? $print 1063:number/raw, [ -#? ] -#? $print 1064:number/raw, [ -#? ] -#? $print 1065:number/raw, [ -#? ] 2:array:character/raw <- copy s2:address:array:character/deref +buffer-filled x:address:buffer <- buffer-append x:address:buffer, 100:literal # 'd' @@ -321,8 +302,7 @@ recipe buffer-to-array [ reply 0:literal } len:number <- get in:address:buffer/deref, length:offset -#? $print [size ], len:number, [ -#? ] #? 1 +#? $print [size ], len:number, 10:literal/newline s:address:array:character <- get in:address:buffer/deref, data:offset # we can't just return s because it is usually the wrong length result:address:array:character <- new character:type, len:number @@ -448,8 +428,7 @@ recipe interpolate [ result-len:number <- subtract result-len:number, 1:literal loop } -#? $print tem-len:number, [ ], $result-len:number, [ -#? ] #? 1 +#? $print tem-len:number, [ ], $result-len:number, 10:literal/newline rewind-ingredients _ <- next-ingredient # skip template # result = new array:character[result-len] diff --git a/061channel.mu b/061channel.mu index 9f86ba2d..2a839898 100644 --- a/061channel.mu +++ b/061channel.mu @@ -298,25 +298,22 @@ recipe buffer-lines [ break-unless backspace?:boolean # drop previous character #? close-console #? 2 -#? $print [backspace! #? 1 +#? $print [backspace! #? ] #? 1 { buffer-length:address:number <- get-address line:address:buffer/deref, length:offset buffer-empty?:boolean <- equal buffer-length:address:number/deref, 0:literal break-if buffer-empty?:boolean -#? $print [before: ], buffer-length:address:number/deref, [ -#? ] #? 1 +#? $print [before: ], buffer-length:address:number/deref, 10:literal/newline buffer-length:address:number/deref <- subtract buffer-length:address:number/deref, 1:literal -#? $print [after: ], buffer-length:address:number/deref, [ -#? ] #? 1 +#? $print [after: ], buffer-length:address:number/deref, 10:literal/newline } #? $exit #? 2 # and don't append this one loop +next-character:label } # append anything else -#? $print [buffer-lines: appending ], c:character, [ -#? ] +#? $print [buffer-lines: appending ], c:character, 10:literal/newline line:address:buffer <- buffer-append line:address:buffer, c:character line-done?:boolean <- equal c:character, 10:literal/newline break-if line-done?:boolean @@ -337,8 +334,7 @@ recipe buffer-lines [ break-if done?:boolean c:character <- index line-contents:address:array:character/deref, i:number out:address:channel <- write out:address:channel, c:character -#? $print [writing ], i:number, [: ], c:character, [ -#? ] #? 1 +#? $print [writing ], i:number, [: ], c:character, 10:literal/newline i:number <- add i:number, 1:literal loop } diff --git a/071print.mu b/071print.mu index 818c95f5..b970b02e 100644 --- a/071print.mu +++ b/071print.mu @@ -21,8 +21,7 @@ recipe new-fake-screen [ width:address:number/deref <- next-ingredient height:address:number <- get-address result:address:screen/deref, num-rows:offset height:address:number/deref <- next-ingredient -#? $print height:address:number/deref, [ -#? ] #? 1 +#? $print height:address:number/deref, 10:literal/newline row:address:number <- get-address result:address:screen/deref, cursor-row:offset row:address:number/deref <- copy 0:literal column:address:number <- get-address result:address:screen/deref, cursor-column:offset @@ -126,8 +125,7 @@ recipe print-character [ # special-case: newline { newline?:boolean <- equal c:character, 10:literal/newline -#? $print c:character, [ ], newline?:boolean, [ -#? ] #? 1 +#? $print c:character, [ ], newline?:boolean, 10:literal/newline break-unless newline?:boolean { # unless cursor is already at bottom @@ -164,8 +162,7 @@ recipe print-character [ } reply x:address:screen/same-as-ingredient:0 } -#? $print [saving character ], c:character, [ to fake screen ], cursor:address/screen, [ -#? ] #? 1 +#? $print [saving character ], c:character, [ to fake screen ], cursor:address/screen, 10:literal/newline cursor:address:screen-cell <- index-address buf:address:array:screen-cell/deref, index:number cursor-contents:address:character <- get-address cursor:address:screen-cell/deref, contents:offset cursor-color:address:number <- get-address cursor:address:screen-cell/deref, color:offset @@ -353,8 +350,7 @@ recipe clear-line [ # space over the entire line #? $start-tracing #? 1 { -#? $print column:address:number/deref, [ -#? ] #? 1 +#? $print column:address:number/deref, 10:literal/newline right:number <- subtract width:number, 1:literal done?:boolean <- greater-or-equal column:address:number/deref, right:number break-if done?:boolean @@ -448,11 +444,9 @@ recipe cursor-down [ at-bottom?:boolean <- greater-or-equal row:address:number/deref, max:number break-if at-bottom?:boolean # row = row+1 -#? $print [AAA: ], row:address:number, [ -> ], row:address:number/deref, [ -#? ] #? 1 +#? $print [AAA: ], row:address:number, [ -> ], row:address:number/deref, 10:literal/newline row:address:number/deref <- add row:address:number/deref, 1:literal -#? $print [BBB: ], row:address:number, [ -> ], row:address:number/deref, [ -#? ] #? 1 +#? $print [BBB: ], row:address:number, [ -> ], row:address:number/deref, 10:literal/newline #? $start-tracing #? 1 } reply x:address:screen/same-as-ingredient:0 diff --git a/chessboard.mu b/chessboard.mu index a91e6da7..638b8367 100644 --- a/chessboard.mu +++ b/chessboard.mu @@ -66,17 +66,6 @@ scenario print-board-and-read-move [ ] ] -#? scenario foo [ #? 1 -#? $print [aaa] #? 1 -#? run [ #? 1 -#? 1:number <- copy 34:literal #? 1 -#? ] #? 1 -#? memory-should-contain [ #? 1 -#? 1 <- 34 #? 1 -#? ] #? 1 -#? $print [zzz] #? 1 -#? ] #? 1 - ## Here's how 'chessboard' is implemented. recipe chessboard [ @@ -85,8 +74,7 @@ recipe chessboard [ local-scope screen:address <- next-ingredient console:address <- next-ingredient -#? $print [screen: ], screen:address, [, console: ], console:address, [ -#? ] #? 1 +#? $print [screen: ], screen:address, [, console: ], console:address, 10:literal/newline board:address:array:address:array:character <- initial-position # hook up stdin stdin:address:channel <- new-channel 10:literal/capacity @@ -98,31 +86,21 @@ recipe chessboard [ msg:address:array:character <- new [Stupid text-mode chessboard. White pieces in uppercase; black pieces in lowercase. No checking for legal moves. ] print-string screen:address, msg:address:array:character -#? $print [aaa -#? ] #? 1 cursor-to-next-line screen:address print-board screen:address, board:address:array:address:array:character cursor-to-next-line screen:address msg:address:array:character <- new [Type in your move as <from square>-<to square>. For example: 'a2-a4'. Then press <enter>. ] print-string screen:address, msg:address:array:character -#? $print [bbb -#? ] #? 1 cursor-to-next-line screen:address msg:address:array:character <- new [Hit 'q' to exit. ] print-string screen:address, msg:address:array:character -#? $print [ccc -#? ] #? 1 { cursor-to-next-line screen:address msg:address:array:character <- new [move: ] print-string screen:address, msg:address:array:character -#? $print [ddd -#? ] #? 1 m:address:move, quit:boolean, error:boolean <- read-move buffered-stdin:address:channel, screen:address -#? $print [eee -#? ] #? 1 break-if quit:boolean, +quit:offset buffered-stdin:address:channel <- clear-channel buffered-stdin:address:channel # cleanup after error. todo: test this? loop-if error:boolean @@ -132,7 +110,6 @@ recipe chessboard [ loop } +quit -#? $print [aaa] #? 1 ] ## a board is an array of files, a file is an array of characters (squares) @@ -183,13 +160,11 @@ recipe print-board [ board:address:array:address:array:character <- next-ingredient row:number <- copy 7:literal # start printing from the top of the board # print each row -#? $print [printing board to screen ], screen:address, [ -#? ] #? 1 +#? $print [printing board to screen ], screen:address, 10:literal/newline { done?:boolean <- lesser-than row:number, 0:literal break-if done?:boolean -#? $print [printing rank ], row:number, [ -#? ] #? 1 +#? $print [printing rank ], row:number, 10:literal/newline # print rank number as a legend rank:number <- add row:number, 1:literal print-integer screen:address, rank:number @@ -349,8 +324,7 @@ recipe read-file [ reply 0:literal/dummy, 0:literal/quit, 1:literal/error } file:number <- subtract c:character, 97:literal # 'a' -#? $print file:number, [ -#? ] #? 1 +#? $print file:number, 10:literal/newline # 'a' <= file <= 'h' { above-min:boolean <- greater-or-equal file:number, 0:literal @@ -397,8 +371,7 @@ recipe read-rank [ reply 0:literal/dummy, 0:literal/quit, 1:literal/error } rank:number <- subtract c:character, 49:literal # '1' -#? $print rank:number, [ -#? ] #? 1 +#? $print rank:number, 10:literal/newline # assert'1' <= rank <= '8' { above-min:boolean <- greater-or-equal rank:number, 0:literal @@ -442,30 +415,25 @@ scenario read-move-blocking [ run [ #? $start-tracing #? 1 1:address:channel <- new-channel 2:literal -#? $print [aaa channel address: ], 1:address:channel, [ -#? ] #? 1 +#? $print [aaa channel address: ], 1:address:channel, 10:literal/newline 2:number/routine <- start-running read-move:recipe, 1:address:channel, screen:address # 'read-move' is waiting for input wait-for-routine 2:number -#? $print [bbb channel address: ], 1:address:channel, [ -#? ] #? 1 +#? $print [bbb channel address: ], 1:address:channel, 10:literal/newline 3:number <- routine-state 2:number/id -#? $print [I: routine ], 2:number, [ state ], 3:number [ -#? ] #? 1 +#? $print [I: routine ], 2:number, [ state ], 3:number 10:literal/newline 4:boolean/waiting? <- equal 3:number/routine-state, 2:literal/waiting assert 4:boolean/waiting?, [ F read-move-blocking: routine failed to pause after coming up (before any keys were pressed)] # press 'a' -#? $print [ccc channel address: ], 1:address:channel, [ -#? ] #? 1 +#? $print [ccc channel address: ], 1:address:channel, 10:literal/newline #? $exit #? 1 1:address:channel <- write 1:address:channel, 97:literal # 'a' restart 2:number/routine # 'read-move' still waiting for input wait-for-routine 2:number 3:number <- routine-state 2:number/id -#? $print [II: routine ], 2:number, [ state ], 3:number [ -#? ] #? 1 +#? $print [II: routine ], 2:number, [ state ], 3:number 10:literal/newline 4:boolean/waiting? <- equal 3:number/routine-state, 2:literal/waiting assert 4:boolean/waiting?, [ F read-move-blocking: routine failed to pause after rank 'a'] @@ -475,8 +443,7 @@ F read-move-blocking: routine failed to pause after rank 'a'] # 'read-move' still waiting for input wait-for-routine 2:number 3:number <- routine-state 2:number/id -#? $print [III: routine ], 2:number, [ state ], 3:number [ -#? ] #? 1 +#? $print [III: routine ], 2:number, [ state ], 3:number 10:literal/newline 4:boolean/waiting? <- equal 3:number/routine-state, 2:literal/waiting assert 4:boolean/waiting?, [ F read-move-blocking: routine failed to pause after file 'a2'] @@ -486,8 +453,7 @@ F read-move-blocking: routine failed to pause after file 'a2'] # 'read-move' still waiting for input wait-for-routine 2:number 3:number <- routine-state 2:number -#? $print [IV: routine ], 2:number, [ state ], 3:number [ -#? ] #? 1 +#? $print [IV: routine ], 2:number, [ state ], 3:number 10:literal/newline 4:boolean/waiting? <- equal 3:number/routine-state, 2:literal/waiting assert 4:boolean/waiting?/routine-state, [ F read-move-blocking: routine failed to pause after hyphen 'a2-'] @@ -497,8 +463,7 @@ F read-move-blocking: routine failed to pause after hyphen 'a2-'] # 'read-move' still waiting for input wait-for-routine 2:number 3:number <- routine-state 2:number -#? $print [V: routine ], 2:number, [ state ], 3:number [ -#? ] #? 1 +#? $print [V: routine ], 2:number, [ state ], 3:number 10:literal/newline 4:boolean/waiting? <- equal 3:number/routine-state, 2:literal/waiting assert 4:boolean/waiting?/routine-state, [ F read-move-blocking: routine failed to pause after rank 'a2-a'] @@ -508,8 +473,7 @@ F read-move-blocking: routine failed to pause after rank 'a2-a'] # 'read-move' still waiting for input wait-for-routine 2:number 3:number <- routine-state 2:number -#? $print [VI: routine ], 2:number, [ state ], 3:number [ -#? ] #? 1 +#? $print [VI: routine ], 2:number, [ state ], 3:number 10:literal/newline 4:boolean/waiting? <- equal 3:number/routine-state, 2:literal/waiting assert 4:boolean/waiting?, [ F read-move-blocking: routine failed to pause after file 'a2-a4'] @@ -519,8 +483,7 @@ F read-move-blocking: routine failed to pause after file 'a2-a4'] # 'read-move' now completes wait-for-routine 2:number 3:number <- routine-state 2:number -#? $print [VII: routine ], 2:number, [ state ], 3:number [ -#? ] #? 1 +#? $print [VII: routine ], 2:number, [ state ], 3:number 10:literal/newline 4:boolean/completed? <- equal 3:number/routine-state, 1:literal/completed assert 4:boolean/completed?, [ F read-move-blocking: routine failed to terminate on newline] @@ -628,23 +591,18 @@ recipe make-move [ b:address:array:address:array:character <- next-ingredient m:address:move <- next-ingredient from-file:number <- get m:address:move/deref, from-file:offset -#? $print from-file:number, [ -#? ] #? 1 +#? $print from-file:number, 10:literal/newline from-rank:number <- get m:address:move/deref, from-rank:offset -#? $print from-rank:number, [ -#? ] #? 1 +#? $print from-rank:number, 10:literal/newline to-file:number <- get m:address:move/deref, to-file:offset -#? $print to-file:number, [ -#? ] #? 1 +#? $print to-file:number, 10:literal/newline to-rank:number <- get m:address:move/deref, to-rank:offset -#? $print to-rank:number, [ -#? ] #? 1 +#? $print to-rank:number, 10:literal/newline f:address:array:character <- index b:address:array:address:array:character/deref, from-file:number src:address:character/square <- index-address f:address:array:character/deref, from-rank:number f:address:array:character <- index b:address:array:address:array:character/deref, to-file:number dest:address:character/square <- index-address f:address:array:character/deref, to-rank:number -#? $print src:address:character/deref, [ -#? ] #? 1 +#? $print src:address:character/deref, 10:literal/newline dest:address:character/deref/square <- copy src:address:character/deref/square src:address:character/deref/square <- copy 32:literal # ' ' reply b:address:array:address:array:character/same-as-ingredient:0 diff --git a/edit.mu b/edit.mu index 7a1fa232..2e3276ae 100644 --- a/edit.mu +++ b/edit.mu @@ -878,8 +878,7 @@ recipe insert-at-cursor [ editor:address:editor-data <- next-ingredient c:character <- next-ingredient screen:address <- next-ingredient -#? $print [insert ], c:character, [ -#? ] #? 1 +#? $print [insert ], c:character, 10:literal/newline before-cursor:address:address:duplex-list <- get-address editor:address:editor-data/deref, before-cursor:offset d:address:duplex-list <- get editor:address:editor-data/deref, data:offset insert-duplex c:character, before-cursor:address:address:duplex-list/deref @@ -901,8 +900,7 @@ recipe insert-at-cursor [ { # if we're at the column just before the wrap indicator wrap-column:number <- subtract right:number, 1:literal -#? $print [wrap? ], cursor-column:address:number/deref, [ vs ], wrap-column:number, [ -#? ] #? 1 +#? $print [wrap? ], cursor-column:address:number/deref, [ vs ], wrap-column:number, 10:literal/newline at-wrap?:boolean <- greater-or-equal cursor-column:address:number/deref, wrap-column:number break-unless at-wrap?:boolean #? $print [wrap! @@ -936,8 +934,7 @@ recipe delete-before-cursor [ before-cursor:address:address:duplex-list/deref <- copy prev:address:duplex-list cursor-column:address:number <- get-address editor:address:editor-data/deref, cursor-column:offset cursor-column:address:number/deref <- subtract cursor-column:address:number/deref, 1:literal -#? $print [delete-before-cursor: ], cursor-column:address:number/deref, [ -#? ] #? 1 +#? $print [delete-before-cursor: ], cursor-column:address:number/deref, 10:literal/newline ] # takes a pointer 'curr' into the doubly-linked list and its sentinel, counts @@ -1170,8 +1167,7 @@ recipe render-sandboxes [ screen-height:number <- screen-height screen:address at-bottom?:boolean <- greater-or-equal row:number screen-height:number reply-if at-bottom?:boolean, row:number/same-as-ingredient:4, screen:address/same-as-ingredient:0 -#? $print [rendering sandbox ], sandbox:address:sandbox-data, [ -#? ] #? 1 +#? $print [rendering sandbox ], sandbox:address:sandbox-data, 10:literal/newline # render sandbox menu row:number <- add row:number, 1:literal move-cursor screen:address, row:number, left:number @@ -2736,8 +2732,7 @@ recipe run-sandboxes [ warnings:address:address:array:character <- get-address curr:address:sandbox-data/deref, warnings:offset fake-screen:address:address:screen <- get-address curr:address:sandbox-data/deref, screen:offset response:address:address:array:character/deref, warnings:address:address:array:character/deref, fake-screen:address:address:screen/deref <- run-interactive data:address:address:array:character/deref -#? $print warnings:address:address:array:character/deref, [ ], warnings:address:address:array:character/deref/deref, [ -#? ] #? 1 +#? $print warnings:address:address:array:character/deref, [ ], warnings:address:address:array:character/deref/deref, 10:literal/newline curr:address:sandbox-data <- get curr:address:sandbox-data/deref, next-sandbox:offset loop } @@ -2751,16 +2746,14 @@ recipe delete-sandbox [ click-column:number <- get t:touch-event, column:offset current-sandbox:address:editor-data <- get env:address:programming-environment-data/deref, current-sandbox:offset right:number <- get current-sandbox:address:editor-data/deref, right:offset -#? $print [comparing column ], click-column:number, [ vs ], right:number, [ -#? ] #? 1 +#? $print [comparing column ], click-column:number, [ vs ], right:number, 10:literal/newline at-right?:boolean <- equal click-column:number, right:number reply-unless at-right?:boolean, 0:literal/false #? $print [trying to delete #? ] #? 1 click-row:number <- get t:touch-event, row:offset prev:address:address:sandbox-data <- get-address env:address:programming-environment-data/deref, sandbox:offset -#? $print [prev: ], prev:address:address:sandbox-data, [ -> ], prev:address:address:sandbox-data/deref, [ -#? ] #? 1 +#? $print [prev: ], prev:address:address:sandbox-data, [ -> ], prev:address:address:sandbox-data/deref, 10:literal/newline curr:address:sandbox-data <- get env:address:programming-environment-data/deref, sandbox:offset { #? $print [next sandbox @@ -2771,21 +2764,18 @@ recipe delete-sandbox [ #? $print [checking #? ] #? 1 target-row:number <- get curr:address:sandbox-data/deref, starting-row-on-screen:offset -#? $print [comparing row ], target-row:number, [ vs ], click-row:number, [ -#? ] #? 1 +#? $print [comparing row ], target-row:number, [ vs ], click-row:number, 10:literal/newline delete-curr?:boolean <- equal target-row:number, click-row:number break-unless delete-curr?:boolean #? $print [found! #? ] #? 1 # delete this sandbox, rerender and stop prev:address:address:sandbox-data/deref <- get curr:address:sandbox-data/deref, next-sandbox:offset -#? $print [setting prev: ], prev:address:address:sandbox-data, [ -> ], prev:address:address:sandbox-data/deref, [ -#? ] #? 1 +#? $print [setting prev: ], prev:address:address:sandbox-data, [ -> ], prev:address:address:sandbox-data/deref, 10:literal/newline reply 1:literal/true } prev:address:address:sandbox-data <- get-address curr:address:sandbox-data/deref, next-sandbox:offset -#? $print [prev: ], prev:address:address:sandbox-data, [ -> ], prev:address:address:sandbox-data/deref, [ -#? ] #? 1 +#? $print [prev: ], prev:address:address:sandbox-data, [ -> ], prev:address:address:sandbox-data/deref, 10:literal/newline curr:address:sandbox-data <- get curr:address:sandbox-data/deref, next-sandbox:offset loop } @@ -3229,8 +3219,7 @@ recipe print-string-with-gradient-background [ color-range:number <- subtract bg-color2:number, bg-color1:number color-quantum:number <- divide color-range:number, len:number #? close-console #? 2 -#? $print len:number, [, ], color-range:number, [, ], color-quantum:number, [ -#? ] #? 2 +#? $print len:number, [, ], color-range:number, [, ], color-quantum:number, 10:literal/newline #? #? $exit #? 3 bg-color:number <- copy bg-color1:number i:number <- copy 0:literal @@ -3241,8 +3230,7 @@ recipe print-string-with-gradient-background [ print-character x:address:screen, c:character, color:number, bg-color:number i:number <- add i:number, 1:literal bg-color:number <- add bg-color:number, color-quantum:number -#? $print [=> ], bg-color:number, [ -#? ] #? 1 +#? $print [=> ], bg-color:number, 10:literal/newline loop } #? $exit #? 1 |