mu/html/080display.cc.html
Kartik Agaram 08a0eed699 4891
Couple more tweaks to html rendering:
a) SubX definitions no longer link redundantly to themselves. This long-standing
issue turns out to be tractable to solve for SubX files since the syntax
is so simple.
b) Fix links to SubX definitions in other directories. I forgot that I
have to always generate tags from the directory of the file being linkified.
c) Fix link colors. Before we lost all syntax highlighting for functions
and Globals. Now they maintain their colors, just add an underline.
2018-12-30 00:02:42 -08:00

527 lines
80 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 080display.cc</title>
<meta name="Generator" content="Vim/8.0">
<meta name="plugin-version" content="vim7.4_v2">
<meta name="syntax" content="cpp">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=">
<meta name="colorscheme" content="minimal-light">
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #c6c6c6; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #c6c6c6; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.cSpecial { color: #008000; }
.LineNr { }
.Constant { color: #008787; }
.Delimiter { color: #c000c0; }
.Special { color: #d70000; }
.Identifier { color: #af5f00; }
.Normal { color: #000000; background-color: #c6c6c6; padding-bottom: 1px; }
.Comment { color: #005faf; }
.SalientComment { color: #0000af; }
-->
</style>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
function JumpToLine()
{
var lineNum;
lineNum = window.location.hash;
lineNum = lineNum.substr(1); /* strip off '#' */
if (lineNum.indexOf('L') == -1) {
lineNum = 'L'+lineNum;
}
lineElem = document.getElementById(lineNum);
/* Always jump to new location even if the line was hidden inside a fold, or
* we corrected the raw number to a line ID.
*/
if (lineElem) {
lineElem.scrollIntoView(true);
}
return true;
}
if ('onhashchange' in window) {
window.onhashchange = JumpToLine;
}
-->
</script>
</head>
<body onload='JumpToLine();'>
<a href='https://github.com/akkartik/mu/blob/master/080display.cc'>https://github.com/akkartik/mu/blob/master/080display.cc</a>
<pre id='vimCodeElement'>
<span id="L1" class="LineNr"> 1 </span><span class="Comment">//: Take raw control of the text-mode display and console, putting it in</span>
<span id="L2" class="LineNr"> 2 </span><span class="Comment">//: 'console' mode rather than the usual automatically-scrolling 'typewriter'</span>
<span id="L3" class="LineNr"> 3 </span><span class="Comment">//: mode.</span>
<span id="L4" class="LineNr"> 4 </span>
<span id="L5" class="LineNr"> 5 </span><span class="SalientComment">//:: Display management</span>
<span id="L6" class="LineNr"> 6 </span>
<span id="L7" class="LineNr"> 7 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
<span id="L8" class="LineNr"> 8 </span><span class="Normal">int</span> <span class="Special">Display_row</span> = <span class="Constant">0</span><span class="Delimiter">;</span>
<span id="L9" class="LineNr"> 9 </span><span class="Normal">int</span> <span class="Special">Display_column</span> = <span class="Constant">0</span><span class="Delimiter">;</span>
<span id="L10" class="LineNr"> 10 </span>
<span id="L11" class="LineNr"> 11 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
<span id="L12" class="LineNr"> 12 </span><span class="Comment">#define CHECK_SCREEN \</span>
<span id="L13" class="LineNr"> 13 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!tb_is_active<span class="Delimiter">())</span> <span class="Delimiter">{</span> \
<span id="L14" class="LineNr"> 14 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><span class="Special">Run_tests</span><span class="Delimiter">)</span> \
<span id="L15" class="LineNr"> 15 </span> <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;tried to print to real screen in a test!\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span> \
<span id="L16" class="LineNr"> 16 </span> <span class="Normal">else</span> \
<span id="L17" class="LineNr"> 17 </span> <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;tried to print to real screen before 'open-console' or after 'close-console'\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span> \
<span id="L18" class="LineNr"> 18 </span> <span class="Identifier">break</span><span class="Delimiter">;</span> \
<span id="L19" class="LineNr"> 19 </span> <span class="Delimiter">}</span>
<span id="L20" class="LineNr"> 20 </span><span class="Comment">#define CHECK_CONSOLE \</span>
<span id="L21" class="LineNr"> 21 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!tb_is_active<span class="Delimiter">())</span> <span class="Delimiter">{</span> \
<span id="L22" class="LineNr"> 22 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><span class="Special">Run_tests</span><span class="Delimiter">)</span> \
<span id="L23" class="LineNr"> 23 </span> <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;tried to read event from real keyboard/mouse in a test!\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span> \
<span id="L24" class="LineNr"> 24 </span> <span class="Normal">else</span> \
<span id="L25" class="LineNr"> 25 </span> <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span><a href='026call.cc.html#L87'>current_recipe_name</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;tried to read event from real keyboard/mouse before 'open-console' or after 'close-console'\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span> \
<span id="L26" class="LineNr"> 26 </span> <span class="Identifier">break</span><span class="Delimiter">;</span> \
<span id="L27" class="LineNr"> 27 </span> <span class="Delimiter">}</span>
<span id="L28" class="LineNr"> 28 </span>
<span id="L29" class="LineNr"> 29 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
<span id="L30" class="LineNr"> 30 </span>OPEN_CONSOLE<span class="Delimiter">,</span>
<span id="L31" class="LineNr"> 31 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
<span id="L32" class="LineNr"> 32 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span><span class="Special">Recipe_ordinal</span><span class="Delimiter">,</span> <span class="Constant">&quot;open-console&quot;</span><span class="Delimiter">,</span> OPEN_CONSOLE<span class="Delimiter">);</span>
<span id="L33" class="LineNr"> 33 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
<span id="L34" class="LineNr"> 34 </span><span class="Normal">case</span> OPEN_CONSOLE: <span class="Delimiter">{</span>
<span id="L35" class="LineNr"> 35 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L36" class="LineNr"> 36 </span><span class="Delimiter">}</span>
<span id="L37" class="LineNr"> 37 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
<span id="L38" class="LineNr"> 38 </span><span class="Normal">case</span> OPEN_CONSOLE: <span class="Delimiter">{</span>
<span id="L39" class="LineNr"> 39 </span> tb_init<span class="Delimiter">();</span>
<span id="L40" class="LineNr"> 40 </span> std::setvbuf<span class="Delimiter">(</span><span class="Constant">stdout</span><span class="Delimiter">,</span> <span class="Constant">NULL</span><span class="Delimiter">,</span> <span class="Constant">_IONBF</span><span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span> <span class="Comment">// disable buffering in cout</span>
<span id="L41" class="LineNr"> 41 </span> <span class="Special">Display_row</span> = <span class="Special">Display_column</span> = <span class="Constant">0</span><span class="Delimiter">;</span>
<span id="L42" class="LineNr"> 42 </span> <span class="Normal">int</span> width = tb_width<span class="Delimiter">();</span>
<span id="L43" class="LineNr"> 43 </span> <span class="Normal">int</span> height = tb_height<span class="Delimiter">();</span>
<span id="L44" class="LineNr"> 44 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>width &gt; <span class="Constant">222</span> || height &gt; <span class="Constant">222</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L45" class="LineNr"> 45 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>width &gt; <span class="Constant">222</span><span class="Delimiter">)</span>
<span id="L46" class="LineNr"> 46 </span> <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;sorry, Mu doesn't support windows wider than 222 characters in console mode. Please resize your window.\n&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L47" class="LineNr"> 47 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>height &gt; <span class="Constant">222</span><span class="Delimiter">)</span>
<span id="L48" class="LineNr"> 48 </span> <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;sorry, Mu doesn't support windows taller than 222 characters in console mode. Please resize your window.\n&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
<span id="L49" class="LineNr"> 49 </span> exit<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L50" class="LineNr"> 50 </span> <span class="Delimiter">}</span>
<span id="L51" class="LineNr"> 51 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L52" class="LineNr"> 52 </span><span class="Delimiter">}</span>
<span id="L53" class="LineNr"> 53 </span>
<span id="L54" class="LineNr"> 54 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
<span id="L55" class="LineNr"> 55 </span>CLOSE_CONSOLE<span class="Delimiter">,</span>
<span id="L56" class="LineNr"> 56 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
<span id="L57" class="LineNr"> 57 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span><span class="Special">Recipe_ordinal</span><span class="Delimiter">,</span> <span class="Constant">&quot;close-console&quot;</span><span class="Delimiter">,</span> CLOSE_CONSOLE<span class="Delimiter">);</span>
<span id="L58" class="LineNr"> 58 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
<span id="L59" class="LineNr"> 59 </span><span class="Normal">case</span> CLOSE_CONSOLE: <span class="Delimiter">{</span>
<span id="L60" class="LineNr"> 60 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L61" class="LineNr"> 61 </span><span class="Delimiter">}</span>
<span id="L62" class="LineNr"> 62 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
<span id="L63" class="LineNr"> 63 </span><span class="Normal">case</span> CLOSE_CONSOLE: <span class="Delimiter">{</span>
<span id="L64" class="LineNr"> 64 </span> tb_shutdown<span class="Delimiter">();</span>
<span id="L65" class="LineNr"> 65 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L66" class="LineNr"> 66 </span><span class="Delimiter">}</span>
<span id="L67" class="LineNr"> 67 </span>
<span id="L68" class="LineNr"> 68 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
<span id="L69" class="LineNr"> 69 </span>CLEAR_DISPLAY<span class="Delimiter">,</span>
<span id="L70" class="LineNr"> 70 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
<span id="L71" class="LineNr"> 71 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span><span class="Special">Recipe_ordinal</span><span class="Delimiter">,</span> <span class="Constant">&quot;clear-display&quot;</span><span class="Delimiter">,</span> CLEAR_DISPLAY<span class="Delimiter">);</span>
<span id="L72" class="LineNr"> 72 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
<span id="L73" class="LineNr"> 73 </span><span class="Normal">case</span> CLEAR_DISPLAY: <span class="Delimiter">{</span>
<span id="L74" class="LineNr"> 74 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L75" class="LineNr"> 75 </span><span class="Delimiter">}</span>
<span id="L76" class="LineNr"> 76 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
<span id="L77" class="LineNr"> 77 </span><span class="Normal">case</span> CLEAR_DISPLAY: <span class="Delimiter">{</span>
<span id="L78" class="LineNr"> 78 </span> <a href='080display.cc.html#L12'>CHECK_SCREEN</a><span class="Delimiter">;</span>
<span id="L79" class="LineNr"> 79 </span> tb_clear<span class="Delimiter">();</span>
<span id="L80" class="LineNr"> 80 </span> <span class="Special">Display_row</span> = <span class="Special">Display_column</span> = <span class="Constant">0</span><span class="Delimiter">;</span>
<span id="L81" class="LineNr"> 81 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L82" class="LineNr"> 82 </span><span class="Delimiter">}</span>
<span id="L83" class="LineNr"> 83 </span>
<span id="L84" class="LineNr"> 84 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
<span id="L85" class="LineNr"> 85 </span>PRINT_CHARACTER_TO_DISPLAY<span class="Delimiter">,</span>
<span id="L86" class="LineNr"> 86 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
<span id="L87" class="LineNr"> 87 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span><span class="Special">Recipe_ordinal</span><span class="Delimiter">,</span> <span class="Constant">&quot;print-character-to-display&quot;</span><span class="Delimiter">,</span> PRINT_CHARACTER_TO_DISPLAY<span class="Delimiter">);</span>
<span id="L88" class="LineNr"> 88 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
<span id="L89" class="LineNr"> 89 </span><span class="Normal">case</span> PRINT_CHARACTER_TO_DISPLAY: <span class="Delimiter">{</span>
<span id="L90" class="LineNr"> 90 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
<span id="L91" class="LineNr"> 91 </span> <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span><span class="Special">Recipe</span><span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'print-character-to-display' requires at least one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L92" class="LineNr"> 92 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L93" class="LineNr"> 93 </span> <span class="Delimiter">}</span>
<span id="L94" class="LineNr"> 94 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
<span id="L95" class="LineNr"> 95 </span> <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span><span class="Special">Recipe</span><span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'print-character-to-display' should be a character, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L96" class="LineNr"> 96 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L97" class="LineNr"> 97 </span> <span class="Delimiter">}</span>
<span id="L98" class="LineNr"> 98 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L99" class="LineNr"> 99 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
<span id="L100" class="LineNr">100 </span> <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span><span class="Special">Recipe</span><span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of 'print-character-to-display' should be a foreground color number, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L101" class="LineNr">101 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L102" class="LineNr">102 </span> <span class="Delimiter">}</span>
<span id="L103" class="LineNr">103 </span> <span class="Delimiter">}</span>
<span id="L104" class="LineNr">104 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> &gt; <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L105" class="LineNr">105 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
<span id="L106" class="LineNr">106 </span> <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span><span class="Special">Recipe</span><span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;third ingredient of 'print-character-to-display' should be a background color number, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L107" class="LineNr">107 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L108" class="LineNr">108 </span> <span class="Delimiter">}</span>
<span id="L109" class="LineNr">109 </span> <span class="Delimiter">}</span>
<span id="L110" class="LineNr">110 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L111" class="LineNr">111 </span><span class="Delimiter">}</span>
<span id="L112" class="LineNr">112 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
<span id="L113" class="LineNr">113 </span><span class="Normal">case</span> PRINT_CHARACTER_TO_DISPLAY: <span class="Delimiter">{</span>
<span id="L114" class="LineNr">114 </span> <a href='080display.cc.html#L12'>CHECK_SCREEN</a><span class="Delimiter">;</span>
<span id="L115" class="LineNr">115 </span> <span class="Normal">int</span> h=tb_height<span class="Delimiter">(),</span> w=tb_width<span class="Delimiter">();</span>
<span id="L116" class="LineNr">116 </span> <span class="Normal">int</span> height = <span class="Delimiter">(</span>h &gt;= <span class="Constant">0</span><span class="Delimiter">)</span> ? h : <span class="Constant">0</span><span class="Delimiter">;</span>
<span id="L117" class="LineNr">117 </span> <span class="Normal">int</span> width = <span class="Delimiter">(</span>w &gt;= <span class="Constant">0</span><span class="Delimiter">)</span> ? w : <span class="Constant">0</span><span class="Delimiter">;</span>
<span id="L118" class="LineNr">118 </span> <span class="Normal">int</span> c = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L119" class="LineNr">119 </span> <span class="Normal">int</span> color = TB_WHITE<span class="Delimiter">;</span>
<span id="L120" class="LineNr">120 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L121" class="LineNr">121 </span> color = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L122" class="LineNr">122 </span> <span class="Delimiter">}</span>
<span id="L123" class="LineNr">123 </span> <span class="Normal">int</span> bg_color = TB_BLACK<span class="Delimiter">;</span>
<span id="L124" class="LineNr">124 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">)</span> &gt; <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L125" class="LineNr">125 </span> bg_color = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L126" class="LineNr">126 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>bg_color == <span class="Constant">0</span><span class="Delimiter">)</span> bg_color = TB_BLACK<span class="Delimiter">;</span>
<span id="L127" class="LineNr">127 </span> <span class="Delimiter">}</span>
<span id="L128" class="LineNr">128 </span> tb_print<span class="Delimiter">(</span>c<span class="Delimiter">,</span> color<span class="Delimiter">,</span> bg_color<span class="Delimiter">);</span>
<span id="L129" class="LineNr">129 </span> <span class="Comment">// track row and column, mimicking what happens on screen</span>
<span id="L130" class="LineNr">130 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>c == <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L131" class="LineNr">131 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><span class="Special">Display_row</span> &lt; height-<span class="Constant">1</span><span class="Delimiter">)</span> ++<span class="Special">Display_row</span><span class="Delimiter">;</span> <span class="Comment">// otherwise we scroll and Display_row remains unchanged</span>
<span id="L132" class="LineNr">132 </span> <span class="Delimiter">}</span>
<span id="L133" class="LineNr">133 </span> <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>c == <span class="cSpecial">'\r'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L134" class="LineNr">134 </span> <span class="Special">Display_column</span> = <span class="Constant">0</span><span class="Delimiter">;</span>
<span id="L135" class="LineNr">135 </span> <span class="Delimiter">}</span>
<span id="L136" class="LineNr">136 </span> <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>c == <span class="cSpecial">'\b'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L137" class="LineNr">137 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><span class="Special">Display_column</span> &gt; <span class="Constant">0</span><span class="Delimiter">)</span> --<span class="Special">Display_column</span><span class="Delimiter">;</span>
<span id="L138" class="LineNr">138 </span> <span class="Delimiter">}</span>
<span id="L139" class="LineNr">139 </span> <span class="Normal">else</span> <span class="Delimiter">{</span>
<span id="L140" class="LineNr">140 </span> ++<span class="Special">Display_column</span><span class="Delimiter">;</span>
<span id="L141" class="LineNr">141 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><span class="Special">Display_column</span> &gt;= width<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L142" class="LineNr">142 </span> <span class="Special">Display_column</span> = <span class="Constant">0</span><span class="Delimiter">;</span>
<span id="L143" class="LineNr">143 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><span class="Special">Display_row</span> &lt; height-<span class="Constant">1</span><span class="Delimiter">)</span> ++<span class="Special">Display_row</span><span class="Delimiter">;</span>
<span id="L144" class="LineNr">144 </span> <span class="Delimiter">}</span>
<span id="L145" class="LineNr">145 </span> <span class="Delimiter">}</span>
<span id="L146" class="LineNr">146 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L147" class="LineNr">147 </span><span class="Delimiter">}</span>
<span id="L148" class="LineNr">148 </span>
<span id="L149" class="LineNr">149 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
<span id="L150" class="LineNr">150 </span>CURSOR_POSITION_ON_DISPLAY<span class="Delimiter">,</span>
<span id="L151" class="LineNr">151 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
<span id="L152" class="LineNr">152 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span><span class="Special">Recipe_ordinal</span><span class="Delimiter">,</span> <span class="Constant">&quot;cursor-position-on-display&quot;</span><span class="Delimiter">,</span> CURSOR_POSITION_ON_DISPLAY<span class="Delimiter">);</span>
<span id="L153" class="LineNr">153 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
<span id="L154" class="LineNr">154 </span><span class="Normal">case</span> CURSOR_POSITION_ON_DISPLAY: <span class="Delimiter">{</span>
<span id="L155" class="LineNr">155 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L156" class="LineNr">156 </span><span class="Delimiter">}</span>
<span id="L157" class="LineNr">157 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
<span id="L158" class="LineNr">158 </span><span class="Normal">case</span> CURSOR_POSITION_ON_DISPLAY: <span class="Delimiter">{</span>
<span id="L159" class="LineNr">159 </span> <a href='080display.cc.html#L12'>CHECK_SCREEN</a><span class="Delimiter">;</span>
<span id="L160" class="LineNr">160 </span> products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span>
<span id="L161" class="LineNr">161 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Special">Display_row</span><span class="Delimiter">);</span>
<span id="L162" class="LineNr">162 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Special">Display_column</span><span class="Delimiter">);</span>
<span id="L163" class="LineNr">163 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L164" class="LineNr">164 </span><span class="Delimiter">}</span>
<span id="L165" class="LineNr">165 </span>
<span id="L166" class="LineNr">166 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
<span id="L167" class="LineNr">167 </span>MOVE_CURSOR_ON_DISPLAY<span class="Delimiter">,</span>
<span id="L168" class="LineNr">168 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
<span id="L169" class="LineNr">169 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span><span class="Special">Recipe_ordinal</span><span class="Delimiter">,</span> <span class="Constant">&quot;move-cursor-on-display&quot;</span><span class="Delimiter">,</span> MOVE_CURSOR_ON_DISPLAY<span class="Delimiter">);</span>
<span id="L170" class="LineNr">170 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
<span id="L171" class="LineNr">171 </span><span class="Normal">case</span> MOVE_CURSOR_ON_DISPLAY: <span class="Delimiter">{</span>
<span id="L172" class="LineNr">172 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L173" class="LineNr">173 </span> <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span><span class="Special">Recipe</span><span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'move-cursor-on-display' requires two ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L174" class="LineNr">174 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L175" class="LineNr">175 </span> <span class="Delimiter">}</span>
<span id="L176" class="LineNr">176 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
<span id="L177" class="LineNr">177 </span> <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span><span class="Special">Recipe</span><span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'move-cursor-on-display' should be a row number, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L178" class="LineNr">178 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L179" class="LineNr">179 </span> <span class="Delimiter">}</span>
<span id="L180" class="LineNr">180 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
<span id="L181" class="LineNr">181 </span> <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span><span class="Special">Recipe</span><span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of 'move-cursor-on-display' should be a column number, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'\n&quot;</span> &lt;&lt; <a href='003trace.cc.html#L225'>end</a><span class="Delimiter">();</span>
<span id="L182" class="LineNr">182 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L183" class="LineNr">183 </span> <span class="Delimiter">}</span>
<span id="L184" class="LineNr">184 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L185" class="LineNr">185 </span><span class="Delimiter">}</span>
<span id="L186" class="LineNr">186 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
<span id="L187" class="LineNr">187 </span><span class="Normal">case</span> MOVE_CURSOR_ON_DISPLAY: <span class="Delimiter">{</span>
<span id="L188" class="LineNr">188 </span> <a href='080display.cc.html#L12'>CHECK_SCREEN</a><span class="Delimiter">;</span>
<span id="L189" class="LineNr">189 </span> <span class="Special">Display_row</span> = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L190" class="LineNr">190 </span> <span class="Special">Display_column</span> = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L191" class="LineNr">191 </span> tb_set_cursor<span class="Delimiter">(</span><span class="Special">Display_column</span><span class="Delimiter">,</span> <span class="Special">Display_row</span><span class="Delimiter">);</span>
<span id="L192" class="LineNr">192 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L193" class="LineNr">193 </span><span class="Delimiter">}</span>
<span id="L194" class="LineNr">194 </span>
<span id="L195" class="LineNr">195 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
<span id="L196" class="LineNr">196 </span>MOVE_CURSOR_DOWN_ON_DISPLAY<span class="Delimiter">,</span>
<span id="L197" class="LineNr">197 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
<span id="L198" class="LineNr">198 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span><span class="Special">Recipe_ordinal</span><span class="Delimiter">,</span> <span class="Constant">&quot;move-cursor-down-on-display&quot;</span><span class="Delimiter">,</span> MOVE_CURSOR_DOWN_ON_DISPLAY<span class="Delimiter">);</span>
<span id="L199" class="LineNr">199 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
<span id="L200" class="LineNr">200 </span><span class="Normal">case</span> MOVE_CURSOR_DOWN_ON_DISPLAY: <span class="Delimiter">{</span>
<span id="L201" class="LineNr">201 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L202" class="LineNr">202 </span><span class="Delimiter">}</span>
<span id="L203" class="LineNr">203 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
<span id="L204" class="LineNr">204 </span><span class="Normal">case</span> MOVE_CURSOR_DOWN_ON_DISPLAY: <span class="Delimiter">{</span>
<span id="L205" class="LineNr">205 </span> <a href='080display.cc.html#L12'>CHECK_SCREEN</a><span class="Delimiter">;</span>
<span id="L206" class="LineNr">206 </span> <span class="Normal">int</span> h=tb_height<span class="Delimiter">();</span>
<span id="L207" class="LineNr">207 </span> <span class="Normal">int</span> height = <span class="Delimiter">(</span>h &gt;= <span class="Constant">0</span><span class="Delimiter">)</span> ? h : <span class="Constant">0</span><span class="Delimiter">;</span>
<span id="L208" class="LineNr">208 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><span class="Special">Display_row</span> &lt; height-<span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L209" class="LineNr">209 </span> ++<span class="Special">Display_row</span><span class="Delimiter">;</span>
<span id="L210" class="LineNr">210 </span> tb_set_cursor<span class="Delimiter">(</span><span class="Special">Display_column</span><span class="Delimiter">,</span> <span class="Special">Display_row</span><span class="Delimiter">);</span>
<span id="L211" class="LineNr">211 </span> <span class="Delimiter">}</span>
<span id="L212" class="LineNr">212 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L213" class="LineNr">213 </span><span class="Delimiter">}</span>
<span id="L214" class="LineNr">214 </span>
<span id="L215" class="LineNr">215 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
<span id="L216" class="LineNr">216 </span>MOVE_CURSOR_UP_ON_DISPLAY<span class="Delimiter">,</span>
<span id="L217" class="LineNr">217 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
<span id="L218" class="LineNr">218 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span><span class="Special">Recipe_ordinal</span><span class="Delimiter">,</span> <span class="Constant">&quot;move-cursor-up-on-display&quot;</span><span class="Delimiter">,</span> MOVE_CURSOR_UP_ON_DISPLAY<span class="Delimiter">);</span>
<span id="L219" class="LineNr">219 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
<span id="L220" class="LineNr">220 </span><span class="Normal">case</span> MOVE_CURSOR_UP_ON_DISPLAY: <span class="Delimiter">{</span>
<span id="L221" class="LineNr">221 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L222" class="LineNr">222 </span><span class="Delimiter">}</span>
<span id="L223" class="LineNr">223 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
<span id="L224" class="LineNr">224 </span><span class="Normal">case</span> MOVE_CURSOR_UP_ON_DISPLAY: <span class="Delimiter">{</span>
<span id="L225" class="LineNr">225 </span> <a href='080display.cc.html#L12'>CHECK_SCREEN</a><span class="Delimiter">;</span>
<span id="L226" class="LineNr">226 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><span class="Special">Display_row</span> &gt; <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L227" class="LineNr">227 </span> --<span class="Special">Display_row</span><span class="Delimiter">;</span>
<span id="L228" class="LineNr">228 </span> tb_set_cursor<span class="Delimiter">(</span><span class="Special">Display_column</span><span class="Delimiter">,</span> <span class="Special">Display_row</span><span class="Delimiter">);</span>
<span id="L229" class="LineNr">229 </span> <span class="Delimiter">}</span>
<span id="L230" class="LineNr">230 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L231" class="LineNr">231 </span><span class="Delimiter">}</span>
<span id="L232" class="LineNr">232 </span>
<span id="L233" class="LineNr">233 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
<span id="L234" class="LineNr">234 </span>MOVE_CURSOR_RIGHT_ON_DISPLAY<span class="Delimiter">,</span>
<span id="L235" class="LineNr">235 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
<span id="L236" class="LineNr">236 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span><span class="Special">Recipe_ordinal</span><span class="Delimiter">,</span> <span class="Constant">&quot;move-cursor-right-on-display&quot;</span><span class="Delimiter">,</span> MOVE_CURSOR_RIGHT_ON_DISPLAY<span class="Delimiter">);</span>
<span id="L237" class="LineNr">237 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
<span id="L238" class="LineNr">238 </span><span class="Normal">case</span> MOVE_CURSOR_RIGHT_ON_DISPLAY: <span class="Delimiter">{</span>
<span id="L239" class="LineNr">239 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L240" class="LineNr">240 </span><span class="Delimiter">}</span>
<span id="L241" class="LineNr">241 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
<span id="L242" class="LineNr">242 </span><span class="Normal">case</span> MOVE_CURSOR_RIGHT_ON_DISPLAY: <span class="Delimiter">{</span>
<span id="L243" class="LineNr">243 </span> <a href='080display.cc.html#L12'>CHECK_SCREEN</a><span class="Delimiter">;</span>
<span id="L244" class="LineNr">244 </span> <span class="Normal">int</span> w=tb_width<span class="Delimiter">();</span>
<span id="L245" class="LineNr">245 </span> <span class="Normal">int</span> width = <span class="Delimiter">(</span>w &gt;= <span class="Constant">0</span><span class="Delimiter">)</span> ? w : <span class="Constant">0</span><span class="Delimiter">;</span>
<span id="L246" class="LineNr">246 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><span class="Special">Display_column</span> &lt; width-<span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L247" class="LineNr">247 </span> ++<span class="Special">Display_column</span><span class="Delimiter">;</span>
<span id="L248" class="LineNr">248 </span> tb_set_cursor<span class="Delimiter">(</span><span class="Special">Display_column</span><span class="Delimiter">,</span> <span class="Special">Display_row</span><span class="Delimiter">);</span>
<span id="L249" class="LineNr">249 </span> <span class="Delimiter">}</span>
<span id="L250" class="LineNr">250 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L251" class="LineNr">251 </span><span class="Delimiter">}</span>
<span id="L252" class="LineNr">252 </span>
<span id="L253" class="LineNr">253 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
<span id="L254" class="LineNr">254 </span>MOVE_CURSOR_LEFT_ON_DISPLAY<span class="Delimiter">,</span>
<span id="L255" class="LineNr">255 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
<span id="L256" class="LineNr">256 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span><span class="Special">Recipe_ordinal</span><span class="Delimiter">,</span> <span class="Constant">&quot;move-cursor-left-on-display&quot;</span><span class="Delimiter">,</span> MOVE_CURSOR_LEFT_ON_DISPLAY<span class="Delimiter">);</span>
<span id="L257" class="LineNr">257 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
<span id="L258" class="LineNr">258 </span><span class="Normal">case</span> MOVE_CURSOR_LEFT_ON_DISPLAY: <span class="Delimiter">{</span>
<span id="L259" class="LineNr">259 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L260" class="LineNr">260 </span><span class="Delimiter">}</span>
<span id="L261" class="LineNr">261 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
<span id="L262" class="LineNr">262 </span><span class="Normal">case</span> MOVE_CURSOR_LEFT_ON_DISPLAY: <span class="Delimiter">{</span>
<span id="L263" class="LineNr">263 </span> <a href='080display.cc.html#L12'>CHECK_SCREEN</a><span class="Delimiter">;</span>
<span id="L264" class="LineNr">264 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><span class="Special">Display_column</span> &gt; <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L265" class="LineNr">265 </span> --<span class="Special">Display_column</span><span class="Delimiter">;</span>
<span id="L266" class="LineNr">266 </span> tb_set_cursor<span class="Delimiter">(</span><span class="Special">Display_column</span><span class="Delimiter">,</span> <span class="Special">Display_row</span><span class="Delimiter">);</span>
<span id="L267" class="LineNr">267 </span> <span class="Delimiter">}</span>
<span id="L268" class="LineNr">268 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L269" class="LineNr">269 </span><span class="Delimiter">}</span>
<span id="L270" class="LineNr">270 </span>
<span id="L271" class="LineNr">271 </span><span class="Comment">//: as a convenience, make $print mostly work in console mode</span>
<span id="L272" class="LineNr">272 </span><span class="Delimiter">:(before &quot;End $print 10/newline Special-cases&quot;)</span>
<span id="L273" class="LineNr">273 </span><span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>tb_is_active<span class="Delimiter">())</span> <span class="Delimiter">{</span>
<span id="L274" class="LineNr">274 </span> <a href='080display.cc.html#L277'>move_cursor_to_start_of_next_line_on_display</a><span class="Delimiter">();</span>
<span id="L275" class="LineNr">275 </span><span class="Delimiter">}</span>
<span id="L276" class="LineNr">276 </span><span class="Delimiter">:(code)</span>
<span id="L277" class="LineNr">277 </span><span class="Normal">void</span> <a href='080display.cc.html#L277'>move_cursor_to_start_of_next_line_on_display</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
<span id="L278" class="LineNr">278 </span> <span class="Normal">if</span> <span class="Delimiter">(</span><span class="Special">Display_row</span> &lt; tb_height<span class="Delimiter">()</span>-<span class="Constant">1</span><span class="Delimiter">)</span> ++<span class="Special">Display_row</span><span class="Delimiter">;</span>
<span id="L279" class="LineNr">279 </span> <span class="Normal">else</span> <span class="Special">Display_row</span> = <span class="Constant">0</span><span class="Delimiter">;</span>
<span id="L280" class="LineNr">280 </span> <span class="Special">Display_column</span> = <span class="Constant">0</span><span class="Delimiter">;</span>
<span id="L281" class="LineNr">281 </span> tb_set_cursor<span class="Delimiter">(</span><span class="Special">Display_column</span><span class="Delimiter">,</span> <span class="Special">Display_row</span><span class="Delimiter">);</span>
<span id="L282" class="LineNr">282 </span><span class="Delimiter">}</span>
<span id="L283" class="LineNr">283 </span>
<span id="L284" class="LineNr">284 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
<span id="L285" class="LineNr">285 </span>DISPLAY_WIDTH<span class="Delimiter">,</span>
<span id="L286" class="LineNr">286 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
<span id="L287" class="LineNr">287 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span><span class="Special">Recipe_ordinal</span><span class="Delimiter">,</span> <span class="Constant">&quot;display-width&quot;</span><span class="Delimiter">,</span> DISPLAY_WIDTH<span class="Delimiter">);</span>
<span id="L288" class="LineNr">288 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
<span id="L289" class="LineNr">289 </span><span class="Normal">case</span> DISPLAY_WIDTH: <span class="Delimiter">{</span>
<span id="L290" class="LineNr">290 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L291" class="LineNr">291 </span><span class="Delimiter">}</span>
<span id="L292" class="LineNr">292 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
<span id="L293" class="LineNr">293 </span><span class="Normal">case</span> DISPLAY_WIDTH: <span class="Delimiter">{</span>
<span id="L294" class="LineNr">294 </span> <a href='080display.cc.html#L12'>CHECK_SCREEN</a><span class="Delimiter">;</span>
<span id="L295" class="LineNr">295 </span> products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L296" class="LineNr">296 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>tb_width<span class="Delimiter">());</span>
<span id="L297" class="LineNr">297 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L298" class="LineNr">298 </span><span class="Delimiter">}</span>
<span id="L299" class="LineNr">299 </span>
<span id="L300" class="LineNr">300 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
<span id="L301" class="LineNr">301 </span>DISPLAY_HEIGHT<span class="Delimiter">,</span>
<span id="L302" class="LineNr">302 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
<span id="L303" class="LineNr">303 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span><span class="Special">Recipe_ordinal</span><span class="Delimiter">,</span> <span class="Constant">&quot;display-height&quot;</span><span class="Delimiter">,</span> DISPLAY_HEIGHT<span class="Delimiter">);</span>
<span id="L304" class="LineNr">304 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
<span id="L305" class="LineNr">305 </span><span class="Normal">case</span> DISPLAY_HEIGHT: <span class="Delimiter">{</span>
<span id="L306" class="LineNr">306 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L307" class="LineNr">307 </span><span class="Delimiter">}</span>
<span id="L308" class="LineNr">308 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
<span id="L309" class="LineNr">309 </span><span class="Normal">case</span> DISPLAY_HEIGHT: <span class="Delimiter">{</span>
<span id="L310" class="LineNr">310 </span> <a href='080display.cc.html#L12'>CHECK_SCREEN</a><span class="Delimiter">;</span>
<span id="L311" class="LineNr">311 </span> products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L312" class="LineNr">312 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>tb_height<span class="Delimiter">());</span>
<span id="L313" class="LineNr">313 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L314" class="LineNr">314 </span><span class="Delimiter">}</span>
<span id="L315" class="LineNr">315 </span>
<span id="L316" class="LineNr">316 </span><span class="SalientComment">//:: Keyboard/mouse management</span>
<span id="L317" class="LineNr">317 </span>
<span id="L318" class="LineNr">318 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
<span id="L319" class="LineNr">319 </span>WAIT_FOR_SOME_INTERACTION<span class="Delimiter">,</span>
<span id="L320" class="LineNr">320 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
<span id="L321" class="LineNr">321 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span><span class="Special">Recipe_ordinal</span><span class="Delimiter">,</span> <span class="Constant">&quot;wait-for-some-interaction&quot;</span><span class="Delimiter">,</span> WAIT_FOR_SOME_INTERACTION<span class="Delimiter">);</span>
<span id="L322" class="LineNr">322 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
<span id="L323" class="LineNr">323 </span><span class="Normal">case</span> WAIT_FOR_SOME_INTERACTION: <span class="Delimiter">{</span>
<span id="L324" class="LineNr">324 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L325" class="LineNr">325 </span><span class="Delimiter">}</span>
<span id="L326" class="LineNr">326 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
<span id="L327" class="LineNr">327 </span><span class="Normal">case</span> WAIT_FOR_SOME_INTERACTION: <span class="Delimiter">{</span>
<span id="L328" class="LineNr">328 </span> <a href='080display.cc.html#L12'>CHECK_SCREEN</a><span class="Delimiter">;</span>
<span id="L329" class="LineNr">329 </span> tb_event event<span class="Delimiter">;</span>
<span id="L330" class="LineNr">330 </span> tb_poll_event<span class="Delimiter">(</span>&amp;event<span class="Delimiter">);</span>
<span id="L331" class="LineNr">331 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L332" class="LineNr">332 </span><span class="Delimiter">}</span>
<span id="L333" class="LineNr">333 </span>
<span id="L334" class="LineNr">334 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
<span id="L335" class="LineNr">335 </span>CHECK_FOR_INTERACTION<span class="Delimiter">,</span>
<span id="L336" class="LineNr">336 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
<span id="L337" class="LineNr">337 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span><span class="Special">Recipe_ordinal</span><span class="Delimiter">,</span> <span class="Constant">&quot;check-for-interaction&quot;</span><span class="Delimiter">,</span> CHECK_FOR_INTERACTION<span class="Delimiter">);</span>
<span id="L338" class="LineNr">338 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
<span id="L339" class="LineNr">339 </span><span class="Normal">case</span> CHECK_FOR_INTERACTION: <span class="Delimiter">{</span>
<span id="L340" class="LineNr">340 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L341" class="LineNr">341 </span><span class="Delimiter">}</span>
<span id="L342" class="LineNr">342 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
<span id="L343" class="LineNr">343 </span><span class="Normal">case</span> CHECK_FOR_INTERACTION: <span class="Delimiter">{</span>
<span id="L344" class="LineNr">344 </span> <a href='080display.cc.html#L20'>CHECK_CONSOLE</a><span class="Delimiter">;</span>
<span id="L345" class="LineNr">345 </span> products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span> <span class="Comment">// result and status</span>
<span id="L346" class="LineNr">346 </span> tb_event event<span class="Delimiter">;</span>
<span id="L347" class="LineNr">347 </span> <span class="Normal">int</span> event_type = tb_peek_event<span class="Delimiter">(</span>&amp;event<span class="Delimiter">,</span> <span class="Constant">5</span><span class="Comment">/*</span><span class="Comment">ms</span><span class="Comment">*/</span><span class="Delimiter">);</span>
<span id="L348" class="LineNr">348 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>event_type == TB_EVENT_KEY &amp;&amp; event<span class="Delimiter">.</span>ch<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L349" class="LineNr">349 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">text event</span><span class="Comment">*/</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L350" class="LineNr">350 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>event<span class="Delimiter">.</span>ch<span class="Delimiter">);</span>
<span id="L351" class="LineNr">351 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L352" class="LineNr">352 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L353" class="LineNr">353 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">found</span><span class="Comment">*/</span><span class="Constant">true</span><span class="Delimiter">);</span>
<span id="L354" class="LineNr">354 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L355" class="LineNr">355 </span> <span class="Delimiter">}</span>
<span id="L356" class="LineNr">356 </span> <span class="Comment">// treat keys within ascii as unicode characters</span>
<span id="L357" class="LineNr">357 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>event_type == TB_EVENT_KEY &amp;&amp; event<span class="Delimiter">.</span>key &lt; <span class="Constant">0xff</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L358" class="LineNr">358 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">text event</span><span class="Comment">*/</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L359" class="LineNr">359 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>event<span class="Delimiter">.</span>key == TB_KEY_CTRL_C<span class="Delimiter">)</span> exit<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L360" class="LineNr">360 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>event<span class="Delimiter">.</span>key == TB_KEY_BACKSPACE2<span class="Delimiter">)</span> event<span class="Delimiter">.</span>key = TB_KEY_BACKSPACE<span class="Delimiter">;</span>
<span id="L361" class="LineNr">361 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>event<span class="Delimiter">.</span>key == TB_KEY_CARRIAGE_RETURN<span class="Delimiter">)</span> event<span class="Delimiter">.</span>key = TB_KEY_NEWLINE<span class="Delimiter">;</span>
<span id="L362" class="LineNr">362 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>event<span class="Delimiter">.</span>key<span class="Delimiter">);</span>
<span id="L363" class="LineNr">363 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L364" class="LineNr">364 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L365" class="LineNr">365 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">found</span><span class="Comment">*/</span><span class="Constant">true</span><span class="Delimiter">);</span>
<span id="L366" class="LineNr">366 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L367" class="LineNr">367 </span> <span class="Delimiter">}</span>
<span id="L368" class="LineNr">368 </span> <span class="Comment">// keys outside ascii aren't unicode characters but arbitrary termbox inventions</span>
<span id="L369" class="LineNr">369 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>event_type == TB_EVENT_KEY<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L370" class="LineNr">370 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">keycode event</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L371" class="LineNr">371 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>event<span class="Delimiter">.</span>key<span class="Delimiter">);</span>
<span id="L372" class="LineNr">372 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L373" class="LineNr">373 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L374" class="LineNr">374 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">found</span><span class="Comment">*/</span><span class="Constant">true</span><span class="Delimiter">);</span>
<span id="L375" class="LineNr">375 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L376" class="LineNr">376 </span> <span class="Delimiter">}</span>
<span id="L377" class="LineNr">377 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>event_type == TB_EVENT_MOUSE<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L378" class="LineNr">378 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">touch event</span><span class="Comment">*/</span><span class="Constant">2</span><span class="Delimiter">);</span>
<span id="L379" class="LineNr">379 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>event<span class="Delimiter">.</span>key<span class="Delimiter">);</span> <span class="Comment">// which button, etc.</span>
<span id="L380" class="LineNr">380 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>event<span class="Delimiter">.</span>y<span class="Delimiter">);</span> <span class="Comment">// row</span>
<span id="L381" class="LineNr">381 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>event<span class="Delimiter">.</span>x<span class="Delimiter">);</span> <span class="Comment">// column</span>
<span id="L382" class="LineNr">382 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">found</span><span class="Comment">*/</span><span class="Constant">true</span><span class="Delimiter">);</span>
<span id="L383" class="LineNr">383 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L384" class="LineNr">384 </span> <span class="Delimiter">}</span>
<span id="L385" class="LineNr">385 </span> <span class="Normal">if</span> <span class="Delimiter">(</span>event_type == TB_EVENT_RESIZE<span class="Delimiter">)</span> <span class="Delimiter">{</span>
<span id="L386" class="LineNr">386 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">resize event</span><span class="Comment">*/</span><span class="Constant">3</span><span class="Delimiter">);</span>
<span id="L387" class="LineNr">387 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>event<span class="Delimiter">.</span>w<span class="Delimiter">);</span> <span class="Comment">// width</span>
<span id="L388" class="LineNr">388 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>event<span class="Delimiter">.</span>h<span class="Delimiter">);</span> <span class="Comment">// height</span>
<span id="L389" class="LineNr">389 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L390" class="LineNr">390 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">found</span><span class="Comment">*/</span><span class="Constant">true</span><span class="Delimiter">);</span>
<span id="L391" class="LineNr">391 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L392" class="LineNr">392 </span> <span class="Delimiter">}</span>
<span id="L393" class="LineNr">393 </span> assert<span class="Delimiter">(</span>event_type == <span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L394" class="LineNr">394 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L395" class="LineNr">395 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L396" class="LineNr">396 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L397" class="LineNr">397 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L398" class="LineNr">398 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">found</span><span class="Comment">*/</span><span class="Constant">false</span><span class="Delimiter">);</span>
<span id="L399" class="LineNr">399 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L400" class="LineNr">400 </span><span class="Delimiter">}</span>
<span id="L401" class="LineNr">401 </span>
<span id="L402" class="LineNr">402 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
<span id="L403" class="LineNr">403 </span>INTERACTIONS_LEFT<span class="Delimiter">,</span>
<span id="L404" class="LineNr">404 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
<span id="L405" class="LineNr">405 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span><span class="Special">Recipe_ordinal</span><span class="Delimiter">,</span> <span class="Constant">&quot;interactions-left?&quot;</span><span class="Delimiter">,</span> INTERACTIONS_LEFT<span class="Delimiter">);</span>
<span id="L406" class="LineNr">406 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
<span id="L407" class="LineNr">407 </span><span class="Normal">case</span> INTERACTIONS_LEFT: <span class="Delimiter">{</span>
<span id="L408" class="LineNr">408 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L409" class="LineNr">409 </span><span class="Delimiter">}</span>
<span id="L410" class="LineNr">410 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
<span id="L411" class="LineNr">411 </span><span class="Normal">case</span> INTERACTIONS_LEFT: <span class="Delimiter">{</span>
<span id="L412" class="LineNr">412 </span> <a href='080display.cc.html#L20'>CHECK_CONSOLE</a><span class="Delimiter">;</span>
<span id="L413" class="LineNr">413 </span> products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
<span id="L414" class="LineNr">414 </span> products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>tb_event_ready<span class="Delimiter">());</span>
<span id="L415" class="LineNr">415 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L416" class="LineNr">416 </span><span class="Delimiter">}</span>
<span id="L417" class="LineNr">417 </span>
<span id="L418" class="LineNr">418 </span><span class="Comment">//: hacks to make text-mode apps more responsive under Unix</span>
<span id="L419" class="LineNr">419 </span>
<span id="L420" class="LineNr">420 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
<span id="L421" class="LineNr">421 </span>CLEAR_LINE_ON_DISPLAY<span class="Delimiter">,</span>
<span id="L422" class="LineNr">422 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
<span id="L423" class="LineNr">423 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span><span class="Special">Recipe_ordinal</span><span class="Delimiter">,</span> <span class="Constant">&quot;clear-line-on-display&quot;</span><span class="Delimiter">,</span> CLEAR_LINE_ON_DISPLAY<span class="Delimiter">);</span>
<span id="L424" class="LineNr">424 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
<span id="L425" class="LineNr">425 </span><span class="Normal">case</span> CLEAR_LINE_ON_DISPLAY: <span class="Delimiter">{</span>
<span id="L426" class="LineNr">426 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L427" class="LineNr">427 </span><span class="Delimiter">}</span>
<span id="L428" class="LineNr">428 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
<span id="L429" class="LineNr">429 </span><span class="Normal">case</span> CLEAR_LINE_ON_DISPLAY: <span class="Delimiter">{</span>
<span id="L430" class="LineNr">430 </span> <a href='080display.cc.html#L12'>CHECK_SCREEN</a><span class="Delimiter">;</span>
<span id="L431" class="LineNr">431 </span> <span class="Normal">int</span> width = tb_width<span class="Delimiter">();</span>
<span id="L432" class="LineNr">432 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> x = <span class="Special">Display_column</span><span class="Delimiter">;</span> x &lt; width<span class="Delimiter">;</span> ++x<span class="Delimiter">)</span>
<span id="L433" class="LineNr">433 </span> tb_print<span class="Delimiter">(</span><span class="Constant">' '</span><span class="Delimiter">,</span> TB_WHITE<span class="Delimiter">,</span> TB_BLACK<span class="Delimiter">);</span>
<span id="L434" class="LineNr">434 </span> tb_set_cursor<span class="Delimiter">(</span><span class="Special">Display_column</span><span class="Delimiter">,</span> <span class="Special">Display_row</span><span class="Delimiter">);</span>
<span id="L435" class="LineNr">435 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L436" class="LineNr">436 </span><span class="Delimiter">}</span>
<span id="L437" class="LineNr">437 </span>
<span id="L438" class="LineNr">438 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
<span id="L439" class="LineNr">439 </span>CLEAR_DISPLAY_FROM<span class="Delimiter">,</span>
<span id="L440" class="LineNr">440 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
<span id="L441" class="LineNr">441 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span><span class="Special">Recipe_ordinal</span><span class="Delimiter">,</span> <span class="Constant">&quot;clear-display-from&quot;</span><span class="Delimiter">,</span> CLEAR_DISPLAY_FROM<span class="Delimiter">);</span>
<span id="L442" class="LineNr">442 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
<span id="L443" class="LineNr">443 </span><span class="Normal">case</span> CLEAR_DISPLAY_FROM: <span class="Delimiter">{</span>
<span id="L444" class="LineNr">444 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L445" class="LineNr">445 </span><span class="Delimiter">}</span>
<span id="L446" class="LineNr">446 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
<span id="L447" class="LineNr">447 </span><span class="Normal">case</span> CLEAR_DISPLAY_FROM: <span class="Delimiter">{</span>
<span id="L448" class="LineNr">448 </span> <a href='080display.cc.html#L12'>CHECK_SCREEN</a><span class="Delimiter">;</span>
<span id="L449" class="LineNr">449 </span> <span class="Comment">// todo: error checking</span>
<span id="L450" class="LineNr">450 </span> <span class="Normal">int</span> row = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L451" class="LineNr">451 </span> <span class="Normal">int</span> column = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L452" class="LineNr">452 </span> <span class="Normal">int</span> left = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L453" class="LineNr">453 </span> <span class="Normal">int</span> right = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">3</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
<span id="L454" class="LineNr">454 </span> <span class="Normal">int</span> height=tb_height<span class="Delimiter">();</span>
<span id="L455" class="LineNr">455 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">nada</span><span class="Comment">*/</span><span class="Delimiter">;</span> row &lt; height<span class="Delimiter">;</span> ++row<span class="Delimiter">,</span> column=left<span class="Delimiter">)</span> <span class="Delimiter">{</span> <span class="Comment">// start column from left in every inner loop except first</span>
<span id="L456" class="LineNr">456 </span> tb_set_cursor<span class="Delimiter">(</span>column<span class="Delimiter">,</span> row<span class="Delimiter">);</span>
<span id="L457" class="LineNr">457 </span> <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">nada</span><span class="Comment">*/</span><span class="Delimiter">;</span> column &lt;= right<span class="Delimiter">;</span> ++column<span class="Delimiter">)</span>
<span id="L458" class="LineNr">458 </span> tb_print<span class="Delimiter">(</span><span class="Constant">' '</span><span class="Delimiter">,</span> TB_WHITE<span class="Delimiter">,</span> TB_BLACK<span class="Delimiter">);</span>
<span id="L459" class="LineNr">459 </span> <span class="Delimiter">}</span>
<span id="L460" class="LineNr">460 </span> tb_set_cursor<span class="Delimiter">(</span><span class="Special">Display_column</span><span class="Delimiter">,</span> <span class="Special">Display_row</span><span class="Delimiter">);</span>
<span id="L461" class="LineNr">461 </span> <span class="Identifier">break</span><span class="Delimiter">;</span>
<span id="L462" class="LineNr">462 </span><span class="Delimiter">}</span>
</pre>
</body>
</html>
<!-- vim: set foldmethod=manual : -->