diff options
Diffstat (limited to 'html/081print.mu.html')
-rw-r--r-- | html/081print.mu.html | 301 |
1 files changed, 139 insertions, 162 deletions
diff --git a/html/081print.mu.html b/html/081print.mu.html index 19efbb1c..7bfdc7dc 100644 --- a/html/081print.mu.html +++ b/html/081print.mu.html @@ -48,13 +48,14 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } color:number ] -<span class="muRecipe">recipe</span> new-fake-screen [ +<span class="muRecipe">recipe</span> new-fake-screen w:number, h:number<span class="muRecipe"> -> </span>result:address:screen [ <span class="Constant">local-scope</span> - result:address:screen<span class="Special"> <- </span>new <span class="Constant">screen:type</span> + <span class="Constant">load-ingredients</span> + result<span class="Special"> <- </span>new <span class="Constant">screen:type</span> width:address:number<span class="Special"> <- </span>get-address *result, <span class="Constant">num-columns:offset</span> - *width<span class="Special"> <- </span><span class="Constant">next-ingredient</span> + *width<span class="Special"> <- </span>copy w height:address:number<span class="Special"> <- </span>get-address *result, <span class="Constant">num-rows:offset</span> - *height<span class="Special"> <- </span><span class="Constant">next-ingredient</span> + *height<span class="Special"> <- </span>copy h row:address:number<span class="Special"> <- </span>get-address *result, <span class="Constant">cursor-row:offset</span> *row<span class="Special"> <- </span>copy <span class="Constant">0</span> column:address:number<span class="Special"> <- </span>get-address *result, <span class="Constant">cursor-column:offset</span> @@ -62,18 +63,17 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } bufsize:number<span class="Special"> <- </span>multiply *width, *height buf:address:address:array:screen-cell<span class="Special"> <- </span>get-address *result, <span class="Constant">data:offset</span> *buf<span class="Special"> <- </span>new <span class="Constant">screen-cell:type</span>, bufsize - clear-screen result - <span class="muControl">reply</span> result + result<span class="Special"> <- </span>clear-screen result ] -<span class="muRecipe">recipe</span> clear-screen [ +<span class="muRecipe">recipe</span> clear-screen screen:address:screen<span class="muRecipe"> -> </span>screen:address:screen [ <span class="Constant">local-scope</span> - sc:address:screen<span class="Special"> <- </span><span class="Constant">next-ingredient</span> + <span class="Constant">load-ingredients</span> <span class="Comment"># if x exists</span> <span class="Delimiter">{</span> - <span class="muControl">break-unless</span> sc + <span class="muControl">break-unless</span> screen <span class="Comment"># clear fake screen</span> - buf:address:array:screen-cell<span class="Special"> <- </span>get *sc, <span class="Constant">data:offset</span> + buf:address:array:screen-cell<span class="Special"> <- </span>get *screen, <span class="Constant">data:offset</span> max:number<span class="Special"> <- </span>length *buf i:number<span class="Special"> <- </span>copy <span class="Constant">0</span> <span class="Delimiter">{</span> @@ -88,32 +88,31 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } <span class="muControl">loop</span> <span class="Delimiter">}</span> <span class="Comment"># reset cursor</span> - x:address:number<span class="Special"> <- </span>get-address *sc, <span class="Constant">cursor-row:offset</span> + x:address:number<span class="Special"> <- </span>get-address *screen, <span class="Constant">cursor-row:offset</span> *x<span class="Special"> <- </span>copy <span class="Constant">0</span> - x<span class="Special"> <- </span>get-address *sc, <span class="Constant">cursor-column:offset</span> + x<span class="Special"> <- </span>get-address *screen, <span class="Constant">cursor-column:offset</span> *x<span class="Special"> <- </span>copy <span class="Constant">0</span> - <span class="muControl">reply</span> sc/same-as-ingredient:<span class="Constant">0</span> + <span class="muControl">reply</span> <span class="Delimiter">}</span> <span class="Comment"># otherwise, real screen</span> clear-display - <span class="muControl">reply</span> sc/same-as-ingredient:<span class="Constant">0</span> ] -<span class="muRecipe">recipe</span> sync-screen [ +<span class="muRecipe">recipe</span> sync-screen screen:address:screen<span class="muRecipe"> -> </span>screen:address:screen [ <span class="Constant">local-scope</span> - sc:address:screen<span class="Special"> <- </span><span class="Constant">next-ingredient</span> + screen:address:screen<span class="Special"> <- </span><span class="Constant">next-ingredient</span> <span class="Delimiter">{</span> - <span class="muControl">break-if</span> sc + <span class="muControl">break-if</span> screen sync-display <span class="Delimiter">}</span> <span class="Comment"># do nothing for fake screens</span> ] -<span class="muRecipe">recipe</span> fake-screen-is-empty? [ +<span class="muRecipe">recipe</span> fake-screen-is-empty? screen:address:screen<span class="muRecipe"> -> </span>result:boolean [ <span class="Constant">local-scope</span> - sc:address:screen<span class="Special"> <- </span><span class="Constant">next-ingredient</span> - <span class="muControl">reply-unless</span> sc, <span class="Constant">1/true</span> - buf:address:array:screen-cell<span class="Special"> <- </span>get *sc, <span class="Constant">data:offset</span> + <span class="Constant">load-ingredients</span> + <span class="muControl">reply-unless</span> screen, <span class="Constant">1/true</span> + buf:address:array:screen-cell<span class="Special"> <- </span>get *screen, <span class="Constant">data:offset</span> i:number<span class="Special"> <- </span>copy <span class="Constant">0</span> len:number<span class="Special"> <- </span>length *buf <span class="Delimiter">{</span> @@ -129,10 +128,9 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } <span class="muControl">reply</span> <span class="Constant">1/true</span> ] -<span class="muRecipe">recipe</span> print-character [ +<span class="muRecipe">recipe</span> print screen:address:screen, c:character<span class="muRecipe"> -> </span>screen:address:screen [ <span class="Constant">local-scope</span> - sc:address:screen<span class="Special"> <- </span><span class="Constant">next-ingredient</span> - c:character<span class="Special"> <- </span><span class="Constant">next-ingredient</span> + <span class="Constant">load-ingredients</span> color:number, color-found?:boolean<span class="Special"> <- </span><span class="Constant">next-ingredient</span> <span class="Delimiter">{</span> <span class="Comment"># default color to white</span> @@ -149,20 +147,20 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } <span class="Delimiter">{</span> <span class="Comment"># if x exists</span> <span class="Comment"># (handle special cases exactly like in the real screen)</span> - <span class="muControl">break-unless</span> sc - width:number<span class="Special"> <- </span>get *sc, <span class="Constant">num-columns:offset</span> - height:number<span class="Special"> <- </span>get *sc, <span class="Constant">num-rows:offset</span> + <span class="muControl">break-unless</span> screen + width:number<span class="Special"> <- </span>get *screen, <span class="Constant">num-columns:offset</span> + height:number<span class="Special"> <- </span>get *screen, <span class="Constant">num-rows:offset</span> <span class="Comment"># if cursor is out of bounds, silently exit</span> - row:address:number<span class="Special"> <- </span>get-address *sc, <span class="Constant">cursor-row:offset</span> + row:address:number<span class="Special"> <- </span>get-address *screen, <span class="Constant">cursor-row:offset</span> legal?:boolean<span class="Special"> <- </span>greater-or-equal *row, <span class="Constant">0</span> - <span class="muControl">reply-unless</span> legal?, sc + <span class="muControl">reply-unless</span> legal? legal?<span class="Special"> <- </span>lesser-than *row, height - <span class="muControl">reply-unless</span> legal?, sc - column:address:number<span class="Special"> <- </span>get-address *sc, <span class="Constant">cursor-column:offset</span> + <span class="muControl">reply-unless</span> legal? + column:address:number<span class="Special"> <- </span>get-address *screen, <span class="Constant">cursor-column:offset</span> legal?<span class="Special"> <- </span>greater-or-equal *column, <span class="Constant">0</span> - <span class="muControl">reply-unless</span> legal?, sc + <span class="muControl">reply-unless</span> legal? legal?<span class="Special"> <- </span>lesser-than *column, width - <span class="muControl">reply-unless</span> legal?, sc + <span class="muControl">reply-unless</span> legal? <span class="Comment"># special-case: newline</span> <span class="Delimiter">{</span> newline?:boolean<span class="Special"> <- </span>equal c, <span class="Constant">10/newline</span> @@ -176,12 +174,12 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } *column<span class="Special"> <- </span>copy <span class="Constant">0</span> *row<span class="Special"> <- </span>add *row, <span class="Constant">1</span> <span class="Delimiter">}</span> - <span class="muControl">reply</span> sc/same-as-ingredient:<span class="Constant">0</span> + <span class="muControl">reply</span> <span class="Delimiter">}</span> <span class="Comment"># save character in fake screen</span> index:number<span class="Special"> <- </span>multiply *row, width index<span class="Special"> <- </span>add index, *column - buf:address:array:screen-cell<span class="Special"> <- </span>get *sc, <span class="Constant">data:offset</span> + buf:address:array:screen-cell<span class="Special"> <- </span>get *screen, <span class="Constant">data:offset</span> len:number<span class="Special"> <- </span>length *buf <span class="Comment"># special-case: backspace</span> <span class="Delimiter">{</span> @@ -200,7 +198,7 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } cursor-color:address:number<span class="Special"> <- </span>get-address *cursor, <span class="Constant">color:offset</span> *cursor-color<span class="Special"> <- </span>copy <span class="Constant">7/white</span> <span class="Delimiter">}</span> - <span class="muControl">reply</span> sc/same-as-ingredient:<span class="Constant">0</span> + <span class="muControl">reply</span> <span class="Delimiter">}</span> cursor:address:screen-cell<span class="Special"> <- </span>index-address *buf, index cursor-contents:address:character<span class="Special"> <- </span>get-address *cursor, <span class="Constant">contents:offset</span> @@ -214,17 +212,16 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } <span class="muControl">break-if</span> at-right? *column<span class="Special"> <- </span>add *column, <span class="Constant">1</span> <span class="Delimiter">}</span> - <span class="muControl">reply</span> sc/same-as-ingredient:<span class="Constant">0</span> + <span class="muControl">reply</span> <span class="Delimiter">}</span> <span class="Comment"># otherwise, real screen</span> print-character-to-display c, color, bg-color - <span class="muControl">reply</span> sc/same-as-ingredient:<span class="Constant">0</span> ] <span class="muScenario">scenario</span> print-character-at-top-left [ run [ <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>new-fake-screen <span class="Constant">3/width</span>, <span class="Constant">2/height</span> - <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print-character <span class="Constant">1</span>:address:screen, <span class="Constant">97</span> <span class="Comment"># 'a'</span> + <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print <span class="Constant">1</span>:address:screen, <span class="Constant">97</span> <span class="Comment"># 'a'</span> <span class="Constant">2</span>:address:array:screen-cell<span class="Special"> <- </span>get *<span class="Constant">1</span>:address:screen, <span class="Constant">data:offset</span> <span class="Constant">3</span>:array:screen-cell<span class="Special"> <- </span>copy *<span class="Constant">2</span>:address:array:screen-cell ] @@ -236,10 +233,10 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } ] ] -<span class="muScenario">scenario</span> print-character-color [ +<span class="muScenario">scenario</span> print-character-in-color [ run [ <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>new-fake-screen <span class="Constant">3/width</span>, <span class="Constant">2/height</span> - <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print-character <span class="Constant">1</span>:address:screen, <span class="Constant">97/a</span>, <span class="Constant">1/red</span> + <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print <span class="Constant">1</span>:address:screen, <span class="Constant">97/a</span>, <span class="Constant">1/red</span> <span class="Constant">2</span>:address:array:screen-cell<span class="Special"> <- </span>get *<span class="Constant">1</span>:address:screen, <span class="Constant">data:offset</span> <span class="Constant">3</span>:array:screen-cell<span class="Special"> <- </span>copy *<span class="Constant">2</span>:address:array:screen-cell ] @@ -254,8 +251,8 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } <span class="muScenario">scenario</span> print-backspace-character [ run [ <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>new-fake-screen <span class="Constant">3/width</span>, <span class="Constant">2/height</span> - <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print-character <span class="Constant">1</span>:address:screen, <span class="Constant">97</span> <span class="Comment"># 'a'</span> - <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print-character <span class="Constant">1</span>:address:screen, <span class="Constant">8</span> <span class="Comment"># backspace</span> + <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print <span class="Constant">1</span>:address:screen, <span class="Constant">97</span> <span class="Comment"># 'a'</span> + <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print <span class="Constant">1</span>:address:screen, <span class="Constant">8</span> <span class="Comment"># backspace</span> <span class="Constant">2</span>:number<span class="Special"> <- </span>get *<span class="Constant">1</span>:address:screen, <span class="Constant">cursor-column:offset</span> <span class="Constant">3</span>:address:array:screen-cell<span class="Special"> <- </span>get *<span class="Constant">1</span>:address:screen, <span class="Constant">data:offset</span> <span class="Constant">4</span>:array:screen-cell<span class="Special"> <- </span>copy *<span class="Constant">3</span>:address:array:screen-cell @@ -272,9 +269,9 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } <span class="muScenario">scenario</span> print-extra-backspace-character [ run [ <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>new-fake-screen <span class="Constant">3/width</span>, <span class="Constant">2/height</span> - <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print-character <span class="Constant">1</span>:address:screen, <span class="Constant">97</span> <span class="Comment"># 'a'</span> - <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print-character <span class="Constant">1</span>:address:screen, <span class="Constant">8</span> <span class="Comment"># backspace</span> - <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print-character <span class="Constant">1</span>:address:screen, <span class="Constant">8</span> <span class="Comment"># backspace</span> + <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print <span class="Constant">1</span>:address:screen, <span class="Constant">97</span> <span class="Comment"># 'a'</span> + <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print <span class="Constant">1</span>:address:screen, <span class="Constant">8</span> <span class="Comment"># backspace</span> + <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print <span class="Constant">1</span>:address:screen, <span class="Constant">8</span> <span class="Comment"># backspace</span> <span class="Constant">2</span>:number<span class="Special"> <- </span>get *<span class="Constant">1</span>:address:screen, <span class="Constant">cursor-column:offset</span> <span class="Constant">3</span>:address:array:screen-cell<span class="Special"> <- </span>get *<span class="Constant">1</span>:address:screen, <span class="Constant">data:offset</span> <span class="Constant">4</span>:array:screen-cell<span class="Special"> <- </span>copy *<span class="Constant">3</span>:address:array:screen-cell @@ -288,12 +285,12 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } ] ] -<span class="muScenario">scenario</span> print-at-right-margin [ +<span class="muScenario">scenario</span> print-character-at-right-margin [ run [ <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>new-fake-screen <span class="Constant">2/width</span>, <span class="Constant">2/height</span> - <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print-character <span class="Constant">1</span>:address:screen, <span class="Constant">97</span> <span class="Comment"># 'a'</span> - <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print-character <span class="Constant">1</span>:address:screen, <span class="Constant">98</span> <span class="Comment"># 'b'</span> - <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print-character <span class="Constant">1</span>:address:screen, <span class="Constant">99</span> <span class="Comment"># 'c'</span> + <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print <span class="Constant">1</span>:address:screen, <span class="Constant">97</span> <span class="Comment"># 'a'</span> + <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print <span class="Constant">1</span>:address:screen, <span class="Constant">98</span> <span class="Comment"># 'b'</span> + <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print <span class="Constant">1</span>:address:screen, <span class="Constant">99</span> <span class="Comment"># 'c'</span> <span class="Constant">2</span>:number<span class="Special"> <- </span>get *<span class="Constant">1</span>:address:screen, <span class="Constant">cursor-column:offset</span> <span class="Constant">3</span>:address:array:screen-cell<span class="Special"> <- </span>get *<span class="Constant">1</span>:address:screen, <span class="Constant">data:offset</span> <span class="Constant">4</span>:array:screen-cell<span class="Special"> <- </span>copy *<span class="Constant">3</span>:address:array:screen-cell @@ -312,8 +309,8 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } <span class="muScenario">scenario</span> print-newline-character [ run [ <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>new-fake-screen <span class="Constant">3/width</span>, <span class="Constant">2/height</span> - <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print-character <span class="Constant">1</span>:address:screen, <span class="Constant">97</span> <span class="Comment"># 'a'</span> - <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print-character <span class="Constant">1</span>:address:screen, <span class="Constant">10/newline</span> + <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print <span class="Constant">1</span>:address:screen, <span class="Constant">97</span> <span class="Comment"># 'a'</span> + <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print <span class="Constant">1</span>:address:screen, <span class="Constant">10/newline</span> <span class="Constant">2</span>:number<span class="Special"> <- </span>get *<span class="Constant">1</span>:address:screen, <span class="Constant">cursor-row:offset</span> <span class="Constant">3</span>:number<span class="Special"> <- </span>get *<span class="Constant">1</span>:address:screen, <span class="Constant">cursor-column:offset</span> <span class="Constant">4</span>:address:array:screen-cell<span class="Special"> <- </span>get *<span class="Constant">1</span>:address:screen, <span class="Constant">data:offset</span> @@ -332,9 +329,9 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } <span class="muScenario">scenario</span> print-newline-at-bottom-line [ run [ <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>new-fake-screen <span class="Constant">3/width</span>, <span class="Constant">2/height</span> - <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print-character <span class="Constant">1</span>:address:screen, <span class="Constant">10/newline</span> - <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print-character <span class="Constant">1</span>:address:screen, <span class="Constant">10/newline</span> - <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print-character <span class="Constant">1</span>:address:screen, <span class="Constant">10/newline</span> + <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print <span class="Constant">1</span>:address:screen, <span class="Constant">10/newline</span> + <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print <span class="Constant">1</span>:address:screen, <span class="Constant">10/newline</span> + <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print <span class="Constant">1</span>:address:screen, <span class="Constant">10/newline</span> <span class="Constant">2</span>:number<span class="Special"> <- </span>get *<span class="Constant">1</span>:address:screen, <span class="Constant">cursor-row:offset</span> <span class="Constant">3</span>:number<span class="Special"> <- </span>get *<span class="Constant">1</span>:address:screen, <span class="Constant">cursor-column:offset</span> ] @@ -344,15 +341,15 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } ] ] -<span class="muScenario">scenario</span> print-at-bottom-right [ +<span class="muScenario">scenario</span> print-character-at-bottom-right [ run [ <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>new-fake-screen <span class="Constant">2/width</span>, <span class="Constant">2/height</span> - <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print-character <span class="Constant">1</span>:address:screen, <span class="Constant">10/newline</span> - <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print-character <span class="Constant">1</span>:address:screen, <span class="Constant">97</span> <span class="Comment"># 'a'</span> - <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print-character <span class="Constant">1</span>:address:screen, <span class="Constant">98</span> <span class="Comment"># 'b'</span> - <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print-character <span class="Constant">1</span>:address:screen, <span class="Constant">99</span> <span class="Comment"># 'c'</span> - <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print-character <span class="Constant">1</span>:address:screen, <span class="Constant">10/newline</span> - <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print-character <span class="Constant">1</span>:address:screen, <span class="Constant">100</span> <span class="Comment"># 'd'</span> + <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print <span class="Constant">1</span>:address:screen, <span class="Constant">10/newline</span> + <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print <span class="Constant">1</span>:address:screen, <span class="Constant">97</span> <span class="Comment"># 'a'</span> + <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print <span class="Constant">1</span>:address:screen, <span class="Constant">98</span> <span class="Comment"># 'b'</span> + <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print <span class="Constant">1</span>:address:screen, <span class="Constant">99</span> <span class="Comment"># 'c'</span> + <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print <span class="Constant">1</span>:address:screen, <span class="Constant">10/newline</span> + <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print <span class="Constant">1</span>:address:screen, <span class="Constant">100</span> <span class="Comment"># 'd'</span> <span class="Constant">2</span>:number<span class="Special"> <- </span>get *<span class="Constant">1</span>:address:screen, <span class="Constant">cursor-row:offset</span> <span class="Constant">3</span>:number<span class="Special"> <- </span>get *<span class="Constant">1</span>:address:screen, <span class="Constant">cursor-column:offset</span> <span class="Constant">4</span>:address:array:screen-cell<span class="Special"> <- </span>get *<span class="Constant">1</span>:address:screen, <span class="Constant">data:offset</span> @@ -374,70 +371,65 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } ] ] -<span class="muRecipe">recipe</span> clear-line [ +<span class="muRecipe">recipe</span> clear-line screen:address:screen<span class="muRecipe"> -> </span>screen:address:screen [ <span class="Constant">local-scope</span> - sc:address:screen<span class="Special"> <- </span><span class="Constant">next-ingredient</span> + <span class="Constant">load-ingredients</span> <span class="Comment"># if x exists, clear line in fake screen</span> <span class="Delimiter">{</span> - <span class="muControl">break-unless</span> sc - width:number<span class="Special"> <- </span>get *sc, <span class="Constant">num-columns:offset</span> - column:address:number<span class="Special"> <- </span>get-address *sc, <span class="Constant">cursor-column:offset</span> + <span class="muControl">break-unless</span> screen + width:number<span class="Special"> <- </span>get *screen, <span class="Constant">num-columns:offset</span> + column:address:number<span class="Special"> <- </span>get-address *screen, <span class="Constant">cursor-column:offset</span> original-column:number<span class="Special"> <- </span>copy *column <span class="Comment"># space over the entire line</span> <span class="Delimiter">{</span> right:number<span class="Special"> <- </span>subtract width, <span class="Constant">1</span> done?:boolean<span class="Special"> <- </span>greater-or-equal *column, right <span class="muControl">break-if</span> done? - print-character sc, <span class="Constant">[ ]</span> <span class="Comment"># implicitly updates 'column'</span> + print screen, <span class="Constant">[ ]</span> <span class="Comment"># implicitly updates 'column'</span> <span class="muControl">loop</span> <span class="Delimiter">}</span> <span class="Comment"># now back to where the cursor was</span> *column<span class="Special"> <- </span>copy original-column - <span class="muControl">reply</span> sc/same-as-ingredient:<span class="Constant">0</span> + <span class="muControl">reply</span> <span class="Delimiter">}</span> <span class="Comment"># otherwise, real screen</span> clear-line-on-display - <span class="muControl">reply</span> sc/same-as-ingredient:<span class="Constant">0</span> ] -<span class="muRecipe">recipe</span> cursor-position [ +<span class="muRecipe">recipe</span> cursor-position screen:address:screen<span class="muRecipe"> -> </span>row:number, column:number [ <span class="Constant">local-scope</span> - sc:address:screen<span class="Special"> <- </span><span class="Constant">next-ingredient</span> + <span class="Constant">load-ingredients</span> <span class="Comment"># if x exists, lookup cursor in fake screen</span> <span class="Delimiter">{</span> - <span class="muControl">break-unless</span> sc - row:number<span class="Special"> <- </span>get *sc, <span class="Constant">cursor-row:offset</span> - column:number<span class="Special"> <- </span>get *sc, <span class="Constant">cursor-column:offset</span> - <span class="muControl">reply</span> row, column, sc/same-as-ingredient:<span class="Constant">0</span> + <span class="muControl">break-unless</span> screen + row:number<span class="Special"> <- </span>get *screen, <span class="Constant">cursor-row:offset</span> + column:number<span class="Special"> <- </span>get *screen, <span class="Constant">cursor-column:offset</span> + <span class="muControl">reply</span> <span class="Delimiter">}</span> row, column<span class="Special"> <- </span>cursor-position-on-display - <span class="muControl">reply</span> row, column, sc/same-as-ingredient:<span class="Constant">0</span> ] -<span class="muRecipe">recipe</span> move-cursor [ +<span class="muRecipe">recipe</span> move-cursor screen:address:screen, new-row:number, new-column:number<span class="muRecipe"> -> </span>screen:address:screen [ <span class="Constant">local-scope</span> - sc:address:screen<span class="Special"> <- </span><span class="Constant">next-ingredient</span> - new-row:number<span class="Special"> <- </span><span class="Constant">next-ingredient</span> - new-column:number<span class="Special"> <- </span><span class="Constant">next-ingredient</span> + <span class="Constant">load-ingredients</span> <span class="Comment"># if x exists, move cursor in fake screen</span> <span class="Delimiter">{</span> - <span class="muControl">break-unless</span> sc - row:address:number<span class="Special"> <- </span>get-address *sc, <span class="Constant">cursor-row:offset</span> + <span class="muControl">break-unless</span> screen + row:address:number<span class="Special"> <- </span>get-address *screen, <span class="Constant">cursor-row:offset</span> *row<span class="Special"> <- </span>copy new-row - column:address:number<span class="Special"> <- </span>get-address *sc, <span class="Constant">cursor-column:offset</span> + column:address:number<span class="Special"> <- </span>get-address *screen, <span class="Constant">cursor-column:offset</span> *column<span class="Special"> <- </span>copy new-column - <span class="muControl">reply</span> sc/same-as-ingredient:<span class="Constant">0</span> + <span class="muControl">reply</span> <span class="Delimiter">}</span> <span class="Comment"># otherwise, real screen</span> move-cursor-on-display new-row, new-column - <span class="muControl">reply</span> sc/same-as-ingredient:<span class="Constant">0</span> ] <span class="muScenario">scenario</span> clear-line-erases-printed-characters [ run [ <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>new-fake-screen <span class="Constant">3/width</span>, <span class="Constant">2/height</span> <span class="Comment"># print a character</span> - <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print-character <span class="Constant">1</span>:address:screen, <span class="Constant">97</span> <span class="Comment"># 'a'</span> + <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print <span class="Constant">1</span>:address:screen, <span class="Constant">97</span> <span class="Comment"># 'a'</span> <span class="Comment"># move cursor to start of line</span> <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>move-cursor <span class="Constant">1</span>:address:screen, <span class="Constant">0/row</span>, <span class="Constant">0/column</span> <span class="Comment"># clear line</span> @@ -463,193 +455,180 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } ] ] -<span class="muRecipe">recipe</span> cursor-down [ +<span class="muRecipe">recipe</span> cursor-down screen:address:screen<span class="muRecipe"> -> </span>screen:address:screen [ <span class="Constant">local-scope</span> - sc:address:screen<span class="Special"> <- </span><span class="Constant">next-ingredient</span> + <span class="Constant">load-ingredients</span> <span class="Comment"># if x exists, move cursor in fake screen</span> <span class="Delimiter">{</span> - <span class="muControl">break-unless</span> sc + <span class="muControl">break-unless</span> screen <span class="Delimiter">{</span> <span class="Comment"># increment row unless it's already all the way down</span> - height:number<span class="Special"> <- </span>get *sc, <span class="Constant">num-rows:offset</span> - row:address:number<span class="Special"> <- </span>get-address *sc, <span class="Constant">cursor-row:offset</span> + height:number<span class="Special"> <- </span>get *screen, <span class="Constant">num-rows:offset</span> + row:address:number<span class="Special"> <- </span>get-address *screen, <span class="Constant">cursor-row:offset</span> max:number<span class="Special"> <- </span>subtract height, <span class="Constant">1</span> at-bottom?:boolean<span class="Special"> <- </span>greater-or-equal *row, max <span class="muControl">break-if</span> at-bottom? *row<span class="Special"> <- </span>add *row, <span class="Constant">1</span> <span class="Delimiter">}</span> - <span class="muControl">reply</span> sc/same-as-ingredient:<span class="Constant">0</span> + <span class="muControl">reply</span> <span class="Delimiter">}</span> <span class="Comment"># otherwise, real screen</span> move-cursor-down-on-display - <span class="muControl">reply</span> sc/same-as-ingredient:<span class="Constant">0</span> ] -<span class="muRecipe">recipe</span> cursor-up [ +<span class="muRecipe">recipe</span> cursor-up screen:address:screen<span class="muRecipe"> -> </span>screen:address:screen [ <span class="Constant">local-scope</span> - sc:address:screen<span class="Special"> <- </span><span class="Constant">next-ingredient</span> + <span class="Constant">load-ingredients</span> <span class="Comment"># if x exists, move cursor in fake screen</span> <span class="Delimiter">{</span> - <span class="muControl">break-unless</span> sc + <span class="muControl">break-unless</span> screen <span class="Delimiter">{</span> <span class="Comment"># decrement row unless it's already all the way up</span> - row:address:number<span class="Special"> <- </span>get-address *sc, <span class="Constant">cursor-row:offset</span> + row:address:number<span class="Special"> <- </span>get-address *screen, <span class="Constant">cursor-row:offset</span> at-top?:boolean<span class="Special"> <- </span>lesser-or-equal *row, <span class="Constant">0</span> <span class="muControl">break-if</span> at-top? *row<span class="Special"> <- </span>subtract *row, <span class="Constant">1</span> <span class="Delimiter">}</span> - <span class="muControl">reply</span> sc/same-as-ingredient:<span class="Constant">0</span> + <span class="muControl">reply</span> <span class="Delimiter">}</span> <span class="Comment"># otherwise, real screen</span> move-cursor-up-on-display - <span class="muControl">reply</span> sc/same-as-ingredient:<span class="Constant">0</span> ] -<span class="muRecipe">recipe</span> cursor-right [ +<span class="muRecipe">recipe</span> cursor-right screen:address:screen<span class="muRecipe"> -> </span>screen:address:screen [ <span class="Constant">local-scope</span> - sc:address:screen<span class="Special"> <- </span><span class="Constant">next-ingredient</span> + <span class="Constant">load-ingredients</span> <span class="Comment"># if x exists, move cursor in fake screen</span> <span class="Delimiter">{</span> - <span class="muControl">break-unless</span> sc + <span class="muControl">break-unless</span> screen <span class="Delimiter">{</span> <span class="Comment"># increment column unless it's already all the way to the right</span> - width:number<span class="Special"> <- </span>get *sc, <span class="Constant">num-columns:offset</span> - column:address:number<span class="Special"> <- </span>get-address *sc, <span class="Constant">cursor-column:offset</span> + width:number<span class="Special"> <- </span>get *screen, <span class="Constant">num-columns:offset</span> + column:address:number<span class="Special"> <- </span>get-address *screen, <span class="Constant">cursor-column:offset</span> max:number<span class="Special"> <- </span>subtract width, <span class="Constant">1</span> at-bottom?:boolean<span class="Special"> <- </span>greater-or-equal *column, max <span class="muControl">break-if</span> at-bottom? *column<span class="Special"> <- </span>add *column, <span class="Constant">1</span> <span class="Delimiter">}</span> - <span class="muControl">reply</span> sc/same-as-ingredient:<span class="Constant">0</span> + <span class="muControl">reply</span> <span class="Delimiter">}</span> <span class="Comment"># otherwise, real screen</span> move-cursor-right-on-display - <span class="muControl">reply</span> sc/same-as-ingredient:<span class="Constant">0</span> ] -<span class="muRecipe">recipe</span> cursor-left [ +<span class="muRecipe">recipe</span> cursor-left screen:address:screen<span class="muRecipe"> -> </span>screen:address:screen [ <span class="Constant">local-scope</span> - sc:address:screen<span class="Special"> <- </span><span class="Constant">next-ingredient</span> + <span class="Constant">load-ingredients</span> <span class="Comment"># if x exists, move cursor in fake screen</span> <span class="Delimiter">{</span> - <span class="muControl">break-unless</span> sc + <span class="muControl">break-unless</span> screen <span class="Delimiter">{</span> <span class="Comment"># decrement column unless it's already all the way to the left</span> - column:address:number<span class="Special"> <- </span>get-address *sc, <span class="Constant">cursor-column:offset</span> + column:address:number<span class="Special"> <- </span>get-address *screen, <span class="Constant">cursor-column:offset</span> at-top?:boolean<span class="Special"> <- </span>lesser-or-equal *column, <span class="Constant">0</span> <span class="muControl">break-if</span> at-top? *column<span class="Special"> <- </span>subtract *column, <span class="Constant">1</span> <span class="Delimiter">}</span> - <span class="muControl">reply</span> sc/same-as-ingredient:<span class="Constant">0</span> + <span class="muControl">reply</span> <span class="Delimiter">}</span> <span class="Comment"># otherwise, real screen</span> move-cursor-left-on-display - <span class="muControl">reply</span> sc/same-as-ingredient:<span class="Constant">0</span> ] -<span class="muRecipe">recipe</span> cursor-to-start-of-line [ +<span class="muRecipe">recipe</span> cursor-to-start-of-line screen:address:screen<span class="muRecipe"> -> </span>screen:address:screen [ <span class="Constant">local-scope</span> - sc:address:screen<span class="Special"> <- </span><span class="Constant">next-ingredient</span> - row:number, _, sc<span class="Special"> <- </span>cursor-position sc + <span class="Constant">load-ingredients</span> + row:number<span class="Special"> <- </span>cursor-position screen column:number<span class="Special"> <- </span>copy <span class="Constant">0</span> - sc<span class="Special"> <- </span>move-cursor sc, row, column - <span class="muControl">reply</span> sc/same-as-ingredient:<span class="Constant">0</span> + screen<span class="Special"> <- </span>move-cursor screen, row, column ] -<span class="muRecipe">recipe</span> cursor-to-next-line [ +<span class="muRecipe">recipe</span> cursor-to-next-line screen:address:screen<span class="muRecipe"> -> </span>screen:address:screen [ <span class="Constant">local-scope</span> - screen:address:screen<span class="Special"> <- </span><span class="Constant">next-ingredient</span> + <span class="Constant">load-ingredients</span> screen<span class="Special"> <- </span>cursor-down screen screen<span class="Special"> <- </span>cursor-to-start-of-line screen - <span class="muControl">reply</span> screen/same-as-ingredient:<span class="Constant">0</span> ] -<span class="muRecipe">recipe</span> screen-width [ +<span class="muRecipe">recipe</span> screen-width screen:address:screen<span class="muRecipe"> -> </span>width:number [ <span class="Constant">local-scope</span> - sc:address:screen<span class="Special"> <- </span><span class="Constant">next-ingredient</span> + <span class="Constant">load-ingredients</span> <span class="Comment"># if x exists, move cursor in fake screen</span> <span class="Delimiter">{</span> - <span class="muControl">break-unless</span> sc - width:number<span class="Special"> <- </span>get *sc, <span class="Constant">num-columns:offset</span> - <span class="muControl">reply</span> width + <span class="muControl">break-unless</span> screen + width<span class="Special"> <- </span>get *screen, <span class="Constant">num-columns:offset</span> + <span class="muControl">reply</span> <span class="Delimiter">}</span> <span class="Comment"># otherwise, real screen</span> - width:number<span class="Special"> <- </span>display-width - <span class="muControl">reply</span> width + width<span class="Special"> <- </span>display-width ] -<span class="muRecipe">recipe</span> screen-height [ +<span class="muRecipe">recipe</span> screen-height screen:address:screen<span class="muRecipe"> -> </span>height:number [ <span class="Constant">local-scope</span> - sc:address:screen<span class="Special"> <- </span><span class="Constant">next-ingredient</span> + <span class="Constant">load-ingredients</span> <span class="Comment"># if x exists, move cursor in fake screen</span> <span class="Delimiter">{</span> - <span class="muControl">break-unless</span> sc - height:number<span class="Special"> <- </span>get *sc, <span class="Constant">num-rows:offset</span> - <span class="muControl">reply</span> height + <span class="muControl">break-unless</span> screen + height<span class="Special"> <- </span>get *screen, <span class="Constant">num-rows:offset</span> + <span class="muControl">reply</span> <span class="Delimiter">}</span> <span class="Comment"># otherwise, real screen</span> - height:number<span class="Special"> <- </span>display-height - <span class="muControl">reply</span> height + height<span class="Special"> <- </span>display-height ] -<span class="muRecipe">recipe</span> hide-cursor [ +<span class="muRecipe">recipe</span> hide-cursor screen:address:screen<span class="muRecipe"> -> </span>screen:address:screen [ <span class="Constant">local-scope</span> - screen:address:screen<span class="Special"> <- </span><span class="Constant">next-ingredient</span> + <span class="Constant">load-ingredients</span> <span class="Comment"># if x exists (not real display), do nothing</span> <span class="Delimiter">{</span> <span class="muControl">break-unless</span> screen - <span class="muControl">reply</span> screen + <span class="muControl">reply</span> <span class="Delimiter">}</span> <span class="Comment"># otherwise, real screen</span> hide-cursor-on-display - <span class="muControl">reply</span> screen ] -<span class="muRecipe">recipe</span> show-cursor [ +<span class="muRecipe">recipe</span> show-cursor screen:address:screen<span class="muRecipe"> -> </span>screen:address:screen [ <span class="Constant">local-scope</span> - screen:address:screen<span class="Special"> <- </span><span class="Constant">next-ingredient</span> + <span class="Constant">load-ingredients</span> <span class="Comment"># if x exists (not real display), do nothing</span> <span class="Delimiter">{</span> <span class="muControl">break-unless</span> screen - <span class="muControl">reply</span> screen + <span class="muControl">reply</span> <span class="Delimiter">}</span> <span class="Comment"># otherwise, real screen</span> show-cursor-on-display - <span class="muControl">reply</span> screen ] -<span class="muRecipe">recipe</span> hide-screen [ +<span class="muRecipe">recipe</span> hide-screen screen:address:screen<span class="muRecipe"> -> </span>screen:address:screen [ <span class="Constant">local-scope</span> - screen:address:screen<span class="Special"> <- </span><span class="Constant">next-ingredient</span> + <span class="Constant">load-ingredients</span> <span class="Comment"># if x exists (not real display), do nothing</span> <span class="Comment"># todo: help test this</span> <span class="Delimiter">{</span> <span class="muControl">break-unless</span> screen - <span class="muControl">reply</span> screen + <span class="muControl">reply</span> <span class="Delimiter">}</span> <span class="Comment"># otherwise, real screen</span> hide-display - <span class="muControl">reply</span> screen ] -<span class="muRecipe">recipe</span> show-screen [ +<span class="muRecipe">recipe</span> show-screen screen:address:screen<span class="muRecipe"> -> </span>screen:address:screen [ <span class="Constant">local-scope</span> - screen:address:screen<span class="Special"> <- </span><span class="Constant">next-ingredient</span> + <span class="Constant">load-ingredients</span> <span class="Comment"># if x exists (not real display), do nothing</span> <span class="Comment"># todo: help test this</span> <span class="Delimiter">{</span> <span class="muControl">break-unless</span> screen - <span class="muControl">reply</span> screen + <span class="muControl">reply</span> <span class="Delimiter">}</span> <span class="Comment"># otherwise, real screen</span> show-display - <span class="muControl">reply</span> screen ] -<span class="muRecipe">recipe</span> print-string [ +<span class="muRecipe">recipe</span> print screen:address:screen, s:address:array:character<span class="muRecipe"> -> </span>screen:address:screen [ <span class="Constant">local-scope</span> - screen:address:screen<span class="Special"> <- </span><span class="Constant">next-ingredient</span> - s:address:array:character<span class="Special"> <- </span><span class="Constant">next-ingredient</span> + <span class="Constant">load-ingredients</span> color:number, color-found?:boolean<span class="Special"> <- </span><span class="Constant">next-ingredient</span> <span class="Delimiter">{</span> <span class="Comment"># default color to white</span> @@ -668,18 +647,17 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } done?:boolean<span class="Special"> <- </span>greater-or-equal i, len <span class="muControl">break-if</span> done? c:character<span class="Special"> <- </span>index *s, i - print-character screen, c, color, bg-color + print screen, c, color, bg-color i<span class="Special"> <- </span>add i, <span class="Constant">1</span> <span class="muControl">loop</span> <span class="Delimiter">}</span> - <span class="muControl">reply</span> screen/same-as-ingredient:<span class="Constant">0</span> ] -<span class="muScenario">scenario</span> print-string-stops-at-right-margin [ +<span class="muScenario">scenario</span> print-text-stops-at-right-margin [ run [ <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>new-fake-screen <span class="Constant">3/width</span>, <span class="Constant">2/height</span> <span class="Constant">2</span>:address:array:character<span class="Special"> <- </span>new <span class="Constant">[abcd]</span> - <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print-string <span class="Constant">1</span>:address:screen, <span class="Constant">2</span>:address:array:character + <span class="Constant">1</span>:address:screen<span class="Special"> <- </span>print <span class="Constant">1</span>:address:screen, <span class="Constant">2</span>:address:array:character <span class="Constant">3</span>:address:array:screen-cell<span class="Special"> <- </span>get *<span class="Constant">1</span>:address:screen, <span class="Constant">data:offset</span> <span class="Constant">4</span>:array:screen-cell<span class="Special"> <- </span>copy *<span class="Constant">3</span>:address:array:screen-cell ] @@ -695,7 +673,7 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } ] ] -<span class="muRecipe">recipe</span> print-integer [ +<span class="muRecipe">recipe</span> print-integer screen:address:screen, n:number<span class="muRecipe"> -> </span>screen:address:screen [ <span class="Constant">local-scope</span> screen:address:screen<span class="Special"> <- </span><span class="Constant">next-ingredient</span> n:number<span class="Special"> <- </span><span class="Constant">next-ingredient</span> @@ -712,9 +690,8 @@ body { font-family: monospace; color: #eeeeee; background-color: #080808; } bg-color<span class="Special"> <- </span>copy <span class="Constant">0/black</span> <span class="Delimiter">}</span> <span class="Comment"># todo: other bases besides decimal</span> - s:address:array:character<span class="Special"> <- </span>integer-to-decimal-string n - print-string screen, s, color, bg-color - <span class="muControl">reply</span> screen/same-as-ingredient:<span class="Constant">0</span> + s:address:array:character<span class="Special"> <- </span>to-text n + screen<span class="Special"> <- </span>print screen, s, color, bg-color ] </pre> </body> |