This commit is contained in:
Kartik Agaram 2021-08-15 23:44:43 -07:00
parent 8765064d69
commit 52e3ea8a4b
94 changed files with 19544 additions and 14516 deletions

View File

@ -1,29 +1,29 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 101screen.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.SpecialChar { color: #d70000; }
.subxComment { color: #005faf; }
.subxS1Comment { color: #0000af; }
.LineNr { }
.subxFunction { color: #af5f00; text-decoration: underline; }
.subxS1Comment { color: #0000af; }
.SpecialChar { color: #d70000; }
.Constant { color: #008787; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

View File

@ -1,29 +1,29 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 102keyboard.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.SpecialChar { color: #d70000; }
.subxComment { color: #005faf; }
.subxS1Comment { color: #0000af; }
.LineNr { }
.subxFunction { color: #af5f00; text-decoration: underline; }
.subxS1Comment { color: #0000af; }
.SpecialChar { color: #d70000; }
.Constant { color: #008787; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

View File

@ -1,29 +1,29 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 103grapheme.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.SpecialChar { color: #d70000; }
.subxComment { color: #005faf; }
.subxS1Comment { color: #0000af; }
.LineNr { }
.subxFunction { color: #af5f00; text-decoration: underline; }
.subxS1Comment { color: #0000af; }
.SpecialChar { color: #d70000; }
.Constant { color: #008787; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

18
html/104test.subx.html generated
View File

@ -1,29 +1,29 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 104test.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.SpecialChar { color: #d70000; }
.subxComment { color: #005faf; }
.subxS1Comment { color: #0000af; }
.LineNr { }
.subxFunction { color: #af5f00; text-decoration: underline; }
.subxS1Comment { color: #0000af; }
.SpecialChar { color: #d70000; }
.Constant { color: #008787; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

View File

@ -1,32 +1,32 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 105string-equal.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=">
<meta name="colorscheme" content="minimal-light">
<style>
<style type="text/css">
<!--
pre { font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxH1Comment { color: #005faf; text-decoration: underline; }
.subxComment { color: #005faf; }
.subxS1Comment { color: #0000af; }
.subxS2Comment { color: #8a8a8a; }
.LineNr { }
.subxFunction { color: #af5f00; text-decoration: underline; }
.subxS1Comment { color: #0000af; }
.Constant { color: #008787; }
.Normal { color: #000000; background-color: #ffffd7; padding-bottom: 1px; }
.subxTest { color: #5f8700; }
.subxH1Comment { color: #005faf; text-decoration: underline; }
.subxFunction { color: #af5f00; text-decoration: underline; }
.Normal { color: #000000; background-color: #ffffd7; padding-bottom: 1px; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

View File

@ -1,31 +1,31 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 106stream.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=">
<meta name="colorscheme" content="minimal-light">
<style>
<style type="text/css">
<!--
pre { font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxH1Comment { color: #005faf; text-decoration: underline; }
.subxComment { color: #005faf; }
.subxS1Comment { color: #0000af; }
.subxS2Comment { color: #8a8a8a; }
.LineNr { }
.subxFunction { color: #af5f00; text-decoration: underline; }
.subxS1Comment { color: #0000af; }
.Constant { color: #008787; }
.subxFunction { color: #af5f00; text-decoration: underline; }
.Normal { color: #000000; background-color: #ffffd7; padding-bottom: 1px; }
.subxH1Comment { color: #005faf; text-decoration: underline; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

View File

@ -1,32 +1,32 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 108write.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=">
<meta name="colorscheme" content="minimal-light">
<style>
<style type="text/css">
<!--
pre { font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxMinorFunction { color: #875f5f; }
.subxComment { color: #005faf; }
.subxS1Comment { color: #0000af; }
.subxS2Comment { color: #8a8a8a; }
.LineNr { }
.subxFunction { color: #af5f00; text-decoration: underline; }
.subxS1Comment { color: #0000af; }
.Constant { color: #008787; }
.Normal { color: #000000; background-color: #ffffd7; padding-bottom: 1px; }
.subxMinorFunction { color: #875f5f; }
.subxTest { color: #5f8700; }
.subxFunction { color: #af5f00; text-decoration: underline; }
.Normal { color: #000000; background-color: #ffffd7; padding-bottom: 1px; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -364,8 +364,8 @@ if ('onhashchange' in window) {
<span id="L304" class="LineNr">304 </span> c3/return
<span id="L305" class="LineNr">305 </span>
<span id="L306" class="LineNr">306 </span><span class="Constant">$_append-4:<a href='317abort.subx.html#L5'>abort</a></span>:
<span id="L307" class="LineNr">307 </span> (<a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 <span class="Constant">&quot;_append-4: stream full at &quot;</span> 3 0) <span class="subxComment"># 3=cyan</span>
<span id="L308" class="LineNr">308 </span> (<a href='501draw-text.mu.html#L333'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 %eax 3 0)
<span id="L307" class="LineNr">307 </span> (<a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 <span class="Constant">&quot;_append-4: stream full at &quot;</span> 3 0) <span class="subxComment"># 3=cyan</span>
<span id="L308" class="LineNr">308 </span> (<a href='501draw-text.mu.html#L330'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 %eax 3 0)
<span id="L309" class="LineNr">309 </span> (<a href='317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;&quot;</span>)
<span id="L310" class="LineNr">310 </span> <span class="subxComment"># never gets here</span>
<span id="L311" class="LineNr">311 </span>

View File

@ -1,31 +1,31 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 109stream-equal.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=">
<meta name="colorscheme" content="minimal-light">
<style>
<style type="text/css">
<!--
pre { font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxComment { color: #005faf; }
.subxS1Comment { color: #0000af; }
.subxS2Comment { color: #8a8a8a; }
.LineNr { }
.subxFunction { color: #af5f00; text-decoration: underline; }
.subxS1Comment { color: #0000af; }
.Constant { color: #008787; }
.Normal { color: #000000; background-color: #ffffd7; padding-bottom: 1px; }
.subxTest { color: #5f8700; }
.subxFunction { color: #af5f00; text-decoration: underline; }
.Normal { color: #000000; background-color: #ffffd7; padding-bottom: 1px; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

View File

@ -1,31 +1,31 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 112read-byte.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=">
<meta name="colorscheme" content="minimal-light">
<style>
<style type="text/css">
<!--
pre { font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxComment { color: #005faf; }
.subxS2Comment { color: #8a8a8a; }
.LineNr { }
.subxFunction { color: #af5f00; text-decoration: underline; }
.subxS1Comment { color: #0000af; }
.Constant { color: #008787; }
.Normal { color: #000000; background-color: #ffffd7; padding-bottom: 1px; }
.subxMinorFunction { color: #875f5f; }
.LineNr { }
.Constant { color: #008787; }
.subxS2Comment { color: #8a8a8a; }
.subxFunction { color: #af5f00; text-decoration: underline; }
.Normal { color: #000000; background-color: #ffffd7; padding-bottom: 1px; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -101,49 +101,49 @@ if ('onhashchange' in window) {
<span id="L42" class="LineNr"> 42 </span> (<a href='317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;read-byte: empty stream&quot;</span>)
<span id="L43" class="LineNr"> 43 </span> <span class="subxComment"># never gets here</span>
<span id="L44" class="LineNr"> 44 </span>
<span id="L45" class="LineNr"> 45 </span>== data
<span id="L46" class="LineNr"> 46 </span>
<span id="L47" class="LineNr"> 47 </span><span class="subxMinorFunction">_test-input-stream</span>: <span class="subxComment"># (stream byte)</span>
<span id="L48" class="LineNr"> 48 </span> <span class="subxComment"># current write index</span>
<span id="L49" class="LineNr"> 49 </span> 0/imm32
<span id="L50" class="LineNr"> 50 </span><span class="Constant">$_test-input-stream-&gt;read</span>:
<span id="L51" class="LineNr"> 51 </span> <span class="subxComment"># current read index</span>
<span id="L52" class="LineNr"> 52 </span> 0/imm32
<span id="L53" class="LineNr"> 53 </span> <span class="subxComment"># size</span>
<span id="L54" class="LineNr"> 54 </span> 0x400/imm32 <span class="subxComment"># 1024 bytes</span>
<span id="L55" class="LineNr"> 55 </span> <span class="subxComment"># data (64 lines x 16 bytes/line)</span>
<span id="L56" class="LineNr"> 56 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L57" class="LineNr"> 57 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L58" class="LineNr"> 58 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L59" class="LineNr"> 59 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L60" class="LineNr"> 60 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L61" class="LineNr"> 61 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L62" class="LineNr"> 62 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L63" class="LineNr"> 63 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L64" class="LineNr"> 64 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L65" class="LineNr"> 65 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L66" class="LineNr"> 66 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L67" class="LineNr"> 67 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L68" class="LineNr"> 68 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L69" class="LineNr"> 69 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L70" class="LineNr"> 70 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L71" class="LineNr"> 71 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L72" class="LineNr"> 72 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L73" class="LineNr"> 73 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L74" class="LineNr"> 74 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L75" class="LineNr"> 75 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L76" class="LineNr"> 76 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L77" class="LineNr"> 77 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L78" class="LineNr"> 78 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L79" class="LineNr"> 79 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L80" class="LineNr"> 80 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L81" class="LineNr"> 81 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L82" class="LineNr"> 82 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L83" class="LineNr"> 83 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L84" class="LineNr"> 84 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L85" class="LineNr"> 85 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L86" class="LineNr"> 86 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L87" class="LineNr"> 87 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L45" class="LineNr"> 45 </span><span class="subxComment"># Return next byte value in eax, with top 3 bytes cleared.</span>
<span id="L46" class="LineNr"> 46 </span><span class="subxComment"># Abort on reaching end of stream.</span>
<span id="L47" class="LineNr"> 47 </span><span class="subxFunction">peek-byte</span>: <span class="subxComment"># s: (addr stream byte) -&gt; result/eax: byte</span>
<span id="L48" class="LineNr"> 48 </span> <span class="subxS1Comment"># . prologue</span>
<span id="L49" class="LineNr"> 49 </span> 55/push-ebp
<span id="L50" class="LineNr"> 50 </span> 89/copy 3/mod/direct 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ebp</span>
<span id="L51" class="LineNr"> 51 </span> <span class="subxS1Comment"># . save registers</span>
<span id="L52" class="LineNr"> 52 </span> 51/push-ecx
<span id="L53" class="LineNr"> 53 </span> 56/push-esi
<span id="L54" class="LineNr"> 54 </span> <span class="subxComment"># esi = s</span>
<span id="L55" class="LineNr"> 55 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 6/r32/esi 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+8) to esi</span>
<span id="L56" class="LineNr"> 56 </span> <span class="subxComment"># ecx = s-&gt;read</span>
<span id="L57" class="LineNr"> 57 </span> 8b/copy 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(esi+4) to ecx</span>
<span id="L58" class="LineNr"> 58 </span> <span class="subxComment"># if (f-&gt;read &gt;= f-&gt;write) abort</span>
<span id="L59" class="LineNr"> 59 </span> 3b/compare 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with *esi</span>
<span id="L60" class="LineNr"> 60 </span> 0f 8d/jump-if-&gt;= $peek-byte:<a href='317abort.subx.html#L5'>abort</a>/disp32
<span id="L61" class="LineNr"> 61 </span> <span class="subxComment"># result = f-&gt;data[f-&gt;read]</span>
<span id="L62" class="LineNr"> 62 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span>
<span id="L63" class="LineNr"> 63 </span> 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx <span class="Normal"> . </span> 0/r32/AL 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy byte at *(esi+ecx+12) to AL</span>
<span id="L64" class="LineNr"> 64 </span><span class="Constant">$peek-byte:end</span>:
<span id="L65" class="LineNr"> 65 </span> <span class="subxS1Comment"># . restore registers</span>
<span id="L66" class="LineNr"> 66 </span> 5e/pop-to-esi
<span id="L67" class="LineNr"> 67 </span> 59/pop-to-ecx
<span id="L68" class="LineNr"> 68 </span> <span class="subxS1Comment"># . epilogue</span>
<span id="L69" class="LineNr"> 69 </span> 89/copy 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 5/r32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy ebp to esp</span>
<span id="L70" class="LineNr"> 70 </span> 5d/pop-to-ebp
<span id="L71" class="LineNr"> 71 </span> c3/return
<span id="L72" class="LineNr"> 72 </span>
<span id="L73" class="LineNr"> 73 </span><span class="Constant">$peek-byte:<a href='317abort.subx.html#L5'>abort</a></span>:
<span id="L74" class="LineNr"> 74 </span> (<a href='317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;peek-byte: empty stream&quot;</span>)
<span id="L75" class="LineNr"> 75 </span> <span class="subxComment"># never gets here</span>
<span id="L76" class="LineNr"> 76 </span>
<span id="L77" class="LineNr"> 77 </span>== data
<span id="L78" class="LineNr"> 78 </span>
<span id="L79" class="LineNr"> 79 </span><span class="subxMinorFunction">_test-input-stream</span>: <span class="subxComment"># (stream byte)</span>
<span id="L80" class="LineNr"> 80 </span> <span class="subxComment"># current write index</span>
<span id="L81" class="LineNr"> 81 </span> 0/imm32
<span id="L82" class="LineNr"> 82 </span><span class="Constant">$_test-input-stream-&gt;read</span>:
<span id="L83" class="LineNr"> 83 </span> <span class="subxComment"># current read index</span>
<span id="L84" class="LineNr"> 84 </span> 0/imm32
<span id="L85" class="LineNr"> 85 </span> <span class="subxComment"># size</span>
<span id="L86" class="LineNr"> 86 </span> 0x400/imm32 <span class="subxComment"># 1024 bytes</span>
<span id="L87" class="LineNr"> 87 </span> <span class="subxComment"># data (64 lines x 16 bytes/line)</span>
<span id="L88" class="LineNr"> 88 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L89" class="LineNr"> 89 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L90" class="LineNr"> 90 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
@ -176,8 +176,40 @@ if ('onhashchange' in window) {
<span id="L117" class="LineNr">117 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L118" class="LineNr">118 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L119" class="LineNr">119 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L120" class="LineNr">120 </span>
<span id="L121" class="LineNr">121 </span><span class="subxS2Comment"># . . vim&#0058;nowrap:textwidth=0</span>
<span id="L120" class="LineNr">120 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L121" class="LineNr">121 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L122" class="LineNr">122 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L123" class="LineNr">123 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L124" class="LineNr">124 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L125" class="LineNr">125 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L126" class="LineNr">126 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L127" class="LineNr">127 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L128" class="LineNr">128 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L129" class="LineNr">129 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L130" class="LineNr">130 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L131" class="LineNr">131 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L132" class="LineNr">132 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L133" class="LineNr">133 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L134" class="LineNr">134 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L135" class="LineNr">135 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L136" class="LineNr">136 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L137" class="LineNr">137 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L138" class="LineNr">138 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L139" class="LineNr">139 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L140" class="LineNr">140 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L141" class="LineNr">141 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L142" class="LineNr">142 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L143" class="LineNr">143 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L144" class="LineNr">144 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L145" class="LineNr">145 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L146" class="LineNr">146 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L147" class="LineNr">147 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L148" class="LineNr">148 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L149" class="LineNr">149 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L150" class="LineNr">150 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L151" class="LineNr">151 </span> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<span id="L152" class="LineNr">152 </span>
<span id="L153" class="LineNr">153 </span><span class="subxS2Comment"># . . vim&#0058;nowrap:textwidth=0</span>
</pre>
</body>
</html>

View File

@ -1,32 +1,32 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 113write-stream.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=">
<meta name="colorscheme" content="minimal-light">
<style>
<style type="text/css">
<!--
pre { font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxMinorFunction { color: #875f5f; }
.subxComment { color: #005faf; }
.subxS1Comment { color: #0000af; }
.subxS2Comment { color: #8a8a8a; }
.LineNr { }
.subxFunction { color: #af5f00; text-decoration: underline; }
.subxS1Comment { color: #0000af; }
.Constant { color: #008787; }
.Normal { color: #000000; background-color: #ffffd7; padding-bottom: 1px; }
.subxMinorFunction { color: #875f5f; }
.subxTest { color: #5f8700; }
.subxFunction { color: #af5f00; text-decoration: underline; }
.Normal { color: #000000; background-color: #ffffd7; padding-bottom: 1px; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

View File

@ -1,32 +1,32 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 115write-byte.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=">
<meta name="colorscheme" content="minimal-light">
<style>
<style type="text/css">
<!--
pre { font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxH1Comment { color: #005faf; text-decoration: underline; }
.subxComment { color: #005faf; }
.subxS1Comment { color: #0000af; }
.subxS2Comment { color: #8a8a8a; }
.LineNr { }
.subxFunction { color: #af5f00; text-decoration: underline; }
.subxS1Comment { color: #0000af; }
.Constant { color: #008787; }
.Normal { color: #000000; background-color: #ffffd7; padding-bottom: 1px; }
.subxTest { color: #5f8700; }
.subxH1Comment { color: #005faf; text-decoration: underline; }
.subxFunction { color: #af5f00; text-decoration: underline; }
.Normal { color: #000000; background-color: #ffffd7; padding-bottom: 1px; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

View File

@ -1,32 +1,32 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 117write-int-hex.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=">
<meta name="colorscheme" content="minimal-light">
<style>
<style type="text/css">
<!--
pre { font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxH1Comment { color: #005faf; text-decoration: underline; }
.subxComment { color: #005faf; }
.subxS1Comment { color: #0000af; }
.subxS2Comment { color: #8a8a8a; }
.LineNr { }
.subxFunction { color: #af5f00; text-decoration: underline; }
.subxS1Comment { color: #0000af; }
.Normal { color: #000000; background-color: #ffffd7; padding-bottom: 1px; }
.Constant { color: #008787; }
.subxTest { color: #5f8700; }
.subxH1Comment { color: #005faf; text-decoration: underline; }
.subxFunction { color: #af5f00; text-decoration: underline; }
.Constant { color: #008787; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

View File

@ -1,31 +1,31 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 118parse-hex-int.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=">
<meta name="colorscheme" content="minimal-light">
<style>
<style type="text/css">
<!--
pre { font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxComment { color: #005faf; }
.subxS1Comment { color: #0000af; }
.subxS2Comment { color: #8a8a8a; }
.LineNr { }
.subxFunction { color: #af5f00; text-decoration: underline; }
.subxS1Comment { color: #0000af; }
.Constant { color: #008787; }
.Normal { color: #000000; background-color: #ffffd7; padding-bottom: 1px; }
.subxTest { color: #5f8700; }
.subxFunction { color: #af5f00; text-decoration: underline; }
.Normal { color: #000000; background-color: #ffffd7; padding-bottom: 1px; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

File diff suppressed because it is too large Load Diff

View File

@ -1,31 +1,31 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 121new-stream.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=">
<meta name="colorscheme" content="minimal-light">
<style>
<style type="text/css">
<!--
pre { font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxComment { color: #005faf; }
.subxS1Comment { color: #0000af; }
.subxS2Comment { color: #8a8a8a; }
.LineNr { }
.subxFunction { color: #af5f00; text-decoration: underline; }
.subxS1Comment { color: #0000af; }
.Constant { color: #008787; }
.Normal { color: #000000; background-color: #ffffd7; padding-bottom: 1px; }
.subxTest { color: #5f8700; }
.subxFunction { color: #af5f00; text-decoration: underline; }
.Normal { color: #000000; background-color: #ffffd7; padding-bottom: 1px; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

View File

@ -1,33 +1,33 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 123slice.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=">
<meta name="colorscheme" content="minimal-light">
<style>
<style type="text/css">
<!--
pre { font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxH1Comment { color: #005faf; text-decoration: underline; }
.subxComment { color: #005faf; }
.subxS1Comment { color: #0000af; }
.subxS2Comment { color: #8a8a8a; }
.LineNr { }
.subxFunction { color: #af5f00; text-decoration: underline; }
.subxS1Comment { color: #0000af; }
.Constant { color: #008787; }
.subxTest { color: #5f8700; }
.subxFunction { color: #af5f00; text-decoration: underline; }
.Normal { color: #000000; background-color: #ffffd7; padding-bottom: 1px; }
.Folded { color: #080808; background-color: #949494; }
.subxTest { color: #5f8700; }
.subxH1Comment { color: #005faf; text-decoration: underline; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -1071,7 +1071,7 @@ if ('onhashchange' in window) {
<span id="L1010" class="LineNr">1010 </span> 8b/copy 1/mod/*+disp8 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebx+4) to eax</span>
<span id="L1011" class="LineNr">1011 </span> <span class="subxComment"># skip payload-&gt;allocid</span>
<span id="L1012" class="LineNr">1012 </span> 05/add-to-eax 4/imm32
<span id="L1013" class="Folded">1013 </span><span class="Folded">+-- 26 lines: #? # dump eax --------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L1013" class="Folded">1013 </span><span class="Folded">+-- 26 lines: #? # dump eax ---------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L1039" class="LineNr">1039 </span> <span class="subxComment"># eax = string-equal?(eax, &quot;Abc&quot;)</span>
<span id="L1040" class="LineNr">1040 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L1041" class="LineNr">1041 </span> 68/push <span class="Constant">&quot;Abc&quot;</span>/imm32

View File

@ -1,31 +1,31 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 124next-token.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=">
<meta name="colorscheme" content="minimal-light">
<style>
<style type="text/css">
<!--
pre { font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxComment { color: #005faf; }
.subxS1Comment { color: #0000af; }
.subxS2Comment { color: #8a8a8a; }
.LineNr { }
.subxFunction { color: #af5f00; text-decoration: underline; }
.subxS1Comment { color: #0000af; }
.Constant { color: #008787; }
.Normal { color: #000000; background-color: #ffffd7; padding-bottom: 1px; }
.subxTest { color: #5f8700; }
.subxFunction { color: #af5f00; text-decoration: underline; }
.Normal { color: #000000; background-color: #ffffd7; padding-bottom: 1px; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

View File

@ -1,33 +1,33 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 126write-int-decimal.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<meta name="settings" content="number_lines,use_css,no_foldcolumn,expand_tabs,line_ids,prevent_copy=">
<meta name="colorscheme" content="minimal-light">
<style>
<style type="text/css">
<!--
pre { font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxH1Comment { color: #005faf; text-decoration: underline; }
.subxComment { color: #005faf; }
.subxS1Comment { color: #0000af; }
.subxS2Comment { color: #8a8a8a; }
.LineNr { }
.subxFunction { color: #af5f00; text-decoration: underline; }
.subxS1Comment { color: #0000af; }
.Constant { color: #008787; }
.subxTest { color: #5f8700; }
.subxFunction { color: #af5f00; text-decoration: underline; }
.Normal { color: #000000; background-color: #ffffd7; padding-bottom: 1px; }
.Folded { color: #080808; background-color: #949494; }
.subxTest { color: #5f8700; }
.subxH1Comment { color: #005faf; text-decoration: underline; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -286,7 +286,7 @@ if ('onhashchange' in window) {
<span id="L225" class="LineNr">225 </span> e8/call <a href='126write-int-decimal.subx.html#L8'>write-int32-decimal</a>/disp32
<span id="L226" class="LineNr">226 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L227" class="LineNr">227 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
<span id="L228" class="Folded">228 </span><span class="Folded">+-- 26 lines: #? # dump _test-stream -----------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L228" class="Folded">228 </span><span class="Folded">+-- 26 lines: #? # dump _test-stream ------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L254" class="LineNr">254 </span> <span class="subxComment"># check-stream-equal(_test-stream, &quot;-9&quot;, msg)</span>
<span id="L255" class="LineNr">255 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L256" class="LineNr">256 </span> 68/push <span class="Constant">&quot;F - test-write-int32-decimal-negative&quot;</span>/imm32

View File

@ -1,31 +1,31 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 127next-word.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxComment { color: #005faf; }
.subxS1Comment { color: #0000af; }
.subxS2Comment { color: #8a8a8a; }
.LineNr { }
.subxFunction { color: #af5f00; text-decoration: underline; }
.subxS1Comment { color: #0000af; }
.Constant { color: #008787; }
.Normal { color: #000000; background-color: #ffffd7; padding-bottom: 1px; }
.subxTest { color: #5f8700; }
.subxFunction { color: #af5f00; text-decoration: underline; }
.Normal { color: #000000; background-color: #ffffd7; padding-bottom: 1px; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -97,328 +97,343 @@ if ('onhashchange' in window) {
<span id="L38" class="LineNr"> 38 </span> <span class="subxS1Comment"># . return out</span>
<span id="L39" class="LineNr"> 39 </span> c7 0/subop/copy 0/mod/direct 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># copy to *edi</span>
<span id="L40" class="LineNr"> 40 </span> c7 0/subop/copy 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/disp8 0/imm32 <span class="subxComment"># copy to *(edi+4)</span>
<span id="L41" class="LineNr"> 41 </span> eb/jump $next-word:end/disp8
<span id="L41" class="LineNr"> 41 </span> e9/jump $next-word:end/disp32
<span id="L42" class="LineNr"> 42 </span><span class="Constant">$next-word:check-for-comment</span>:
<span id="L43" class="LineNr"> 43 </span> <span class="subxComment"># out-&gt;start = &amp;line-&gt;data[line-&gt;read]</span>
<span id="L44" class="LineNr"> 44 </span> 8b/copy 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(esi+4) to ecx</span>
<span id="L45" class="LineNr"> 45 </span> 8d/copy-address 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx <span class="Normal"> . </span> 0/r32/eax 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy esi+ecx+12 to eax</span>
<span id="L46" class="LineNr"> 46 </span> 89/copy 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy eax to *edi</span>
<span id="L47" class="LineNr"> 47 </span> <span class="subxComment"># if (line-&gt;data[line-&gt;read] == '#') out-&gt;end = &amp;line-&gt;data[line-&gt;write]), skip rest of stream and return</span>
<span id="L47" class="LineNr"> 47 </span> <span class="subxComment"># if (line-&gt;data[line-&gt;read] == '#') return rest of line</span>
<span id="L48" class="LineNr"> 48 </span> <span class="subxS1Comment"># . eax = line-&gt;data[line-&gt;read]</span>
<span id="L49" class="LineNr"> 49 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span>
<span id="L50" class="LineNr"> 50 </span> 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx <span class="Normal"> . </span> 0/r32/AL 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy byte at *(esi+ecx+12) to AL</span>
<span id="L51" class="LineNr"> 51 </span> <span class="subxS1Comment"># . compare</span>
<span id="L52" class="LineNr"> 52 </span> 3d/compare-eax-and 0x23/imm32/pound
<span id="L53" class="LineNr"> 53 </span> 75/jump-if-!= $next-word:regular-word/disp8
<span id="L53" class="LineNr"> 53 </span> 0f 85/jump-if-!= $next-word:regular-word/disp32
<span id="L54" class="LineNr"> 54 </span><span class="Constant">$next-word:comment</span>:
<span id="L55" class="LineNr"> 55 </span> <span class="subxS1Comment"># . out-&gt;end = &amp;line-&gt;data[line-&gt;write]</span>
<span id="L56" class="LineNr"> 56 </span> 8b/copy 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *esi to eax</span>
<span id="L57" class="LineNr"> 57 </span> 8d/copy-address 1/mod/*+disp8 4/rm32/sib 6/base/esi 0/index/eax <span class="Normal"> . </span> 0/r32/eax 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy esi+eax+12 to eax</span>
<span id="L58" class="LineNr"> 58 </span> 89/copy 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy eax to *(edi+4)</span>
<span id="L59" class="LineNr"> 59 </span> <span class="subxS1Comment"># . line-&gt;read = line-&gt;write</span>
<span id="L60" class="LineNr"> 60 </span> 8b/copy 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *esi to eax</span>
<span id="L61" class="LineNr"> 61 </span> 89/copy 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy eax to *(esi+4)</span>
<span id="L62" class="LineNr"> 62 </span> <span class="subxS1Comment"># . return</span>
<span id="L63" class="LineNr"> 63 </span> eb/jump $next-word:end/disp8
<span id="L64" class="LineNr"> 64 </span><span class="Constant">$next-word:regular-word</span>:
<span id="L65" class="LineNr"> 65 </span> <span class="subxComment"># otherwise skip-chars-not-matching-whitespace(line) # including trailing newline</span>
<span id="L66" class="LineNr"> 66 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L67" class="LineNr"> 67 </span> ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># push *(ebp+8)</span>
<span id="L68" class="LineNr"> 68 </span> <span class="subxS2Comment"># . . call</span>
<span id="L69" class="LineNr"> 69 </span> e8/call <a href='124next-token.subx.html#L563'>skip-chars-not-matching-whitespace</a>/disp32
<span id="L70" class="LineNr"> 70 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L71" class="LineNr"> 71 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span>
<span id="L72" class="LineNr"> 72 </span> <span class="subxComment"># out-&gt;end = &amp;line-&gt;data[line-&gt;read]</span>
<span id="L73" class="LineNr"> 73 </span> 8b/copy 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(esi+4) to ecx</span>
<span id="L74" class="LineNr"> 74 </span> 8d/copy-address 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx <span class="Normal"> . </span> 0/r32/eax 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy esi+ecx+12 to eax</span>
<span id="L75" class="LineNr"> 75 </span> 89/copy 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy eax to *(edi+4)</span>
<span id="L76" class="LineNr"> 76 </span><span class="Constant">$next-word:end</span>:
<span id="L77" class="LineNr"> 77 </span> <span class="subxS1Comment"># . restore registers</span>
<span id="L78" class="LineNr"> 78 </span> 5f/pop-to-edi
<span id="L79" class="LineNr"> 79 </span> 5e/pop-to-esi
<span id="L80" class="LineNr"> 80 </span> 59/pop-to-ecx
<span id="L81" class="LineNr"> 81 </span> 58/pop-to-eax
<span id="L82" class="LineNr"> 82 </span> <span class="subxS1Comment"># . epilogue</span>
<span id="L83" class="LineNr"> 83 </span> 89/copy 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 5/r32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy ebp to esp</span>
<span id="L84" class="LineNr"> 84 </span> 5d/pop-to-ebp
<span id="L85" class="LineNr"> 85 </span> c3/return
<span id="L86" class="LineNr"> 86 </span>
<span id="L87" class="LineNr"> 87 </span><span class="subxTest">test-next-word</span>:
<span id="L88" class="LineNr"> 88 </span> <span class="subxS1Comment"># . prologue</span>
<span id="L89" class="LineNr"> 89 </span> 55/push-ebp
<span id="L90" class="LineNr"> 90 </span> 89/copy 3/mod/direct 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ebp</span>
<span id="L91" class="LineNr"> 91 </span> <span class="subxComment"># setup</span>
<span id="L92" class="LineNr"> 92 </span> <span class="subxS1Comment"># . clear-stream(_test-stream)</span>
<span id="L93" class="LineNr"> 93 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L94" class="LineNr"> 94 </span> 68/push <a href='108write.subx.html#L125'>_test-stream</a>/imm32
<span id="L95" class="LineNr"> 95 </span> <span class="subxS2Comment"># . . call</span>
<span id="L96" class="LineNr"> 96 </span> e8/call <a href='106stream.subx.html#L20'>clear-stream</a>/disp32
<span id="L97" class="LineNr"> 97 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L98" class="LineNr"> 98 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span>
<span id="L99" class="LineNr"> 99 </span> <span class="subxComment"># var slice/ecx: slice</span>
<span id="L100" class="LineNr">100 </span> 68/push 0/imm32/end
<span id="L101" class="LineNr">101 </span> 68/push 0/imm32/start
<span id="L102" class="LineNr">102 </span> 89/copy 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ecx</span>
<span id="L103" class="LineNr">103 </span> <span class="subxComment"># write(_test-stream, &quot; ab&quot;)</span>
<span id="L104" class="LineNr">104 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L105" class="LineNr">105 </span> 68/push <span class="Constant">&quot; ab&quot;</span>/imm32
<span id="L106" class="LineNr">106 </span> 68/push <a href='108write.subx.html#L125'>_test-stream</a>/imm32
<span id="L107" class="LineNr">107 </span> <span class="subxS2Comment"># . . call</span>
<span id="L108" class="LineNr">108 </span> e8/call <a href='108write.subx.html#L11'>write</a>/disp32
<span id="L109" class="LineNr">109 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L110" class="LineNr">110 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
<span id="L111" class="LineNr">111 </span> <span class="subxComment"># next-word(_test-stream, slice)</span>
<span id="L112" class="LineNr">112 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L113" class="LineNr">113 </span> 51/push-ecx
<span id="L114" class="LineNr">114 </span> 68/push <a href='108write.subx.html#L125'>_test-stream</a>/imm32
<span id="L115" class="LineNr">115 </span> <span class="subxS2Comment"># . . call</span>
<span id="L116" class="LineNr">116 </span> e8/call <a href='127next-word.subx.html#L11'>next-word</a>/disp32
<span id="L117" class="LineNr">117 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L118" class="LineNr">118 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
<span id="L119" class="LineNr">119 </span> <span class="subxComment"># check-ints-equal(slice-&gt;start - _test-stream-&gt;data, 2, msg)</span>
<span id="L120" class="LineNr">120 </span> <span class="subxS1Comment"># . check-ints-equal(slice-&gt;start - _test-stream, 14, msg)</span>
<span id="L121" class="LineNr">121 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L122" class="LineNr">122 </span> 68/push <span class="Constant">&quot;F - <a href='127next-word.subx.html#L87'>test-next-word</a>: start&quot;</span>/imm32
<span id="L123" class="LineNr">123 </span> 68/push 0xe/imm32
<span id="L124" class="LineNr">124 </span> <span class="subxS2Comment"># . . push slice-&gt;start - _test-stream</span>
<span id="L125" class="LineNr">125 </span> 8b/copy 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *ecx to eax</span>
<span id="L126" class="LineNr">126 </span> 81 5/subop/subtract 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <a href='108write.subx.html#L125'>_test-stream</a>/imm32 <span class="subxComment"># subtract from eax</span>
<span id="L127" class="LineNr">127 </span> 50/push-eax
<span id="L128" class="LineNr">128 </span> <span class="subxS2Comment"># . . call</span>
<span id="L129" class="LineNr">129 </span> e8/call <a href='502test.mu.html#L2'>check-ints-equal</a>/disp32
<span id="L130" class="LineNr">130 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L131" class="LineNr">131 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/imm32 <span class="subxComment"># add to esp</span>
<span id="L132" class="LineNr">132 </span> <span class="subxComment"># check-ints-equal(slice-&gt;end - _test-stream-&gt;data, 4, msg)</span>
<span id="L133" class="LineNr">133 </span> <span class="subxS1Comment"># . check-ints-equal(slice-&gt;end - _test-stream, 16, msg)</span>
<span id="L134" class="LineNr">134 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L135" class="LineNr">135 </span> 68/push <span class="Constant">&quot;F - <a href='127next-word.subx.html#L87'>test-next-word</a>: end&quot;</span>/imm32
<span id="L136" class="LineNr">136 </span> 68/push 0x10/imm32
<span id="L137" class="LineNr">137 </span> <span class="subxS2Comment"># . . push slice-&gt;end - _test-stream</span>
<span id="L138" class="LineNr">138 </span> 8b/copy 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ecx+4) to eax</span>
<span id="L139" class="LineNr">139 </span> 81 5/subop/subtract 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <a href='108write.subx.html#L125'>_test-stream</a>/imm32 <span class="subxComment"># subtract from eax</span>
<span id="L140" class="LineNr">140 </span> 50/push-eax
<span id="L141" class="LineNr">141 </span> <span class="subxS2Comment"># . . call</span>
<span id="L142" class="LineNr">142 </span> e8/call <a href='502test.mu.html#L2'>check-ints-equal</a>/disp32
<span id="L143" class="LineNr">143 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L144" class="LineNr">144 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/imm32 <span class="subxComment"># add to esp</span>
<span id="L145" class="LineNr">145 </span> <span class="subxS1Comment"># . epilogue</span>
<span id="L146" class="LineNr">146 </span> 89/copy 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 5/r32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy ebp to esp</span>
<span id="L147" class="LineNr">147 </span> 5d/pop-to-ebp
<span id="L148" class="LineNr">148 </span> c3/return
<span id="L149" class="LineNr">149 </span>
<span id="L150" class="LineNr">150 </span><span class="subxTest">test-next-word-returns-whole-comment</span>:
<span id="L151" class="LineNr">151 </span> <span class="subxS1Comment"># . prologue</span>
<span id="L152" class="LineNr">152 </span> 55/push-ebp
<span id="L153" class="LineNr">153 </span> 89/copy 3/mod/direct 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ebp</span>
<span id="L154" class="LineNr">154 </span> <span class="subxComment"># setup</span>
<span id="L155" class="LineNr">155 </span> <span class="subxS1Comment"># . clear-stream(_test-stream)</span>
<span id="L156" class="LineNr">156 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L157" class="LineNr">157 </span> 68/push <a href='108write.subx.html#L125'>_test-stream</a>/imm32
<span id="L158" class="LineNr">158 </span> <span class="subxS2Comment"># . . call</span>
<span id="L159" class="LineNr">159 </span> e8/call <a href='106stream.subx.html#L20'>clear-stream</a>/disp32
<span id="L160" class="LineNr">160 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L161" class="LineNr">161 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span>
<span id="L162" class="LineNr">162 </span> <span class="subxComment"># var slice/ecx: slice</span>
<span id="L163" class="LineNr">163 </span> 68/push 0/imm32/end
<span id="L164" class="LineNr">164 </span> 68/push 0/imm32/start
<span id="L165" class="LineNr">165 </span> 89/copy 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ecx</span>
<span id="L166" class="LineNr">166 </span> <span class="subxComment"># write(_test-stream, &quot; # a&quot;)</span>
<span id="L167" class="LineNr">167 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L168" class="LineNr">168 </span> 68/push <span class="Constant">&quot; # a&quot;</span>/imm32
<span id="L169" class="LineNr">169 </span> 68/push <a href='108write.subx.html#L125'>_test-stream</a>/imm32
<span id="L170" class="LineNr">170 </span> <span class="subxS2Comment"># . . call</span>
<span id="L171" class="LineNr">171 </span> e8/call <a href='108write.subx.html#L11'>write</a>/disp32
<span id="L172" class="LineNr">172 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L173" class="LineNr">173 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
<span id="L174" class="LineNr">174 </span> <span class="subxComment"># next-word(_test-stream, slice)</span>
<span id="L175" class="LineNr">175 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L176" class="LineNr">176 </span> 51/push-ecx
<span id="L177" class="LineNr">177 </span> 68/push <a href='108write.subx.html#L125'>_test-stream</a>/imm32
<span id="L178" class="LineNr">178 </span> <span class="subxS2Comment"># . . call</span>
<span id="L179" class="LineNr">179 </span> e8/call <a href='127next-word.subx.html#L11'>next-word</a>/disp32
<span id="L180" class="LineNr">180 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L181" class="LineNr">181 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
<span id="L182" class="LineNr">182 </span> <span class="subxComment"># check-ints-equal(slice-&gt;start - _test-stream-&gt;data, 2, msg)</span>
<span id="L183" class="LineNr">183 </span> <span class="subxS1Comment"># . check-ints-equal(slice-&gt;start - _test-stream, 14, msg)</span>
<span id="L184" class="LineNr">184 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L185" class="LineNr">185 </span> 68/push <span class="Constant">&quot;F - <a href='127next-word.subx.html#L150'>test-next-word-returns-whole-comment</a>: start&quot;</span>/imm32
<span id="L186" class="LineNr">186 </span> 68/push 0xe/imm32
<span id="L187" class="LineNr">187 </span> <span class="subxS2Comment"># . . push slice-&gt;start - _test-stream</span>
<span id="L188" class="LineNr">188 </span> 8b/copy 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *ecx to eax</span>
<span id="L189" class="LineNr">189 </span> 81 5/subop/subtract 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <a href='108write.subx.html#L125'>_test-stream</a>/imm32 <span class="subxComment"># subtract from eax</span>
<span id="L190" class="LineNr">190 </span> 50/push-eax
<span id="L191" class="LineNr">191 </span> <span class="subxS2Comment"># . . call</span>
<span id="L192" class="LineNr">192 </span> e8/call <a href='502test.mu.html#L2'>check-ints-equal</a>/disp32
<span id="L193" class="LineNr">193 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L194" class="LineNr">194 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/imm32 <span class="subxComment"># add to esp</span>
<span id="L195" class="LineNr">195 </span> <span class="subxComment"># check-ints-equal(slice-&gt;end - _test-stream-&gt;data, 5, msg)</span>
<span id="L196" class="LineNr">196 </span> <span class="subxS1Comment"># . check-ints-equal(slice-&gt;end - _test-stream, 17, msg)</span>
<span id="L197" class="LineNr">197 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L198" class="LineNr">198 </span> 68/push <span class="Constant">&quot;F - <a href='127next-word.subx.html#L150'>test-next-word-returns-whole-comment</a>: end&quot;</span>/imm32
<span id="L199" class="LineNr">199 </span> 68/push 0x11/imm32
<span id="L200" class="LineNr">200 </span> <span class="subxS2Comment"># . . push slice-&gt;end - _test-stream</span>
<span id="L201" class="LineNr">201 </span> 8b/copy 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ecx+4) to eax</span>
<span id="L202" class="LineNr">202 </span> 81 5/subop/subtract 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <a href='108write.subx.html#L125'>_test-stream</a>/imm32 <span class="subxComment"># subtract from eax</span>
<span id="L203" class="LineNr">203 </span> 50/push-eax
<span id="L204" class="LineNr">204 </span> <span class="subxS2Comment"># . . call</span>
<span id="L205" class="LineNr">205 </span> e8/call <a href='502test.mu.html#L2'>check-ints-equal</a>/disp32
<span id="L206" class="LineNr">206 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L207" class="LineNr">207 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/imm32 <span class="subxComment"># add to esp</span>
<span id="L208" class="LineNr">208 </span> <span class="subxS1Comment"># . epilogue</span>
<span id="L209" class="LineNr">209 </span> 89/copy 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 5/r32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy ebp to esp</span>
<span id="L210" class="LineNr">210 </span> 5d/pop-to-ebp
<span id="L211" class="LineNr">211 </span> c3/return
<span id="L212" class="LineNr">212 </span>
<span id="L213" class="LineNr">213 </span><span class="subxTest">test-next-word-returns-empty-string-on-eof</span>:
<span id="L214" class="LineNr">214 </span> <span class="subxS1Comment"># . prologue</span>
<span id="L215" class="LineNr">215 </span> 55/push-ebp
<span id="L216" class="LineNr">216 </span> 89/copy 3/mod/direct 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ebp</span>
<span id="L217" class="LineNr">217 </span> <span class="subxComment"># setup</span>
<span id="L218" class="LineNr">218 </span> <span class="subxS1Comment"># . clear-stream(_test-stream)</span>
<span id="L219" class="LineNr">219 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L220" class="LineNr">220 </span> 68/push <a href='108write.subx.html#L125'>_test-stream</a>/imm32
<span id="L221" class="LineNr">221 </span> <span class="subxS2Comment"># . . call</span>
<span id="L222" class="LineNr">222 </span> e8/call <a href='106stream.subx.html#L20'>clear-stream</a>/disp32
<span id="L223" class="LineNr">223 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L224" class="LineNr">224 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span>
<span id="L225" class="LineNr">225 </span> <span class="subxComment"># var slice/ecx: slice</span>
<span id="L226" class="LineNr">226 </span> 68/push 0/imm32/end
<span id="L227" class="LineNr">227 </span> 68/push 0/imm32/start
<span id="L228" class="LineNr">228 </span> 89/copy 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ecx</span>
<span id="L229" class="LineNr">229 </span> <span class="subxComment"># write nothing to _test-stream</span>
<span id="L230" class="LineNr">230 </span> <span class="subxComment"># next-word(_test-stream, slice)</span>
<span id="L231" class="LineNr">231 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L232" class="LineNr">232 </span> 51/push-ecx
<span id="L233" class="LineNr">233 </span> 68/push <a href='108write.subx.html#L125'>_test-stream</a>/imm32
<span id="L234" class="LineNr">234 </span> <span class="subxS2Comment"># . . call</span>
<span id="L235" class="LineNr">235 </span> e8/call <a href='127next-word.subx.html#L11'>next-word</a>/disp32
<span id="L236" class="LineNr">236 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L237" class="LineNr">237 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
<span id="L238" class="LineNr">238 </span> <span class="subxComment"># check-ints-equal(slice-&gt;end - slice-&gt;start, 0, msg)</span>
<span id="L239" class="LineNr">239 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L240" class="LineNr">240 </span> 68/push <span class="Constant">&quot;F - test-next-word-returns-empty-string-on-eof&quot;</span>/imm32
<span id="L241" class="LineNr">241 </span> 68/push 0/imm32
<span id="L242" class="LineNr">242 </span> <span class="subxS2Comment"># . . push slice-&gt;end - slice-&gt;start</span>
<span id="L243" class="LineNr">243 </span> 8b/copy 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ecx+4) to eax</span>
<span id="L244" class="LineNr">244 </span> 2b/subtract 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># subtract *ecx from eax</span>
<span id="L245" class="LineNr">245 </span> 50/push-eax
<span id="L246" class="LineNr">246 </span> <span class="subxS2Comment"># . . call</span>
<span id="L247" class="LineNr">247 </span> e8/call <a href='502test.mu.html#L2'>check-ints-equal</a>/disp32
<span id="L248" class="LineNr">248 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L249" class="LineNr">249 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/imm32 <span class="subxComment"># add to esp</span>
<span id="L250" class="LineNr">250 </span> <span class="subxS1Comment"># . epilogue</span>
<span id="L251" class="LineNr">251 </span> 89/copy 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 5/r32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy ebp to esp</span>
<span id="L252" class="LineNr">252 </span> 5d/pop-to-ebp
<span id="L253" class="LineNr">253 </span> c3/return
<span id="L254" class="LineNr">254 </span>
<span id="L255" class="LineNr">255 </span><span class="subxTest">test-next-word-returns-empty-string-on-newline</span>:
<span id="L256" class="LineNr">256 </span> <span class="subxS1Comment"># . prologue</span>
<span id="L257" class="LineNr">257 </span> 55/push-ebp
<span id="L258" class="LineNr">258 </span> 89/copy 3/mod/direct 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ebp</span>
<span id="L259" class="LineNr">259 </span> <span class="subxComment"># setup</span>
<span id="L260" class="LineNr">260 </span> <span class="subxS1Comment"># . clear-stream(_test-stream)</span>
<span id="L261" class="LineNr">261 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L262" class="LineNr">262 </span> 68/push <a href='108write.subx.html#L125'>_test-stream</a>/imm32
<span id="L263" class="LineNr">263 </span> <span class="subxS2Comment"># . . call</span>
<span id="L264" class="LineNr">264 </span> e8/call <a href='106stream.subx.html#L20'>clear-stream</a>/disp32
<span id="L265" class="LineNr">265 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L266" class="LineNr">266 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span>
<span id="L267" class="LineNr">267 </span> <span class="subxComment"># var slice/ecx: slice</span>
<span id="L268" class="LineNr">268 </span> 68/push 0/imm32/end
<span id="L269" class="LineNr">269 </span> 68/push 0/imm32/start
<span id="L270" class="LineNr">270 </span> 89/copy 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ecx</span>
<span id="L271" class="LineNr">271 </span> <span class="subxComment"># write some whitespace and a newline</span>
<span id="L272" class="LineNr">272 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L273" class="LineNr">273 </span> 68/push <span class="Constant">&quot; \n&quot;</span>/imm32
<span id="L274" class="LineNr">274 </span> 68/push <a href='108write.subx.html#L125'>_test-stream</a>/imm32
<span id="L275" class="LineNr">275 </span> <span class="subxS2Comment"># . . call</span>
<span id="L276" class="LineNr">276 </span> e8/call <a href='108write.subx.html#L11'>write</a>/disp32
<span id="L277" class="LineNr">277 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L278" class="LineNr">278 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
<span id="L279" class="LineNr">279 </span> <span class="subxComment"># next-word(_test-stream, slice)</span>
<span id="L280" class="LineNr">280 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L281" class="LineNr">281 </span> 51/push-ecx
<span id="L282" class="LineNr">282 </span> 68/push <a href='108write.subx.html#L125'>_test-stream</a>/imm32
<span id="L283" class="LineNr">283 </span> <span class="subxS2Comment"># . . call</span>
<span id="L284" class="LineNr">284 </span> e8/call <a href='127next-word.subx.html#L11'>next-word</a>/disp32
<span id="L285" class="LineNr">285 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L286" class="LineNr">286 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
<span id="L287" class="LineNr">287 </span> <span class="subxComment"># check-ints-equal(slice-&gt;end - slice-&gt;start, 0, msg)</span>
<span id="L288" class="LineNr">288 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L289" class="LineNr">289 </span> 68/push <span class="Constant">&quot;F - test-next-word-returns-empty-string-on-newline&quot;</span>/imm32
<span id="L290" class="LineNr">290 </span> 68/push 0/imm32
<span id="L291" class="LineNr">291 </span> <span class="subxS2Comment"># . . push slice-&gt;end - slice-&gt;start</span>
<span id="L292" class="LineNr">292 </span> 8b/copy 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ecx+4) to eax</span>
<span id="L293" class="LineNr">293 </span> 2b/subtract 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># subtract *ecx from eax</span>
<span id="L294" class="LineNr">294 </span> 50/push-eax
<span id="L295" class="LineNr">295 </span> <span class="subxS2Comment"># . . call</span>
<span id="L296" class="LineNr">296 </span> e8/call <a href='502test.mu.html#L2'>check-ints-equal</a>/disp32
<span id="L297" class="LineNr">297 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L298" class="LineNr">298 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/imm32 <span class="subxComment"># add to esp</span>
<span id="L299" class="LineNr">299 </span> <span class="subxS1Comment"># . epilogue</span>
<span id="L300" class="LineNr">300 </span> 89/copy 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 5/r32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy ebp to esp</span>
<span id="L301" class="LineNr">301 </span> 5d/pop-to-ebp
<span id="L302" class="LineNr">302 </span> c3/return
<span id="L303" class="LineNr">303 </span>
<span id="L304" class="LineNr">304 </span><span class="subxComment"># (re)compute the bounds of the next word in the line (separated by whitespace)</span>
<span id="L305" class="LineNr">305 </span><span class="subxComment"># return empty string on reaching end of file</span>
<span id="L306" class="LineNr">306 </span><span class="subxFunction">next-raw-word</span>: <span class="subxComment"># line: (addr stream byte), out: (addr slice)</span>
<span id="L307" class="LineNr">307 </span> <span class="subxS1Comment"># . prologue</span>
<span id="L308" class="LineNr">308 </span> 55/push-ebp
<span id="L309" class="LineNr">309 </span> 89/copy 3/mod/direct 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ebp</span>
<span id="L310" class="LineNr">310 </span> <span class="subxS1Comment"># . save registers</span>
<span id="L311" class="LineNr">311 </span> 50/push-eax
<span id="L312" class="LineNr">312 </span> 51/push-ecx
<span id="L313" class="LineNr">313 </span> 56/push-esi
<span id="L314" class="LineNr">314 </span> 57/push-edi
<span id="L315" class="LineNr">315 </span> <span class="subxComment"># esi = line</span>
<span id="L316" class="LineNr">316 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 6/r32/esi 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+8) to esi</span>
<span id="L317" class="LineNr">317 </span> <span class="subxComment"># edi = out</span>
<span id="L318" class="LineNr">318 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 7/r32/edi 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+12) to edi</span>
<span id="L319" class="LineNr">319 </span> <span class="subxComment"># skip-chars-matching-whitespace(line)</span>
<span id="L320" class="LineNr">320 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L321" class="LineNr">321 </span> ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># push *(ebp+8)</span>
<span id="L322" class="LineNr">322 </span> <span class="subxS2Comment"># . . call</span>
<span id="L323" class="LineNr">323 </span> e8/call <a href='124next-token.subx.html#L311'>skip-chars-matching-whitespace</a>/disp32
<span id="L324" class="LineNr">324 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L325" class="LineNr">325 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span>
<span id="L326" class="LineNr">326 </span><span class="Constant">$next-raw-word:check0</span>:
<span id="L327" class="LineNr">327 </span> <span class="subxComment"># if (line-&gt;read &gt;= line-&gt;write) clear out and return</span>
<span id="L328" class="LineNr">328 </span> <span class="subxS1Comment"># . eax = line-&gt;read</span>
<span id="L329" class="LineNr">329 </span> 8b/copy 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(esi+4) to eax</span>
<span id="L330" class="LineNr">330 </span> <span class="subxS1Comment"># . if (eax &lt; line-&gt;write) goto next check</span>
<span id="L331" class="LineNr">331 </span> 3b/compare 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax with *esi</span>
<span id="L332" class="LineNr">332 </span> 7c/jump-if-&lt; $next-raw-word:word-exists/disp8
<span id="L333" class="LineNr">333 </span> <span class="subxS1Comment"># . return out</span>
<span id="L334" class="LineNr">334 </span> c7 0/subop/copy 0/mod/direct 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># copy to *edi</span>
<span id="L335" class="LineNr">335 </span> c7 0/subop/copy 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/disp8 0/imm32 <span class="subxComment"># copy to *(edi+4)</span>
<span id="L336" class="LineNr">336 </span> eb/jump $next-raw-word:end/disp8
<span id="L337" class="LineNr">337 </span><span class="Constant">$next-raw-word:word-exists</span>:
<span id="L338" class="LineNr">338 </span> <span class="subxComment"># out-&gt;start = &amp;line-&gt;data[line-&gt;read]</span>
<span id="L339" class="LineNr">339 </span> 8b/copy 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(esi+4) to ecx</span>
<span id="L340" class="LineNr">340 </span> 8d/copy-address 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx <span class="Normal"> . </span> 0/r32/eax 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy esi+ecx+12 to eax</span>
<span id="L341" class="LineNr">341 </span> 89/copy 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy eax to *edi</span>
<span id="L342" class="LineNr">342 </span> <span class="subxComment"># skip-chars-not-matching-whitespace(line) # including trailing newline</span>
<span id="L343" class="LineNr">343 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L344" class="LineNr">344 </span> ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># push *(ebp+8)</span>
<span id="L345" class="LineNr">345 </span> <span class="subxS2Comment"># . . call</span>
<span id="L346" class="LineNr">346 </span> e8/call <a href='124next-token.subx.html#L563'>skip-chars-not-matching-whitespace</a>/disp32
<span id="L347" class="LineNr">347 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L348" class="LineNr">348 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span>
<span id="L349" class="LineNr">349 </span> <span class="subxComment"># out-&gt;end = &amp;line-&gt;data[line-&gt;read]</span>
<span id="L350" class="LineNr">350 </span> 8b/copy 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(esi+4) to ecx</span>
<span id="L351" class="LineNr">351 </span> 8d/copy-address 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx <span class="Normal"> . </span> 0/r32/eax 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy esi+ecx+12 to eax</span>
<span id="L352" class="LineNr">352 </span> 89/copy 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy eax to *(edi+4)</span>
<span id="L353" class="LineNr">353 </span><span class="Constant">$next-raw-word:end</span>:
<span id="L354" class="LineNr">354 </span> <span class="subxS1Comment"># . restore registers</span>
<span id="L355" class="LineNr">355 </span> 5f/pop-to-edi
<span id="L356" class="LineNr">356 </span> 5e/pop-to-esi
<span id="L357" class="LineNr">357 </span> 59/pop-to-ecx
<span id="L358" class="LineNr">358 </span> 58/pop-to-eax
<span id="L359" class="LineNr">359 </span> <span class="subxS1Comment"># . epilogue</span>
<span id="L360" class="LineNr">360 </span> 89/copy 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 5/r32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy ebp to esp</span>
<span id="L361" class="LineNr">361 </span> 5d/pop-to-ebp
<span id="L362" class="LineNr">362 </span> c3/return
<span id="L55" class="LineNr"> 55 </span> <span class="subxComment"># out-&gt;end = out-&gt;start</span>
<span id="L56" class="LineNr"> 56 </span> 8d/copy-address 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx <span class="Normal"> . </span> 0/r32/eax 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy esi+ecx+12 to eax</span>
<span id="L57" class="LineNr"> 57 </span> 89/copy 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy eax to *(edi+4)</span>
<span id="L58" class="LineNr"> 58 </span> <span class="subxComment"># var write/ecx: int = line-&gt;write</span>
<span id="L59" class="LineNr"> 59 </span> 8b/copy 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *esi to ecx</span>
<span id="L60" class="LineNr"> 60 </span><span class="Constant">$next-word:comment-loop</span>:
<span id="L61" class="LineNr"> 61 </span> <span class="subxComment"># if (line-&gt;read &gt;= line-&gt;write) break</span>
<span id="L62" class="LineNr"> 62 </span> 39/compare 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare *(esi+4) with ecx</span>
<span id="L63" class="LineNr"> 63 </span> 0f 8d/jump-if-&gt;= $next-word:comment-break/disp32
<span id="L64" class="LineNr"> 64 </span> <span class="subxComment"># ++line-&gt;read</span>
<span id="L65" class="LineNr"> 65 </span> ff 0/subop/increment 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># increment *(esi+4)</span>
<span id="L66" class="LineNr"> 66 </span> <span class="subxComment"># ++out-&gt;end</span>
<span id="L67" class="LineNr"> 67 </span> ff 0/subop/increment 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># increment *(edi+4)</span>
<span id="L68" class="LineNr"> 68 </span> <span class="subxComment"># if (*out-&gt;end == newline) break</span>
<span id="L69" class="LineNr"> 69 </span> 8b/copy 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(edi+4) to eax</span>
<span id="L70" class="LineNr"> 70 </span> 8a/copy-byte 0/mod/indirect 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *eax to AL</span>
<span id="L71" class="LineNr"> 71 </span> 25/and-eax-with 0xff/imm32
<span id="L72" class="LineNr"> 72 </span> 3d/compare-eax-and 0xa/imm32/newline
<span id="L73" class="LineNr"> 73 </span> 0f 84/jump-if-= $next-word:comment-break/disp32
<span id="L74" class="LineNr"> 74 </span> <span class="subxComment"># loop</span>
<span id="L75" class="LineNr"> 75 </span> e9/jump $next-word:comment-loop/disp32
<span id="L76" class="LineNr"> 76 </span><span class="Constant">$next-word:comment-break</span>:
<span id="L77" class="LineNr"> 77 </span> <span class="subxComment"># return</span>
<span id="L78" class="LineNr"> 78 </span> e9/jump $next-word:end/disp32
<span id="L79" class="LineNr"> 79 </span><span class="Constant">$next-word:regular-word</span>:
<span id="L80" class="LineNr"> 80 </span> <span class="subxComment"># otherwise skip-chars-not-matching-whitespace(line) # including trailing newline</span>
<span id="L81" class="LineNr"> 81 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L82" class="LineNr"> 82 </span> ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># push *(ebp+8)</span>
<span id="L83" class="LineNr"> 83 </span> <span class="subxS2Comment"># . . call</span>
<span id="L84" class="LineNr"> 84 </span> e8/call <a href='124next-token.subx.html#L563'>skip-chars-not-matching-whitespace</a>/disp32
<span id="L85" class="LineNr"> 85 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L86" class="LineNr"> 86 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span>
<span id="L87" class="LineNr"> 87 </span> <span class="subxComment"># out-&gt;end = &amp;line-&gt;data[line-&gt;read]</span>
<span id="L88" class="LineNr"> 88 </span> 8b/copy 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(esi+4) to ecx</span>
<span id="L89" class="LineNr"> 89 </span> 8d/copy-address 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx <span class="Normal"> . </span> 0/r32/eax 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy esi+ecx+12 to eax</span>
<span id="L90" class="LineNr"> 90 </span> 89/copy 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy eax to *(edi+4)</span>
<span id="L91" class="LineNr"> 91 </span><span class="Constant">$next-word:end</span>:
<span id="L92" class="LineNr"> 92 </span> <span class="subxS1Comment"># . restore registers</span>
<span id="L93" class="LineNr"> 93 </span> 5f/pop-to-edi
<span id="L94" class="LineNr"> 94 </span> 5e/pop-to-esi
<span id="L95" class="LineNr"> 95 </span> 59/pop-to-ecx
<span id="L96" class="LineNr"> 96 </span> 58/pop-to-eax
<span id="L97" class="LineNr"> 97 </span> <span class="subxS1Comment"># . epilogue</span>
<span id="L98" class="LineNr"> 98 </span> 89/copy 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 5/r32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy ebp to esp</span>
<span id="L99" class="LineNr"> 99 </span> 5d/pop-to-ebp
<span id="L100" class="LineNr">100 </span> c3/return
<span id="L101" class="LineNr">101 </span>
<span id="L102" class="LineNr">102 </span><span class="subxTest">test-next-word</span>:
<span id="L103" class="LineNr">103 </span> <span class="subxS1Comment"># . prologue</span>
<span id="L104" class="LineNr">104 </span> 55/push-ebp
<span id="L105" class="LineNr">105 </span> 89/copy 3/mod/direct 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ebp</span>
<span id="L106" class="LineNr">106 </span> <span class="subxComment"># setup</span>
<span id="L107" class="LineNr">107 </span> <span class="subxS1Comment"># . clear-stream(_test-stream)</span>
<span id="L108" class="LineNr">108 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L109" class="LineNr">109 </span> 68/push <a href='108write.subx.html#L125'>_test-stream</a>/imm32
<span id="L110" class="LineNr">110 </span> <span class="subxS2Comment"># . . call</span>
<span id="L111" class="LineNr">111 </span> e8/call <a href='106stream.subx.html#L20'>clear-stream</a>/disp32
<span id="L112" class="LineNr">112 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L113" class="LineNr">113 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span>
<span id="L114" class="LineNr">114 </span> <span class="subxComment"># var slice/ecx: slice</span>
<span id="L115" class="LineNr">115 </span> 68/push 0/imm32/end
<span id="L116" class="LineNr">116 </span> 68/push 0/imm32/start
<span id="L117" class="LineNr">117 </span> 89/copy 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ecx</span>
<span id="L118" class="LineNr">118 </span> <span class="subxComment"># write(_test-stream, &quot; ab&quot;)</span>
<span id="L119" class="LineNr">119 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L120" class="LineNr">120 </span> 68/push <span class="Constant">&quot; ab&quot;</span>/imm32
<span id="L121" class="LineNr">121 </span> 68/push <a href='108write.subx.html#L125'>_test-stream</a>/imm32
<span id="L122" class="LineNr">122 </span> <span class="subxS2Comment"># . . call</span>
<span id="L123" class="LineNr">123 </span> e8/call <a href='108write.subx.html#L11'>write</a>/disp32
<span id="L124" class="LineNr">124 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L125" class="LineNr">125 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
<span id="L126" class="LineNr">126 </span> <span class="subxComment"># next-word(_test-stream, slice)</span>
<span id="L127" class="LineNr">127 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L128" class="LineNr">128 </span> 51/push-ecx
<span id="L129" class="LineNr">129 </span> 68/push <a href='108write.subx.html#L125'>_test-stream</a>/imm32
<span id="L130" class="LineNr">130 </span> <span class="subxS2Comment"># . . call</span>
<span id="L131" class="LineNr">131 </span> e8/call <a href='127next-word.subx.html#L11'>next-word</a>/disp32
<span id="L132" class="LineNr">132 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L133" class="LineNr">133 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
<span id="L134" class="LineNr">134 </span> <span class="subxComment"># check-ints-equal(slice-&gt;start - _test-stream-&gt;data, 2, msg)</span>
<span id="L135" class="LineNr">135 </span> <span class="subxS1Comment"># . check-ints-equal(slice-&gt;start - _test-stream, 14, msg)</span>
<span id="L136" class="LineNr">136 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L137" class="LineNr">137 </span> 68/push <span class="Constant">&quot;F - <a href='127next-word.subx.html#L102'>test-next-word</a>: start&quot;</span>/imm32
<span id="L138" class="LineNr">138 </span> 68/push 0xe/imm32
<span id="L139" class="LineNr">139 </span> <span class="subxS2Comment"># . . push slice-&gt;start - _test-stream</span>
<span id="L140" class="LineNr">140 </span> 8b/copy 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *ecx to eax</span>
<span id="L141" class="LineNr">141 </span> 81 5/subop/subtract 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <a href='108write.subx.html#L125'>_test-stream</a>/imm32 <span class="subxComment"># subtract from eax</span>
<span id="L142" class="LineNr">142 </span> 50/push-eax
<span id="L143" class="LineNr">143 </span> <span class="subxS2Comment"># . . call</span>
<span id="L144" class="LineNr">144 </span> e8/call <a href='502test.mu.html#L2'>check-ints-equal</a>/disp32
<span id="L145" class="LineNr">145 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L146" class="LineNr">146 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/imm32 <span class="subxComment"># add to esp</span>
<span id="L147" class="LineNr">147 </span> <span class="subxComment"># check-ints-equal(slice-&gt;end - _test-stream-&gt;data, 4, msg)</span>
<span id="L148" class="LineNr">148 </span> <span class="subxS1Comment"># . check-ints-equal(slice-&gt;end - _test-stream, 16, msg)</span>
<span id="L149" class="LineNr">149 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L150" class="LineNr">150 </span> 68/push <span class="Constant">&quot;F - <a href='127next-word.subx.html#L102'>test-next-word</a>: end&quot;</span>/imm32
<span id="L151" class="LineNr">151 </span> 68/push 0x10/imm32
<span id="L152" class="LineNr">152 </span> <span class="subxS2Comment"># . . push slice-&gt;end - _test-stream</span>
<span id="L153" class="LineNr">153 </span> 8b/copy 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ecx+4) to eax</span>
<span id="L154" class="LineNr">154 </span> 81 5/subop/subtract 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <a href='108write.subx.html#L125'>_test-stream</a>/imm32 <span class="subxComment"># subtract from eax</span>
<span id="L155" class="LineNr">155 </span> 50/push-eax
<span id="L156" class="LineNr">156 </span> <span class="subxS2Comment"># . . call</span>
<span id="L157" class="LineNr">157 </span> e8/call <a href='502test.mu.html#L2'>check-ints-equal</a>/disp32
<span id="L158" class="LineNr">158 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L159" class="LineNr">159 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/imm32 <span class="subxComment"># add to esp</span>
<span id="L160" class="LineNr">160 </span> <span class="subxS1Comment"># . epilogue</span>
<span id="L161" class="LineNr">161 </span> 89/copy 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 5/r32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy ebp to esp</span>
<span id="L162" class="LineNr">162 </span> 5d/pop-to-ebp
<span id="L163" class="LineNr">163 </span> c3/return
<span id="L164" class="LineNr">164 </span>
<span id="L165" class="LineNr">165 </span><span class="subxTest">test-next-word-returns-whole-comment</span>:
<span id="L166" class="LineNr">166 </span> <span class="subxS1Comment"># . prologue</span>
<span id="L167" class="LineNr">167 </span> 55/push-ebp
<span id="L168" class="LineNr">168 </span> 89/copy 3/mod/direct 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ebp</span>
<span id="L169" class="LineNr">169 </span> <span class="subxComment"># setup</span>
<span id="L170" class="LineNr">170 </span> <span class="subxS1Comment"># . clear-stream(_test-stream)</span>
<span id="L171" class="LineNr">171 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L172" class="LineNr">172 </span> 68/push <a href='108write.subx.html#L125'>_test-stream</a>/imm32
<span id="L173" class="LineNr">173 </span> <span class="subxS2Comment"># . . call</span>
<span id="L174" class="LineNr">174 </span> e8/call <a href='106stream.subx.html#L20'>clear-stream</a>/disp32
<span id="L175" class="LineNr">175 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L176" class="LineNr">176 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span>
<span id="L177" class="LineNr">177 </span> <span class="subxComment"># var slice/ecx: slice</span>
<span id="L178" class="LineNr">178 </span> 68/push 0/imm32/end
<span id="L179" class="LineNr">179 </span> 68/push 0/imm32/start
<span id="L180" class="LineNr">180 </span> 89/copy 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ecx</span>
<span id="L181" class="LineNr">181 </span> <span class="subxComment"># write(_test-stream, &quot; # a&quot;)</span>
<span id="L182" class="LineNr">182 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L183" class="LineNr">183 </span> 68/push <span class="Constant">&quot; # a&quot;</span>/imm32
<span id="L184" class="LineNr">184 </span> 68/push <a href='108write.subx.html#L125'>_test-stream</a>/imm32
<span id="L185" class="LineNr">185 </span> <span class="subxS2Comment"># . . call</span>
<span id="L186" class="LineNr">186 </span> e8/call <a href='108write.subx.html#L11'>write</a>/disp32
<span id="L187" class="LineNr">187 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L188" class="LineNr">188 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
<span id="L189" class="LineNr">189 </span> <span class="subxComment"># next-word(_test-stream, slice)</span>
<span id="L190" class="LineNr">190 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L191" class="LineNr">191 </span> 51/push-ecx
<span id="L192" class="LineNr">192 </span> 68/push <a href='108write.subx.html#L125'>_test-stream</a>/imm32
<span id="L193" class="LineNr">193 </span> <span class="subxS2Comment"># . . call</span>
<span id="L194" class="LineNr">194 </span> e8/call <a href='127next-word.subx.html#L11'>next-word</a>/disp32
<span id="L195" class="LineNr">195 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L196" class="LineNr">196 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
<span id="L197" class="LineNr">197 </span> <span class="subxComment"># check-ints-equal(slice-&gt;start - _test-stream-&gt;data, 2, msg)</span>
<span id="L198" class="LineNr">198 </span> <span class="subxS1Comment"># . check-ints-equal(slice-&gt;start - _test-stream, 14, msg)</span>
<span id="L199" class="LineNr">199 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L200" class="LineNr">200 </span> 68/push <span class="Constant">&quot;F - <a href='127next-word.subx.html#L165'>test-next-word-returns-whole-comment</a>: start&quot;</span>/imm32
<span id="L201" class="LineNr">201 </span> 68/push 0xe/imm32
<span id="L202" class="LineNr">202 </span> <span class="subxS2Comment"># . . push slice-&gt;start - _test-stream</span>
<span id="L203" class="LineNr">203 </span> 8b/copy 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *ecx to eax</span>
<span id="L204" class="LineNr">204 </span> 81 5/subop/subtract 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <a href='108write.subx.html#L125'>_test-stream</a>/imm32 <span class="subxComment"># subtract from eax</span>
<span id="L205" class="LineNr">205 </span> 50/push-eax
<span id="L206" class="LineNr">206 </span> <span class="subxS2Comment"># . . call</span>
<span id="L207" class="LineNr">207 </span> e8/call <a href='502test.mu.html#L2'>check-ints-equal</a>/disp32
<span id="L208" class="LineNr">208 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L209" class="LineNr">209 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/imm32 <span class="subxComment"># add to esp</span>
<span id="L210" class="LineNr">210 </span> <span class="subxComment"># check-ints-equal(slice-&gt;end - _test-stream-&gt;data, 5, msg)</span>
<span id="L211" class="LineNr">211 </span> <span class="subxS1Comment"># . check-ints-equal(slice-&gt;end - _test-stream, 17, msg)</span>
<span id="L212" class="LineNr">212 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L213" class="LineNr">213 </span> 68/push <span class="Constant">&quot;F - <a href='127next-word.subx.html#L165'>test-next-word-returns-whole-comment</a>: end&quot;</span>/imm32
<span id="L214" class="LineNr">214 </span> 68/push 0x11/imm32
<span id="L215" class="LineNr">215 </span> <span class="subxS2Comment"># . . push slice-&gt;end - _test-stream</span>
<span id="L216" class="LineNr">216 </span> 8b/copy 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ecx+4) to eax</span>
<span id="L217" class="LineNr">217 </span> 81 5/subop/subtract 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <a href='108write.subx.html#L125'>_test-stream</a>/imm32 <span class="subxComment"># subtract from eax</span>
<span id="L218" class="LineNr">218 </span> 50/push-eax
<span id="L219" class="LineNr">219 </span> <span class="subxS2Comment"># . . call</span>
<span id="L220" class="LineNr">220 </span> e8/call <a href='502test.mu.html#L2'>check-ints-equal</a>/disp32
<span id="L221" class="LineNr">221 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L222" class="LineNr">222 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/imm32 <span class="subxComment"># add to esp</span>
<span id="L223" class="LineNr">223 </span> <span class="subxS1Comment"># . epilogue</span>
<span id="L224" class="LineNr">224 </span> 89/copy 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 5/r32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy ebp to esp</span>
<span id="L225" class="LineNr">225 </span> 5d/pop-to-ebp
<span id="L226" class="LineNr">226 </span> c3/return
<span id="L227" class="LineNr">227 </span>
<span id="L228" class="LineNr">228 </span><span class="subxTest">test-next-word-returns-empty-string-on-eof</span>:
<span id="L229" class="LineNr">229 </span> <span class="subxS1Comment"># . prologue</span>
<span id="L230" class="LineNr">230 </span> 55/push-ebp
<span id="L231" class="LineNr">231 </span> 89/copy 3/mod/direct 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ebp</span>
<span id="L232" class="LineNr">232 </span> <span class="subxComment"># setup</span>
<span id="L233" class="LineNr">233 </span> <span class="subxS1Comment"># . clear-stream(_test-stream)</span>
<span id="L234" class="LineNr">234 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L235" class="LineNr">235 </span> 68/push <a href='108write.subx.html#L125'>_test-stream</a>/imm32
<span id="L236" class="LineNr">236 </span> <span class="subxS2Comment"># . . call</span>
<span id="L237" class="LineNr">237 </span> e8/call <a href='106stream.subx.html#L20'>clear-stream</a>/disp32
<span id="L238" class="LineNr">238 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L239" class="LineNr">239 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span>
<span id="L240" class="LineNr">240 </span> <span class="subxComment"># var slice/ecx: slice</span>
<span id="L241" class="LineNr">241 </span> 68/push 0/imm32/end
<span id="L242" class="LineNr">242 </span> 68/push 0/imm32/start
<span id="L243" class="LineNr">243 </span> 89/copy 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ecx</span>
<span id="L244" class="LineNr">244 </span> <span class="subxComment"># write nothing to _test-stream</span>
<span id="L245" class="LineNr">245 </span> <span class="subxComment"># next-word(_test-stream, slice)</span>
<span id="L246" class="LineNr">246 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L247" class="LineNr">247 </span> 51/push-ecx
<span id="L248" class="LineNr">248 </span> 68/push <a href='108write.subx.html#L125'>_test-stream</a>/imm32
<span id="L249" class="LineNr">249 </span> <span class="subxS2Comment"># . . call</span>
<span id="L250" class="LineNr">250 </span> e8/call <a href='127next-word.subx.html#L11'>next-word</a>/disp32
<span id="L251" class="LineNr">251 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L252" class="LineNr">252 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
<span id="L253" class="LineNr">253 </span> <span class="subxComment"># check-ints-equal(slice-&gt;end - slice-&gt;start, 0, msg)</span>
<span id="L254" class="LineNr">254 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L255" class="LineNr">255 </span> 68/push <span class="Constant">&quot;F - test-next-word-returns-empty-string-on-eof&quot;</span>/imm32
<span id="L256" class="LineNr">256 </span> 68/push 0/imm32
<span id="L257" class="LineNr">257 </span> <span class="subxS2Comment"># . . push slice-&gt;end - slice-&gt;start</span>
<span id="L258" class="LineNr">258 </span> 8b/copy 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ecx+4) to eax</span>
<span id="L259" class="LineNr">259 </span> 2b/subtract 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># subtract *ecx from eax</span>
<span id="L260" class="LineNr">260 </span> 50/push-eax
<span id="L261" class="LineNr">261 </span> <span class="subxS2Comment"># . . call</span>
<span id="L262" class="LineNr">262 </span> e8/call <a href='502test.mu.html#L2'>check-ints-equal</a>/disp32
<span id="L263" class="LineNr">263 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L264" class="LineNr">264 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/imm32 <span class="subxComment"># add to esp</span>
<span id="L265" class="LineNr">265 </span> <span class="subxS1Comment"># . epilogue</span>
<span id="L266" class="LineNr">266 </span> 89/copy 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 5/r32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy ebp to esp</span>
<span id="L267" class="LineNr">267 </span> 5d/pop-to-ebp
<span id="L268" class="LineNr">268 </span> c3/return
<span id="L269" class="LineNr">269 </span>
<span id="L270" class="LineNr">270 </span><span class="subxTest">test-next-word-returns-empty-string-on-newline</span>:
<span id="L271" class="LineNr">271 </span> <span class="subxS1Comment"># . prologue</span>
<span id="L272" class="LineNr">272 </span> 55/push-ebp
<span id="L273" class="LineNr">273 </span> 89/copy 3/mod/direct 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ebp</span>
<span id="L274" class="LineNr">274 </span> <span class="subxComment"># setup</span>
<span id="L275" class="LineNr">275 </span> <span class="subxS1Comment"># . clear-stream(_test-stream)</span>
<span id="L276" class="LineNr">276 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L277" class="LineNr">277 </span> 68/push <a href='108write.subx.html#L125'>_test-stream</a>/imm32
<span id="L278" class="LineNr">278 </span> <span class="subxS2Comment"># . . call</span>
<span id="L279" class="LineNr">279 </span> e8/call <a href='106stream.subx.html#L20'>clear-stream</a>/disp32
<span id="L280" class="LineNr">280 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L281" class="LineNr">281 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span>
<span id="L282" class="LineNr">282 </span> <span class="subxComment"># var slice/ecx: slice</span>
<span id="L283" class="LineNr">283 </span> 68/push 0/imm32/end
<span id="L284" class="LineNr">284 </span> 68/push 0/imm32/start
<span id="L285" class="LineNr">285 </span> 89/copy 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ecx</span>
<span id="L286" class="LineNr">286 </span> <span class="subxComment"># write some whitespace and a newline</span>
<span id="L287" class="LineNr">287 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L288" class="LineNr">288 </span> 68/push <span class="Constant">&quot; \n&quot;</span>/imm32
<span id="L289" class="LineNr">289 </span> 68/push <a href='108write.subx.html#L125'>_test-stream</a>/imm32
<span id="L290" class="LineNr">290 </span> <span class="subxS2Comment"># . . call</span>
<span id="L291" class="LineNr">291 </span> e8/call <a href='108write.subx.html#L11'>write</a>/disp32
<span id="L292" class="LineNr">292 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L293" class="LineNr">293 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
<span id="L294" class="LineNr">294 </span> <span class="subxComment"># next-word(_test-stream, slice)</span>
<span id="L295" class="LineNr">295 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L296" class="LineNr">296 </span> 51/push-ecx
<span id="L297" class="LineNr">297 </span> 68/push <a href='108write.subx.html#L125'>_test-stream</a>/imm32
<span id="L298" class="LineNr">298 </span> <span class="subxS2Comment"># . . call</span>
<span id="L299" class="LineNr">299 </span> e8/call <a href='127next-word.subx.html#L11'>next-word</a>/disp32
<span id="L300" class="LineNr">300 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L301" class="LineNr">301 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
<span id="L302" class="LineNr">302 </span> <span class="subxComment"># check-ints-equal(slice-&gt;end - slice-&gt;start, 0, msg)</span>
<span id="L303" class="LineNr">303 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L304" class="LineNr">304 </span> 68/push <span class="Constant">&quot;F - test-next-word-returns-empty-string-on-newline&quot;</span>/imm32
<span id="L305" class="LineNr">305 </span> 68/push 0/imm32
<span id="L306" class="LineNr">306 </span> <span class="subxS2Comment"># . . push slice-&gt;end - slice-&gt;start</span>
<span id="L307" class="LineNr">307 </span> 8b/copy 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ecx+4) to eax</span>
<span id="L308" class="LineNr">308 </span> 2b/subtract 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># subtract *ecx from eax</span>
<span id="L309" class="LineNr">309 </span> 50/push-eax
<span id="L310" class="LineNr">310 </span> <span class="subxS2Comment"># . . call</span>
<span id="L311" class="LineNr">311 </span> e8/call <a href='502test.mu.html#L2'>check-ints-equal</a>/disp32
<span id="L312" class="LineNr">312 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L313" class="LineNr">313 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/imm32 <span class="subxComment"># add to esp</span>
<span id="L314" class="LineNr">314 </span> <span class="subxS1Comment"># . epilogue</span>
<span id="L315" class="LineNr">315 </span> 89/copy 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 5/r32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy ebp to esp</span>
<span id="L316" class="LineNr">316 </span> 5d/pop-to-ebp
<span id="L317" class="LineNr">317 </span> c3/return
<span id="L318" class="LineNr">318 </span>
<span id="L319" class="LineNr">319 </span><span class="subxComment"># (re)compute the bounds of the next word in the line (separated by whitespace)</span>
<span id="L320" class="LineNr">320 </span><span class="subxComment"># return empty string on reaching end of file</span>
<span id="L321" class="LineNr">321 </span><span class="subxFunction">next-raw-word</span>: <span class="subxComment"># line: (addr stream byte), out: (addr slice)</span>
<span id="L322" class="LineNr">322 </span> <span class="subxS1Comment"># . prologue</span>
<span id="L323" class="LineNr">323 </span> 55/push-ebp
<span id="L324" class="LineNr">324 </span> 89/copy 3/mod/direct 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ebp</span>
<span id="L325" class="LineNr">325 </span> <span class="subxS1Comment"># . save registers</span>
<span id="L326" class="LineNr">326 </span> 50/push-eax
<span id="L327" class="LineNr">327 </span> 51/push-ecx
<span id="L328" class="LineNr">328 </span> 56/push-esi
<span id="L329" class="LineNr">329 </span> 57/push-edi
<span id="L330" class="LineNr">330 </span> <span class="subxComment"># esi = line</span>
<span id="L331" class="LineNr">331 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 6/r32/esi 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+8) to esi</span>
<span id="L332" class="LineNr">332 </span> <span class="subxComment"># edi = out</span>
<span id="L333" class="LineNr">333 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 7/r32/edi 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+12) to edi</span>
<span id="L334" class="LineNr">334 </span> <span class="subxComment"># skip-chars-matching-whitespace(line)</span>
<span id="L335" class="LineNr">335 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L336" class="LineNr">336 </span> ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># push *(ebp+8)</span>
<span id="L337" class="LineNr">337 </span> <span class="subxS2Comment"># . . call</span>
<span id="L338" class="LineNr">338 </span> e8/call <a href='124next-token.subx.html#L311'>skip-chars-matching-whitespace</a>/disp32
<span id="L339" class="LineNr">339 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L340" class="LineNr">340 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span>
<span id="L341" class="LineNr">341 </span><span class="Constant">$next-raw-word:check0</span>:
<span id="L342" class="LineNr">342 </span> <span class="subxComment"># if (line-&gt;read &gt;= line-&gt;write) clear out and return</span>
<span id="L343" class="LineNr">343 </span> <span class="subxS1Comment"># . eax = line-&gt;read</span>
<span id="L344" class="LineNr">344 </span> 8b/copy 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(esi+4) to eax</span>
<span id="L345" class="LineNr">345 </span> <span class="subxS1Comment"># . if (eax &lt; line-&gt;write) goto next check</span>
<span id="L346" class="LineNr">346 </span> 3b/compare 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax with *esi</span>
<span id="L347" class="LineNr">347 </span> 7c/jump-if-&lt; $next-raw-word:word-exists/disp8
<span id="L348" class="LineNr">348 </span> <span class="subxS1Comment"># . return out</span>
<span id="L349" class="LineNr">349 </span> c7 0/subop/copy 0/mod/direct 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># copy to *edi</span>
<span id="L350" class="LineNr">350 </span> c7 0/subop/copy 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/disp8 0/imm32 <span class="subxComment"># copy to *(edi+4)</span>
<span id="L351" class="LineNr">351 </span> eb/jump $next-raw-word:end/disp8
<span id="L352" class="LineNr">352 </span><span class="Constant">$next-raw-word:word-exists</span>:
<span id="L353" class="LineNr">353 </span> <span class="subxComment"># out-&gt;start = &amp;line-&gt;data[line-&gt;read]</span>
<span id="L354" class="LineNr">354 </span> 8b/copy 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(esi+4) to ecx</span>
<span id="L355" class="LineNr">355 </span> 8d/copy-address 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx <span class="Normal"> . </span> 0/r32/eax 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy esi+ecx+12 to eax</span>
<span id="L356" class="LineNr">356 </span> 89/copy 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy eax to *edi</span>
<span id="L357" class="LineNr">357 </span> <span class="subxComment"># skip-chars-not-matching-whitespace(line) # including trailing newline</span>
<span id="L358" class="LineNr">358 </span> <span class="subxS2Comment"># . . push args</span>
<span id="L359" class="LineNr">359 </span> ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># push *(ebp+8)</span>
<span id="L360" class="LineNr">360 </span> <span class="subxS2Comment"># . . call</span>
<span id="L361" class="LineNr">361 </span> e8/call <a href='124next-token.subx.html#L563'>skip-chars-not-matching-whitespace</a>/disp32
<span id="L362" class="LineNr">362 </span> <span class="subxS2Comment"># . . discard args</span>
<span id="L363" class="LineNr">363 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span>
<span id="L364" class="LineNr">364 </span> <span class="subxComment"># out-&gt;end = &amp;line-&gt;data[line-&gt;read]</span>
<span id="L365" class="LineNr">365 </span> 8b/copy 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(esi+4) to ecx</span>
<span id="L366" class="LineNr">366 </span> 8d/copy-address 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx <span class="Normal"> . </span> 0/r32/eax 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy esi+ecx+12 to eax</span>
<span id="L367" class="LineNr">367 </span> 89/copy 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy eax to *(edi+4)</span>
<span id="L368" class="LineNr">368 </span><span class="Constant">$next-raw-word:end</span>:
<span id="L369" class="LineNr">369 </span> <span class="subxS1Comment"># . restore registers</span>
<span id="L370" class="LineNr">370 </span> 5f/pop-to-edi
<span id="L371" class="LineNr">371 </span> 5e/pop-to-esi
<span id="L372" class="LineNr">372 </span> 59/pop-to-ecx
<span id="L373" class="LineNr">373 </span> 58/pop-to-eax
<span id="L374" class="LineNr">374 </span> <span class="subxS1Comment"># . epilogue</span>
<span id="L375" class="LineNr">375 </span> 89/copy 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 5/r32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy ebp to esp</span>
<span id="L376" class="LineNr">376 </span> 5d/pop-to-ebp
<span id="L377" class="LineNr">377 </span> c3/return
</pre>
</body>
</html>

View File

@ -1,32 +1,32 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 301array-equal.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxComment { color: #005faf; }
.LineNr { }
.subxFunction { color: #af5f00; text-decoration: underline; }
.subxS1Comment { color: #0000af; }
.SpecialChar { color: #d70000; }
.Constant { color: #008787; }
.subxComment { color: #005faf; }
.subxS1Comment { color: #0000af; }
.LineNr { }
.subxH1Comment { color: #005faf; text-decoration: underline; }
.subxMinorFunction { color: #875f5f; }
.subxTest { color: #5f8700; }
.subxH1Comment { color: #005faf; text-decoration: underline; }
.subxFunction { color: #af5f00; text-decoration: underline; }
.Constant { color: #008787; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -293,7 +293,7 @@ if ('onhashchange' in window) {
<span id="L233" class="LineNr">233 </span> 81 0/subop/add %ebx 4/imm32
<span id="L234" class="LineNr">234 </span> eb/jump $_parse-array-of-ints:loop1/disp8
<span id="L235" class="LineNr">235 </span><span class="Constant">$_parse-array-of-ints:break1</span>:
<span id="L236" class="LineNr">236 </span> (<a href='120allocate.subx.html#L556'>allocate-array</a> *(ebp+8) %ebx *(ebp+0x10))
<span id="L236" class="LineNr">236 </span> (<a href='120allocate.subx.html#L568'>allocate-array</a> *(ebp+8) %ebx *(ebp+0x10))
<span id="L237" class="LineNr">237 </span><span class="Constant">$_parse-array-of-ints:pass2</span>:
<span id="L238" class="LineNr">238 </span> <span class="subxComment"># var slice/edi: slice = {s-&gt;data, 0}</span>
<span id="L239" class="LineNr">239 </span> 68/push 0/imm32/end
@ -302,7 +302,7 @@ if ('onhashchange' in window) {
<span id="L242" class="LineNr">242 </span> 89/&lt;- %edi 4/r32/esp
<span id="L243" class="LineNr">243 </span> <span class="subxComment"># curr = lookup(out)-&gt;data</span>
<span id="L244" class="LineNr">244 </span> 8b/-&gt; *(ebp+0x10) 0/r32/eax
<span id="L245" class="LineNr">245 </span> (<a href='120allocate.subx.html#L223'>lookup</a> *eax *(eax+4)) <span class="subxComment"># =&gt; eax</span>
<span id="L245" class="LineNr">245 </span> (<a href='120allocate.subx.html#L235'>lookup</a> *eax *(eax+4)) <span class="subxComment"># =&gt; eax</span>
<span id="L246" class="LineNr">246 </span> 8d/copy-address *(eax+4) 1/r32/ecx
<span id="L247" class="LineNr">247 </span><span class="Constant">$_parse-array-of-ints:loop2</span>:
<span id="L248" class="LineNr">248 </span> <span class="subxComment"># if (slice-&gt;start &gt;= end) break</span>
@ -357,7 +357,7 @@ if ('onhashchange' in window) {
<span id="L297" class="LineNr">297 </span> 89/&lt;- %ecx 4/r32/esp
<span id="L298" class="LineNr">298 </span> <span class="subxComment">#</span>
<span id="L299" class="LineNr">299 </span> (<a href='301array-equal.subx.html#L174'>_parse-array-of-ints</a> <span class="SpecialChar"><a href='120allocate.subx.html#L27'>Heap</a></span> <span class="Constant">&quot;1 2 3&quot;</span> %esi)
<span id="L300" class="LineNr">300 </span> (<a href='120allocate.subx.html#L223'>lookup</a> *esi *(esi+4)) <span class="subxComment"># =&gt; eax</span>
<span id="L300" class="LineNr">300 </span> (<a href='120allocate.subx.html#L235'>lookup</a> *esi *(esi+4)) <span class="subxComment"># =&gt; eax</span>
<span id="L301" class="LineNr">301 </span> (<a href='301array-equal.subx.html#L5'>array-equal?</a> %ecx %eax) <span class="subxComment"># =&gt; eax</span>
<span id="L302" class="LineNr">302 </span> (<a href='502test.mu.html#L2'>check-ints-equal</a> %eax 1 <span class="Constant">&quot;F - test-parse-array-of-ints&quot;</span>)
<span id="L303" class="LineNr">303 </span> <span class="subxS1Comment"># . epilogue</span>
@ -376,7 +376,7 @@ if ('onhashchange' in window) {
<span id="L316" class="LineNr">316 </span> 89/&lt;- %esi 4/r32/esp
<span id="L317" class="LineNr">317 </span> <span class="subxComment">#</span>
<span id="L318" class="LineNr">318 </span> (<a href='301array-equal.subx.html#L174'>_parse-array-of-ints</a> <span class="SpecialChar"><a href='120allocate.subx.html#L27'>Heap</a></span> <span class="Constant">&quot;&quot;</span> %esi)
<span id="L319" class="LineNr">319 </span> (<a href='120allocate.subx.html#L223'>lookup</a> *esi *(esi+4)) <span class="subxComment"># =&gt; eax</span>
<span id="L319" class="LineNr">319 </span> (<a href='120allocate.subx.html#L235'>lookup</a> *esi *(esi+4)) <span class="subxComment"># =&gt; eax</span>
<span id="L320" class="LineNr">320 </span> (<a href='502test.mu.html#L2'>check-ints-equal</a> *eax 0 <span class="Constant">&quot;F - test-parse-array-of-ints-empty&quot;</span>)
<span id="L321" class="LineNr">321 </span> <span class="subxS1Comment"># . epilogue</span>
<span id="L322" class="LineNr">322 </span> 89/&lt;- %esp 5/r32/ebp
@ -394,7 +394,7 @@ if ('onhashchange' in window) {
<span id="L334" class="LineNr">334 </span> 89/&lt;- %esi 4/r32/esp
<span id="L335" class="LineNr">335 </span> <span class="subxComment">#</span>
<span id="L336" class="LineNr">336 </span> (<a href='301array-equal.subx.html#L174'>_parse-array-of-ints</a> <span class="SpecialChar"><a href='120allocate.subx.html#L27'>Heap</a></span> <span class="SpecialChar"><a href='301array-equal.subx.html#L428'>Space</a></span> %esi)
<span id="L337" class="LineNr">337 </span> (<a href='120allocate.subx.html#L223'>lookup</a> *esi *(esi+4)) <span class="subxComment"># =&gt; eax</span>
<span id="L337" class="LineNr">337 </span> (<a href='120allocate.subx.html#L235'>lookup</a> *esi *(esi+4)) <span class="subxComment"># =&gt; eax</span>
<span id="L338" class="LineNr">338 </span> (<a href='502test.mu.html#L2'>check-ints-equal</a> *eax 0 <span class="Constant">&quot;F - test-parse-array-of-ints-just-whitespace&quot;</span>)
<span id="L339" class="LineNr">339 </span> <span class="subxS1Comment"># . epilogue</span>
<span id="L340" class="LineNr">340 </span> 89/&lt;- %esp 5/r32/ebp
@ -417,7 +417,7 @@ if ('onhashchange' in window) {
<span id="L357" class="LineNr">357 </span> 89/&lt;- %ecx 4/r32/esp
<span id="L358" class="LineNr">358 </span> <span class="subxComment">#</span>
<span id="L359" class="LineNr">359 </span> (<a href='301array-equal.subx.html#L174'>_parse-array-of-ints</a> <span class="SpecialChar"><a href='120allocate.subx.html#L27'>Heap</a></span> <span class="Constant">&quot; 1 2 3 &quot;</span> %esi)
<span id="L360" class="LineNr">360 </span> (<a href='120allocate.subx.html#L223'>lookup</a> *esi *(esi+4)) <span class="subxComment"># =&gt; eax</span>
<span id="L360" class="LineNr">360 </span> (<a href='120allocate.subx.html#L235'>lookup</a> *esi *(esi+4)) <span class="subxComment"># =&gt; eax</span>
<span id="L361" class="LineNr">361 </span> (<a href='301array-equal.subx.html#L5'>array-equal?</a> %ecx %eax) <span class="subxComment"># =&gt; eax</span>
<span id="L362" class="LineNr">362 </span> (<a href='502test.mu.html#L2'>check-ints-equal</a> %eax 1 <span class="Constant">&quot;F - test-parse-array-of-ints-extra-whitespace&quot;</span>)
<span id="L363" class="LineNr">363 </span> <span class="subxS1Comment"># . epilogue</span>
@ -452,7 +452,7 @@ if ('onhashchange' in window) {
<span id="L392" class="LineNr">392 </span> 89/&lt;- %esi 4/r32/esp
<span id="L393" class="LineNr">393 </span> <span class="subxComment"># var b/eax: (addr array int) = parse-array-of-ints(Heap, expected)</span>
<span id="L394" class="LineNr">394 </span> (<a href='301array-equal.subx.html#L368'>parse-array-of-ints</a> *(ebp+0xc) %esi)
<span id="L395" class="LineNr">395 </span> (<a href='120allocate.subx.html#L223'>lookup</a> *esi *(esi+4)) <span class="subxComment"># =&gt; eax</span>
<span id="L395" class="LineNr">395 </span> (<a href='120allocate.subx.html#L235'>lookup</a> *esi *(esi+4)) <span class="subxComment"># =&gt; eax</span>
<span id="L396" class="LineNr">396 </span> <span class="subxComment">#</span>
<span id="L397" class="LineNr">397 </span> (<a href='301array-equal.subx.html#L5'>array-equal?</a> *(ebp+8) %eax)
<span id="L398" class="LineNr">398 </span> (<a href='502test.mu.html#L2'>check-ints-equal</a> %eax 1 *(ebp+0x10))

View File

@ -1,29 +1,29 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 302stack_allocate.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxComment { color: #005faf; }
.SpecialChar { color: #d70000; }
.LineNr { }
.subxFunction { color: #af5f00; text-decoration: underline; }
.SpecialChar { color: #d70000; }
.Constant { color: #008787; }
.CommentedCode { color: #8a8a8a; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -104,7 +104,7 @@ if ('onhashchange' in window) {
<span id="L47" class="LineNr">47 </span> 89/&lt;- *<span class="SpecialChar"><a href='302stack_allocate.subx.html#L58'>Push-n-zero-bytes-esp</a></span> 4/r32/esp
<span id="L48" class="LineNr">48 </span> 81 0/subop/add *<span class="SpecialChar"><a href='302stack_allocate.subx.html#L58'>Push-n-zero-bytes-esp</a></span> 4/imm32
<span id="L49" class="LineNr">49 </span> 81 0/subop/add *(ebp+4) 4/imm32
<span id="L50" class="LineNr">50 </span> (<a href='120allocate.subx.html#L857'>zero-out</a> *<span class="SpecialChar"><a href='302stack_allocate.subx.html#L58'>Push-n-zero-bytes-esp</a></span> *(ebp+4)) <span class="subxComment"># n+4</span>
<span id="L50" class="LineNr">50 </span> (<a href='120allocate.subx.html#L869'>zero-out</a> *<span class="SpecialChar"><a href='302stack_allocate.subx.html#L58'>Push-n-zero-bytes-esp</a></span> *(ebp+4)) <span class="subxComment"># n+4</span>
<span id="L51" class="LineNr">51 </span><span class="Constant">$push-n-zero-bytes:epilogue</span>:
<span id="L52" class="LineNr">52 </span> 8b/-&gt; *<span class="SpecialChar"><a href='302stack_allocate.subx.html#L56'>Push-n-zero-bytes-ebp</a></span> 5/r32/ebp <span class="subxComment"># restore spill</span>
<span id="L53" class="LineNr">53 </span> c3/return

View File

@ -1,28 +1,28 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 308allocate-array.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxComment { color: #005faf; }
.subxS1Comment { color: #0000af; }
.LineNr { }
.subxFunction { color: #af5f00; text-decoration: underline; }
.subxS1Comment { color: #0000af; }
.Constant { color: #008787; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -70,7 +70,7 @@ if ('onhashchange' in window) {
<span id="L14" class="LineNr">14 </span> 8b/-&gt; *(ebp+0xc) 0/r32/eax
<span id="L15" class="LineNr">15 </span> f7 4/subop/multiply-into-edx-eax *(ebp+0x10)
<span id="L16" class="LineNr">16 </span> <span class="subxComment"># TODO: check edx for overflow</span>
<span id="L17" class="LineNr">17 </span> (<a href='120allocate.subx.html#L556'>allocate-array</a> *(ebp+8) %eax *(ebp+0x14))
<span id="L17" class="LineNr">17 </span> (<a href='120allocate.subx.html#L568'>allocate-array</a> *(ebp+8) %eax *(ebp+0x14))
<span id="L18" class="LineNr">18 </span><span class="Constant">$allocate-array2:end</span>:
<span id="L19" class="LineNr">19 </span> <span class="subxS1Comment"># . restore registers</span>
<span id="L20" class="LineNr">20 </span> 5a/pop-to-edx

View File

@ -1,28 +1,28 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 309stream.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxComment { color: #005faf; }
.subxS1Comment { color: #0000af; }
.LineNr { }
.subxFunction { color: #af5f00; text-decoration: underline; }
.subxS1Comment { color: #0000af; }
.Constant { color: #008787; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

View File

@ -1,30 +1,30 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 310copy-bytes.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxComment { color: #005faf; }
.LineNr { }
.subxFunction { color: #af5f00; text-decoration: underline; }
.subxS1Comment { color: #0000af; }
.SpecialChar { color: #d70000; }
.Constant { color: #008787; }
.subxComment { color: #005faf; }
.subxS1Comment { color: #0000af; }
.LineNr { }
.subxTest { color: #5f8700; }
.subxFunction { color: #af5f00; text-decoration: underline; }
.Constant { color: #008787; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -130,13 +130,13 @@ if ('onhashchange' in window) {
<span id="L72" class="LineNr"> 72 </span> 8b/-&gt; *esi 1/r32/ecx
<span id="L73" class="LineNr"> 73 </span> 2b/subtract *(esi+4) 1/r32/ecx
<span id="L74" class="LineNr"> 74 </span> <span class="subxComment"># allocate</span>
<span id="L75" class="LineNr"> 75 </span> (<a href='120allocate.subx.html#L556'>allocate-array</a> <span class="SpecialChar"><a href='120allocate.subx.html#L27'>Heap</a></span> %ecx *(ebp+0xc))
<span id="L75" class="LineNr"> 75 </span> (<a href='120allocate.subx.html#L568'>allocate-array</a> <span class="SpecialChar"><a href='120allocate.subx.html#L27'>Heap</a></span> %ecx *(ebp+0xc))
<span id="L76" class="LineNr"> 76 </span> <span class="subxComment"># var in/edx: (addr byte) = s-&gt;data + s-&gt;read</span>
<span id="L77" class="LineNr"> 77 </span> 8b/-&gt; *(esi+4) 2/r32/edx
<span id="L78" class="LineNr"> 78 </span> 8d/copy-address *(esi+edx+0xc) 2/r32/edx
<span id="L79" class="LineNr"> 79 </span> <span class="subxComment"># var dest/eax: (addr byte) = data for out</span>
<span id="L80" class="LineNr"> 80 </span> 8b/-&gt; *(ebp+0xc) 0/r32/eax
<span id="L81" class="LineNr"> 81 </span> (<a href='120allocate.subx.html#L223'>lookup</a> *eax *(eax+4)) <span class="subxComment"># =&gt; eax</span>
<span id="L81" class="LineNr"> 81 </span> (<a href='120allocate.subx.html#L235'>lookup</a> *eax *(eax+4)) <span class="subxComment"># =&gt; eax</span>
<span id="L82" class="LineNr"> 82 </span> 8d/copy-address *(eax+4) 0/r32/eax
<span id="L83" class="LineNr"> 83 </span> <span class="subxComment">#</span>
<span id="L84" class="LineNr"> 84 </span> (<a href='310copy-bytes.subx.html#L6'>copy-bytes</a> %edx %eax %ecx)
@ -156,10 +156,10 @@ if ('onhashchange' in window) {
<span id="L98" class="LineNr"> 98 </span> 55/push-ebp
<span id="L99" class="LineNr"> 99 </span> 89/&lt;- %ebp 4/r32/esp
<span id="L100" class="LineNr">100 </span> <span class="subxComment"># setup</span>
<span id="L101" class="LineNr">101 </span> (<a href='106stream.subx.html#L20'>clear-stream</a> <a href='112read-byte.subx.html#L47'>_test-input-stream</a>)
<span id="L102" class="LineNr">102 </span> (<a href='108write.subx.html#L11'>write</a> <a href='112read-byte.subx.html#L47'>_test-input-stream</a> <span class="Constant">&quot;abc&quot;</span>)
<span id="L101" class="LineNr">101 </span> (<a href='106stream.subx.html#L20'>clear-stream</a> <a href='112read-byte.subx.html#L79'>_test-input-stream</a>)
<span id="L102" class="LineNr">102 </span> (<a href='108write.subx.html#L11'>write</a> <a href='112read-byte.subx.html#L79'>_test-input-stream</a> <span class="Constant">&quot;abc&quot;</span>)
<span id="L103" class="LineNr">103 </span> <span class="subxComment"># skip something</span>
<span id="L104" class="LineNr">104 </span> (<a href='112read-byte.subx.html#L13'>read-byte</a> <a href='112read-byte.subx.html#L47'>_test-input-stream</a>) <span class="subxComment"># =&gt; eax</span>
<span id="L104" class="LineNr">104 </span> (<a href='112read-byte.subx.html#L13'>read-byte</a> <a href='112read-byte.subx.html#L79'>_test-input-stream</a>) <span class="subxComment"># =&gt; eax</span>
<span id="L105" class="LineNr">105 </span> 8b/-&gt; *$_test-input-stream-&gt;read 0/r32/eax
<span id="L106" class="LineNr">106 </span> (<a href='502test.mu.html#L2'>check-ints-equal</a> %eax 1 <span class="Constant">&quot;F - <a href='310copy-bytes.subx.html#L96'>test-stream-to-array</a>/pre&quot;</span>)
<span id="L107" class="LineNr">107 </span> <span class="subxComment"># var out/ecx: (handle array byte)</span>
@ -167,8 +167,8 @@ if ('onhashchange' in window) {
<span id="L109" class="LineNr">109 </span> 68/push 0/imm32
<span id="L110" class="LineNr">110 </span> 89/&lt;- %ecx 4/r32/esp
<span id="L111" class="LineNr">111 </span> <span class="subxComment">#</span>
<span id="L112" class="LineNr">112 </span> (<a href='310copy-bytes.subx.html#L60'>stream-to-array</a> <a href='112read-byte.subx.html#L47'>_test-input-stream</a> %ecx)
<span id="L113" class="LineNr">113 </span> (<a href='120allocate.subx.html#L223'>lookup</a> *ecx *(ecx+4)) <span class="subxComment"># =&gt; eax</span>
<span id="L112" class="LineNr">112 </span> (<a href='310copy-bytes.subx.html#L60'>stream-to-array</a> <a href='112read-byte.subx.html#L79'>_test-input-stream</a> %ecx)
<span id="L113" class="LineNr">113 </span> (<a href='120allocate.subx.html#L235'>lookup</a> *ecx *(ecx+4)) <span class="subxComment"># =&gt; eax</span>
<span id="L114" class="LineNr">114 </span> (<a href='105string-equal.subx.html#L213'>check-strings-equal</a> %eax <span class="Constant">&quot;bc&quot;</span> <span class="Constant">&quot;F - test-stream-to-array&quot;</span>)
<span id="L115" class="LineNr">115 </span> 8b/-&gt; *$_test-input-stream-&gt;read 0/r32/eax
<span id="L116" class="LineNr">116 </span> (<a href='502test.mu.html#L2'>check-ints-equal</a> %eax 1 <span class="Constant">&quot;F - <a href='310copy-bytes.subx.html#L96'>test-stream-to-array</a>/read-pointer-not-perturbed&quot;</span>)
@ -197,13 +197,13 @@ if ('onhashchange' in window) {
<span id="L139" class="LineNr">139 </span> 7c/jump-if-&lt; $unquote-stream-to-array:end/disp8
<span id="L140" class="LineNr">140 </span> 81 5/subop/subtract %ecx 2/imm32
<span id="L141" class="LineNr">141 </span> <span class="subxComment"># allocate</span>
<span id="L142" class="LineNr">142 </span> (<a href='120allocate.subx.html#L556'>allocate-array</a> <span class="SpecialChar"><a href='120allocate.subx.html#L27'>Heap</a></span> %ecx *(ebp+0xc))
<span id="L142" class="LineNr">142 </span> (<a href='120allocate.subx.html#L568'>allocate-array</a> <span class="SpecialChar"><a href='120allocate.subx.html#L27'>Heap</a></span> %ecx *(ebp+0xc))
<span id="L143" class="LineNr">143 </span> <span class="subxComment"># var in/edx: (addr byte) = s-&gt;data + s-&gt;read + 1</span>
<span id="L144" class="LineNr">144 </span> 8b/-&gt; *(esi+4) 2/r32/edx
<span id="L145" class="LineNr">145 </span> 8d/copy-address *(esi+edx+0xd) 2/r32/edx <span class="subxComment"># Stream-data + 1</span>
<span id="L146" class="LineNr">146 </span> <span class="subxComment"># var dest/eax: (addr byte) = data for out</span>
<span id="L147" class="LineNr">147 </span> 8b/-&gt; *(ebp+0xc) 0/r32/eax
<span id="L148" class="LineNr">148 </span> (<a href='120allocate.subx.html#L223'>lookup</a> *eax *(eax+4)) <span class="subxComment"># =&gt; eax</span>
<span id="L148" class="LineNr">148 </span> (<a href='120allocate.subx.html#L235'>lookup</a> *eax *(eax+4)) <span class="subxComment"># =&gt; eax</span>
<span id="L149" class="LineNr">149 </span> 8d/copy-address *(eax+4) 0/r32/eax
<span id="L150" class="LineNr">150 </span> <span class="subxComment">#</span>
<span id="L151" class="LineNr">151 </span> (<a href='310copy-bytes.subx.html#L6'>copy-bytes</a> %edx %eax %ecx)

View File

@ -1,32 +1,32 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 311decimal-int.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxComment { color: #005faf; }
.subxFunction { color: #af5f00; text-decoration: underline; }
.LineNr { }
.subxS1Comment { color: #0000af; }
.SpecialChar { color: #d70000; }
.Constant { color: #008787; }
.subxComment { color: #005faf; }
.subxS1Comment { color: #0000af; }
.LineNr { }
.subxH1Comment { color: #005faf; text-decoration: underline; }
.subxMinorFunction { color: #875f5f; }
.subxTest { color: #5f8700; }
.subxH1Comment { color: #005faf; text-decoration: underline; }
.subxFunction { color: #af5f00; text-decoration: underline; }
.Constant { color: #008787; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -548,7 +548,7 @@ if ('onhashchange' in window) {
<span id="L488" class="LineNr">488 </span> 81 0/subop/add %ebx 4/imm32
<span id="L489" class="LineNr">489 </span> eb/jump $_parse-array-of-decimal-ints:loop1/disp8
<span id="L490" class="LineNr">490 </span><span class="Constant">$_parse-array-of-decimal-ints:break1</span>:
<span id="L491" class="LineNr">491 </span> (<a href='120allocate.subx.html#L556'>allocate-array</a> *(ebp+8) %ebx *(ebp+0x10))
<span id="L491" class="LineNr">491 </span> (<a href='120allocate.subx.html#L568'>allocate-array</a> *(ebp+8) %ebx *(ebp+0x10))
<span id="L492" class="LineNr">492 </span><span class="Constant">$_parse-array-of-decimal-ints:pass2</span>:
<span id="L493" class="LineNr">493 </span> <span class="subxComment"># var slice/edi: slice = {s-&gt;data, 0}</span>
<span id="L494" class="LineNr">494 </span> 68/push 0/imm32/end
@ -557,7 +557,7 @@ if ('onhashchange' in window) {
<span id="L497" class="LineNr">497 </span> 89/&lt;- %edi 4/r32/esp
<span id="L498" class="LineNr">498 </span> <span class="subxComment"># curr = lookup(out)-&gt;data</span>
<span id="L499" class="LineNr">499 </span> 8b/-&gt; *(ebp+0x10) 0/r32/eax
<span id="L500" class="LineNr">500 </span> (<a href='120allocate.subx.html#L223'>lookup</a> *eax *(eax+4)) <span class="subxComment"># =&gt; eax</span>
<span id="L500" class="LineNr">500 </span> (<a href='120allocate.subx.html#L235'>lookup</a> *eax *(eax+4)) <span class="subxComment"># =&gt; eax</span>
<span id="L501" class="LineNr">501 </span> 8d/copy-address *(eax+4) 1/r32/ecx
<span id="L502" class="LineNr">502 </span><span class="Constant">$_parse-array-of-decimal-ints:loop2</span>:
<span id="L503" class="LineNr">503 </span> <span class="subxComment"># if (slice-&gt;start &gt;= end) break</span>
@ -612,7 +612,7 @@ if ('onhashchange' in window) {
<span id="L552" class="LineNr">552 </span> 89/&lt;- %ecx 4/r32/esp
<span id="L553" class="LineNr">553 </span> <span class="subxComment">#</span>
<span id="L554" class="LineNr">554 </span> (<a href='311decimal-int.subx.html#L429'>_parse-array-of-decimal-ints</a> <span class="SpecialChar"><a href='120allocate.subx.html#L27'>Heap</a></span> <span class="Constant">&quot;1 2 3&quot;</span> %esi)
<span id="L555" class="LineNr">555 </span> (<a href='120allocate.subx.html#L223'>lookup</a> *esi *(esi+4)) <span class="subxComment"># =&gt; eax</span>
<span id="L555" class="LineNr">555 </span> (<a href='120allocate.subx.html#L235'>lookup</a> *esi *(esi+4)) <span class="subxComment"># =&gt; eax</span>
<span id="L556" class="LineNr">556 </span> (<a href='301array-equal.subx.html#L5'>array-equal?</a> %ecx %eax) <span class="subxComment"># =&gt; eax</span>
<span id="L557" class="LineNr">557 </span> (<a href='502test.mu.html#L2'>check-ints-equal</a> %eax 1 <span class="Constant">&quot;F - test-parse-array-of-decimal-ints&quot;</span>)
<span id="L558" class="LineNr">558 </span> <span class="subxS1Comment"># . epilogue</span>
@ -631,7 +631,7 @@ if ('onhashchange' in window) {
<span id="L571" class="LineNr">571 </span> 89/&lt;- %esi 4/r32/esp
<span id="L572" class="LineNr">572 </span> <span class="subxComment">#</span>
<span id="L573" class="LineNr">573 </span> (<a href='311decimal-int.subx.html#L429'>_parse-array-of-decimal-ints</a> <span class="SpecialChar"><a href='120allocate.subx.html#L27'>Heap</a></span> <span class="Constant">&quot;&quot;</span> %esi)
<span id="L574" class="LineNr">574 </span> (<a href='120allocate.subx.html#L223'>lookup</a> *esi *(esi+4)) <span class="subxComment"># =&gt; eax</span>
<span id="L574" class="LineNr">574 </span> (<a href='120allocate.subx.html#L235'>lookup</a> *esi *(esi+4)) <span class="subxComment"># =&gt; eax</span>
<span id="L575" class="LineNr">575 </span> (<a href='502test.mu.html#L2'>check-ints-equal</a> *eax 0 <span class="Constant">&quot;F - test-parse-array-of-decimal-ints-empty&quot;</span>)
<span id="L576" class="LineNr">576 </span> <span class="subxS1Comment"># . epilogue</span>
<span id="L577" class="LineNr">577 </span> 89/&lt;- %esp 5/r32/ebp
@ -649,7 +649,7 @@ if ('onhashchange' in window) {
<span id="L589" class="LineNr">589 </span> 89/&lt;- %esi 4/r32/esp
<span id="L590" class="LineNr">590 </span> <span class="subxComment">#</span>
<span id="L591" class="LineNr">591 </span> (<a href='311decimal-int.subx.html#L429'>_parse-array-of-decimal-ints</a> <span class="SpecialChar"><a href='120allocate.subx.html#L27'>Heap</a></span> <span class="SpecialChar"><a href='301array-equal.subx.html#L428'>Space</a></span> %esi)
<span id="L592" class="LineNr">592 </span> (<a href='120allocate.subx.html#L223'>lookup</a> *esi *(esi+4)) <span class="subxComment"># =&gt; eax</span>
<span id="L592" class="LineNr">592 </span> (<a href='120allocate.subx.html#L235'>lookup</a> *esi *(esi+4)) <span class="subxComment"># =&gt; eax</span>
<span id="L593" class="LineNr">593 </span> (<a href='502test.mu.html#L2'>check-ints-equal</a> *eax 0 <span class="Constant">&quot;F - test-parse-array-of-decimal-ints-just-whitespace&quot;</span>)
<span id="L594" class="LineNr">594 </span> <span class="subxS1Comment"># . epilogue</span>
<span id="L595" class="LineNr">595 </span> 89/&lt;- %esp 5/r32/ebp
@ -672,7 +672,7 @@ if ('onhashchange' in window) {
<span id="L612" class="LineNr">612 </span> 89/&lt;- %ecx 4/r32/esp
<span id="L613" class="LineNr">613 </span> <span class="subxComment">#</span>
<span id="L614" class="LineNr">614 </span> (<a href='311decimal-int.subx.html#L429'>_parse-array-of-decimal-ints</a> <span class="SpecialChar"><a href='120allocate.subx.html#L27'>Heap</a></span> <span class="Constant">&quot; 1 2 3 &quot;</span> %esi)
<span id="L615" class="LineNr">615 </span> (<a href='120allocate.subx.html#L223'>lookup</a> *esi *(esi+4)) <span class="subxComment"># =&gt; eax</span>
<span id="L615" class="LineNr">615 </span> (<a href='120allocate.subx.html#L235'>lookup</a> *esi *(esi+4)) <span class="subxComment"># =&gt; eax</span>
<span id="L616" class="LineNr">616 </span> (<a href='301array-equal.subx.html#L5'>array-equal?</a> %ecx %eax) <span class="subxComment"># =&gt; eax</span>
<span id="L617" class="LineNr">617 </span> (<a href='502test.mu.html#L2'>check-ints-equal</a> %eax 1 <span class="Constant">&quot;F - test-parse-array-of-decimal-ints-extra-whitespace&quot;</span>)
<span id="L618" class="LineNr">618 </span> <span class="subxS1Comment"># . epilogue</span>

22
html/312copy.subx.html generated
View File

@ -1,29 +1,29 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 312copy.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxFunction { color: #af5f00; text-decoration: underline; }
.SpecialChar { color: #d70000; }
.LineNr { }
.subxS1Comment { color: #0000af; }
.subxComment { color: #005faf; }
.subxS1Comment { color: #0000af; }
.LineNr { }
.subxFunction { color: #af5f00; text-decoration: underline; }
.Constant { color: #008787; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -62,7 +62,7 @@ if ('onhashchange' in window) {
<span id="L5" class="LineNr"> 5 </span> 55/push-ebp
<span id="L6" class="LineNr"> 6 </span> 89/&lt;- %ebp 4/r32/esp
<span id="L7" class="LineNr"> 7 </span> <span class="subxComment">#</span>
<span id="L8" class="LineNr"> 8 </span> (<a href='120allocate.subx.html#L690'>copy-array</a> <span class="SpecialChar"><a href='120allocate.subx.html#L27'>Heap</a></span> *(ebp+8) *(ebp+0xc))
<span id="L8" class="LineNr"> 8 </span> (<a href='120allocate.subx.html#L702'>copy-array</a> <span class="SpecialChar"><a href='120allocate.subx.html#L27'>Heap</a></span> *(ebp+8) *(ebp+0xc))
<span id="L9" class="LineNr"> 9 </span><span class="Constant">$copy-array-object:end</span>:
<span id="L10" class="LineNr">10 </span> <span class="subxS1Comment"># . epilogue</span>
<span id="L11" class="LineNr">11 </span> 89/&lt;- %esp 5/r32/ebp

View File

@ -1,28 +1,28 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 313index-bounds-check.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxComment { color: #005faf; }
.LineNr { }
.subxS1Comment { color: #0000af; }
.LineNr { }
.Constant { color: #008787; }
.subxMinorFunction { color: #875f5f; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -82,13 +82,13 @@ if ('onhashchange' in window) {
<span id="L26" class="LineNr">26 </span> 39/compare %eax 1/r32/ecx
<span id="L27" class="LineNr">27 </span> 0f 82/jump-if-unsigned&lt; $__check-mu-array-bounds:end/disp32 <span class="subxComment"># negative index should always abort</span>
<span id="L28" class="LineNr">28 </span> <span class="subxComment"># abort if necessary</span>
<span id="L29" class="LineNr">29 </span> (<a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 <span class="Constant">&quot;fn &quot;</span> 3 0) <span class="subxComment"># 3=cyan</span>
<span id="L30" class="LineNr">30 </span> (<a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 *(ebp+0x14) 3 0) <span class="subxComment"># 3=cyan</span>
<span id="L31" class="LineNr">31 </span> (<a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 <span class="Constant">&quot;: offset &quot;</span> 3 0) <span class="subxComment"># 3=cyan</span>
<span id="L32" class="LineNr">32 </span> (<a href='501draw-text.mu.html#L333'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 %eax 3 0) <span class="subxComment"># 3=cyan</span>
<span id="L33" class="LineNr">33 </span> (<a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 <span class="Constant">&quot; is too large for array '&quot;</span> 3 0) <span class="subxComment"># 3=cyan</span>
<span id="L34" class="LineNr">34 </span> (<a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 *(ebp+0x18) 3 0) <span class="subxComment"># 3=cyan</span>
<span id="L35" class="LineNr">35 </span> (<a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 <span class="Constant">&quot;'&quot;</span> 3 0) <span class="subxComment"># 3=cyan</span>
<span id="L29" class="LineNr">29 </span> (<a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 <span class="Constant">&quot;fn &quot;</span> 3 0) <span class="subxComment"># 3=cyan</span>
<span id="L30" class="LineNr">30 </span> (<a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 *(ebp+0x14) 3 0) <span class="subxComment"># 3=cyan</span>
<span id="L31" class="LineNr">31 </span> (<a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 <span class="Constant">&quot;: offset &quot;</span> 3 0) <span class="subxComment"># 3=cyan</span>
<span id="L32" class="LineNr">32 </span> (<a href='501draw-text.mu.html#L330'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 %eax 3 0) <span class="subxComment"># 3=cyan</span>
<span id="L33" class="LineNr">33 </span> (<a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 <span class="Constant">&quot; is too large for array '&quot;</span> 3 0) <span class="subxComment"># 3=cyan</span>
<span id="L34" class="LineNr">34 </span> (<a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 *(ebp+0x18) 3 0) <span class="subxComment"># 3=cyan</span>
<span id="L35" class="LineNr">35 </span> (<a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 <span class="Constant">&quot;'&quot;</span> 3 0) <span class="subxComment"># 3=cyan</span>
<span id="L36" class="LineNr">36 </span> (<a href='317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;&quot;</span>)
<span id="L37" class="LineNr">37 </span> <span class="subxComment"># never gets here</span>
<span id="L38" class="LineNr">38 </span><span class="Constant">$__check-mu-array-bounds:end</span>:
@ -102,11 +102,11 @@ if ('onhashchange' in window) {
<span id="L46" class="LineNr">46 </span> c3/return
<span id="L47" class="LineNr">47 </span>
<span id="L48" class="LineNr">48 </span><span class="subxMinorFunction">__check-mu-array-bounds:overflow</span>:
<span id="L49" class="LineNr">49 </span> (<a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 <span class="Constant">&quot;fn &quot;</span> 3 0) <span class="subxComment"># 3=cyan</span>
<span id="L50" class="LineNr">50 </span> (<a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 *(ebp+0x14) 3 0) <span class="subxComment"># 3=cyan</span>
<span id="L51" class="LineNr">51 </span> (<a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 <span class="Constant">&quot;: offset to array '&quot;</span> 3 0) <span class="subxComment"># 3=cyan</span>
<span id="L52" class="LineNr">52 </span> (<a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 *(ebp+0x18) 3 0) <span class="subxComment"># 3=cyan</span>
<span id="L53" class="LineNr">53 </span> (<a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 <span class="Constant">&quot;' overflowed 32 bits&quot;</span> 3 0) <span class="subxComment"># 3=cyan</span>
<span id="L49" class="LineNr">49 </span> (<a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 <span class="Constant">&quot;fn &quot;</span> 3 0) <span class="subxComment"># 3=cyan</span>
<span id="L50" class="LineNr">50 </span> (<a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 *(ebp+0x14) 3 0) <span class="subxComment"># 3=cyan</span>
<span id="L51" class="LineNr">51 </span> (<a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 <span class="Constant">&quot;: offset to array '&quot;</span> 3 0) <span class="subxComment"># 3=cyan</span>
<span id="L52" class="LineNr">52 </span> (<a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 *(ebp+0x18) 3 0) <span class="subxComment"># 3=cyan</span>
<span id="L53" class="LineNr">53 </span> (<a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 <span class="Constant">&quot;' overflowed 32 bits&quot;</span> 3 0) <span class="subxComment"># 3=cyan</span>
<span id="L54" class="LineNr">54 </span> (<a href='317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;&quot;</span>)
<span id="L55" class="LineNr">55 </span> <span class="subxComment"># never gets here</span>
<span id="L56" class="LineNr">56 </span>

View File

@ -1,28 +1,28 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 314divide.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxFunction { color: #af5f00; text-decoration: underline; }
.LineNr { }
.subxS1Comment { color: #0000af; }
.subxComment { color: #005faf; }
.subxS1Comment { color: #0000af; }
.LineNr { }
.subxFunction { color: #af5f00; text-decoration: underline; }
.Constant { color: #008787; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

View File

@ -1,30 +1,30 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 315stack-debug.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.SpecialChar { color: #d70000; }
.subxComment { color: #005faf; }
.subxS1Comment { color: #0000af; }
.LineNr { }
.subxFunction { color: #af5f00; text-decoration: underline; }
.subxS1Comment { color: #0000af; }
.SpecialChar { color: #d70000; }
.Constant { color: #008787; }
.CommentedCode { color: #8a8a8a; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -95,7 +95,7 @@ if ('onhashchange' in window) {
<span id="L37" class="LineNr"> 37 </span> (<a href='500fake-screen.mu.html#L174'>cursor-position</a> 0) <span class="subxComment"># =&gt; eax, ecx</span>
<span id="L38" class="LineNr"> 38 </span> <span class="subxComment"># print at top-right</span>
<span id="L39" class="LineNr"> 39 </span> (<a href='500fake-screen.mu.html#L190'>set-cursor-position</a> 0 0x70 0)
<span id="L40" class="LineNr"> 40 </span> (<a href='501draw-text.mu.html#L333'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 %edx 0xf 0xc)
<span id="L40" class="LineNr"> 40 </span> (<a href='501draw-text.mu.html#L330'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 %edx 0xf 0xc)
<span id="L41" class="LineNr"> 41 </span> <span class="subxComment"># restore cursor position</span>
<span id="L42" class="LineNr"> 42 </span> (<a href='500fake-screen.mu.html#L190'>set-cursor-position</a> %eax %ecx)
<span id="L43" class="LineNr"> 43 </span><span class="Constant">$show-stack-state:end</span>:
@ -122,7 +122,7 @@ if ('onhashchange' in window) {
<span id="L64" class="LineNr"> 64 </span> {
<span id="L65" class="LineNr"> 65 </span> 81 7/subop/compare *<span class="SpecialChar"><a href='315stack-debug.subx.html#L121'>Really-debug-print</a></span> 0/imm32/false
<span id="L66" class="LineNr"> 66 </span> 74/jump-if-= <span class="Constant">break</span>/disp8
<span id="L67" class="LineNr"> 67 </span> (<a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 *(ebp+8) *(ebp+0xc) *(ebp+0x10))
<span id="L67" class="LineNr"> 67 </span> (<a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 *(ebp+8) *(ebp+0xc) *(ebp+0x10))
<span id="L68" class="LineNr"> 68 </span> <span class="subxComment"># clear the screen and continue if we got too close to the bottom</span>
<span id="L69" class="LineNr"> 69 </span> (<a href='500fake-screen.mu.html#L174'>cursor-position</a> 0) <span class="subxComment"># =&gt; eax, ecx</span>
<span id="L70" class="LineNr"> 70 </span> 81 7/subop/compare %ecx 0x28/imm32

View File

@ -1,30 +1,30 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 316colors.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxComment { color: #005faf; }
.LineNr { }
.subxFunction { color: #af5f00; text-decoration: underline; }
.subxS1Comment { color: #0000af; }
.SpecialChar { color: #d70000; }
.Constant { color: #008787; }
.subxComment { color: #005faf; }
.subxS1Comment { color: #0000af; }
.LineNr { }
.subxTest { color: #5f8700; }
.subxFunction { color: #af5f00; text-decoration: underline; }
.Constant { color: #008787; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

537
html/317abort.subx.html generated
View File

@ -1,30 +1,30 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 317abort.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxComment { color: #005faf; }
.LineNr { }
.subxFunction { color: #af5f00; text-decoration: underline; }
.subxS1Comment { color: #0000af; }
.SpecialChar { color: #d70000; }
.Constant { color: #008787; }
.subxComment { color: #005faf; }
.subxS1Comment { color: #0000af; }
.LineNr { }
.subxH1Comment { color: #005faf; text-decoration: underline; }
.subxFunction { color: #af5f00; text-decoration: underline; }
.Constant { color: #008787; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -66,7 +66,7 @@ if ('onhashchange' in window) {
<span id="L8" class="LineNr"> 8 </span> 89/&lt;- %ebp 4/r32/esp
<span id="L9" class="LineNr"> 9 </span> <span class="subxComment">#</span>
<span id="L10" class="LineNr"> 10 </span> (<a href='103grapheme.subx.html#L170'>set-cursor-position-on-real-screen</a> 0 0)
<span id="L11" class="LineNr"> 11 </span> (<a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 *(ebp+8) 0xf 0xc) <span class="subxComment"># 0/real-screen, 0xf/fg=white, 0xc/bg=red</span>
<span id="L11" class="LineNr"> 11 </span> (<a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 *(ebp+8) 0xf 0xc) <span class="subxComment"># 0/real-screen, 0xf/fg=white, 0xc/bg=red</span>
<span id="L12" class="LineNr"> 12 </span> (<a href='317abort.subx.html#L21'>dump-call-stack</a>)
<span id="L13" class="LineNr"> 13 </span> <span class="subxComment"># crash</span>
<span id="L14" class="LineNr"> 14 </span> {
@ -85,10 +85,10 @@ if ('onhashchange' in window) {
<span id="L27" class="LineNr"> 27 </span> 51/push-ecx
<span id="L28" class="LineNr"> 28 </span> 52/push-edx
<span id="L29" class="LineNr"> 29 </span> 53/push-ebx
<span id="L30" class="LineNr"> 30 </span> <span class="subxComment"># var labels/edx: (addr stream {start-address, label-slice} 0x4000)</span>
<span id="L30" class="LineNr"> 30 </span> <span class="subxComment"># var labels/edx: (addr stream {start-address, label-slice} 0x5000)</span>
<span id="L31" class="LineNr"> 31 </span> <span class="subxComment"># start addresses are in ascending order</span>
<span id="L32" class="LineNr"> 32 </span> 81 5/subop/subtract %esp 0x30000/imm32 <span class="subxComment"># 0x4000 labels * 12 bytes per label</span>
<span id="L33" class="LineNr"> 33 </span> 68/push 0x30000/imm32
<span id="L32" class="LineNr"> 32 </span> 81 5/subop/subtract %esp 0x3c000/imm32 <span class="subxComment"># 0x5000 labels * 12 bytes per label</span>
<span id="L33" class="LineNr"> 33 </span> 68/push 0x3c000/imm32
<span id="L34" class="LineNr"> 34 </span> 68/push 0/imm32/read
<span id="L35" class="LineNr"> 35 </span> 68/push 0/imm32/write
<span id="L36" class="LineNr"> 36 </span> 89/&lt;- %edx 4/r32/esp
@ -101,11 +101,11 @@ if ('onhashchange' in window) {
<span id="L43" class="LineNr"> 43 </span> 81 7/subop/compare %ebx 0/imm32
<span id="L44" class="LineNr"> 44 </span> 0f 84/jump-if-= <span class="Constant">break</span>/disp32
<span id="L45" class="LineNr"> 45 </span> <span class="subxComment"># loop body</span>
<span id="L46" class="LineNr"> 46 </span> (<a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 <span class="Constant">&quot;\n&quot;</span> 0 0xc)
<span id="L47" class="LineNr"> 47 </span> (<a href='501draw-text.mu.html#L333'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 *(ebx+4) 0xf 0xc)
<span id="L48" class="LineNr"> 48 </span> (<a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 <span class="Constant">&quot; &quot;</span> 0 0xc)
<span id="L49" class="LineNr"> 49 </span> (<a href='317abort.subx.html#L236'>containing-function</a> %edx *(ebx+4)) <span class="subxComment"># =&gt; eax, ecx</span>
<span id="L50" class="LineNr"> 50 </span> (<a href='317abort.subx.html#L297'>draw-slice-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 %eax %ecx 0 0xc)
<span id="L46" class="LineNr"> 46 </span> (<a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 <span class="Constant">&quot;\n&quot;</span> 0 0xc)
<span id="L47" class="LineNr"> 47 </span> (<a href='501draw-text.mu.html#L330'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 *(ebx+4) 0xf 0xc)
<span id="L48" class="LineNr"> 48 </span> (<a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 <span class="Constant">&quot; &quot;</span> 0 0xc)
<span id="L49" class="LineNr"> 49 </span> (<a href='317abort.subx.html#L233'>containing-function</a> %edx *(ebx+4)) <span class="subxComment"># =&gt; eax, ecx</span>
<span id="L50" class="LineNr"> 50 </span> (<a href='317abort.subx.html#L294'>draw-slice-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 %eax %ecx 0 0xc)
<span id="L51" class="LineNr"> 51 </span> <span class="subxComment"># loop update</span>
<span id="L52" class="LineNr"> 52 </span> 8b/-&gt; *ebx 3/r32/ebx
<span id="L53" class="LineNr"> 53 </span> <span class="subxComment">#</span>
@ -139,255 +139,252 @@ if ('onhashchange' in window) {
<span id="L81" class="LineNr"> 81 </span> c7 0/subop/copy *ecx 0/imm32 <span class="subxComment"># write index</span>
<span id="L82" class="LineNr"> 82 </span> c7 0/subop/copy *(ecx+4) 0/imm32 <span class="subxComment"># read index</span>
<span id="L83" class="LineNr"> 83 </span> c7 0/subop/copy *(ecx+8) 0x01000000/imm32 <span class="subxComment"># stream capacity = 16MB</span>
<span id="L84" class="LineNr"> 84 </span> <span class="subxComment"># load 0x400 sectors starting from sector 10080 = 0x2760</span>
<span id="L85" class="LineNr"> 85 </span> (<a href='boot.subx.html#L976'>load-sectors</a> <span class="SpecialChar"><a href='boot.subx.html#L923'>Primary-bus-primary-drive</a></span> 0x2760 0x100 %ecx)
<span id="L86" class="LineNr"> 86 </span> (<a href='boot.subx.html#L976'>load-sectors</a> <span class="SpecialChar"><a href='boot.subx.html#L923'>Primary-bus-primary-drive</a></span> 0x2860 0x100 %ecx)
<span id="L87" class="LineNr"> 87 </span> (<a href='boot.subx.html#L976'>load-sectors</a> <span class="SpecialChar"><a href='boot.subx.html#L923'>Primary-bus-primary-drive</a></span> 0x2960 0x100 %ecx)
<span id="L88" class="LineNr"> 88 </span> (<a href='boot.subx.html#L976'>load-sectors</a> <span class="SpecialChar"><a href='boot.subx.html#L923'>Primary-bus-primary-drive</a></span> 0x2a60 0x100 %ecx)
<span id="L89" class="LineNr"> 89 </span> <span class="subxH1Comment"># - parse pointers to portions of this stream into labels</span>
<span id="L90" class="LineNr"> 90 </span> <span class="subxComment"># var curr/ecx: (addr byte) = s-&gt;data</span>
<span id="L91" class="LineNr"> 91 </span> 81 0/subop/add %ecx 0xc/imm32
<span id="L92" class="LineNr"> 92 </span> {
<span id="L93" class="LineNr"> 93 </span> <span class="subxComment"># loop termination check</span>
<span id="L94" class="LineNr"> 94 </span> b8/copy-to-eax 0/imm32
<span id="L95" class="LineNr"> 95 </span> 8a/byte-&gt; *ecx 0/r32/eax
<span id="L96" class="LineNr"> 96 </span> 3d/compare-eax-and 0/imm32
<span id="L97" class="LineNr"> 97 </span> 0f 84/jump-if-= <span class="Constant">break</span>/disp32
<span id="L98" class="LineNr"> 98 </span> <span class="subxComment"># loop body</span>
<span id="L99" class="LineNr"> 99 </span> (<a href='317abort.subx.html#L121'>skip-to-next-space</a> %ecx) <span class="subxComment"># =&gt; edx</span>
<span id="L100" class="LineNr">100 </span> 42/increment-edx
<span id="L101" class="LineNr">101 </span> (<a href='317abort.subx.html#L162'>skip-to-next-newline</a> %edx) <span class="subxComment"># =&gt; ebx</span>
<span id="L102" class="LineNr">102 </span> (<a href='118parse-hex-int.subx.html#L417'>parse-hex-int-helper</a> %edx %ebx) <span class="subxComment"># =&gt; eax</span>
<span id="L103" class="LineNr">103 </span> 43/increment-ebx
<span id="L104" class="LineNr">104 </span> (<a href='317abort.subx.html#L203'>label-append</a> *(ebp+8) %eax %ecx %edx)
<span id="L105" class="LineNr">105 </span> <span class="subxComment"># loop update</span>
<span id="L106" class="LineNr">106 </span> 89/&lt;- %ecx 3/r32/ebx
<span id="L107" class="LineNr">107 </span> <span class="subxComment">#</span>
<span id="L108" class="LineNr">108 </span> e9/jump <span class="Constant">loop</span>/disp32
<span id="L109" class="LineNr">109 </span> }
<span id="L110" class="LineNr">110 </span><span class="Constant">$load-debug-symbols:end</span>:
<span id="L111" class="LineNr">111 </span> <span class="subxS1Comment"># . restore registers</span>
<span id="L112" class="LineNr">112 </span> 5b/pop-to-ebx
<span id="L113" class="LineNr">113 </span> 5a/pop-to-edx
<span id="L114" class="LineNr">114 </span> 59/pop-to-ecx
<span id="L115" class="LineNr">115 </span> 58/pop-to-eax
<span id="L116" class="LineNr">116 </span> <span class="subxS1Comment"># . epilogue</span>
<span id="L117" class="LineNr">117 </span> 89/&lt;- %esp 5/r32/ebp
<span id="L118" class="LineNr">118 </span> 5d/pop-to-ebp
<span id="L119" class="LineNr">119 </span> c3/return
<span id="L120" class="LineNr">120 </span>
<span id="L121" class="LineNr">121 </span><span class="subxFunction">skip-to-next-space</span>: <span class="subxComment"># curr: (addr byte) -&gt; _/edx: (addr byte)</span>
<span id="L122" class="LineNr">122 </span> <span class="subxS1Comment"># . prologue</span>
<span id="L123" class="LineNr">123 </span> 55/push-ebp
<span id="L124" class="LineNr">124 </span> 89/&lt;- %ebp 4/r32/esp
<span id="L125" class="LineNr">125 </span> <span class="subxS1Comment"># . save registers</span>
<span id="L126" class="LineNr">126 </span> 50/push-eax
<span id="L127" class="LineNr">127 </span> <span class="subxComment"># eax = 0</span>
<span id="L128" class="LineNr">128 </span> b8/copy-to-eax 0/imm32
<span id="L129" class="LineNr">129 </span> <span class="subxComment">#</span>
<span id="L130" class="LineNr">130 </span> 8b/-&gt; *(ebp+8) 2/r32/edx
<span id="L131" class="LineNr">131 </span> {
<span id="L132" class="LineNr">132 </span> 8a/byte-&gt; *edx 0/r32/eax
<span id="L133" class="LineNr">133 </span> 3d/compare-eax-and 0x20/imm32/space
<span id="L134" class="LineNr">134 </span> 0f 84/jump-if-= <span class="Constant">break</span>/disp32
<span id="L135" class="LineNr">135 </span> 3d/compare-eax-and 0/imm32
<span id="L136" class="LineNr">136 </span> {
<span id="L137" class="LineNr">137 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8
<span id="L138" class="LineNr">138 </span> (<a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 <span class="Constant">&quot;done loading&quot;</span> 7 0)
<span id="L139" class="LineNr">139 </span> {
<span id="L140" class="LineNr">140 </span> eb/jump <span class="Constant">loop</span>/disp8
<span id="L141" class="LineNr">141 </span> }
<span id="L142" class="LineNr">142 </span> }
<span id="L143" class="LineNr">143 </span> 3d/compare-eax-and 0xa/imm32/newline
<span id="L144" class="LineNr">144 </span> {
<span id="L145" class="LineNr">145 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8
<span id="L146" class="LineNr">146 </span> (<a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 <span class="Constant">&quot;unexpected newline&quot;</span> 7 0)
<span id="L147" class="LineNr">147 </span> {
<span id="L148" class="LineNr">148 </span> eb/jump <span class="Constant">loop</span>/disp8
<span id="L149" class="LineNr">149 </span> }
<span id="L150" class="LineNr">150 </span> }
<span id="L151" class="LineNr">151 </span> 42/increment-edx
<span id="L152" class="LineNr">152 </span> e9/jump <span class="Constant">loop</span>/disp32
<span id="L153" class="LineNr">153 </span> }
<span id="L154" class="LineNr">154 </span><span class="Constant">$skip-to-next-space:end</span>:
<span id="L155" class="LineNr">155 </span> <span class="subxS1Comment"># . restore registers</span>
<span id="L156" class="LineNr">156 </span> 58/pop-to-eax
<span id="L157" class="LineNr">157 </span> <span class="subxS1Comment"># . epilogue</span>
<span id="L158" class="LineNr">158 </span> 89/&lt;- %esp 5/r32/ebp
<span id="L159" class="LineNr">159 </span> 5d/pop-to-ebp
<span id="L160" class="LineNr">160 </span> c3/return
<span id="L161" class="LineNr">161 </span>
<span id="L162" class="LineNr">162 </span><span class="subxFunction">skip-to-next-newline</span>: <span class="subxComment"># curr: (addr byte) -&gt; _/ebx: (addr byte)</span>
<span id="L163" class="LineNr">163 </span> <span class="subxS1Comment"># . prologue</span>
<span id="L164" class="LineNr">164 </span> 55/push-ebp
<span id="L165" class="LineNr">165 </span> 89/&lt;- %ebp 4/r32/esp
<span id="L166" class="LineNr">166 </span> <span class="subxS1Comment"># . save registers</span>
<span id="L167" class="LineNr">167 </span> 50/push-eax
<span id="L168" class="LineNr">168 </span> <span class="subxComment"># eax = 0</span>
<span id="L169" class="LineNr">169 </span> b8/copy-to-eax 0/imm32
<span id="L170" class="LineNr">170 </span> <span class="subxComment">#</span>
<span id="L171" class="LineNr">171 </span> 8b/-&gt; *(ebp+8) 3/r32/ebx
<span id="L172" class="LineNr">172 </span> {
<span id="L173" class="LineNr">173 </span> 8a/byte-&gt; *ebx 0/r32/eax
<span id="L174" class="LineNr">174 </span> 3d/compare-eax-and 0xa/imm32/newline
<span id="L175" class="LineNr">175 </span> 0f 84/jump-if-= <span class="Constant">break</span>/disp32
<span id="L176" class="LineNr">176 </span> 3d/compare-eax-and 0/imm32
<span id="L177" class="LineNr">177 </span> {
<span id="L178" class="LineNr">178 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8
<span id="L179" class="LineNr">179 </span> (<a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 <span class="Constant">&quot;done loading&quot;</span> 7 0)
<span id="L180" class="LineNr">180 </span> {
<span id="L181" class="LineNr">181 </span> eb/jump <span class="Constant">loop</span>/disp8
<span id="L182" class="LineNr">182 </span> }
<span id="L183" class="LineNr">183 </span> }
<span id="L184" class="LineNr">184 </span> 3d/compare-eax-and 0x20/imm32/space
<span id="L185" class="LineNr">185 </span> {
<span id="L186" class="LineNr">186 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8
<span id="L187" class="LineNr">187 </span> (<a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 <span class="Constant">&quot;unexpected space&quot;</span> 7 0)
<span id="L188" class="LineNr">188 </span> {
<span id="L189" class="LineNr">189 </span> eb/jump <span class="Constant">loop</span>/disp8
<span id="L190" class="LineNr">190 </span> }
<span id="L191" class="LineNr">191 </span> }
<span id="L192" class="LineNr">192 </span> 43/increment-ebx
<span id="L193" class="LineNr">193 </span> e9/jump <span class="Constant">loop</span>/disp32
<span id="L194" class="LineNr">194 </span> }
<span id="L195" class="LineNr">195 </span><span class="Constant">$skip-to-next-newline:end</span>:
<span id="L196" class="LineNr">196 </span> <span class="subxS1Comment"># . restore registers</span>
<span id="L197" class="LineNr">197 </span> 58/pop-to-eax
<span id="L198" class="LineNr">198 </span> <span class="subxS1Comment"># . epilogue</span>
<span id="L199" class="LineNr">199 </span> 89/&lt;- %esp 5/r32/ebp
<span id="L200" class="LineNr">200 </span> 5d/pop-to-ebp
<span id="L201" class="LineNr">201 </span> c3/return
<span id="L202" class="LineNr">202 </span>
<span id="L203" class="LineNr">203 </span><span class="subxFunction">label-append</span>: <span class="subxComment"># labels: (addr stream {start-address, label-slice}), address: int, start: int, end: int</span>
<span id="L204" class="LineNr">204 </span> <span class="subxS1Comment"># . prologue</span>
<span id="L205" class="LineNr">205 </span> 55/push-ebp
<span id="L206" class="LineNr">206 </span> 89/&lt;- %ebp 4/r32/esp
<span id="L207" class="LineNr">207 </span> <span class="subxS1Comment"># . save registers</span>
<span id="L208" class="LineNr">208 </span> 50/push-eax
<span id="L209" class="LineNr">209 </span> 51/push-ecx
<span id="L210" class="LineNr">210 </span> 56/push-esi
<span id="L211" class="LineNr">211 </span> <span class="subxComment"># esi = labels</span>
<span id="L212" class="LineNr">212 </span> 8b/-&gt; *(ebp+8) 6/r32/esi
<span id="L213" class="LineNr">213 </span> <span class="subxComment"># ecx = labels-&gt;write</span>
<span id="L214" class="LineNr">214 </span> 8b/-&gt; *esi 1/r32/ecx
<span id="L215" class="LineNr">215 </span> <span class="subxComment"># labels-&gt;data[labels-&gt;write] = address</span>
<span id="L216" class="LineNr">216 </span> 8b/-&gt; *(ebp+0xc) 0/r32/eax
<span id="L217" class="LineNr">217 </span> 89/&lt;- *(esi+ecx+0xc) 0/r32/eax
<span id="L218" class="LineNr">218 </span> <span class="subxComment"># labels-&gt;data[labels-&gt;write+4] = start</span>
<span id="L219" class="LineNr">219 </span> 8b/-&gt; *(ebp+0x10) 0/r32/eax
<span id="L220" class="LineNr">220 </span> 89/&lt;- *(esi+ecx+0x10) 0/r32/eax
<span id="L221" class="LineNr">221 </span> <span class="subxComment"># labels-&gt;data[labels-&gt;write+8] = end</span>
<span id="L222" class="LineNr">222 </span> 8b/-&gt; *(ebp+0x14) 0/r32/eax
<span id="L223" class="LineNr">223 </span> 89/&lt;- *(esi+ecx+0x14) 0/r32/eax
<span id="L224" class="LineNr">224 </span> <span class="subxComment"># labels-&gt;write += 12</span>
<span id="L225" class="LineNr">225 </span> 81 0/subop/add *esi 0xc/imm32
<span id="L226" class="LineNr">226 </span><span class="Constant">$label-append:end</span>:
<span id="L227" class="LineNr">227 </span> <span class="subxS1Comment"># . restore registers</span>
<span id="L228" class="LineNr">228 </span> 5e/pop-to-esi
<span id="L229" class="LineNr">229 </span> 59/pop-to-ecx
<span id="L230" class="LineNr">230 </span> 58/pop-to-eax
<span id="L231" class="LineNr">231 </span> <span class="subxS1Comment"># . epilogue</span>
<span id="L232" class="LineNr">232 </span> 89/&lt;- %esp 5/r32/ebp
<span id="L233" class="LineNr">233 </span> 5d/pop-to-ebp
<span id="L234" class="LineNr">234 </span> c3/return
<span id="L235" class="LineNr">235 </span>
<span id="L236" class="LineNr">236 </span><span class="subxFunction">containing-function</span>: <span class="subxComment"># labels: (addr stream {start-address, label-slice}), address: int -&gt; start/eax: (addr byte), end/ecx: (addr byte)</span>
<span id="L237" class="LineNr">237 </span> <span class="subxS1Comment"># . prologue</span>
<span id="L238" class="LineNr">238 </span> 55/push-ebp
<span id="L239" class="LineNr">239 </span> 89/&lt;- %ebp 4/r32/esp
<span id="L240" class="LineNr">240 </span> <span class="subxS1Comment"># . save registers</span>
<span id="L241" class="LineNr">241 </span> 52/push-edx
<span id="L242" class="LineNr">242 </span> 53/push-ebx
<span id="L243" class="LineNr">243 </span> 56/push-esi
<span id="L244" class="LineNr">244 </span> <span class="subxComment"># esi = labels</span>
<span id="L245" class="LineNr">245 </span> 8b/-&gt; *(ebp+8) 6/r32/esi
<span id="L246" class="LineNr">246 </span> <span class="subxComment"># var curr/ecx: (addr byte) = labels-&gt;data</span>
<span id="L247" class="LineNr">247 </span> 8d/copy-address *(esi+0xc) 1/r32/ecx
<span id="L248" class="LineNr">248 </span> <span class="subxComment"># var max/edx: (addr byte) = labels-&gt;data + labels-&gt;write</span>
<span id="L249" class="LineNr">249 </span> 8b/-&gt; *esi 2/r32/edx
<span id="L250" class="LineNr">250 </span> 01/add-to %edx 1/r32/ecx
<span id="L251" class="LineNr">251 </span> <span class="subxComment"># var previous-function-name/ebx: (addr slice) = 0</span>
<span id="L252" class="LineNr">252 </span> bb/copy-to-ebx 0/imm32
<span id="L253" class="LineNr">253 </span> {
<span id="L254" class="LineNr">254 </span> <span class="subxComment"># abort if not found</span>
<span id="L255" class="LineNr">255 </span> 39/compare %ecx 2/r32/edx
<span id="L256" class="LineNr">256 </span> {
<span id="L257" class="LineNr">257 </span> 0f 82/jump-if-addr&lt; <span class="Constant">break</span>/disp32
<span id="L258" class="LineNr">258 </span> (<a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 <span class="Constant">&quot;failed to find function for address &quot;</span> 7 0)
<span id="L259" class="LineNr">259 </span> (<a href='501draw-text.mu.html#L333'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 *(ebp+0xc) 7 0)
<span id="L260" class="LineNr">260 </span> {
<span id="L261" class="LineNr">261 </span> eb/jump <span class="Constant">loop</span>/disp8
<span id="L262" class="LineNr">262 </span> }
<span id="L263" class="LineNr">263 </span> }
<span id="L264" class="LineNr">264 </span> <span class="subxComment"># if *curr &gt; address, break</span>
<span id="L265" class="LineNr">265 </span> 8b/-&gt; *ecx 0/r32/eax
<span id="L266" class="LineNr">266 </span> 3b/compare 0/r32/eax *(ebp+0xc)
<span id="L267" class="LineNr">267 </span> 0f 87/jump-if-addr&gt; <span class="Constant">break</span>/disp32
<span id="L268" class="LineNr">268 </span> <span class="subxComment"># if **(curr+4) not '$' or '@', save curr to previous-function-name</span>
<span id="L269" class="LineNr">269 </span> {
<span id="L270" class="LineNr">270 </span> 8b/-&gt; *(ecx+4) 0/r32/eax
<span id="L271" class="LineNr">271 </span> 8a/byte-&gt; *eax 0/r32/eax
<span id="L272" class="LineNr">272 </span> 25/and-with-eax 0xff/imm32
<span id="L273" class="LineNr">273 </span> 3d/compare-eax-and 0x24/imm32/$
<span id="L274" class="LineNr">274 </span> 74/jump-if-= <span class="Constant">break</span>/disp8
<span id="L275" class="LineNr">275 </span> 3d/compare-eax-and 0x40/imm32/@
<span id="L276" class="LineNr">276 </span> 74/jump-if-= <span class="Constant">break</span>/disp8
<span id="L277" class="LineNr">277 </span> 8d/copy-address *(ecx+4) 3/r32/ebx
<span id="L278" class="LineNr">278 </span> }
<span id="L279" class="LineNr">279 </span> <span class="subxComment"># loop update</span>
<span id="L280" class="LineNr">280 </span> 81 0/subop/add %ecx 0xc/imm32
<span id="L281" class="LineNr">281 </span> <span class="subxComment">#</span>
<span id="L282" class="LineNr">282 </span> e9/jump <span class="Constant">loop</span>/disp32
<span id="L283" class="LineNr">283 </span> }
<span id="L284" class="LineNr">284 </span> 8b/-&gt; *ebx 0/r32/eax
<span id="L285" class="LineNr">285 </span> 8b/-&gt; *(ebx+4) 1/r32/ecx
<span id="L286" class="LineNr">286 </span><span class="Constant">$containing-function:end</span>:
<span id="L287" class="LineNr">287 </span> <span class="subxS1Comment"># . restore registers</span>
<span id="L288" class="LineNr">288 </span> 5e/pop-to-esi
<span id="L289" class="LineNr">289 </span> 5b/pop-to-ebx
<span id="L290" class="LineNr">290 </span> 5a/pop-to-edx
<span id="L291" class="LineNr">291 </span> <span class="subxS1Comment"># . epilogue</span>
<span id="L292" class="LineNr">292 </span> 89/&lt;- %esp 5/r32/ebp
<span id="L293" class="LineNr">293 </span> 5d/pop-to-ebp
<span id="L294" class="LineNr">294 </span> c3/return
<span id="L295" class="LineNr">295 </span>
<span id="L296" class="LineNr">296 </span><span class="subxComment"># unlike variants in .mu files, this only supports ASCII</span>
<span id="L297" class="LineNr">297 </span><span class="subxFunction">draw-slice-wrapping-right-then-down-from-cursor-over-full-screen</span>: <span class="subxComment"># screen: (addr screen), start: (addr byte), end: (addr byte), color: int, background-color: int</span>
<span id="L298" class="LineNr">298 </span> <span class="subxS1Comment"># . prologue</span>
<span id="L299" class="LineNr">299 </span> 55/push-ebp
<span id="L300" class="LineNr">300 </span> 89/&lt;- %ebp 4/r32/esp
<span id="L301" class="LineNr">301 </span> <span class="subxS1Comment"># . save registers</span>
<span id="L302" class="LineNr">302 </span> 50/push-eax
<span id="L303" class="LineNr">303 </span> 51/push-ecx
<span id="L304" class="LineNr">304 </span> 52/push-edx
<span id="L305" class="LineNr">305 </span> <span class="subxComment"># var curr/ecx: (addr byte) = start</span>
<span id="L306" class="LineNr">306 </span> 8b/-&gt; *(ebp+0xc) 1/r32/ecx
<span id="L307" class="LineNr">307 </span> <span class="subxComment"># edx = end</span>
<span id="L308" class="LineNr">308 </span> 8b/-&gt; *(ebp+0x10) 2/r32/edx
<span id="L309" class="LineNr">309 </span> <span class="subxComment"># eax = 0</span>
<span id="L310" class="LineNr">310 </span> b8/copy-to-eax 0/imm32
<span id="L311" class="LineNr">311 </span> {
<span id="L312" class="LineNr">312 </span> <span class="subxComment"># if (curr &gt;= end) break</span>
<span id="L313" class="LineNr">313 </span> 39/compare %ecx 2/r32/edx
<span id="L314" class="LineNr">314 </span> 73/jump-if-addr&gt;= <span class="Constant">break</span>/disp8
<span id="L315" class="LineNr">315 </span> <span class="subxComment"># print *curr</span>
<span id="L316" class="LineNr">316 </span> 8a/byte-&gt; *ecx 0/r32/eax
<span id="L317" class="LineNr">317 </span> (<a href='501draw-text.mu.html#L84'>draw-grapheme-at-cursor</a> *(ebp+8) %eax *(ebp+0x14) *(ebp+0x18))
<span id="L318" class="LineNr">318 </span> (<a href='501draw-text.mu.html#L242'>move-cursor-rightward-and-downward</a> *(ebp+8))
<span id="L319" class="LineNr">319 </span> <span class="subxComment">#</span>
<span id="L320" class="LineNr">320 </span> 41/increment-ecx
<span id="L321" class="LineNr">321 </span> <span class="subxComment">#</span>
<span id="L322" class="LineNr">322 </span> eb/jump <span class="Constant">loop</span>/disp8
<span id="L323" class="LineNr">323 </span> }
<span id="L324" class="LineNr">324 </span><span class="Constant">$draw-slice-wrapping-right-then-down-from-cursor-over-full-screen:end</span>:
<span id="L325" class="LineNr">325 </span> <span class="subxS1Comment"># . restore registers</span>
<span id="L326" class="LineNr">326 </span> 5a/pop-to-edx
<span id="L327" class="LineNr">327 </span> 59/pop-to-ecx
<span id="L328" class="LineNr">328 </span> 58/pop-to-eax
<span id="L329" class="LineNr">329 </span> <span class="subxS1Comment"># . epilogue</span>
<span id="L330" class="LineNr">330 </span> 89/&lt;- %esp 5/r32/ebp
<span id="L331" class="LineNr">331 </span> 5d/pop-to-ebp
<span id="L332" class="LineNr">332 </span> c3/return
<span id="L84" class="LineNr"> 84 </span> <span class="subxComment"># load sectors starting from sector 10080 = 0x2760</span>
<span id="L85" class="LineNr"> 85 </span> (<a href='510disk.mu.html#L1'>load-sectors</a> <span class="SpecialChar"><a href='boot.subx.html#L923'>Primary-bus-primary-drive</a></span> 0x2760 0x800 %ecx) <span class="subxComment"># 0x800 sectors = 1MB</span>
<span id="L86" class="LineNr"> 86 </span> <span class="subxH1Comment"># - parse pointers to portions of this stream into labels</span>
<span id="L87" class="LineNr"> 87 </span> <span class="subxComment"># var curr/ecx: (addr byte) = s-&gt;data</span>
<span id="L88" class="LineNr"> 88 </span> 81 0/subop/add %ecx 0xc/imm32
<span id="L89" class="LineNr"> 89 </span> {
<span id="L90" class="LineNr"> 90 </span> <span class="subxComment"># loop termination check</span>
<span id="L91" class="LineNr"> 91 </span> b8/copy-to-eax 0/imm32
<span id="L92" class="LineNr"> 92 </span> 8a/byte-&gt; *ecx 0/r32/eax
<span id="L93" class="LineNr"> 93 </span> 3d/compare-eax-and 0/imm32
<span id="L94" class="LineNr"> 94 </span> 0f 84/jump-if-= <span class="Constant">break</span>/disp32
<span id="L95" class="LineNr"> 95 </span> <span class="subxComment"># loop body</span>
<span id="L96" class="LineNr"> 96 </span> (<a href='317abort.subx.html#L118'>skip-to-next-space</a> %ecx) <span class="subxComment"># =&gt; edx</span>
<span id="L97" class="LineNr"> 97 </span> 42/increment-edx
<span id="L98" class="LineNr"> 98 </span> (<a href='317abort.subx.html#L159'>skip-to-next-newline</a> %edx) <span class="subxComment"># =&gt; ebx</span>
<span id="L99" class="LineNr"> 99 </span> (<a href='118parse-hex-int.subx.html#L417'>parse-hex-int-helper</a> %edx %ebx) <span class="subxComment"># =&gt; eax</span>
<span id="L100" class="LineNr">100 </span> 43/increment-ebx
<span id="L101" class="LineNr">101 </span> (<a href='317abort.subx.html#L200'>label-append</a> *(ebp+8) %eax %ecx %edx)
<span id="L102" class="LineNr">102 </span> <span class="subxComment"># loop update</span>
<span id="L103" class="LineNr">103 </span> 89/&lt;- %ecx 3/r32/ebx
<span id="L104" class="LineNr">104 </span> <span class="subxComment">#</span>
<span id="L105" class="LineNr">105 </span> e9/jump <span class="Constant">loop</span>/disp32
<span id="L106" class="LineNr">106 </span> }
<span id="L107" class="LineNr">107 </span><span class="Constant">$load-debug-symbols:end</span>:
<span id="L108" class="LineNr">108 </span> <span class="subxS1Comment"># . restore registers</span>
<span id="L109" class="LineNr">109 </span> 5b/pop-to-ebx
<span id="L110" class="LineNr">110 </span> 5a/pop-to-edx
<span id="L111" class="LineNr">111 </span> 59/pop-to-ecx
<span id="L112" class="LineNr">112 </span> 58/pop-to-eax
<span id="L113" class="LineNr">113 </span> <span class="subxS1Comment"># . epilogue</span>
<span id="L114" class="LineNr">114 </span> 89/&lt;- %esp 5/r32/ebp
<span id="L115" class="LineNr">115 </span> 5d/pop-to-ebp
<span id="L116" class="LineNr">116 </span> c3/return
<span id="L117" class="LineNr">117 </span>
<span id="L118" class="LineNr">118 </span><span class="subxFunction">skip-to-next-space</span>: <span class="subxComment"># curr: (addr byte) -&gt; _/edx: (addr byte)</span>
<span id="L119" class="LineNr">119 </span> <span class="subxS1Comment"># . prologue</span>
<span id="L120" class="LineNr">120 </span> 55/push-ebp
<span id="L121" class="LineNr">121 </span> 89/&lt;- %ebp 4/r32/esp
<span id="L122" class="LineNr">122 </span> <span class="subxS1Comment"># . save registers</span>
<span id="L123" class="LineNr">123 </span> 50/push-eax
<span id="L124" class="LineNr">124 </span> <span class="subxComment"># eax = 0</span>
<span id="L125" class="LineNr">125 </span> b8/copy-to-eax 0/imm32
<span id="L126" class="LineNr">126 </span> <span class="subxComment">#</span>
<span id="L127" class="LineNr">127 </span> 8b/-&gt; *(ebp+8) 2/r32/edx
<span id="L128" class="LineNr">128 </span> {
<span id="L129" class="LineNr">129 </span> 8a/byte-&gt; *edx 0/r32/eax
<span id="L130" class="LineNr">130 </span> 3d/compare-eax-and 0x20/imm32/space
<span id="L131" class="LineNr">131 </span> 0f 84/jump-if-= <span class="Constant">break</span>/disp32
<span id="L132" class="LineNr">132 </span> 3d/compare-eax-and 0/imm32
<span id="L133" class="LineNr">133 </span> {
<span id="L134" class="LineNr">134 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8
<span id="L135" class="LineNr">135 </span> (<a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 <span class="Constant">&quot;done loading&quot;</span> 7 0)
<span id="L136" class="LineNr">136 </span> {
<span id="L137" class="LineNr">137 </span> eb/jump <span class="Constant">loop</span>/disp8
<span id="L138" class="LineNr">138 </span> }
<span id="L139" class="LineNr">139 </span> }
<span id="L140" class="LineNr">140 </span> 3d/compare-eax-and 0xa/imm32/newline
<span id="L141" class="LineNr">141 </span> {
<span id="L142" class="LineNr">142 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8
<span id="L143" class="LineNr">143 </span> (<a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 <span class="Constant">&quot;unexpected newline&quot;</span> 7 0)
<span id="L144" class="LineNr">144 </span> {
<span id="L145" class="LineNr">145 </span> eb/jump <span class="Constant">loop</span>/disp8
<span id="L146" class="LineNr">146 </span> }
<span id="L147" class="LineNr">147 </span> }
<span id="L148" class="LineNr">148 </span> 42/increment-edx
<span id="L149" class="LineNr">149 </span> e9/jump <span class="Constant">loop</span>/disp32
<span id="L150" class="LineNr">150 </span> }
<span id="L151" class="LineNr">151 </span><span class="Constant">$skip-to-next-space:end</span>:
<span id="L152" class="LineNr">152 </span> <span class="subxS1Comment"># . restore registers</span>
<span id="L153" class="LineNr">153 </span> 58/pop-to-eax
<span id="L154" class="LineNr">154 </span> <span class="subxS1Comment"># . epilogue</span>
<span id="L155" class="LineNr">155 </span> 89/&lt;- %esp 5/r32/ebp
<span id="L156" class="LineNr">156 </span> 5d/pop-to-ebp
<span id="L157" class="LineNr">157 </span> c3/return
<span id="L158" class="LineNr">158 </span>
<span id="L159" class="LineNr">159 </span><span class="subxFunction">skip-to-next-newline</span>: <span class="subxComment"># curr: (addr byte) -&gt; _/ebx: (addr byte)</span>
<span id="L160" class="LineNr">160 </span> <span class="subxS1Comment"># . prologue</span>
<span id="L161" class="LineNr">161 </span> 55/push-ebp
<span id="L162" class="LineNr">162 </span> 89/&lt;- %ebp 4/r32/esp
<span id="L163" class="LineNr">163 </span> <span class="subxS1Comment"># . save registers</span>
<span id="L164" class="LineNr">164 </span> 50/push-eax
<span id="L165" class="LineNr">165 </span> <span class="subxComment"># eax = 0</span>
<span id="L166" class="LineNr">166 </span> b8/copy-to-eax 0/imm32
<span id="L167" class="LineNr">167 </span> <span class="subxComment">#</span>
<span id="L168" class="LineNr">168 </span> 8b/-&gt; *(ebp+8) 3/r32/ebx
<span id="L169" class="LineNr">169 </span> {
<span id="L170" class="LineNr">170 </span> 8a/byte-&gt; *ebx 0/r32/eax
<span id="L171" class="LineNr">171 </span> 3d/compare-eax-and 0xa/imm32/newline
<span id="L172" class="LineNr">172 </span> 0f 84/jump-if-= <span class="Constant">break</span>/disp32
<span id="L173" class="LineNr">173 </span> 3d/compare-eax-and 0/imm32
<span id="L174" class="LineNr">174 </span> {
<span id="L175" class="LineNr">175 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8
<span id="L176" class="LineNr">176 </span> (<a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 <span class="Constant">&quot;done loading&quot;</span> 7 0)
<span id="L177" class="LineNr">177 </span> {
<span id="L178" class="LineNr">178 </span> eb/jump <span class="Constant">loop</span>/disp8
<span id="L179" class="LineNr">179 </span> }
<span id="L180" class="LineNr">180 </span> }
<span id="L181" class="LineNr">181 </span> 3d/compare-eax-and 0x20/imm32/space
<span id="L182" class="LineNr">182 </span> {
<span id="L183" class="LineNr">183 </span> 75/jump-if-!= <span class="Constant">break</span>/disp8
<span id="L184" class="LineNr">184 </span> (<a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 <span class="Constant">&quot;unexpected space&quot;</span> 7 0)
<span id="L185" class="LineNr">185 </span> {
<span id="L186" class="LineNr">186 </span> eb/jump <span class="Constant">loop</span>/disp8
<span id="L187" class="LineNr">187 </span> }
<span id="L188" class="LineNr">188 </span> }
<span id="L189" class="LineNr">189 </span> 43/increment-ebx
<span id="L190" class="LineNr">190 </span> e9/jump <span class="Constant">loop</span>/disp32
<span id="L191" class="LineNr">191 </span> }
<span id="L192" class="LineNr">192 </span><span class="Constant">$skip-to-next-newline:end</span>:
<span id="L193" class="LineNr">193 </span> <span class="subxS1Comment"># . restore registers</span>
<span id="L194" class="LineNr">194 </span> 58/pop-to-eax
<span id="L195" class="LineNr">195 </span> <span class="subxS1Comment"># . epilogue</span>
<span id="L196" class="LineNr">196 </span> 89/&lt;- %esp 5/r32/ebp
<span id="L197" class="LineNr">197 </span> 5d/pop-to-ebp
<span id="L198" class="LineNr">198 </span> c3/return
<span id="L199" class="LineNr">199 </span>
<span id="L200" class="LineNr">200 </span><span class="subxFunction">label-append</span>: <span class="subxComment"># labels: (addr stream {start-address, label-slice}), address: int, start: int, end: int</span>
<span id="L201" class="LineNr">201 </span> <span class="subxS1Comment"># . prologue</span>
<span id="L202" class="LineNr">202 </span> 55/push-ebp
<span id="L203" class="LineNr">203 </span> 89/&lt;- %ebp 4/r32/esp
<span id="L204" class="LineNr">204 </span> <span class="subxS1Comment"># . save registers</span>
<span id="L205" class="LineNr">205 </span> 50/push-eax
<span id="L206" class="LineNr">206 </span> 51/push-ecx
<span id="L207" class="LineNr">207 </span> 56/push-esi
<span id="L208" class="LineNr">208 </span> <span class="subxComment"># esi = labels</span>
<span id="L209" class="LineNr">209 </span> 8b/-&gt; *(ebp+8) 6/r32/esi
<span id="L210" class="LineNr">210 </span> <span class="subxComment"># ecx = labels-&gt;write</span>
<span id="L211" class="LineNr">211 </span> 8b/-&gt; *esi 1/r32/ecx
<span id="L212" class="LineNr">212 </span> <span class="subxComment"># labels-&gt;data[labels-&gt;write] = address</span>
<span id="L213" class="LineNr">213 </span> 8b/-&gt; *(ebp+0xc) 0/r32/eax
<span id="L214" class="LineNr">214 </span> 89/&lt;- *(esi+ecx+0xc) 0/r32/eax
<span id="L215" class="LineNr">215 </span> <span class="subxComment"># labels-&gt;data[labels-&gt;write+4] = start</span>
<span id="L216" class="LineNr">216 </span> 8b/-&gt; *(ebp+0x10) 0/r32/eax
<span id="L217" class="LineNr">217 </span> 89/&lt;- *(esi+ecx+0x10) 0/r32/eax
<span id="L218" class="LineNr">218 </span> <span class="subxComment"># labels-&gt;data[labels-&gt;write+8] = end</span>
<span id="L219" class="LineNr">219 </span> 8b/-&gt; *(ebp+0x14) 0/r32/eax
<span id="L220" class="LineNr">220 </span> 89/&lt;- *(esi+ecx+0x14) 0/r32/eax
<span id="L221" class="LineNr">221 </span> <span class="subxComment"># labels-&gt;write += 12</span>
<span id="L222" class="LineNr">222 </span> 81 0/subop/add *esi 0xc/imm32
<span id="L223" class="LineNr">223 </span><span class="Constant">$label-append:end</span>:
<span id="L224" class="LineNr">224 </span> <span class="subxS1Comment"># . restore registers</span>
<span id="L225" class="LineNr">225 </span> 5e/pop-to-esi
<span id="L226" class="LineNr">226 </span> 59/pop-to-ecx
<span id="L227" class="LineNr">227 </span> 58/pop-to-eax
<span id="L228" class="LineNr">228 </span> <span class="subxS1Comment"># . epilogue</span>
<span id="L229" class="LineNr">229 </span> 89/&lt;- %esp 5/r32/ebp
<span id="L230" class="LineNr">230 </span> 5d/pop-to-ebp
<span id="L231" class="LineNr">231 </span> c3/return
<span id="L232" class="LineNr">232 </span>
<span id="L233" class="LineNr">233 </span><span class="subxFunction">containing-function</span>: <span class="subxComment"># labels: (addr stream {start-address, label-slice}), address: int -&gt; start/eax: (addr byte), end/ecx: (addr byte)</span>
<span id="L234" class="LineNr">234 </span> <span class="subxS1Comment"># . prologue</span>
<span id="L235" class="LineNr">235 </span> 55/push-ebp
<span id="L236" class="LineNr">236 </span> 89/&lt;- %ebp 4/r32/esp
<span id="L237" class="LineNr">237 </span> <span class="subxS1Comment"># . save registers</span>
<span id="L238" class="LineNr">238 </span> 52/push-edx
<span id="L239" class="LineNr">239 </span> 53/push-ebx
<span id="L240" class="LineNr">240 </span> 56/push-esi
<span id="L241" class="LineNr">241 </span> <span class="subxComment"># esi = labels</span>
<span id="L242" class="LineNr">242 </span> 8b/-&gt; *(ebp+8) 6/r32/esi
<span id="L243" class="LineNr">243 </span> <span class="subxComment"># var curr/ecx: (addr byte) = labels-&gt;data</span>
<span id="L244" class="LineNr">244 </span> 8d/copy-address *(esi+0xc) 1/r32/ecx
<span id="L245" class="LineNr">245 </span> <span class="subxComment"># var max/edx: (addr byte) = labels-&gt;data + labels-&gt;write</span>
<span id="L246" class="LineNr">246 </span> 8b/-&gt; *esi 2/r32/edx
<span id="L247" class="LineNr">247 </span> 01/add-to %edx 1/r32/ecx
<span id="L248" class="LineNr">248 </span> <span class="subxComment"># var previous-function-name/ebx: (addr slice) = 0</span>
<span id="L249" class="LineNr">249 </span> bb/copy-to-ebx 0/imm32
<span id="L250" class="LineNr">250 </span> {
<span id="L251" class="LineNr">251 </span> <span class="subxComment"># abort if not found</span>
<span id="L252" class="LineNr">252 </span> 39/compare %ecx 2/r32/edx
<span id="L253" class="LineNr">253 </span> {
<span id="L254" class="LineNr">254 </span> 0f 82/jump-if-addr&lt; <span class="Constant">break</span>/disp32
<span id="L255" class="LineNr">255 </span> (<a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 <span class="Constant">&quot;failed to find function for address &quot;</span> 7 0)
<span id="L256" class="LineNr">256 </span> (<a href='501draw-text.mu.html#L330'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> 0 *(ebp+0xc) 7 0)
<span id="L257" class="LineNr">257 </span> {
<span id="L258" class="LineNr">258 </span> eb/jump <span class="Constant">loop</span>/disp8
<span id="L259" class="LineNr">259 </span> }
<span id="L260" class="LineNr">260 </span> }
<span id="L261" class="LineNr">261 </span> <span class="subxComment"># if *curr &gt; address, break</span>
<span id="L262" class="LineNr">262 </span> 8b/-&gt; *ecx 0/r32/eax
<span id="L263" class="LineNr">263 </span> 3b/compare 0/r32/eax *(ebp+0xc)
<span id="L264" class="LineNr">264 </span> 0f 87/jump-if-addr&gt; <span class="Constant">break</span>/disp32
<span id="L265" class="LineNr">265 </span> <span class="subxComment"># if **(curr+4) not '$' or '@', save curr to previous-function-name</span>
<span id="L266" class="LineNr">266 </span> {
<span id="L267" class="LineNr">267 </span> 8b/-&gt; *(ecx+4) 0/r32/eax
<span id="L268" class="LineNr">268 </span> 8a/byte-&gt; *eax 0/r32/eax
<span id="L269" class="LineNr">269 </span> 25/and-with-eax 0xff/imm32
<span id="L270" class="LineNr">270 </span> 3d/compare-eax-and 0x24/imm32/$
<span id="L271" class="LineNr">271 </span> 74/jump-if-= <span class="Constant">break</span>/disp8
<span id="L272" class="LineNr">272 </span> 3d/compare-eax-and 0x40/imm32/@
<span id="L273" class="LineNr">273 </span> 74/jump-if-= <span class="Constant">break</span>/disp8
<span id="L274" class="LineNr">274 </span> 8d/copy-address *(ecx+4) 3/r32/ebx
<span id="L275" class="LineNr">275 </span> }
<span id="L276" class="LineNr">276 </span> <span class="subxComment"># loop update</span>
<span id="L277" class="LineNr">277 </span> 81 0/subop/add %ecx 0xc/imm32
<span id="L278" class="LineNr">278 </span> <span class="subxComment">#</span>
<span id="L279" class="LineNr">279 </span> e9/jump <span class="Constant">loop</span>/disp32
<span id="L280" class="LineNr">280 </span> }
<span id="L281" class="LineNr">281 </span> 8b/-&gt; *ebx 0/r32/eax
<span id="L282" class="LineNr">282 </span> 8b/-&gt; *(ebx+4) 1/r32/ecx
<span id="L283" class="LineNr">283 </span><span class="Constant">$containing-function:end</span>:
<span id="L284" class="LineNr">284 </span> <span class="subxS1Comment"># . restore registers</span>
<span id="L285" class="LineNr">285 </span> 5e/pop-to-esi
<span id="L286" class="LineNr">286 </span> 5b/pop-to-ebx
<span id="L287" class="LineNr">287 </span> 5a/pop-to-edx
<span id="L288" class="LineNr">288 </span> <span class="subxS1Comment"># . epilogue</span>
<span id="L289" class="LineNr">289 </span> 89/&lt;- %esp 5/r32/ebp
<span id="L290" class="LineNr">290 </span> 5d/pop-to-ebp
<span id="L291" class="LineNr">291 </span> c3/return
<span id="L292" class="LineNr">292 </span>
<span id="L293" class="LineNr">293 </span><span class="subxComment"># unlike variants in .mu files, this only supports ASCII</span>
<span id="L294" class="LineNr">294 </span><span class="subxFunction">draw-slice-wrapping-right-then-down-from-cursor-over-full-screen</span>: <span class="subxComment"># screen: (addr screen), start: (addr byte), end: (addr byte), color: int, background-color: int</span>
<span id="L295" class="LineNr">295 </span> <span class="subxS1Comment"># . prologue</span>
<span id="L296" class="LineNr">296 </span> 55/push-ebp
<span id="L297" class="LineNr">297 </span> 89/&lt;- %ebp 4/r32/esp
<span id="L298" class="LineNr">298 </span> <span class="subxS1Comment"># . save registers</span>
<span id="L299" class="LineNr">299 </span> 50/push-eax
<span id="L300" class="LineNr">300 </span> 51/push-ecx
<span id="L301" class="LineNr">301 </span> 52/push-edx
<span id="L302" class="LineNr">302 </span> <span class="subxComment"># var curr/ecx: (addr byte) = start</span>
<span id="L303" class="LineNr">303 </span> 8b/-&gt; *(ebp+0xc) 1/r32/ecx
<span id="L304" class="LineNr">304 </span> <span class="subxComment"># edx = end</span>
<span id="L305" class="LineNr">305 </span> 8b/-&gt; *(ebp+0x10) 2/r32/edx
<span id="L306" class="LineNr">306 </span> <span class="subxComment"># eax = 0</span>
<span id="L307" class="LineNr">307 </span> b8/copy-to-eax 0/imm32
<span id="L308" class="LineNr">308 </span> {
<span id="L309" class="LineNr">309 </span> <span class="subxComment"># if (curr &gt;= end) break</span>
<span id="L310" class="LineNr">310 </span> 39/compare %ecx 2/r32/edx
<span id="L311" class="LineNr">311 </span> 73/jump-if-addr&gt;= <span class="Constant">break</span>/disp8
<span id="L312" class="LineNr">312 </span> <span class="subxComment"># print *curr</span>
<span id="L313" class="LineNr">313 </span> 8a/byte-&gt; *ecx 0/r32/eax
<span id="L314" class="LineNr">314 </span> (<a href='501draw-text.mu.html#L84'>draw-grapheme-at-cursor</a> *(ebp+8) %eax *(ebp+0x14) *(ebp+0x18))
<span id="L315" class="LineNr">315 </span> (<a href='501draw-text.mu.html#L239'>move-cursor-rightward-and-downward</a> *(ebp+8))
<span id="L316" class="LineNr">316 </span> <span class="subxComment">#</span>
<span id="L317" class="LineNr">317 </span> 41/increment-ecx
<span id="L318" class="LineNr">318 </span> <span class="subxComment">#</span>
<span id="L319" class="LineNr">319 </span> eb/jump <span class="Constant">loop</span>/disp8
<span id="L320" class="LineNr">320 </span> }
<span id="L321" class="LineNr">321 </span><span class="Constant">$draw-slice-wrapping-right-then-down-from-cursor-over-full-screen:end</span>:
<span id="L322" class="LineNr">322 </span> <span class="subxS1Comment"># . restore registers</span>
<span id="L323" class="LineNr">323 </span> 5a/pop-to-edx
<span id="L324" class="LineNr">324 </span> 59/pop-to-ecx
<span id="L325" class="LineNr">325 </span> 58/pop-to-eax
<span id="L326" class="LineNr">326 </span> <span class="subxS1Comment"># . epilogue</span>
<span id="L327" class="LineNr">327 </span> 89/&lt;- %esp 5/r32/ebp
<span id="L328" class="LineNr">328 </span> 5d/pop-to-ebp
<span id="L329" class="LineNr">329 </span> c3/return
</pre>
</body>
</html>

View File

@ -1,29 +1,29 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 318debug-counter.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.SpecialChar { color: #d70000; }
.subxComment { color: #005faf; }
.subxS1Comment { color: #0000af; }
.LineNr { }
.subxFunction { color: #af5f00; text-decoration: underline; }
.subxS1Comment { color: #0000af; }
.SpecialChar { color: #d70000; }
.Constant { color: #008787; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

View File

@ -1,29 +1,29 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 319timer.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxFunction { color: #af5f00; text-decoration: underline; }
.SpecialChar { color: #d70000; }
.LineNr { }
.subxS1Comment { color: #0000af; }
.subxComment { color: #005faf; }
.subxS1Comment { color: #0000af; }
.LineNr { }
.subxFunction { color: #af5f00; text-decoration: underline; }
.Constant { color: #008787; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

182
html/400.mu.html generated
View File

@ -1,29 +1,29 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 400.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.LineNr { }
.muRegEbx { color: #5f00ff; }
.muRegEcx { color: #870000; }
.muRegEdx { color: #af5f00; }
.LineNr { }
.muComment { color: #005faf; }
.muRegEbx { color: #5f00ff; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -71,8 +71,8 @@ if ('onhashchange' in window) {
<span id="L14" class="LineNr"> 14 </span><span class="PreProc">sig</span> <a href='102keyboard.subx.html#L21'>read-key</a> kbd: (addr keyboard)<span class="PreProc"> -&gt; </span>_/eax: byte
<span id="L15" class="LineNr"> 15 </span>
<span id="L16" class="LineNr"> 16 </span><span class="muComment"># disk</span>
<span id="L17" class="LineNr"> 17 </span><span class="PreProc">sig</span> <a href='boot.subx.html#L976'>load-sectors</a> disk: (addr disk), lba: int, n: int, out: (addr stream byte)
<span id="L18" class="LineNr"> 18 </span><span class="PreProc">sig</span> <a href='boot.subx.html#L1045'>store-sectors</a> disk: (addr disk), lba: int, n: int, out: (addr stream byte)
<span id="L17" class="LineNr"> 17 </span><span class="PreProc">sig</span> <a href='boot.subx.html#L976'>read-ata-disk</a> disk: (addr disk), lba: int, n: int, out: (addr stream byte)
<span id="L18" class="LineNr"> 18 </span><span class="PreProc">sig</span> <a href='boot.subx.html#L1045'>write-ata-disk</a> disk: (addr disk), lba: int, n: int, out: (addr stream byte)
<span id="L19" class="LineNr"> 19 </span>
<span id="L20" class="LineNr"> 20 </span><span class="muComment"># mouse</span>
<span id="L21" class="LineNr"> 21 </span><span class="PreProc">sig</span> <a href='boot.subx.html#L1451'>read-mouse-event</a><span class="PreProc"> -&gt; </span>_/eax: int, _/<span class="muRegEcx">ecx</span>: int
@ -95,85 +95,87 @@ if ('onhashchange' in window) {
<span id="L38" class="LineNr"> 38 </span><span class="PreProc">sig</span> <a href='315stack-debug.subx.html#L108'>turn-off-debug-print</a>
<span id="L39" class="LineNr"> 39 </span><span class="PreProc">sig</span> <a href='317abort.subx.html#L5'>abort</a> e: (addr array byte)
<span id="L40" class="LineNr"> 40 </span><span class="PreProc">sig</span> <a href='317abort.subx.html#L21'>dump-call-stack</a>
<span id="L41" class="LineNr"> 41 </span>
<span id="L42" class="LineNr"> 42 </span><span class="PreProc">sig</span> <a href='318debug-counter.subx.html#L5'>count-event</a>
<span id="L43" class="LineNr"> 43 </span><span class="PreProc">sig</span> <a href='318debug-counter.subx.html#L17'>count-of-events</a><span class="PreProc"> -&gt; </span>_/eax: int
<span id="L44" class="LineNr"> 44 </span>
<span id="L45" class="LineNr"> 45 </span><span class="muComment"># streams</span>
<span id="L46" class="LineNr"> 46 </span><span class="PreProc">sig</span> <a href='106stream.subx.html#L20'>clear-stream</a> f: (addr stream _)
<span id="L47" class="LineNr"> 47 </span><span class="PreProc">sig</span> <a href='106stream.subx.html#L59'>rewind-stream</a> f: (addr stream _)
<span id="L48" class="LineNr"> 48 </span><span class="PreProc">sig</span> <a href='109stream-equal.subx.html#L9'>stream-data-equal?</a> f: (addr stream byte), s: (addr array byte)<span class="PreProc"> -&gt; </span>_/eax: boolean
<span id="L49" class="LineNr"> 49 </span><span class="PreProc">sig</span> <a href='309stream.subx.html#L211'>streams-data-equal?</a> a: (addr stream byte), b: (addr stream byte)<span class="PreProc"> -&gt; </span>_/eax: boolean
<span id="L50" class="LineNr"> 50 </span><span class="PreProc">sig</span> <a href='109stream-equal.subx.html#L194'>check-stream-equal</a> f: (addr stream byte), s: (addr array byte), msg: (addr array byte)
<span id="L51" class="LineNr"> 51 </span><span class="PreProc">sig</span> <a href='309stream.subx.html#L300'>check-streams-data-equal</a> s: (addr stream _), expected: (addr stream _), msg: (addr array byte)
<span id="L52" class="LineNr"> 52 </span><span class="PreProc">sig</span> <a href='109stream-equal.subx.html#L230'>next-stream-line-equal?</a> f: (addr stream byte), s: (addr array byte)<span class="PreProc"> -&gt; </span>_/eax: boolean
<span id="L53" class="LineNr"> 53 </span><span class="PreProc">sig</span> <a href='109stream-equal.subx.html#L565'>check-next-stream-line-equal</a> f: (addr stream byte), s: (addr array byte), msg: (addr array byte)
<span id="L54" class="LineNr"> 54 </span><span class="PreProc">sig</span> <a href='108write.subx.html#L11'>write</a> f: (addr stream byte), s: (addr array byte)
<span id="L55" class="LineNr"> 55 </span><span class="PreProc">sig</span> <a href='108write.subx.html#L138'>try-write</a> f: (addr stream byte), s: (addr array byte)<span class="PreProc"> -&gt; </span>_/eax: boolean
<span id="L56" class="LineNr"> 56 </span><span class="muComment"># probably a bad idea; I definitely want to discourage its use for streams of non-bytes</span>
<span id="L57" class="LineNr"> 57 </span><span class="PreProc">sig</span> <a href='108write.subx.html#L194'>stream-size</a> f: (addr stream byte)<span class="PreProc"> -&gt; </span>_/eax: int
<span id="L58" class="LineNr"> 58 </span><span class="PreProc">sig</span> <a href='108write.subx.html#L176'>space-remaining-in-stream</a> f: (addr stream byte)<span class="PreProc"> -&gt; </span>_/eax: int
<span id="L59" class="LineNr"> 59 </span><span class="PreProc">sig</span> <a href='113write-stream.subx.html#L8'>write-stream</a> f: (addr stream byte), s: (addr stream byte)
<span id="L60" class="LineNr"> 60 </span><span class="PreProc">sig</span> <a href='113write-stream.subx.html#L163'>write-stream-immutable</a> f: (addr stream byte), s: (addr stream byte)
<span id="L61" class="LineNr"> 61 </span><span class="PreProc">sig</span> <a href='112read-byte.subx.html#L13'>read-byte</a> s: (addr stream byte)<span class="PreProc"> -&gt; </span>_/eax: byte
<span id="L62" class="LineNr"> 62 </span><span class="PreProc">sig</span> <a href='115write-byte.subx.html#L12'>append-byte</a> f: (addr stream byte), n: int <span class="muComment"># really just a byte, but I want to pass in literal numbers</span>
<span id="L63" class="LineNr"> 63 </span><span class="muComment">#sig to-hex-char in/eax: int -&gt; out/eax: int</span>
<span id="L64" class="LineNr"> 64 </span><span class="PreProc">sig</span> <a href='117write-int-hex.subx.html#L21'>append-byte-hex</a> f: (addr stream byte), n: int <span class="muComment"># really just a byte, but I want to pass in literal numbers</span>
<span id="L65" class="LineNr"> 65 </span><span class="PreProc">sig</span> <a href='117write-int-hex.subx.html#L92'>write-int32-hex</a> f: (addr stream byte), n: int
<span id="L66" class="LineNr"> 66 </span><span class="PreProc">sig</span> <a href='117write-int-hex.subx.html#L123'>write-int32-hex-bits</a> f: (addr stream byte), n: int, bits: int
<span id="L67" class="LineNr"> 67 </span><span class="PreProc">sig</span> <a href='118parse-hex-int.subx.html#L9'>hex-int?</a> in: (addr slice)<span class="PreProc"> -&gt; </span>_/eax: boolean
<span id="L68" class="LineNr"> 68 </span><span class="PreProc">sig</span> <a href='118parse-hex-int.subx.html#L354'>parse-hex-int</a> in: (addr array byte)<span class="PreProc"> -&gt; </span>_/eax: int
<span id="L69" class="LineNr"> 69 </span><span class="PreProc">sig</span> <a href='118parse-hex-int.subx.html#L387'>parse-hex-int-from-slice</a> in: (addr slice)<span class="PreProc"> -&gt; </span>_/eax: int
<span id="L70" class="LineNr"> 70 </span><span class="muComment">#sig parse-hex-int-helper start: (addr byte), end: (addr byte) -&gt; _/eax: int</span>
<span id="L71" class="LineNr"> 71 </span><span class="PreProc">sig</span> <a href='118parse-hex-int.subx.html#L701'>hex-digit?</a> c: byte<span class="PreProc"> -&gt; </span>_/eax: boolean
<span id="L72" class="LineNr"> 72 </span><span class="muComment">#sig from-hex-char in/eax: byte -&gt; out/eax: nibble</span>
<span id="L73" class="LineNr"> 73 </span><span class="PreProc">sig</span> <a href='311decimal-int.subx.html#L23'>parse-decimal-int</a> in: (addr array byte)<span class="PreProc"> -&gt; </span>_/eax: int
<span id="L74" class="LineNr"> 74 </span><span class="PreProc">sig</span> <a href='311decimal-int.subx.html#L4'>parse-decimal-int-from-slice</a> in: (addr slice)<span class="PreProc"> -&gt; </span>_/eax: int
<span id="L75" class="LineNr"> 75 </span><span class="PreProc">sig</span> <a href='311decimal-int.subx.html#L48'>parse-decimal-int-from-stream</a> in: (addr stream byte)<span class="PreProc"> -&gt; </span>_/eax: int
<span id="L76" class="LineNr"> 76 </span><span class="muComment">#sig parse-decimal-int-helper start: (addr byte), end: (addr byte) -&gt; _/eax: int</span>
<span id="L77" class="LineNr"> 77 </span><span class="PreProc">sig</span> <a href='311decimal-int.subx.html#L312'>decimal-size</a> n: int<span class="PreProc"> -&gt; </span>_/eax: int
<span id="L78" class="LineNr"> 78 </span><span class="muComment">#sig allocate ad: (addr allocation-descriptor), n: int, out: (addr handle _)</span>
<span id="L79" class="LineNr"> 79 </span><span class="muComment">#sig allocate-raw ad: (addr allocation-descriptor), n: int, out: (addr handle _)</span>
<span id="L80" class="LineNr"> 80 </span><span class="PreProc">sig</span> <a href='120allocate.subx.html#L223'>lookup</a> h: (handle _T)<span class="PreProc"> -&gt; </span>_/eax: (addr _T)
<span id="L81" class="LineNr"> 81 </span><span class="PreProc">sig</span> <a href='120allocate.subx.html#L448'>handle-equal?</a> a: (handle _T), b: (handle _T)<span class="PreProc"> -&gt; </span>_/eax: boolean
<span id="L82" class="LineNr"> 82 </span><span class="PreProc">sig</span> <a href='120allocate.subx.html#L479'>copy-handle</a> src: (handle _T), dest: (addr handle _T)
<span id="L83" class="LineNr"> 83 </span><span class="muComment">#sig allocate-region ad: (addr allocation-descriptor), n: int, out: (addr handle allocation-descriptor)</span>
<span id="L84" class="LineNr"> 84 </span><span class="muComment">#sig allocate-array ad: (addr allocation-descriptor), n: int, out: (addr handle _)</span>
<span id="L85" class="LineNr"> 85 </span><span class="PreProc">sig</span> <a href='120allocate.subx.html#L690'>copy-array</a> ad: (addr allocation-descriptor), src: (addr array _T), out: (addr handle array _T)
<span id="L86" class="LineNr"> 86 </span><span class="muComment">#sig zero-out start: (addr byte), size: int</span>
<span id="L87" class="LineNr"> 87 </span><span class="PreProc">sig</span> <a href='123slice.subx.html#L9'>slice-empty?</a> s: (addr slice)<span class="PreProc"> -&gt; </span>_/eax: boolean
<span id="L88" class="LineNr"> 88 </span><span class="PreProc">sig</span> <a href='123slice.subx.html#L120'>slice-equal?</a> s: (addr slice), p: (addr array byte)<span class="PreProc"> -&gt; </span>_/eax: boolean
<span id="L89" class="LineNr"> 89 </span><span class="PreProc">sig</span> <a href='123slice.subx.html#L487'>slice-starts-with?</a> s: (addr slice), head: (addr array byte)<span class="PreProc"> -&gt; </span>_/eax: boolean
<span id="L90" class="LineNr"> 90 </span><span class="PreProc">sig</span> <a href='123slice.subx.html#L793'>write-slice</a> out: (addr stream byte), s: (addr slice)
<span id="L91" class="LineNr"> 91 </span><span class="muComment"># bad name alert</span>
<span id="L92" class="LineNr"> 92 </span><span class="PreProc">sig</span> <a href='123slice.subx.html#L898'>slice-to-string</a> ad: (addr allocation-descriptor), in: (addr slice), out: (addr handle array byte)
<span id="L93" class="LineNr"> 93 </span><span class="PreProc">sig</span> <a href='126write-int-decimal.subx.html#L8'>write-int32-decimal</a> out: (addr stream byte), n: int
<span id="L94" class="LineNr"> 94 </span><span class="PreProc">sig</span> <a href='126write-int-decimal.subx.html#L327'>decimal-digit?</a> c: grapheme<span class="PreProc"> -&gt; </span>_/eax: boolean
<span id="L95" class="LineNr"> 95 </span><span class="PreProc">sig</span> <a href='126write-int-decimal.subx.html#L426'>to-decimal-digit</a> in: grapheme<span class="PreProc"> -&gt; </span>_/eax: int
<span id="L96" class="LineNr"> 96 </span><span class="muComment"># bad name alert</span>
<span id="L97" class="LineNr"> 97 </span><span class="muComment"># next-word really tokenizes</span>
<span id="L98" class="LineNr"> 98 </span><span class="muComment"># next-raw-word really reads whitespace-separated words</span>
<span id="L99" class="LineNr"> 99 </span><span class="PreProc">sig</span> <a href='127next-word.subx.html#L11'>next-word</a> line: (addr stream byte), out: (addr slice) <span class="muComment"># skips '#' comments</span>
<span id="L100" class="LineNr">100 </span><span class="PreProc">sig</span> <a href='127next-word.subx.html#L306'>next-raw-word</a> line: (addr stream byte), out: (addr slice) <span class="muComment"># does not skip '#' comments</span>
<span id="L101" class="LineNr">101 </span><span class="PreProc">sig</span> <a href='124next-token.subx.html#L188'>skip-chars-matching</a> in: (addr stream byte), delimiter: byte
<span id="L102" class="LineNr">102 </span><span class="PreProc">sig</span> <a href='124next-token.subx.html#L311'>skip-chars-matching-whitespace</a> in: (addr stream byte)
<span id="L103" class="LineNr">103 </span><span class="PreProc">sig</span> <a href='124next-token.subx.html#L401'>skip-chars-not-matching</a> in: (addr stream byte), delimiter: byte
<span id="L104" class="LineNr">104 </span><span class="PreProc">sig</span> <a href='124next-token.subx.html#L563'>skip-chars-not-matching-whitespace</a> in: (addr stream byte)
<span id="L105" class="LineNr">105 </span><span class="PreProc">sig</span> <a href='309stream.subx.html#L6'>stream-empty?</a> s: (addr stream _)<span class="PreProc"> -&gt; </span>_/eax: boolean
<span id="L106" class="LineNr">106 </span><span class="PreProc">sig</span> <a href='309stream.subx.html#L30'>stream-full?</a> s: (addr stream _)<span class="PreProc"> -&gt; </span>_/eax: boolean
<span id="L107" class="LineNr">107 </span><span class="PreProc">sig</span> <a href='310copy-bytes.subx.html#L60'>stream-to-array</a> in: (addr stream _), out: (addr handle array _)
<span id="L108" class="LineNr">108 </span><span class="PreProc">sig</span> <a href='310copy-bytes.subx.html#L124'>unquote-stream-to-array</a> in: (addr stream _), out: (addr handle array _)
<span id="L109" class="LineNr">109 </span><span class="PreProc">sig</span> <a href='309stream.subx.html#L154'>stream-first</a> s: (addr stream byte)<span class="PreProc"> -&gt; </span>_/eax: byte
<span id="L110" class="LineNr">110 </span><span class="PreProc">sig</span> <a href='309stream.subx.html#L181'>stream-final</a> s: (addr stream byte)<span class="PreProc"> -&gt; </span>_/eax: byte
<span id="L111" class="LineNr">111 </span>
<span id="L112" class="LineNr">112 </span><span class="muComment">#sig copy-bytes src: (addr byte), dest: (addr byte), n: int</span>
<span id="L113" class="LineNr">113 </span><span class="PreProc">sig</span> <a href='312copy.subx.html#L3'>copy-array-object</a> src: (addr array _), dest-ah: (addr handle array _)
<span id="L114" class="LineNr">114 </span><span class="PreProc">sig</span> <a href='301array-equal.subx.html#L5'>array-equal?</a> a: (addr array int), b: (addr array int)<span class="PreProc"> -&gt; </span>_/eax: boolean
<span id="L115" class="LineNr">115 </span><span class="PreProc">sig</span> <a href='301array-equal.subx.html#L368'>parse-array-of-ints</a> s: (addr array byte), out: (addr handle array int)
<span id="L116" class="LineNr">116 </span><span class="PreProc">sig</span> <a href='311decimal-int.subx.html#L623'>parse-array-of-decimal-ints</a> s: (addr array byte), out: (addr handle array int)
<span id="L117" class="LineNr">117 </span><span class="PreProc">sig</span> <a href='301array-equal.subx.html#L382'>check-array-equal</a> a: (addr array int), expected: (addr string), msg: (addr string)
<span id="L118" class="LineNr">118 </span>
<span id="L119" class="LineNr">119 </span><span class="PreProc">sig</span> <a href='314divide.subx.html#L3'>integer-divide</a> a: int, b: int<span class="PreProc"> -&gt; </span>_/eax: int, _/<span class="muRegEdx">edx</span>: int
<span id="L41" class="LineNr"> 41 </span><span class="PreProc">sig</span> <a href='120allocate.subx.html#L78'>heap-bound</a><span class="PreProc"> -&gt; </span>_/eax: int
<span id="L42" class="LineNr"> 42 </span>
<span id="L43" class="LineNr"> 43 </span><span class="PreProc">sig</span> <a href='318debug-counter.subx.html#L5'>count-event</a>
<span id="L44" class="LineNr"> 44 </span><span class="PreProc">sig</span> <a href='318debug-counter.subx.html#L17'>count-of-events</a><span class="PreProc"> -&gt; </span>_/eax: int
<span id="L45" class="LineNr"> 45 </span>
<span id="L46" class="LineNr"> 46 </span><span class="muComment"># streams</span>
<span id="L47" class="LineNr"> 47 </span><span class="PreProc">sig</span> <a href='106stream.subx.html#L20'>clear-stream</a> f: (addr stream _)
<span id="L48" class="LineNr"> 48 </span><span class="PreProc">sig</span> <a href='106stream.subx.html#L59'>rewind-stream</a> f: (addr stream _)
<span id="L49" class="LineNr"> 49 </span><span class="PreProc">sig</span> <a href='109stream-equal.subx.html#L9'>stream-data-equal?</a> f: (addr stream byte), s: (addr array byte)<span class="PreProc"> -&gt; </span>_/eax: boolean
<span id="L50" class="LineNr"> 50 </span><span class="PreProc">sig</span> <a href='309stream.subx.html#L211'>streams-data-equal?</a> a: (addr stream byte), b: (addr stream byte)<span class="PreProc"> -&gt; </span>_/eax: boolean
<span id="L51" class="LineNr"> 51 </span><span class="PreProc">sig</span> <a href='109stream-equal.subx.html#L194'>check-stream-equal</a> f: (addr stream byte), s: (addr array byte), msg: (addr array byte)
<span id="L52" class="LineNr"> 52 </span><span class="PreProc">sig</span> <a href='309stream.subx.html#L300'>check-streams-data-equal</a> s: (addr stream _), expected: (addr stream _), msg: (addr array byte)
<span id="L53" class="LineNr"> 53 </span><span class="PreProc">sig</span> <a href='109stream-equal.subx.html#L230'>next-stream-line-equal?</a> f: (addr stream byte), s: (addr array byte)<span class="PreProc"> -&gt; </span>_/eax: boolean
<span id="L54" class="LineNr"> 54 </span><span class="PreProc">sig</span> <a href='109stream-equal.subx.html#L565'>check-next-stream-line-equal</a> f: (addr stream byte), s: (addr array byte), msg: (addr array byte)
<span id="L55" class="LineNr"> 55 </span><span class="PreProc">sig</span> <a href='108write.subx.html#L11'>write</a> f: (addr stream byte), s: (addr array byte)
<span id="L56" class="LineNr"> 56 </span><span class="PreProc">sig</span> <a href='108write.subx.html#L138'>try-write</a> f: (addr stream byte), s: (addr array byte)<span class="PreProc"> -&gt; </span>_/eax: boolean
<span id="L57" class="LineNr"> 57 </span><span class="muComment"># probably a bad idea; I definitely want to discourage its use for streams of non-bytes</span>
<span id="L58" class="LineNr"> 58 </span><span class="PreProc">sig</span> <a href='108write.subx.html#L194'>stream-size</a> f: (addr stream byte)<span class="PreProc"> -&gt; </span>_/eax: int
<span id="L59" class="LineNr"> 59 </span><span class="PreProc">sig</span> <a href='108write.subx.html#L176'>space-remaining-in-stream</a> f: (addr stream byte)<span class="PreProc"> -&gt; </span>_/eax: int
<span id="L60" class="LineNr"> 60 </span><span class="PreProc">sig</span> <a href='113write-stream.subx.html#L8'>write-stream</a> f: (addr stream byte), s: (addr stream byte)
<span id="L61" class="LineNr"> 61 </span><span class="PreProc">sig</span> <a href='113write-stream.subx.html#L163'>write-stream-immutable</a> f: (addr stream byte), s: (addr stream byte)
<span id="L62" class="LineNr"> 62 </span><span class="PreProc">sig</span> <a href='112read-byte.subx.html#L13'>read-byte</a> s: (addr stream byte)<span class="PreProc"> -&gt; </span>_/eax: byte
<span id="L63" class="LineNr"> 63 </span><span class="PreProc">sig</span> <a href='112read-byte.subx.html#L47'>peek-byte</a> s: (addr stream byte)<span class="PreProc"> -&gt; </span>_/eax: byte
<span id="L64" class="LineNr"> 64 </span><span class="PreProc">sig</span> <a href='115write-byte.subx.html#L12'>append-byte</a> f: (addr stream byte), n: int <span class="muComment"># really just a byte, but I want to pass in literal numbers</span>
<span id="L65" class="LineNr"> 65 </span><span class="muComment">#sig to-hex-char in/eax: int -&gt; out/eax: int</span>
<span id="L66" class="LineNr"> 66 </span><span class="PreProc">sig</span> <a href='117write-int-hex.subx.html#L21'>append-byte-hex</a> f: (addr stream byte), n: int <span class="muComment"># really just a byte, but I want to pass in literal numbers</span>
<span id="L67" class="LineNr"> 67 </span><span class="PreProc">sig</span> <a href='117write-int-hex.subx.html#L92'>write-int32-hex</a> f: (addr stream byte), n: int
<span id="L68" class="LineNr"> 68 </span><span class="PreProc">sig</span> <a href='117write-int-hex.subx.html#L123'>write-int32-hex-bits</a> f: (addr stream byte), n: int, bits: int
<span id="L69" class="LineNr"> 69 </span><span class="PreProc">sig</span> <a href='118parse-hex-int.subx.html#L9'>hex-int?</a> in: (addr slice)<span class="PreProc"> -&gt; </span>_/eax: boolean
<span id="L70" class="LineNr"> 70 </span><span class="PreProc">sig</span> <a href='118parse-hex-int.subx.html#L354'>parse-hex-int</a> in: (addr array byte)<span class="PreProc"> -&gt; </span>_/eax: int
<span id="L71" class="LineNr"> 71 </span><span class="PreProc">sig</span> <a href='118parse-hex-int.subx.html#L387'>parse-hex-int-from-slice</a> in: (addr slice)<span class="PreProc"> -&gt; </span>_/eax: int
<span id="L72" class="LineNr"> 72 </span><span class="muComment">#sig parse-hex-int-helper start: (addr byte), end: (addr byte) -&gt; _/eax: int</span>
<span id="L73" class="LineNr"> 73 </span><span class="PreProc">sig</span> <a href='118parse-hex-int.subx.html#L701'>hex-digit?</a> c: byte<span class="PreProc"> -&gt; </span>_/eax: boolean
<span id="L74" class="LineNr"> 74 </span><span class="muComment">#sig from-hex-char in/eax: byte -&gt; out/eax: nibble</span>
<span id="L75" class="LineNr"> 75 </span><span class="PreProc">sig</span> <a href='311decimal-int.subx.html#L23'>parse-decimal-int</a> in: (addr array byte)<span class="PreProc"> -&gt; </span>_/eax: int
<span id="L76" class="LineNr"> 76 </span><span class="PreProc">sig</span> <a href='311decimal-int.subx.html#L4'>parse-decimal-int-from-slice</a> in: (addr slice)<span class="PreProc"> -&gt; </span>_/eax: int
<span id="L77" class="LineNr"> 77 </span><span class="PreProc">sig</span> <a href='311decimal-int.subx.html#L48'>parse-decimal-int-from-stream</a> in: (addr stream byte)<span class="PreProc"> -&gt; </span>_/eax: int
<span id="L78" class="LineNr"> 78 </span><span class="muComment">#sig parse-decimal-int-helper start: (addr byte), end: (addr byte) -&gt; _/eax: int</span>
<span id="L79" class="LineNr"> 79 </span><span class="PreProc">sig</span> <a href='311decimal-int.subx.html#L312'>decimal-size</a> n: int<span class="PreProc"> -&gt; </span>_/eax: int
<span id="L80" class="LineNr"> 80 </span><span class="muComment">#sig allocate ad: (addr allocation-descriptor), n: int, out: (addr handle _)</span>
<span id="L81" class="LineNr"> 81 </span><span class="muComment">#sig allocate-raw ad: (addr allocation-descriptor), n: int, out: (addr handle _)</span>
<span id="L82" class="LineNr"> 82 </span><span class="PreProc">sig</span> <a href='120allocate.subx.html#L235'>lookup</a> h: (handle _T)<span class="PreProc"> -&gt; </span>_/eax: (addr _T)
<span id="L83" class="LineNr"> 83 </span><span class="PreProc">sig</span> <a href='120allocate.subx.html#L460'>handle-equal?</a> a: (handle _T), b: (handle _T)<span class="PreProc"> -&gt; </span>_/eax: boolean
<span id="L84" class="LineNr"> 84 </span><span class="PreProc">sig</span> <a href='120allocate.subx.html#L491'>copy-handle</a> src: (handle _T), dest: (addr handle _T)
<span id="L85" class="LineNr"> 85 </span><span class="muComment">#sig allocate-region ad: (addr allocation-descriptor), n: int, out: (addr handle allocation-descriptor)</span>
<span id="L86" class="LineNr"> 86 </span><span class="muComment">#sig allocate-array ad: (addr allocation-descriptor), n: int, out: (addr handle _)</span>
<span id="L87" class="LineNr"> 87 </span><span class="PreProc">sig</span> <a href='120allocate.subx.html#L702'>copy-array</a> ad: (addr allocation-descriptor), src: (addr array _T), out: (addr handle array _T)
<span id="L88" class="LineNr"> 88 </span><span class="muComment">#sig zero-out start: (addr byte), size: int</span>
<span id="L89" class="LineNr"> 89 </span><span class="PreProc">sig</span> <a href='123slice.subx.html#L9'>slice-empty?</a> s: (addr slice)<span class="PreProc"> -&gt; </span>_/eax: boolean
<span id="L90" class="LineNr"> 90 </span><span class="PreProc">sig</span> <a href='123slice.subx.html#L120'>slice-equal?</a> s: (addr slice), p: (addr array byte)<span class="PreProc"> -&gt; </span>_/eax: boolean
<span id="L91" class="LineNr"> 91 </span><span class="PreProc">sig</span> <a href='123slice.subx.html#L487'>slice-starts-with?</a> s: (addr slice), head: (addr array byte)<span class="PreProc"> -&gt; </span>_/eax: boolean
<span id="L92" class="LineNr"> 92 </span><span class="PreProc">sig</span> <a href='123slice.subx.html#L793'>write-slice</a> out: (addr stream byte), s: (addr slice)
<span id="L93" class="LineNr"> 93 </span><span class="muComment"># bad name alert</span>
<span id="L94" class="LineNr"> 94 </span><span class="PreProc">sig</span> <a href='123slice.subx.html#L898'>slice-to-string</a> ad: (addr allocation-descriptor), in: (addr slice), out: (addr handle array byte)
<span id="L95" class="LineNr"> 95 </span><span class="PreProc">sig</span> <a href='126write-int-decimal.subx.html#L8'>write-int32-decimal</a> out: (addr stream byte), n: int
<span id="L96" class="LineNr"> 96 </span><span class="PreProc">sig</span> <a href='126write-int-decimal.subx.html#L327'>decimal-digit?</a> c: grapheme<span class="PreProc"> -&gt; </span>_/eax: boolean
<span id="L97" class="LineNr"> 97 </span><span class="PreProc">sig</span> <a href='126write-int-decimal.subx.html#L426'>to-decimal-digit</a> in: grapheme<span class="PreProc"> -&gt; </span>_/eax: int
<span id="L98" class="LineNr"> 98 </span><span class="muComment"># bad name alert</span>
<span id="L99" class="LineNr"> 99 </span><span class="muComment"># next-word really tokenizes</span>
<span id="L100" class="LineNr">100 </span><span class="muComment"># next-raw-word really reads whitespace-separated words</span>
<span id="L101" class="LineNr">101 </span><span class="PreProc">sig</span> <a href='127next-word.subx.html#L11'>next-word</a> line: (addr stream byte), out: (addr slice) <span class="muComment"># merges '#' comments into a single word</span>
<span id="L102" class="LineNr">102 </span><span class="PreProc">sig</span> <a href='127next-word.subx.html#L321'>next-raw-word</a> line: (addr stream byte), out: (addr slice) <span class="muComment"># does not merge '#' comments</span>
<span id="L103" class="LineNr">103 </span><span class="PreProc">sig</span> <a href='124next-token.subx.html#L188'>skip-chars-matching</a> in: (addr stream byte), delimiter: byte
<span id="L104" class="LineNr">104 </span><span class="PreProc">sig</span> <a href='124next-token.subx.html#L311'>skip-chars-matching-whitespace</a> in: (addr stream byte)
<span id="L105" class="LineNr">105 </span><span class="PreProc">sig</span> <a href='124next-token.subx.html#L401'>skip-chars-not-matching</a> in: (addr stream byte), delimiter: byte
<span id="L106" class="LineNr">106 </span><span class="PreProc">sig</span> <a href='124next-token.subx.html#L563'>skip-chars-not-matching-whitespace</a> in: (addr stream byte)
<span id="L107" class="LineNr">107 </span><span class="PreProc">sig</span> <a href='309stream.subx.html#L6'>stream-empty?</a> s: (addr stream _)<span class="PreProc"> -&gt; </span>_/eax: boolean
<span id="L108" class="LineNr">108 </span><span class="PreProc">sig</span> <a href='309stream.subx.html#L30'>stream-full?</a> s: (addr stream _)<span class="PreProc"> -&gt; </span>_/eax: boolean
<span id="L109" class="LineNr">109 </span><span class="PreProc">sig</span> <a href='310copy-bytes.subx.html#L60'>stream-to-array</a> in: (addr stream _), out: (addr handle array _)
<span id="L110" class="LineNr">110 </span><span class="PreProc">sig</span> <a href='310copy-bytes.subx.html#L124'>unquote-stream-to-array</a> in: (addr stream _), out: (addr handle array _)
<span id="L111" class="LineNr">111 </span><span class="PreProc">sig</span> <a href='309stream.subx.html#L154'>stream-first</a> s: (addr stream byte)<span class="PreProc"> -&gt; </span>_/eax: byte
<span id="L112" class="LineNr">112 </span><span class="PreProc">sig</span> <a href='309stream.subx.html#L181'>stream-final</a> s: (addr stream byte)<span class="PreProc"> -&gt; </span>_/eax: byte
<span id="L113" class="LineNr">113 </span>
<span id="L114" class="LineNr">114 </span><span class="muComment">#sig copy-bytes src: (addr byte), dest: (addr byte), n: int</span>
<span id="L115" class="LineNr">115 </span><span class="PreProc">sig</span> <a href='312copy.subx.html#L3'>copy-array-object</a> src: (addr array _), dest-ah: (addr handle array _)
<span id="L116" class="LineNr">116 </span><span class="PreProc">sig</span> <a href='301array-equal.subx.html#L5'>array-equal?</a> a: (addr array int), b: (addr array int)<span class="PreProc"> -&gt; </span>_/eax: boolean
<span id="L117" class="LineNr">117 </span><span class="PreProc">sig</span> <a href='301array-equal.subx.html#L368'>parse-array-of-ints</a> s: (addr array byte), out: (addr handle array int)
<span id="L118" class="LineNr">118 </span><span class="PreProc">sig</span> <a href='311decimal-int.subx.html#L623'>parse-array-of-decimal-ints</a> s: (addr array byte), out: (addr handle array int)
<span id="L119" class="LineNr">119 </span><span class="PreProc">sig</span> <a href='301array-equal.subx.html#L382'>check-array-equal</a> a: (addr array int), expected: (addr array byte), msg: (addr array byte)
<span id="L120" class="LineNr">120 </span>
<span id="L121" class="LineNr">121 </span><span class="PreProc">sig</span> <a href='314divide.subx.html#L3'>integer-divide</a> a: int, b: int<span class="PreProc"> -&gt; </span>_/eax: int, _/<span class="muRegEdx">edx</span>: int
</pre>
</body>
</html>

View File

@ -1,34 +1,34 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 403unicode.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.muRegEcx { color: #870000; }
.muRegEdx { color: #af5f00; }
.Special { color: #ff6060; }
.LineNr { }
.muRegEsi { color: #005faf; }
.muRegEdi { color: #00af00; }
.Constant { color: #008787; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muRegEdi { color: #00af00; }
.muRegEcx { color: #870000; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

39
html/408float.mu.html generated
View File

@ -1,31 +1,32 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 408float.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.LineNr { }
.muRegEdi { color: #00af00; }
.Constant { color: #008787; }
.muFunction { color: #af5f00; text-decoration: underline; }
.Delimiter { color: #c000c0; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
.LineNr { }
.Constant { color: #008787; }
.muRegEdi { color: #00af00; }
.muRegEcx { color: #870000; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muComment { color: #005faf; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -80,6 +81,18 @@ if ('onhashchange' in window) {
<span id="L21" class="LineNr">21 </span> result <span class="Special">&lt;-</span> divide divisor
<span id="L22" class="LineNr">22 </span> <span class="PreProc">return</span> result
<span id="L23" class="LineNr">23 </span><span class="Delimiter">}</span>
<span id="L24" class="LineNr">24 </span>
<span id="L25" class="LineNr">25 </span><span class="muComment"># n/m rounded up</span>
<span id="L26" class="LineNr">26 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='408float.mu.html#L26'>scale-down-and-round-up</a></span> n: int, m: int<span class="PreProc"> -&gt; </span>_/<span class="muRegEcx">ecx</span>: int <span class="Delimiter">{</span>
<span id="L27" class="LineNr">27 </span> <span class="PreProc">var</span> result/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy n
<span id="L28" class="LineNr">28 </span> result <span class="Special">&lt;-</span> add m
<span id="L29" class="LineNr">29 </span> result <span class="Special">&lt;-</span> decrement
<span id="L30" class="LineNr">30 </span> <span class="PreProc">var</span> result-f/<span class="Constant">xmm0</span>: float <span class="Special">&lt;-</span> convert result
<span id="L31" class="LineNr">31 </span> <span class="PreProc">var</span> m-f/<span class="Constant">xmm1</span>: float <span class="Special">&lt;-</span> convert m
<span id="L32" class="LineNr">32 </span> result-f <span class="Special">&lt;-</span> divide m-f
<span id="L33" class="LineNr">33 </span> result <span class="Special">&lt;-</span> truncate result-f
<span id="L34" class="LineNr">34 </span> <span class="PreProc">return</span> result
<span id="L35" class="LineNr">35 </span><span class="Delimiter">}</span>
</pre>
</body>
</html>

42
html/411string.mu.html generated
View File

@ -1,35 +1,35 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 411string.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.CommentedCode { color: #8a8a8a; }
.muRegEcx { color: #870000; }
.Special { color: #ff6060; }
.LineNr { }
.muRegEsi { color: #005faf; }
.muRegEdi { color: #00af00; }
.Constant { color: #008787; }
.muRegEdi { color: #00af00; }
.CommentedCode { color: #8a8a8a; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muTest { color: #5f8700; }
.Delimiter { color: #c000c0; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -105,46 +105,46 @@ if ('onhashchange' in window) {
<span id="L42" class="LineNr"> 42 </span> <span class="PreProc">var</span> out-ah/<span class="muRegEdi">edi</span>: (addr handle array byte) <span class="Special">&lt;-</span> address out-h
<span id="L43" class="LineNr"> 43 </span> <span class="muComment"># prefix substrings</span>
<span id="L44" class="LineNr"> 44 </span> <a href='411string.mu.html#L2'>substring</a> <span class="Constant">0</span>, <span class="Constant">0</span>, <span class="Constant">3</span>, out-ah
<span id="L45" class="LineNr"> 45 </span> <span class="PreProc">var</span> out/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L223'>lookup</a> *out-ah
<span id="L45" class="LineNr"> 45 </span> <span class="PreProc">var</span> out/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L235'>lookup</a> *out-ah
<span id="L46" class="LineNr"> 46 </span> <a href='105string-equal.subx.html#L213'>check-strings-equal</a> out, <span class="Constant">&quot;&quot;</span>, <span class="Constant">&quot;F - <a href='411string.mu.html#L40'>test-substring</a>/null&quot;</span>
<span id="L47" class="LineNr"> 47 </span> <a href='411string.mu.html#L2'>substring</a> <span class="Constant">&quot;&quot;</span>, <span class="Constant">0</span>, <span class="Constant">3</span>, out-ah
<span id="L48" class="LineNr"> 48 </span> <span class="PreProc">var</span> out/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L223'>lookup</a> *out-ah
<span id="L48" class="LineNr"> 48 </span> <span class="PreProc">var</span> out/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L235'>lookup</a> *out-ah
<span id="L49" class="LineNr"> 49 </span><span class="CommentedCode">#? print-string-to-real-screen out</span>
<span id="L50" class="LineNr"> 50 </span><span class="CommentedCode">#? print-string-to-real-screen &quot;\n&quot;</span>
<span id="L51" class="LineNr"> 51 </span> <a href='105string-equal.subx.html#L213'>check-strings-equal</a> out, <span class="Constant">&quot;&quot;</span>, <span class="Constant">&quot;F - <a href='411string.mu.html#L40'>test-substring</a>/empty&quot;</span>
<span id="L52" class="LineNr"> 52 </span> <span class="muComment">#</span>
<span id="L53" class="LineNr"> 53 </span> <a href='411string.mu.html#L2'>substring</a> <span class="Constant">&quot;abcde&quot;</span>, <span class="Constant">0</span>, <span class="Constant">3</span>, out-ah
<span id="L54" class="LineNr"> 54 </span> <span class="PreProc">var</span> out/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L223'>lookup</a> *out-ah
<span id="L54" class="LineNr"> 54 </span> <span class="PreProc">var</span> out/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L235'>lookup</a> *out-ah
<span id="L55" class="LineNr"> 55 </span><span class="CommentedCode">#? print-string-to-real-screen out</span>
<span id="L56" class="LineNr"> 56 </span><span class="CommentedCode">#? print-string-to-real-screen &quot;\n&quot;</span>
<span id="L57" class="LineNr"> 57 </span> <a href='105string-equal.subx.html#L213'>check-strings-equal</a> out, <span class="Constant">&quot;abc&quot;</span>, <span class="Constant">&quot;F - <a href='411string.mu.html#L40'>test-substring</a>/truncate&quot;</span>
<span id="L58" class="LineNr"> 58 </span> <span class="muComment">#</span>
<span id="L59" class="LineNr"> 59 </span> <a href='411string.mu.html#L2'>substring</a> <span class="Constant">&quot;abcde&quot;</span>, <span class="Constant">0</span>, <span class="Constant">5</span>, out-ah
<span id="L60" class="LineNr"> 60 </span> <span class="PreProc">var</span> out/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L223'>lookup</a> *out-ah
<span id="L60" class="LineNr"> 60 </span> <span class="PreProc">var</span> out/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L235'>lookup</a> *out-ah
<span id="L61" class="LineNr"> 61 </span> <a href='105string-equal.subx.html#L213'>check-strings-equal</a> out, <span class="Constant">&quot;abcde&quot;</span>, <span class="Constant">&quot;F - <a href='411string.mu.html#L40'>test-substring</a>/all&quot;</span>
<span id="L62" class="LineNr"> 62 </span> <span class="muComment">#</span>
<span id="L63" class="LineNr"> 63 </span> <a href='411string.mu.html#L2'>substring</a> <span class="Constant">&quot;abcde&quot;</span>, <span class="Constant">0</span>, <span class="Constant">7</span>, out-ah
<span id="L64" class="LineNr"> 64 </span> <span class="PreProc">var</span> out/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L223'>lookup</a> *out-ah
<span id="L64" class="LineNr"> 64 </span> <span class="PreProc">var</span> out/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L235'>lookup</a> *out-ah
<span id="L65" class="LineNr"> 65 </span> <a href='105string-equal.subx.html#L213'>check-strings-equal</a> out, <span class="Constant">&quot;abcde&quot;</span>, <span class="Constant">&quot;F - <a href='411string.mu.html#L40'>test-substring</a>/too-small&quot;</span>
<span id="L66" class="LineNr"> 66 </span> <span class="muComment"># substrings outside string</span>
<span id="L67" class="LineNr"> 67 </span> <a href='411string.mu.html#L2'>substring</a> <span class="Constant">&quot;abcde&quot;</span>, <span class="Constant">6</span>, <span class="Constant">1</span>, out-ah
<span id="L68" class="LineNr"> 68 </span> <span class="PreProc">var</span> out/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L223'>lookup</a> *out-ah
<span id="L68" class="LineNr"> 68 </span> <span class="PreProc">var</span> out/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L235'>lookup</a> *out-ah
<span id="L69" class="LineNr"> 69 </span> <a href='105string-equal.subx.html#L213'>check-strings-equal</a> out, <span class="Constant">&quot;&quot;</span>, <span class="Constant">&quot;F - <a href='411string.mu.html#L40'>test-substring</a>/start-too-large&quot;</span>
<span id="L70" class="LineNr"> 70 </span> <span class="muComment"># trim prefix</span>
<span id="L71" class="LineNr"> 71 </span> <a href='411string.mu.html#L2'>substring</a> <span class="Constant">&quot;&quot;</span>, <span class="Constant">2</span>, <span class="Constant">3</span>, out-ah
<span id="L72" class="LineNr"> 72 </span> <span class="PreProc">var</span> out/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L223'>lookup</a> *out-ah
<span id="L72" class="LineNr"> 72 </span> <span class="PreProc">var</span> out/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L235'>lookup</a> *out-ah
<span id="L73" class="LineNr"> 73 </span> <a href='105string-equal.subx.html#L213'>check-strings-equal</a> out, <span class="Constant">&quot;&quot;</span>, <span class="Constant">&quot;F - <a href='411string.mu.html#L40'>test-substring</a>/middle-empty&quot;</span>
<span id="L74" class="LineNr"> 74 </span> <span class="muComment">#</span>
<span id="L75" class="LineNr"> 75 </span> <a href='411string.mu.html#L2'>substring</a> <span class="Constant">&quot;abcde&quot;</span>, <span class="Constant">1</span>, <span class="Constant">2</span>, out-ah
<span id="L76" class="LineNr"> 76 </span> <span class="PreProc">var</span> out/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L223'>lookup</a> *out-ah
<span id="L76" class="LineNr"> 76 </span> <span class="PreProc">var</span> out/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L235'>lookup</a> *out-ah
<span id="L77" class="LineNr"> 77 </span> <a href='105string-equal.subx.html#L213'>check-strings-equal</a> out, <span class="Constant">&quot;bc&quot;</span>, <span class="Constant">&quot;F - <a href='411string.mu.html#L40'>test-substring</a>/middle-truncate&quot;</span>
<span id="L78" class="LineNr"> 78 </span> <span class="muComment">#</span>
<span id="L79" class="LineNr"> 79 </span> <a href='411string.mu.html#L2'>substring</a> <span class="Constant">&quot;abcde&quot;</span>, <span class="Constant">1</span>, <span class="Constant">4</span>, out-ah
<span id="L80" class="LineNr"> 80 </span> <span class="PreProc">var</span> out/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L223'>lookup</a> *out-ah
<span id="L80" class="LineNr"> 80 </span> <span class="PreProc">var</span> out/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L235'>lookup</a> *out-ah
<span id="L81" class="LineNr"> 81 </span> <a href='105string-equal.subx.html#L213'>check-strings-equal</a> out, <span class="Constant">&quot;bcde&quot;</span>, <span class="Constant">&quot;F - <a href='411string.mu.html#L40'>test-substring</a>/middle-all&quot;</span>
<span id="L82" class="LineNr"> 82 </span> <span class="muComment">#</span>
<span id="L83" class="LineNr"> 83 </span> <a href='411string.mu.html#L2'>substring</a> <span class="Constant">&quot;abcde&quot;</span>, <span class="Constant">1</span>, <span class="Constant">5</span>, out-ah
<span id="L84" class="LineNr"> 84 </span> <span class="PreProc">var</span> out/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L223'>lookup</a> *out-ah
<span id="L84" class="LineNr"> 84 </span> <span class="PreProc">var</span> out/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L235'>lookup</a> *out-ah
<span id="L85" class="LineNr"> 85 </span> <a href='105string-equal.subx.html#L213'>check-strings-equal</a> out, <span class="Constant">&quot;bcde&quot;</span>, <span class="Constant">&quot;F - <a href='411string.mu.html#L40'>test-substring</a>/middle-too-small&quot;</span>
<span id="L86" class="LineNr"> 86 </span><span class="Delimiter">}</span>
<span id="L87" class="LineNr"> 87 </span>

View File

@ -1,36 +1,36 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 412render-float-decimal.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.muRegEbx { color: #5f00ff; }
.muRegEcx { color: #870000; }
.muRegEdx { color: #af5f00; }
.LineNr { }
.muRegEsi { color: #005faf; }
.muRegEdi { color: #00af00; }
.muRegEsi { color: #005faf; }
.muRegEbx { color: #5f00ff; }
.Constant { color: #008787; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muTest { color: #5f8700; }
.muRegEcx { color: #870000; }
.Delimiter { color: #c000c0; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
.muTest { color: #5f8700; }
.muComment { color: #005faf; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

View File

@ -1,35 +1,35 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 500fake-screen.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.muRegEbx { color: #5f00ff; }
.muRegEcx { color: #870000; }
.muRegEdx { color: #af5f00; }
.Special { color: #ff6060; }
.LineNr { }
.Constant { color: #008787; }
.muRegEbx { color: #5f00ff; }
.muRegEsi { color: #005faf; }
.muRegEdi { color: #00af00; }
.Constant { color: #008787; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muRegEcx { color: #870000; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -175,7 +175,7 @@ if ('onhashchange' in window) {
<span id="L112" class="LineNr">112 </span> <span class="muComment"># fake screen</span>
<span id="L113" class="LineNr">113 </span> <span class="PreProc">var</span> idx/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L136'>screen-cell-index</a> <a href='500fake-screen.mu.html#L14'>screen</a>, x, y
<span id="L114" class="LineNr">114 </span> <span class="PreProc">var</span> data-ah/eax: (addr handle array <a href='500fake-screen.mu.html#L27'>screen-cell</a>) <span class="Special">&lt;-</span> get <a href='500fake-screen.mu.html#L14'>screen</a>, data
<span id="L115" class="LineNr">115 </span> <span class="PreProc">var</span> data/eax: (addr array <a href='500fake-screen.mu.html#L27'>screen-cell</a>) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L223'>lookup</a> *data-ah
<span id="L115" class="LineNr">115 </span> <span class="PreProc">var</span> data/eax: (addr array <a href='500fake-screen.mu.html#L27'>screen-cell</a>) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L235'>lookup</a> *data-ah
<span id="L116" class="LineNr">116 </span> <span class="PreProc">var</span> offset/<span class="muRegEcx">ecx</span>: (offset <a href='500fake-screen.mu.html#L27'>screen-cell</a>) <span class="Special">&lt;-</span> compute-offset data, idx
<span id="L117" class="LineNr">117 </span> <span class="PreProc">var</span> dest-cell/<span class="muRegEcx">ecx</span>: (addr <a href='500fake-screen.mu.html#L27'>screen-cell</a>) <span class="Special">&lt;-</span> index data, offset
<span id="L118" class="LineNr">118 </span> <span class="PreProc">var</span> dest-grapheme/eax: (addr grapheme) <span class="Special">&lt;-</span> get dest-cell, data
@ -340,7 +340,7 @@ if ('onhashchange' in window) {
<span id="L277" class="LineNr">277 </span> <span class="Delimiter">}</span>
<span id="L278" class="LineNr">278 </span> <a href='500fake-screen.mu.html#L190'>set-cursor-position</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">0</span>, <span class="Constant">0</span>
<span id="L279" class="LineNr">279 </span> <span class="PreProc">var</span> pixels-ah/eax: (addr handle array byte) <span class="Special">&lt;-</span> get <a href='500fake-screen.mu.html#L14'>screen</a>, pixels
<span id="L280" class="LineNr">280 </span> <span class="PreProc">var</span> pixels/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L223'>lookup</a> *pixels-ah
<span id="L280" class="LineNr">280 </span> <span class="PreProc">var</span> pixels/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L235'>lookup</a> *pixels-ah
<span id="L281" class="LineNr">281 </span> <span class="PreProc">var</span> i/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L282" class="LineNr">282 </span> <span class="PreProc">var</span> max/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> length pixels
<span id="L283" class="LineNr">283 </span> <span class="Delimiter">{</span>
@ -381,7 +381,7 @@ if ('onhashchange' in window) {
<span id="L318" class="LineNr">318 </span> <span class="PreProc">loop</span>
<span id="L319" class="LineNr">319 </span> <span class="Delimiter">}</span>
<span id="L320" class="LineNr">320 </span> <span class="PreProc">var</span> pixels-ah/eax: (addr handle array byte) <span class="Special">&lt;-</span> get <a href='500fake-screen.mu.html#L14'>screen</a>, pixels
<span id="L321" class="LineNr">321 </span> <span class="PreProc">var</span> pixels/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L223'>lookup</a> *pixels-ah
<span id="L321" class="LineNr">321 </span> <span class="PreProc">var</span> pixels/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L235'>lookup</a> *pixels-ah
<span id="L322" class="LineNr">322 </span> <span class="PreProc">var</span> y/<span class="muRegEbx">ebx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L323" class="LineNr">323 </span> <span class="PreProc">var</span> height-addr/<span class="muRegEdx">edx</span>: (addr int) <span class="Special">&lt;-</span> get <a href='500fake-screen.mu.html#L14'>screen</a>, height
<span id="L324" class="LineNr">324 </span> <span class="PreProc">var</span> height/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy *height-addr
@ -497,7 +497,7 @@ if ('onhashchange' in window) {
<span id="L434" class="LineNr">434 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='500fake-screen.mu.html#L434'>screen-grapheme-at-idx</a></span> _screen: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), idx-on-stack: int<span class="PreProc"> -&gt; </span>_/eax: grapheme <span class="Delimiter">{</span>
<span id="L435" class="LineNr">435 </span> <span class="PreProc">var</span> <a href='500fake-screen.mu.html#L14'>screen</a>/<span class="muRegEsi">esi</span>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>) <span class="Special">&lt;-</span> copy _screen
<span id="L436" class="LineNr">436 </span> <span class="PreProc">var</span> data-ah/eax: (addr handle array <a href='500fake-screen.mu.html#L27'>screen-cell</a>) <span class="Special">&lt;-</span> get <a href='500fake-screen.mu.html#L14'>screen</a>, data
<span id="L437" class="LineNr">437 </span> <span class="PreProc">var</span> data/eax: (addr array <a href='500fake-screen.mu.html#L27'>screen-cell</a>) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L223'>lookup</a> *data-ah
<span id="L437" class="LineNr">437 </span> <span class="PreProc">var</span> data/eax: (addr array <a href='500fake-screen.mu.html#L27'>screen-cell</a>) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L235'>lookup</a> *data-ah
<span id="L438" class="LineNr">438 </span> <span class="PreProc">var</span> idx/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy idx-on-stack
<span id="L439" class="LineNr">439 </span> <span class="PreProc">var</span> offset/<span class="muRegEcx">ecx</span>: (offset <a href='500fake-screen.mu.html#L27'>screen-cell</a>) <span class="Special">&lt;-</span> compute-offset data, idx
<span id="L440" class="LineNr">440 </span> <span class="PreProc">var</span> cell/eax: (addr <a href='500fake-screen.mu.html#L27'>screen-cell</a>) <span class="Special">&lt;-</span> index data, offset
@ -515,7 +515,7 @@ if ('onhashchange' in window) {
<span id="L452" class="LineNr">452 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='500fake-screen.mu.html#L452'>screen-color-at-idx</a></span> _screen: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), idx-on-stack: int<span class="PreProc"> -&gt; </span>_/eax: int <span class="Delimiter">{</span>
<span id="L453" class="LineNr">453 </span> <span class="PreProc">var</span> <a href='500fake-screen.mu.html#L14'>screen</a>/<span class="muRegEsi">esi</span>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>) <span class="Special">&lt;-</span> copy _screen
<span id="L454" class="LineNr">454 </span> <span class="PreProc">var</span> data-ah/eax: (addr handle array <a href='500fake-screen.mu.html#L27'>screen-cell</a>) <span class="Special">&lt;-</span> get <a href='500fake-screen.mu.html#L14'>screen</a>, data
<span id="L455" class="LineNr">455 </span> <span class="PreProc">var</span> data/eax: (addr array <a href='500fake-screen.mu.html#L27'>screen-cell</a>) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L223'>lookup</a> *data-ah
<span id="L455" class="LineNr">455 </span> <span class="PreProc">var</span> data/eax: (addr array <a href='500fake-screen.mu.html#L27'>screen-cell</a>) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L235'>lookup</a> *data-ah
<span id="L456" class="LineNr">456 </span> <span class="PreProc">var</span> idx/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy idx-on-stack
<span id="L457" class="LineNr">457 </span> <span class="PreProc">var</span> offset/<span class="muRegEcx">ecx</span>: (offset <a href='500fake-screen.mu.html#L27'>screen-cell</a>) <span class="Special">&lt;-</span> compute-offset data, idx
<span id="L458" class="LineNr">458 </span> <span class="PreProc">var</span> cell/eax: (addr <a href='500fake-screen.mu.html#L27'>screen-cell</a>) <span class="Special">&lt;-</span> index data, offset
@ -534,7 +534,7 @@ if ('onhashchange' in window) {
<span id="L471" class="LineNr">471 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='500fake-screen.mu.html#L471'>screen-background-color-at-idx</a></span> _screen: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), idx-on-stack: int<span class="PreProc"> -&gt; </span>_/eax: int <span class="Delimiter">{</span>
<span id="L472" class="LineNr">472 </span> <span class="PreProc">var</span> <a href='500fake-screen.mu.html#L14'>screen</a>/<span class="muRegEsi">esi</span>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>) <span class="Special">&lt;-</span> copy _screen
<span id="L473" class="LineNr">473 </span> <span class="PreProc">var</span> data-ah/eax: (addr handle array <a href='500fake-screen.mu.html#L27'>screen-cell</a>) <span class="Special">&lt;-</span> get <a href='500fake-screen.mu.html#L14'>screen</a>, data
<span id="L474" class="LineNr">474 </span> <span class="PreProc">var</span> data/eax: (addr array <a href='500fake-screen.mu.html#L27'>screen-cell</a>) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L223'>lookup</a> *data-ah
<span id="L474" class="LineNr">474 </span> <span class="PreProc">var</span> data/eax: (addr array <a href='500fake-screen.mu.html#L27'>screen-cell</a>) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L235'>lookup</a> *data-ah
<span id="L475" class="LineNr">475 </span> <span class="PreProc">var</span> idx/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy idx-on-stack
<span id="L476" class="LineNr">476 </span> <span class="PreProc">var</span> offset/<span class="muRegEcx">ecx</span>: (offset <a href='500fake-screen.mu.html#L27'>screen-cell</a>) <span class="Special">&lt;-</span> compute-offset data, idx
<span id="L477" class="LineNr">477 </span> <span class="PreProc">var</span> cell/eax: (addr <a href='500fake-screen.mu.html#L27'>screen-cell</a>) <span class="Special">&lt;-</span> index data, offset
@ -553,7 +553,7 @@ if ('onhashchange' in window) {
<span id="L490" class="LineNr">490 </span> <span class="muComment"># fake screen</span>
<span id="L491" class="LineNr">491 </span> <span class="PreProc">var</span> <a href='500fake-screen.mu.html#L14'>screen</a>/<span class="muRegEsi">esi</span>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>) <span class="Special">&lt;-</span> copy <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L492" class="LineNr">492 </span> <span class="PreProc">var</span> pixels-ah/eax: (addr handle array byte) <span class="Special">&lt;-</span> get <a href='500fake-screen.mu.html#L14'>screen</a>, pixels
<span id="L493" class="LineNr">493 </span> <span class="PreProc">var</span> pixels/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L223'>lookup</a> *pixels-ah
<span id="L493" class="LineNr">493 </span> <span class="PreProc">var</span> pixels/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L235'>lookup</a> *pixels-ah
<span id="L494" class="LineNr">494 </span> <span class="Delimiter">{</span>
<span id="L495" class="LineNr">495 </span> compare pixels, <span class="Constant">0</span>
<span id="L496" class="LineNr">496 </span> <span class="PreProc">break-if-!=</span>
@ -611,7 +611,7 @@ if ('onhashchange' in window) {
<span id="L548" class="LineNr">548 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='500fake-screen.mu.html#L548'>copy-pixels</a></span> _screen: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), target-screen: (addr <a href='500fake-screen.mu.html#L14'>screen</a>) <span class="Delimiter">{</span>
<span id="L549" class="LineNr">549 </span> <span class="PreProc">var</span> <a href='500fake-screen.mu.html#L14'>screen</a>/<span class="muRegEsi">esi</span>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>) <span class="Special">&lt;-</span> copy _screen
<span id="L550" class="LineNr">550 </span> <span class="PreProc">var</span> pixels-ah/eax: (addr handle array byte) <span class="Special">&lt;-</span> get <a href='500fake-screen.mu.html#L14'>screen</a>, pixels
<span id="L551" class="LineNr">551 </span> <span class="PreProc">var</span> _pixels/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L223'>lookup</a> *pixels-ah
<span id="L551" class="LineNr">551 </span> <span class="PreProc">var</span> _pixels/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L235'>lookup</a> *pixels-ah
<span id="L552" class="LineNr">552 </span> <span class="PreProc">var</span> pixels/<span class="muRegEdi">edi</span>: (addr array byte) <span class="Special">&lt;-</span> copy _pixels
<span id="L553" class="LineNr">553 </span> <span class="PreProc">var</span> width-a/<span class="muRegEdx">edx</span>: (addr int) <span class="Special">&lt;-</span> get <a href='500fake-screen.mu.html#L14'>screen</a>, width
<span id="L554" class="LineNr">554 </span> <span class="PreProc">var</span> width/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy *width-a
@ -653,7 +653,7 @@ if ('onhashchange' in window) {
<span id="L590" class="LineNr">590 </span> <span class="PreProc">var</span> width-a/<span class="muRegEbx">ebx</span>: (addr int) <span class="Special">&lt;-</span> get <a href='500fake-screen.mu.html#L14'>screen</a>, width
<span id="L591" class="LineNr">591 </span> <span class="PreProc">var</span> height-a/<span class="muRegEdx">edx</span>: (addr int) <span class="Special">&lt;-</span> get <a href='500fake-screen.mu.html#L14'>screen</a>, height
<span id="L592" class="LineNr">592 </span> <span class="PreProc">var</span> data-ah/eax: (addr handle array byte) <span class="Special">&lt;-</span> get <a href='500fake-screen.mu.html#L14'>screen</a>, pixels
<span id="L593" class="LineNr">593 </span> <span class="PreProc">var</span> _data/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L223'>lookup</a> *data-ah
<span id="L593" class="LineNr">593 </span> <span class="PreProc">var</span> _data/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L235'>lookup</a> *data-ah
<span id="L594" class="LineNr">594 </span> <span class="PreProc">var</span> data: (addr array byte)
<span id="L595" class="LineNr">595 </span> copy-to data, _data
<span id="L596" class="LineNr">596 </span> <span class="PreProc">var</span> y/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>

View File

@ -1,35 +1,35 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 501draw-text.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.muRegEbx { color: #5f00ff; }
.muRegEcx { color: #870000; }
.muRegEdx { color: #af5f00; }
.Special { color: #ff6060; }
.LineNr { }
.muRegEsi { color: #005faf; }
.muRegEdi { color: #00af00; }
.muRegEbx { color: #5f00ff; }
.Constant { color: #008787; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muRegEdi { color: #00af00; }
.muRegEcx { color: #870000; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -161,7 +161,7 @@ if ('onhashchange' in window) {
<span id="L98" class="LineNr"> 98 </span><span class="muComment"># return the next 'x' coordinate</span>
<span id="L99" class="LineNr"> 99 </span><span class="muComment"># if there isn't enough space, truncate</span>
<span id="L100" class="LineNr">100 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L100'>draw-text-rightward</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), text: (addr array byte), x: int, xmax: int, y: int, color: int, background-color: int<span class="PreProc"> -&gt; </span>_/eax: int <span class="Delimiter">{</span>
<span id="L101" class="LineNr">101 </span> <span class="PreProc">var</span> stream-storage: (stream byte <span class="Constant">0x200</span>/print-buffer-size)
<span id="L101" class="LineNr">101 </span> <span class="PreProc">var</span> stream-storage: (stream byte <span class="Constant">0x400</span>/print-buffer-size)
<span id="L102" class="LineNr">102 </span> <span class="PreProc">var</span> stream/<span class="muRegEsi">esi</span>: (addr stream byte) <span class="Special">&lt;-</span> address stream-storage
<span id="L103" class="LineNr">103 </span> <a href='108write.subx.html#L11'>write</a> stream, text
<span id="L104" class="LineNr">104 </span> <span class="PreProc">var</span> xcurr/eax: int <span class="Special">&lt;-</span> <a href='501draw-text.mu.html#L111'>draw-stream-rightward</a> <a href='500fake-screen.mu.html#L14'>screen</a>, stream, x, xmax, y, color, background-color
@ -235,330 +235,327 @@ if ('onhashchange' in window) {
<span id="L172" class="LineNr">172 </span><span class="muComment"># that way the caller can draw more if given the same min and max bounding-box.</span>
<span id="L173" class="LineNr">173 </span><span class="muComment"># if there isn't enough space, truncate</span>
<span id="L174" class="LineNr">174 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L174'>draw-text-wrapping-right-then-down</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), _text: (addr array byte), xmin: int, ymin: int, xmax: int, ymax: int, _x: int, _y: int, color: int, background-color: int<span class="PreProc"> -&gt; </span>_/eax: int, _/<span class="muRegEcx">ecx</span>: int <span class="Delimiter">{</span>
<span id="L175" class="LineNr">175 </span> <span class="PreProc">var</span> stream-storage: (stream byte <span class="Constant">0x200</span>/print-buffer-size) <span class="muComment"># 4 rows of text = 1/12th of a real screen</span>
<span id="L176" class="LineNr">176 </span> <span class="muComment"># fake screens unlikely to be larger</span>
<span id="L177" class="LineNr">177 </span> <span class="muComment"># so this seems a reasonable size</span>
<span id="L178" class="LineNr">178 </span> <span class="muComment"># allocated on the stack, so quickly reclaimed</span>
<span id="L179" class="LineNr">179 </span> <span class="PreProc">var</span> stream/<span class="muRegEdi">edi</span>: (addr stream byte) <span class="Special">&lt;-</span> address stream-storage
<span id="L180" class="LineNr">180 </span> <span class="PreProc">var</span> text/<span class="muRegEsi">esi</span>: (addr array byte) <span class="Special">&lt;-</span> copy _text
<span id="L181" class="LineNr">181 </span> <span class="PreProc">var</span> len/eax: int <span class="Special">&lt;-</span> length text
<span id="L182" class="LineNr">182 </span> compare len, <span class="Constant">0x200</span>
<span id="L183" class="LineNr">183 </span> <span class="Delimiter">{</span>
<span id="L184" class="LineNr">184 </span> <span class="PreProc">break-if-&lt;</span>
<span id="L185" class="LineNr">185 </span> <a href='108write.subx.html#L11'>write</a> stream, <span class="Constant">&quot;ERROR: stream too small in draw-text-wrapping-right-then-down&quot;</span>
<span id="L186" class="LineNr">186 </span> <span class="Delimiter">}</span>
<span id="L187" class="LineNr">187 </span> compare len, <span class="Constant">0x200</span>
<span id="L188" class="LineNr">188 </span> <span class="Delimiter">{</span>
<span id="L189" class="LineNr">189 </span> <span class="PreProc">break-if-&gt;=</span>
<span id="L190" class="LineNr">190 </span> <a href='108write.subx.html#L11'>write</a> stream, text
<span id="L191" class="LineNr">191 </span> <span class="Delimiter">}</span>
<span id="L192" class="LineNr">192 </span> <span class="PreProc">var</span> x/eax: int <span class="Special">&lt;-</span> copy _x
<span id="L193" class="LineNr">193 </span> <span class="PreProc">var</span> y/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy _y
<span id="L194" class="LineNr">194 </span> x, y <span class="Special">&lt;-</span> <a href='501draw-text.mu.html#L202'>draw-stream-wrapping-right-then-down</a> <a href='500fake-screen.mu.html#L14'>screen</a>, stream, xmin, ymin, xmax, ymax, x, y, color, background-color
<span id="L195" class="LineNr">195 </span> <span class="PreProc">return</span> x, y
<span id="L196" class="LineNr">196 </span><span class="Delimiter">}</span>
<span id="L197" class="LineNr">197 </span>
<span id="L198" class="LineNr">198 </span><span class="muComment"># draw a stream in the rectangle from (xmin, ymin) to (xmax, ymax), starting from (x, y), wrapping as necessary</span>
<span id="L199" class="LineNr">199 </span><span class="muComment"># return the next (x, y) coordinate in raster order where drawing stopped</span>
<span id="L200" class="LineNr">200 </span><span class="muComment"># that way the caller can draw more if given the same min and max bounding-box.</span>
<span id="L201" class="LineNr">201 </span><span class="muComment"># if there isn't enough space, truncate</span>
<span id="L202" class="LineNr">202 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L202'>draw-stream-wrapping-right-then-down</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), stream: (addr stream byte), xmin: int, ymin: int, xmax: int, ymax: int, x: int, y: int, color: int, background-color: int<span class="PreProc"> -&gt; </span>_/eax: int, _/<span class="muRegEcx">ecx</span>: int <span class="Delimiter">{</span>
<span id="L203" class="LineNr">203 </span> <span class="PreProc">var</span> xcurr/eax: int <span class="Special">&lt;-</span> copy x
<span id="L204" class="LineNr">204 </span> <span class="PreProc">var</span> ycurr/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy y
<span id="L205" class="LineNr">205 </span> <span class="PreProc">var</span> g/<span class="muRegEbx">ebx</span>: grapheme <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L206" class="LineNr">206 </span> <span class="Delimiter">{</span>
<span id="L207" class="LineNr">207 </span> <span class="Delimiter">{</span>
<span id="L208" class="LineNr">208 </span> <span class="PreProc">var</span> _g/eax: grapheme <span class="Special">&lt;-</span> <a href='403unicode.mu.html#L92'>read-grapheme</a> stream
<span id="L209" class="LineNr">209 </span> g <span class="Special">&lt;-</span> copy _g
<span id="L210" class="LineNr">210 </span> <span class="Delimiter">}</span>
<span id="L211" class="LineNr">211 </span> compare g, <span class="Constant">0xffffffff</span>/end-of-file
<span id="L212" class="LineNr">212 </span> <span class="PreProc">break-if-=</span>
<span id="L213" class="LineNr">213 </span> xcurr, ycurr <span class="Special">&lt;-</span> <a href='501draw-text.mu.html#L148'>render-grapheme</a> <a href='500fake-screen.mu.html#L14'>screen</a>, g, xmin, ymin, xmax, ymax, xcurr, ycurr, color, background-color
<span id="L214" class="LineNr">214 </span> <span class="PreProc">loop</span>
<span id="L215" class="LineNr">215 </span> <span class="Delimiter">}</span>
<span id="L216" class="LineNr">216 </span> <a href='500fake-screen.mu.html#L190'>set-cursor-position</a> <a href='500fake-screen.mu.html#L14'>screen</a>, xcurr, ycurr
<span id="L217" class="LineNr">217 </span> <span class="PreProc">return</span> xcurr, ycurr
<span id="L218" class="LineNr">218 </span><span class="Delimiter">}</span>
<span id="L219" class="LineNr">219 </span>
<span id="L220" class="LineNr">220 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L220'>draw-stream-wrapping-right-then-down-from-cursor</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), stream: (addr stream byte), xmin: int, ymin: int, xmax: int, ymax: int, color: int, background-color: int <span class="Delimiter">{</span>
<span id="L221" class="LineNr">221 </span> <span class="PreProc">var</span> cursor-x/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L222" class="LineNr">222 </span> <span class="PreProc">var</span> cursor-y/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L223" class="LineNr">223 </span> cursor-x, cursor-y <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L174'>cursor-position</a> <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L224" class="LineNr">224 </span> <span class="PreProc">var</span> end-x/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy cursor-x
<span id="L225" class="LineNr">225 </span> end-x <span class="Special">&lt;-</span> increment
<span id="L226" class="LineNr">226 </span> compare end-x, xmax
<span id="L227" class="LineNr">227 </span> <span class="Delimiter">{</span>
<span id="L228" class="LineNr">228 </span> <span class="PreProc">break-if-&lt;</span>
<span id="L229" class="LineNr">229 </span> cursor-x <span class="Special">&lt;-</span> copy xmin
<span id="L230" class="LineNr">230 </span> cursor-y <span class="Special">&lt;-</span> increment
<span id="L231" class="LineNr">231 </span> <span class="Delimiter">}</span>
<span id="L232" class="LineNr">232 </span> cursor-x, cursor-y <span class="Special">&lt;-</span> <a href='501draw-text.mu.html#L202'>draw-stream-wrapping-right-then-down</a> <a href='500fake-screen.mu.html#L14'>screen</a>, stream, xmin, ymin, xmax, ymax, cursor-x, cursor-y, color, background-color
<span id="L233" class="LineNr">233 </span><span class="Delimiter">}</span>
<span id="L234" class="LineNr">234 </span>
<span id="L235" class="LineNr">235 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L235'>draw-stream-wrapping-right-then-down-from-cursor-over-full-screen</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), stream: (addr stream byte), color: int, background-color: int <span class="Delimiter">{</span>
<span id="L236" class="LineNr">236 </span> <span class="PreProc">var</span> width/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L237" class="LineNr">237 </span> <span class="PreProc">var</span> height/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L238" class="LineNr">238 </span> width, height <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L86'>screen-size</a> <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L239" class="LineNr">239 </span> <a href='501draw-text.mu.html#L220'>draw-stream-wrapping-right-then-down-from-cursor</a> <a href='500fake-screen.mu.html#L14'>screen</a>, stream, <span class="Constant">0</span>/xmin, <span class="Constant">0</span>/ymin, width, height, color, background-color
<span id="L240" class="LineNr">240 </span><span class="Delimiter">}</span>
<span id="L241" class="LineNr">241 </span>
<span id="L242" class="LineNr">242 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L242'>move-cursor-rightward-and-downward</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), xmin: int, xmax: int <span class="Delimiter">{</span>
<span id="L243" class="LineNr">243 </span> <span class="PreProc">var</span> cursor-x/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L244" class="LineNr">244 </span> <span class="PreProc">var</span> cursor-y/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L245" class="LineNr">245 </span> cursor-x, cursor-y <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L174'>cursor-position</a> <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L246" class="LineNr">246 </span> cursor-x <span class="Special">&lt;-</span> increment
<span id="L247" class="LineNr">247 </span> compare cursor-x, xmax
<span id="L248" class="LineNr">248 </span> <span class="Delimiter">{</span>
<span id="L249" class="LineNr">249 </span> <span class="PreProc">break-if-&lt;</span>
<span id="L250" class="LineNr">250 </span> cursor-x <span class="Special">&lt;-</span> copy xmin
<span id="L251" class="LineNr">251 </span> cursor-y <span class="Special">&lt;-</span> increment
<span id="L252" class="LineNr">252 </span> <span class="Delimiter">}</span>
<span id="L253" class="LineNr">253 </span> <a href='500fake-screen.mu.html#L190'>set-cursor-position</a> <a href='500fake-screen.mu.html#L14'>screen</a>, cursor-x, cursor-y
<span id="L254" class="LineNr">254 </span><span class="Delimiter">}</span>
<span id="L255" class="LineNr">255 </span>
<span id="L256" class="LineNr">256 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L256'>draw-text-wrapping-right-then-down-over-full-screen</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), text: (addr array byte), x: int, y: int, color: int, background-color: int<span class="PreProc"> -&gt; </span>_/eax: int, _/<span class="muRegEcx">ecx</span>: int <span class="Delimiter">{</span>
<span id="L257" class="LineNr">257 </span> <span class="PreProc">var</span> x2/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L258" class="LineNr">258 </span> <span class="PreProc">var</span> y2/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L259" class="LineNr">259 </span> x2, y2 <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L86'>screen-size</a> <a href='500fake-screen.mu.html#L14'>screen</a> <span class="muComment"># width, height</span>
<span id="L260" class="LineNr">260 </span> x2, y2 <span class="Special">&lt;-</span> <a href='501draw-text.mu.html#L174'>draw-text-wrapping-right-then-down</a> <a href='500fake-screen.mu.html#L14'>screen</a>, text, <span class="Constant">0</span>/xmin, <span class="Constant">0</span>/ymin, x2, y2, x, y, color, background-color
<span id="L261" class="LineNr">261 </span> <span class="PreProc">return</span> x2, y2 <span class="muComment"># cursor-x, cursor-y</span>
<span id="L262" class="LineNr">262 </span><span class="Delimiter">}</span>
<span id="L263" class="LineNr">263 </span>
<span id="L264" class="LineNr">264 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L264'>draw-text-wrapping-right-then-down-from-cursor</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), text: (addr array byte), xmin: int, ymin: int, xmax: int, ymax: int, color: int, background-color: int <span class="Delimiter">{</span>
<span id="L265" class="LineNr">265 </span> <span class="PreProc">var</span> cursor-x/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L266" class="LineNr">266 </span> <span class="PreProc">var</span> cursor-y/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L267" class="LineNr">267 </span> cursor-x, cursor-y <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L174'>cursor-position</a> <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L268" class="LineNr">268 </span> <span class="PreProc">var</span> end-x/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy cursor-x
<span id="L269" class="LineNr">269 </span> end-x <span class="Special">&lt;-</span> increment
<span id="L270" class="LineNr">270 </span> compare end-x, xmax
<span id="L271" class="LineNr">271 </span> <span class="Delimiter">{</span>
<span id="L272" class="LineNr">272 </span> <span class="PreProc">break-if-&lt;</span>
<span id="L273" class="LineNr">273 </span> cursor-x <span class="Special">&lt;-</span> copy xmin
<span id="L274" class="LineNr">274 </span> cursor-y <span class="Special">&lt;-</span> increment
<span id="L275" class="LineNr">275 </span> <span class="Delimiter">}</span>
<span id="L276" class="LineNr">276 </span> cursor-x, cursor-y <span class="Special">&lt;-</span> <a href='501draw-text.mu.html#L174'>draw-text-wrapping-right-then-down</a> <a href='500fake-screen.mu.html#L14'>screen</a>, text, xmin, ymin, xmax, ymax, cursor-x, cursor-y, color, background-color
<span id="L277" class="LineNr">277 </span><span class="Delimiter">}</span>
<span id="L278" class="LineNr">278 </span>
<span id="L279" class="LineNr">279 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), text: (addr array byte), color: int, background-color: int <span class="Delimiter">{</span>
<span id="L280" class="LineNr">280 </span> <span class="PreProc">var</span> width/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L281" class="LineNr">281 </span> <span class="PreProc">var</span> height/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L282" class="LineNr">282 </span> width, height <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L86'>screen-size</a> <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L283" class="LineNr">283 </span> <a href='501draw-text.mu.html#L264'>draw-text-wrapping-right-then-down-from-cursor</a> <a href='500fake-screen.mu.html#L14'>screen</a>, text, <span class="Constant">0</span>/xmin, <span class="Constant">0</span>/ymin, width, height, color, background-color
<span id="L284" class="LineNr">284 </span><span class="Delimiter">}</span>
<span id="L285" class="LineNr">285 </span>
<span id="L286" class="LineNr">286 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L286'>draw-int32-hex-wrapping-right-then-down</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), n: int, xmin: int, ymin: int, xmax: int, ymax: int, x: int, y: int, color: int, background-color: int<span class="PreProc"> -&gt; </span>_/eax: int, _/<span class="muRegEcx">ecx</span>: int <span class="Delimiter">{</span>
<span id="L287" class="LineNr">287 </span> <span class="PreProc">var</span> stream-storage: (stream byte <span class="Constant">0x100</span>)
<span id="L288" class="LineNr">288 </span> <span class="PreProc">var</span> stream/<span class="muRegEsi">esi</span>: (addr stream byte) <span class="Special">&lt;-</span> address stream-storage
<span id="L289" class="LineNr">289 </span> <a href='117write-int-hex.subx.html#L92'>write-int32-hex</a> stream, n
<span id="L290" class="LineNr">290 </span> <span class="PreProc">var</span> xcurr/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy x
<span id="L291" class="LineNr">291 </span> <span class="PreProc">var</span> ycurr/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy y
<span id="L292" class="LineNr">292 </span> <span class="Delimiter">{</span>
<span id="L293" class="LineNr">293 </span> <span class="PreProc">var</span> g/eax: grapheme <span class="Special">&lt;-</span> <a href='403unicode.mu.html#L92'>read-grapheme</a> stream
<span id="L294" class="LineNr">294 </span> compare g, <span class="Constant">0xffffffff</span>/end-of-file
<span id="L295" class="LineNr">295 </span> <span class="PreProc">break-if-=</span>
<span id="L296" class="LineNr">296 </span> <a href='500fake-screen.mu.html#L104'>draw-grapheme</a> <a href='500fake-screen.mu.html#L14'>screen</a>, g, xcurr, ycurr, color, background-color
<span id="L297" class="LineNr">297 </span> xcurr <span class="Special">&lt;-</span> increment
<span id="L298" class="LineNr">298 </span> compare xcurr, xmax
<span id="L299" class="LineNr">299 </span> <span class="Delimiter">{</span>
<span id="L300" class="LineNr">300 </span> <span class="PreProc">break-if-&lt;</span>
<span id="L301" class="LineNr">301 </span> xcurr <span class="Special">&lt;-</span> copy xmin
<span id="L302" class="LineNr">302 </span> ycurr <span class="Special">&lt;-</span> increment
<span id="L303" class="LineNr">303 </span> <span class="Delimiter">}</span>
<span id="L304" class="LineNr">304 </span> <span class="PreProc">loop</span>
<span id="L305" class="LineNr">305 </span> <span class="Delimiter">}</span>
<span id="L306" class="LineNr">306 </span> <a href='500fake-screen.mu.html#L190'>set-cursor-position</a> <a href='500fake-screen.mu.html#L14'>screen</a>, xcurr, ycurr
<span id="L307" class="LineNr">307 </span> <span class="PreProc">return</span> xcurr, ycurr
<span id="L308" class="LineNr">308 </span><span class="Delimiter">}</span>
<span id="L309" class="LineNr">309 </span>
<span id="L310" class="LineNr">310 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L310'>draw-int32-hex-wrapping-right-then-down-over-full-screen</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), n: int, x: int, y: int, color: int, background-color: int<span class="PreProc"> -&gt; </span>_/eax: int, _/<span class="muRegEcx">ecx</span>: int <span class="Delimiter">{</span>
<span id="L311" class="LineNr">311 </span> <span class="PreProc">var</span> x2/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L312" class="LineNr">312 </span> <span class="PreProc">var</span> y2/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L313" class="LineNr">313 </span> x2, y2 <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L86'>screen-size</a> <a href='500fake-screen.mu.html#L14'>screen</a> <span class="muComment"># width, height</span>
<span id="L314" class="LineNr">314 </span> x2, y2 <span class="Special">&lt;-</span> <a href='501draw-text.mu.html#L286'>draw-int32-hex-wrapping-right-then-down</a> <a href='500fake-screen.mu.html#L14'>screen</a>, n, <span class="Constant">0</span>/xmin, <span class="Constant">0</span>/ymin, x2, y2, x, y, color, background-color
<span id="L315" class="LineNr">315 </span> <span class="PreProc">return</span> x2, y2 <span class="muComment"># cursor-x, cursor-y</span>
<span id="L316" class="LineNr">316 </span><span class="Delimiter">}</span>
<span id="L317" class="LineNr">317 </span>
<span id="L318" class="LineNr">318 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L318'>draw-int32-hex-wrapping-right-then-down-from-cursor</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), n: int, xmin: int, ymin: int, xmax: int, ymax: int, color: int, background-color: int <span class="Delimiter">{</span>
<span id="L319" class="LineNr">319 </span> <span class="PreProc">var</span> cursor-x/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L320" class="LineNr">320 </span> <span class="PreProc">var</span> cursor-y/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L321" class="LineNr">321 </span> cursor-x, cursor-y <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L174'>cursor-position</a> <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L322" class="LineNr">322 </span> <span class="PreProc">var</span> end-x/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy cursor-x
<span id="L323" class="LineNr">323 </span> end-x <span class="Special">&lt;-</span> increment
<span id="L324" class="LineNr">324 </span> compare end-x, xmax
<span id="L325" class="LineNr">325 </span> <span class="Delimiter">{</span>
<span id="L326" class="LineNr">326 </span> <span class="PreProc">break-if-&lt;</span>
<span id="L327" class="LineNr">327 </span> cursor-x <span class="Special">&lt;-</span> copy xmin
<span id="L328" class="LineNr">328 </span> cursor-y <span class="Special">&lt;-</span> increment
<span id="L329" class="LineNr">329 </span> <span class="Delimiter">}</span>
<span id="L330" class="LineNr">330 </span> cursor-x, cursor-y <span class="Special">&lt;-</span> <a href='501draw-text.mu.html#L286'>draw-int32-hex-wrapping-right-then-down</a> <a href='500fake-screen.mu.html#L14'>screen</a>, n, xmin, ymin, xmax, ymax, cursor-x, cursor-y, color, background-color
<span id="L331" class="LineNr">331 </span><span class="Delimiter">}</span>
<span id="L332" class="LineNr">332 </span>
<span id="L333" class="LineNr">333 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L333'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), n: int, color: int, background-color: int <span class="Delimiter">{</span>
<span id="L334" class="LineNr">334 </span> <span class="PreProc">var</span> width/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L335" class="LineNr">335 </span> <span class="PreProc">var</span> height/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L336" class="LineNr">336 </span> width, height <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L86'>screen-size</a> <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L337" class="LineNr">337 </span> <a href='501draw-text.mu.html#L318'>draw-int32-hex-wrapping-right-then-down-from-cursor</a> <a href='500fake-screen.mu.html#L14'>screen</a>, n, <span class="Constant">0</span>/xmin, <span class="Constant">0</span>/ymin, width, height, color, background-color
<span id="L338" class="LineNr">338 </span><span class="Delimiter">}</span>
<span id="L339" class="LineNr">339 </span>
<span id="L340" class="LineNr">340 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L340'>draw-int32-decimal-wrapping-right-then-down</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), n: int, xmin: int, ymin: int, xmax: int, ymax: int, x: int, y: int, color: int, background-color: int<span class="PreProc"> -&gt; </span>_/eax: int, _/<span class="muRegEcx">ecx</span>: int <span class="Delimiter">{</span>
<span id="L341" class="LineNr">341 </span> <span class="PreProc">var</span> stream-storage: (stream byte <span class="Constant">0x100</span>)
<span id="L342" class="LineNr">342 </span> <span class="PreProc">var</span> stream/<span class="muRegEsi">esi</span>: (addr stream byte) <span class="Special">&lt;-</span> address stream-storage
<span id="L343" class="LineNr">343 </span> <a href='126write-int-decimal.subx.html#L8'>write-int32-decimal</a> stream, n
<span id="L344" class="LineNr">344 </span> <span class="PreProc">var</span> xcurr/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy x
<span id="L345" class="LineNr">345 </span> <span class="PreProc">var</span> ycurr/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy y
<span id="L346" class="LineNr">346 </span> <span class="Delimiter">{</span>
<span id="L347" class="LineNr">347 </span> <span class="PreProc">var</span> g/eax: grapheme <span class="Special">&lt;-</span> <a href='403unicode.mu.html#L92'>read-grapheme</a> stream
<span id="L348" class="LineNr">348 </span> compare g, <span class="Constant">0xffffffff</span>/end-of-file
<span id="L349" class="LineNr">349 </span> <span class="PreProc">break-if-=</span>
<span id="L350" class="LineNr">350 </span> <a href='500fake-screen.mu.html#L104'>draw-grapheme</a> <a href='500fake-screen.mu.html#L14'>screen</a>, g, xcurr, ycurr, color, background-color
<span id="L351" class="LineNr">351 </span> xcurr <span class="Special">&lt;-</span> increment
<span id="L352" class="LineNr">352 </span> compare xcurr, xmax
<span id="L353" class="LineNr">353 </span> <span class="Delimiter">{</span>
<span id="L354" class="LineNr">354 </span> <span class="PreProc">break-if-&lt;</span>
<span id="L355" class="LineNr">355 </span> xcurr <span class="Special">&lt;-</span> copy xmin
<span id="L356" class="LineNr">356 </span> ycurr <span class="Special">&lt;-</span> increment
<span id="L357" class="LineNr">357 </span> <span class="Delimiter">}</span>
<span id="L358" class="LineNr">358 </span> <span class="PreProc">loop</span>
<span id="L359" class="LineNr">359 </span> <span class="Delimiter">}</span>
<span id="L360" class="LineNr">360 </span> <a href='500fake-screen.mu.html#L190'>set-cursor-position</a> <a href='500fake-screen.mu.html#L14'>screen</a>, xcurr, ycurr
<span id="L361" class="LineNr">361 </span> <span class="PreProc">return</span> xcurr, ycurr
<span id="L362" class="LineNr">362 </span><span class="Delimiter">}</span>
<span id="L363" class="LineNr">363 </span>
<span id="L364" class="LineNr">364 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L364'>draw-int32-decimal-wrapping-right-then-down-over-full-screen</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), n: int, x: int, y: int, color: int, background-color: int<span class="PreProc"> -&gt; </span>_/eax: int, _/<span class="muRegEcx">ecx</span>: int <span class="Delimiter">{</span>
<span id="L365" class="LineNr">365 </span> <span class="PreProc">var</span> x2/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L366" class="LineNr">366 </span> <span class="PreProc">var</span> y2/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L367" class="LineNr">367 </span> x2, y2 <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L86'>screen-size</a> <a href='500fake-screen.mu.html#L14'>screen</a> <span class="muComment"># width, height</span>
<span id="L368" class="LineNr">368 </span> x2, y2 <span class="Special">&lt;-</span> <a href='501draw-text.mu.html#L340'>draw-int32-decimal-wrapping-right-then-down</a> <a href='500fake-screen.mu.html#L14'>screen</a>, n, <span class="Constant">0</span>/xmin, <span class="Constant">0</span>/ymin, x2, y2, x, y, color, background-color
<span id="L369" class="LineNr">369 </span> <span class="PreProc">return</span> x2, y2 <span class="muComment"># cursor-x, cursor-y</span>
<span id="L370" class="LineNr">370 </span><span class="Delimiter">}</span>
<span id="L371" class="LineNr">371 </span>
<span id="L372" class="LineNr">372 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L372'>draw-int32-decimal-wrapping-right-then-down-from-cursor</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), n: int, xmin: int, ymin: int, xmax: int, ymax: int, color: int, background-color: int <span class="Delimiter">{</span>
<span id="L373" class="LineNr">373 </span> <span class="PreProc">var</span> cursor-x/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L374" class="LineNr">374 </span> <span class="PreProc">var</span> cursor-y/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L375" class="LineNr">375 </span> cursor-x, cursor-y <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L174'>cursor-position</a> <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L376" class="LineNr">376 </span> <span class="PreProc">var</span> end-x/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy cursor-x
<span id="L377" class="LineNr">377 </span> end-x <span class="Special">&lt;-</span> increment
<span id="L378" class="LineNr">378 </span> compare end-x, xmax
<span id="L379" class="LineNr">379 </span> <span class="Delimiter">{</span>
<span id="L380" class="LineNr">380 </span> <span class="PreProc">break-if-&lt;</span>
<span id="L381" class="LineNr">381 </span> cursor-x <span class="Special">&lt;-</span> copy xmin
<span id="L382" class="LineNr">382 </span> cursor-y <span class="Special">&lt;-</span> increment
<span id="L383" class="LineNr">383 </span> <span class="Delimiter">}</span>
<span id="L384" class="LineNr">384 </span> cursor-x, cursor-y <span class="Special">&lt;-</span> <a href='501draw-text.mu.html#L340'>draw-int32-decimal-wrapping-right-then-down</a> <a href='500fake-screen.mu.html#L14'>screen</a>, n, xmin, ymin, xmax, ymax, cursor-x, cursor-y, color, background-color
<span id="L385" class="LineNr">385 </span><span class="Delimiter">}</span>
<span id="L386" class="LineNr">386 </span>
<span id="L387" class="LineNr">387 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L387'>draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), n: int, color: int, background-color: int <span class="Delimiter">{</span>
<span id="L388" class="LineNr">388 </span> <span class="PreProc">var</span> width/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L389" class="LineNr">389 </span> <span class="PreProc">var</span> height/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L390" class="LineNr">390 </span> width, height <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L86'>screen-size</a> <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L391" class="LineNr">391 </span> <a href='501draw-text.mu.html#L372'>draw-int32-decimal-wrapping-right-then-down-from-cursor</a> <a href='500fake-screen.mu.html#L14'>screen</a>, n, <span class="Constant">0</span>/xmin, <span class="Constant">0</span>/ymin, width, height, color, background-color
<span id="L392" class="LineNr">392 </span><span class="Delimiter">}</span>
<span id="L393" class="LineNr">393 </span>
<span id="L394" class="LineNr">394 </span><span class="muComment">## Text direction: down then right</span>
<span id="L395" class="LineNr">395 </span>
<span id="L396" class="LineNr">396 </span><span class="muComment"># draw a single line of text vertically from x, y to ymax</span>
<span id="L397" class="LineNr">397 </span><span class="muComment"># return the next 'y' coordinate</span>
<span id="L398" class="LineNr">398 </span><span class="muComment"># if there isn't enough space, truncate</span>
<span id="L399" class="LineNr">399 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L399'>draw-text-downward</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), text: (addr array byte), x: int, y: int, ymax: int, color: int, background-color: int<span class="PreProc"> -&gt; </span>_/eax: int <span class="Delimiter">{</span>
<span id="L400" class="LineNr">400 </span> <span class="PreProc">var</span> stream-storage: (stream byte <span class="Constant">0x100</span>)
<span id="L401" class="LineNr">401 </span> <span class="PreProc">var</span> stream/<span class="muRegEsi">esi</span>: (addr stream byte) <span class="Special">&lt;-</span> address stream-storage
<span id="L402" class="LineNr">402 </span> <a href='108write.subx.html#L11'>write</a> stream, text
<span id="L403" class="LineNr">403 </span> <span class="PreProc">var</span> ycurr/eax: int <span class="Special">&lt;-</span> <a href='501draw-text.mu.html#L410'>draw-stream-downward</a> <a href='500fake-screen.mu.html#L14'>screen</a>, stream, x, y, ymax, color, background-color
<span id="L404" class="LineNr">404 </span> <span class="PreProc">return</span> ycurr
<span id="L405" class="LineNr">405 </span><span class="Delimiter">}</span>
<span id="L406" class="LineNr">406 </span>
<span id="L407" class="LineNr">407 </span><span class="muComment"># draw a single-line stream vertically from x, y to ymax</span>
<span id="L408" class="LineNr">408 </span><span class="muComment"># return the next 'y' coordinate</span>
<span id="L409" class="LineNr">409 </span><span class="muComment"># if there isn't enough space, truncate</span>
<span id="L410" class="LineNr">410 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L410'>draw-stream-downward</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), stream: (addr stream byte), x: int, y: int, ymax: int, color: int, background-color: int<span class="PreProc"> -&gt; </span>_/eax: int <span class="Delimiter">{</span>
<span id="L411" class="LineNr">411 </span> <span class="PreProc">var</span> ycurr/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy y
<span id="L412" class="LineNr">412 </span> <span class="Delimiter">{</span>
<span id="L413" class="LineNr">413 </span> <span class="PreProc">var</span> g/eax: grapheme <span class="Special">&lt;-</span> <a href='403unicode.mu.html#L92'>read-grapheme</a> stream
<span id="L414" class="LineNr">414 </span> compare g, <span class="Constant">0xffffffff</span>/end-of-file
<span id="L415" class="LineNr">415 </span> <span class="PreProc">break-if-=</span>
<span id="L416" class="LineNr">416 </span> <a href='500fake-screen.mu.html#L104'>draw-grapheme</a> <a href='500fake-screen.mu.html#L14'>screen</a>, g, x, ycurr, color, background-color
<span id="L417" class="LineNr">417 </span> ycurr <span class="Special">&lt;-</span> increment
<span id="L418" class="LineNr">418 </span> <span class="PreProc">loop</span>
<span id="L419" class="LineNr">419 </span> <span class="Delimiter">}</span>
<span id="L420" class="LineNr">420 </span> <a href='500fake-screen.mu.html#L190'>set-cursor-position</a> <a href='500fake-screen.mu.html#L14'>screen</a>, x, ycurr
<span id="L421" class="LineNr">421 </span> <span class="PreProc">return</span> ycurr
<span id="L422" class="LineNr">422 </span><span class="Delimiter">}</span>
<span id="L423" class="LineNr">423 </span>
<span id="L424" class="LineNr">424 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L424'>draw-text-downward-from-cursor</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), text: (addr array byte), ymax: int, color: int, background-color: int <span class="Delimiter">{</span>
<span id="L425" class="LineNr">425 </span> <span class="PreProc">var</span> cursor-x/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L426" class="LineNr">426 </span> <span class="PreProc">var</span> cursor-y/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L427" class="LineNr">427 </span> cursor-x, cursor-y <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L174'>cursor-position</a> <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L428" class="LineNr">428 </span> <span class="PreProc">var</span> result/eax: int <span class="Special">&lt;-</span> <a href='501draw-text.mu.html#L399'>draw-text-downward</a> <a href='500fake-screen.mu.html#L14'>screen</a>, text, cursor-x, cursor-y, ymax, color, background-color
<span id="L429" class="LineNr">429 </span><span class="Delimiter">}</span>
<span id="L430" class="LineNr">430 </span>
<span id="L431" class="LineNr">431 </span><span class="muComment"># draw text down and right in the rectangle from (xmin, ymin) to (xmax, ymax), starting from (x, y), wrapping as necessary</span>
<span id="L432" class="LineNr">432 </span><span class="muComment"># return the next (x, y) coordinate in raster order where drawing stopped</span>
<span id="L433" class="LineNr">433 </span><span class="muComment"># that way the caller can draw more if given the same min and max bounding-box.</span>
<span id="L434" class="LineNr">434 </span><span class="muComment"># if there isn't enough space, truncate</span>
<span id="L435" class="LineNr">435 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L435'>draw-text-wrapping-down-then-right</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), text: (addr array byte), xmin: int, ymin: int, xmax: int, ymax: int, _x: int, _y: int, color: int, background-color: int<span class="PreProc"> -&gt; </span>_/eax: int, _/<span class="muRegEcx">ecx</span>: int <span class="Delimiter">{</span>
<span id="L436" class="LineNr">436 </span> <span class="PreProc">var</span> stream-storage: (stream byte <span class="Constant">0x100</span>)
<span id="L437" class="LineNr">437 </span> <span class="PreProc">var</span> stream/<span class="muRegEsi">esi</span>: (addr stream byte) <span class="Special">&lt;-</span> address stream-storage
<span id="L438" class="LineNr">438 </span> <a href='108write.subx.html#L11'>write</a> stream, text
<span id="L439" class="LineNr">439 </span> <span class="PreProc">var</span> x/eax: int <span class="Special">&lt;-</span> copy _x
<span id="L440" class="LineNr">440 </span> <span class="PreProc">var</span> y/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy _y
<span id="L441" class="LineNr">441 </span> x, y <span class="Special">&lt;-</span> <a href='501draw-text.mu.html#L449'>draw-stream-wrapping-down-then-right</a> <a href='500fake-screen.mu.html#L14'>screen</a>, stream, xmin, ymin, xmax, ymax, x, y, color, background-color
<span id="L442" class="LineNr">442 </span> <span class="PreProc">return</span> x, y
<span id="L443" class="LineNr">443 </span><span class="Delimiter">}</span>
<span id="L444" class="LineNr">444 </span>
<span id="L445" class="LineNr">445 </span><span class="muComment"># draw a stream down and right in the rectangle from (xmin, ymin) to (xmax, ymax), starting from (x, y), wrapping as necessary</span>
<span id="L446" class="LineNr">446 </span><span class="muComment"># return the next (x, y) coordinate in raster order where drawing stopped</span>
<span id="L447" class="LineNr">447 </span><span class="muComment"># that way the caller can draw more if given the same min and max bounding-box.</span>
<span id="L448" class="LineNr">448 </span><span class="muComment"># if there isn't enough space, truncate</span>
<span id="L449" class="LineNr">449 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L449'>draw-stream-wrapping-down-then-right</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), stream: (addr stream byte), xmin: int, ymin: int, xmax: int, ymax: int, x: int, y: int, color: int, background-color: int<span class="PreProc"> -&gt; </span>_/eax: int, _/<span class="muRegEcx">ecx</span>: int <span class="Delimiter">{</span>
<span id="L450" class="LineNr">450 </span> <span class="PreProc">var</span> xcurr/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy x
<span id="L451" class="LineNr">451 </span> <span class="PreProc">var</span> ycurr/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy y
<span id="L452" class="LineNr">452 </span> <span class="Delimiter">{</span>
<span id="L453" class="LineNr">453 </span> <span class="PreProc">var</span> g/eax: grapheme <span class="Special">&lt;-</span> <a href='403unicode.mu.html#L92'>read-grapheme</a> stream
<span id="L454" class="LineNr">454 </span> compare g, <span class="Constant">0xffffffff</span>/end-of-file
<span id="L455" class="LineNr">455 </span> <span class="PreProc">break-if-=</span>
<span id="L456" class="LineNr">456 </span> <a href='500fake-screen.mu.html#L104'>draw-grapheme</a> <a href='500fake-screen.mu.html#L14'>screen</a>, g, xcurr, ycurr, color, background-color
<span id="L457" class="LineNr">457 </span> ycurr <span class="Special">&lt;-</span> increment
<span id="L458" class="LineNr">458 </span> compare ycurr, ymax
<span id="L459" class="LineNr">459 </span> <span class="Delimiter">{</span>
<span id="L460" class="LineNr">460 </span> <span class="PreProc">break-if-&lt;</span>
<span id="L461" class="LineNr">461 </span> xcurr <span class="Special">&lt;-</span> increment
<span id="L462" class="LineNr">462 </span> ycurr <span class="Special">&lt;-</span> copy ymin
<span id="L463" class="LineNr">463 </span> <span class="Delimiter">}</span>
<span id="L464" class="LineNr">464 </span> <span class="PreProc">loop</span>
<span id="L465" class="LineNr">465 </span> <span class="Delimiter">}</span>
<span id="L466" class="LineNr">466 </span> <a href='500fake-screen.mu.html#L190'>set-cursor-position</a> <a href='500fake-screen.mu.html#L14'>screen</a>, xcurr, ycurr
<span id="L467" class="LineNr">467 </span> <span class="PreProc">return</span> xcurr, ycurr
<span id="L468" class="LineNr">468 </span><span class="Delimiter">}</span>
<span id="L469" class="LineNr">469 </span>
<span id="L470" class="LineNr">470 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L470'>draw-text-wrapping-down-then-right-over-full-screen</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), text: (addr array byte), x: int, y: int, color: int, background-color: int<span class="PreProc"> -&gt; </span>_/eax: int, _/<span class="muRegEcx">ecx</span>: int <span class="Delimiter">{</span>
<span id="L471" class="LineNr">471 </span> <span class="PreProc">var</span> x2/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L472" class="LineNr">472 </span> <span class="PreProc">var</span> y2/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L473" class="LineNr">473 </span> x2, y2 <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L86'>screen-size</a> <a href='500fake-screen.mu.html#L14'>screen</a> <span class="muComment"># width, height</span>
<span id="L474" class="LineNr">474 </span> x2, y2 <span class="Special">&lt;-</span> <a href='501draw-text.mu.html#L435'>draw-text-wrapping-down-then-right</a> <a href='500fake-screen.mu.html#L14'>screen</a>, text, <span class="Constant">0</span>/xmin, <span class="Constant">0</span>/ymin, x2, y2, x, y, color, background-color
<span id="L475" class="LineNr">475 </span> <span class="PreProc">return</span> x2, y2 <span class="muComment"># cursor-x, cursor-y</span>
<span id="L476" class="LineNr">476 </span><span class="Delimiter">}</span>
<span id="L477" class="LineNr">477 </span>
<span id="L478" class="LineNr">478 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L478'>draw-text-wrapping-down-then-right-from-cursor</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), text: (addr array byte), xmin: int, ymin: int, xmax: int, ymax: int, color: int, background-color: int <span class="Delimiter">{</span>
<span id="L479" class="LineNr">479 </span> <span class="PreProc">var</span> cursor-x/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L480" class="LineNr">480 </span> <span class="PreProc">var</span> cursor-y/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L481" class="LineNr">481 </span> cursor-x, cursor-y <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L174'>cursor-position</a> <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L482" class="LineNr">482 </span> <span class="PreProc">var</span> end-y/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy cursor-y
<span id="L483" class="LineNr">483 </span> end-y <span class="Special">&lt;-</span> increment
<span id="L484" class="LineNr">484 </span> compare end-y, ymax
<span id="L485" class="LineNr">485 </span> <span class="Delimiter">{</span>
<span id="L486" class="LineNr">486 </span> <span class="PreProc">break-if-&lt;</span>
<span id="L487" class="LineNr">487 </span> cursor-x <span class="Special">&lt;-</span> increment
<span id="L488" class="LineNr">488 </span> cursor-y <span class="Special">&lt;-</span> copy ymin
<span id="L489" class="LineNr">489 </span> <span class="Delimiter">}</span>
<span id="L490" class="LineNr">490 </span> cursor-x, cursor-y <span class="Special">&lt;-</span> <a href='501draw-text.mu.html#L435'>draw-text-wrapping-down-then-right</a> <a href='500fake-screen.mu.html#L14'>screen</a>, text, xmin, ymin, xmax, ymax, cursor-x, cursor-y, color, background-color
<span id="L491" class="LineNr">491 </span><span class="Delimiter">}</span>
<span id="L492" class="LineNr">492 </span>
<span id="L493" class="LineNr">493 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L493'>draw-text-wrapping-down-then-right-from-cursor-over-full-screen</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), text: (addr array byte), color: int, background-color: int <span class="Delimiter">{</span>
<span id="L494" class="LineNr">494 </span> <span class="PreProc">var</span> width/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L495" class="LineNr">495 </span> <span class="PreProc">var</span> height/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L496" class="LineNr">496 </span> width, height <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L86'>screen-size</a> <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L497" class="LineNr">497 </span> <a href='501draw-text.mu.html#L478'>draw-text-wrapping-down-then-right-from-cursor</a> <a href='500fake-screen.mu.html#L14'>screen</a>, text, <span class="Constant">0</span>/xmin, <span class="Constant">0</span>/ymin, width, height, color, background-color
<span id="L498" class="LineNr">498 </span><span class="Delimiter">}</span>
<span id="L175" class="LineNr">175 </span> <span class="PreProc">var</span> stream-storage: (stream byte <span class="Constant">0x200</span>/print-buffer-size)
<span id="L176" class="LineNr">176 </span> <span class="PreProc">var</span> stream/<span class="muRegEdi">edi</span>: (addr stream byte) <span class="Special">&lt;-</span> address stream-storage
<span id="L177" class="LineNr">177 </span> <span class="PreProc">var</span> text/<span class="muRegEsi">esi</span>: (addr array byte) <span class="Special">&lt;-</span> copy _text
<span id="L178" class="LineNr">178 </span> <span class="PreProc">var</span> len/eax: int <span class="Special">&lt;-</span> length text
<span id="L179" class="LineNr">179 </span> compare len, <span class="Constant">0x200</span>/print-buffer-size
<span id="L180" class="LineNr">180 </span> <span class="Delimiter">{</span>
<span id="L181" class="LineNr">181 </span> <span class="PreProc">break-if-&lt;</span>
<span id="L182" class="LineNr">182 </span> <a href='108write.subx.html#L11'>write</a> stream, <span class="Constant">&quot;ERROR: stream too small in draw-text-wrapping-right-then-down&quot;</span>
<span id="L183" class="LineNr">183 </span> <span class="Delimiter">}</span>
<span id="L184" class="LineNr">184 </span> compare len, <span class="Constant">0x200</span>/print-buffer-size
<span id="L185" class="LineNr">185 </span> <span class="Delimiter">{</span>
<span id="L186" class="LineNr">186 </span> <span class="PreProc">break-if-&gt;=</span>
<span id="L187" class="LineNr">187 </span> <a href='108write.subx.html#L11'>write</a> stream, text
<span id="L188" class="LineNr">188 </span> <span class="Delimiter">}</span>
<span id="L189" class="LineNr">189 </span> <span class="PreProc">var</span> x/eax: int <span class="Special">&lt;-</span> copy _x
<span id="L190" class="LineNr">190 </span> <span class="PreProc">var</span> y/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy _y
<span id="L191" class="LineNr">191 </span> x, y <span class="Special">&lt;-</span> <a href='501draw-text.mu.html#L199'>draw-stream-wrapping-right-then-down</a> <a href='500fake-screen.mu.html#L14'>screen</a>, stream, xmin, ymin, xmax, ymax, x, y, color, background-color
<span id="L192" class="LineNr">192 </span> <span class="PreProc">return</span> x, y
<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="muComment"># draw a stream in the rectangle from (xmin, ymin) to (xmax, ymax), starting from (x, y), wrapping as necessary</span>
<span id="L196" class="LineNr">196 </span><span class="muComment"># return the next (x, y) coordinate in raster order where drawing stopped</span>
<span id="L197" class="LineNr">197 </span><span class="muComment"># that way the caller can draw more if given the same min and max bounding-box.</span>
<span id="L198" class="LineNr">198 </span><span class="muComment"># if there isn't enough space, truncate</span>
<span id="L199" class="LineNr">199 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L199'>draw-stream-wrapping-right-then-down</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), stream: (addr stream byte), xmin: int, ymin: int, xmax: int, ymax: int, x: int, y: int, color: int, background-color: int<span class="PreProc"> -&gt; </span>_/eax: int, _/<span class="muRegEcx">ecx</span>: int <span class="Delimiter">{</span>
<span id="L200" class="LineNr">200 </span> <span class="PreProc">var</span> xcurr/eax: int <span class="Special">&lt;-</span> copy x
<span id="L201" class="LineNr">201 </span> <span class="PreProc">var</span> ycurr/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy y
<span id="L202" class="LineNr">202 </span> <span class="PreProc">var</span> g/<span class="muRegEbx">ebx</span>: grapheme <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L203" class="LineNr">203 </span> <span class="Delimiter">{</span>
<span id="L204" class="LineNr">204 </span> <span class="Delimiter">{</span>
<span id="L205" class="LineNr">205 </span> <span class="PreProc">var</span> _g/eax: grapheme <span class="Special">&lt;-</span> <a href='403unicode.mu.html#L92'>read-grapheme</a> stream
<span id="L206" class="LineNr">206 </span> g <span class="Special">&lt;-</span> copy _g
<span id="L207" class="LineNr">207 </span> <span class="Delimiter">}</span>
<span id="L208" class="LineNr">208 </span> compare g, <span class="Constant">0xffffffff</span>/end-of-file
<span id="L209" class="LineNr">209 </span> <span class="PreProc">break-if-=</span>
<span id="L210" class="LineNr">210 </span> xcurr, ycurr <span class="Special">&lt;-</span> <a href='501draw-text.mu.html#L148'>render-grapheme</a> <a href='500fake-screen.mu.html#L14'>screen</a>, g, xmin, ymin, xmax, ymax, xcurr, ycurr, color, background-color
<span id="L211" class="LineNr">211 </span> <span class="PreProc">loop</span>
<span id="L212" class="LineNr">212 </span> <span class="Delimiter">}</span>
<span id="L213" class="LineNr">213 </span> <a href='500fake-screen.mu.html#L190'>set-cursor-position</a> <a href='500fake-screen.mu.html#L14'>screen</a>, xcurr, ycurr
<span id="L214" class="LineNr">214 </span> <span class="PreProc">return</span> xcurr, ycurr
<span id="L215" class="LineNr">215 </span><span class="Delimiter">}</span>
<span id="L216" class="LineNr">216 </span>
<span id="L217" class="LineNr">217 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L217'>draw-stream-wrapping-right-then-down-from-cursor</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), stream: (addr stream byte), xmin: int, ymin: int, xmax: int, ymax: int, color: int, background-color: int <span class="Delimiter">{</span>
<span id="L218" class="LineNr">218 </span> <span class="PreProc">var</span> cursor-x/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L219" class="LineNr">219 </span> <span class="PreProc">var</span> cursor-y/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L220" class="LineNr">220 </span> cursor-x, cursor-y <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L174'>cursor-position</a> <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L221" class="LineNr">221 </span> <span class="PreProc">var</span> end-x/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy cursor-x
<span id="L222" class="LineNr">222 </span> end-x <span class="Special">&lt;-</span> increment
<span id="L223" class="LineNr">223 </span> compare end-x, xmax
<span id="L224" class="LineNr">224 </span> <span class="Delimiter">{</span>
<span id="L225" class="LineNr">225 </span> <span class="PreProc">break-if-&lt;</span>
<span id="L226" class="LineNr">226 </span> cursor-x <span class="Special">&lt;-</span> copy xmin
<span id="L227" class="LineNr">227 </span> cursor-y <span class="Special">&lt;-</span> increment
<span id="L228" class="LineNr">228 </span> <span class="Delimiter">}</span>
<span id="L229" class="LineNr">229 </span> cursor-x, cursor-y <span class="Special">&lt;-</span> <a href='501draw-text.mu.html#L199'>draw-stream-wrapping-right-then-down</a> <a href='500fake-screen.mu.html#L14'>screen</a>, stream, xmin, ymin, xmax, ymax, cursor-x, cursor-y, color, background-color
<span id="L230" class="LineNr">230 </span><span class="Delimiter">}</span>
<span id="L231" class="LineNr">231 </span>
<span id="L232" class="LineNr">232 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L232'>draw-stream-wrapping-right-then-down-from-cursor-over-full-screen</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), stream: (addr stream byte), color: int, background-color: int <span class="Delimiter">{</span>
<span id="L233" class="LineNr">233 </span> <span class="PreProc">var</span> width/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L234" class="LineNr">234 </span> <span class="PreProc">var</span> height/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L235" class="LineNr">235 </span> width, height <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L86'>screen-size</a> <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L236" class="LineNr">236 </span> <a href='501draw-text.mu.html#L217'>draw-stream-wrapping-right-then-down-from-cursor</a> <a href='500fake-screen.mu.html#L14'>screen</a>, stream, <span class="Constant">0</span>/xmin, <span class="Constant">0</span>/ymin, width, height, color, background-color
<span id="L237" class="LineNr">237 </span><span class="Delimiter">}</span>
<span id="L238" class="LineNr">238 </span>
<span id="L239" class="LineNr">239 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L239'>move-cursor-rightward-and-downward</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), xmin: int, xmax: int <span class="Delimiter">{</span>
<span id="L240" class="LineNr">240 </span> <span class="PreProc">var</span> cursor-x/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L241" class="LineNr">241 </span> <span class="PreProc">var</span> cursor-y/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L242" class="LineNr">242 </span> cursor-x, cursor-y <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L174'>cursor-position</a> <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L243" class="LineNr">243 </span> cursor-x <span class="Special">&lt;-</span> increment
<span id="L244" class="LineNr">244 </span> compare cursor-x, xmax
<span id="L245" class="LineNr">245 </span> <span class="Delimiter">{</span>
<span id="L246" class="LineNr">246 </span> <span class="PreProc">break-if-&lt;</span>
<span id="L247" class="LineNr">247 </span> cursor-x <span class="Special">&lt;-</span> copy xmin
<span id="L248" class="LineNr">248 </span> cursor-y <span class="Special">&lt;-</span> increment
<span id="L249" class="LineNr">249 </span> <span class="Delimiter">}</span>
<span id="L250" class="LineNr">250 </span> <a href='500fake-screen.mu.html#L190'>set-cursor-position</a> <a href='500fake-screen.mu.html#L14'>screen</a>, cursor-x, cursor-y
<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="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L253'>draw-text-wrapping-right-then-down-over-full-screen</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), text: (addr array byte), x: int, y: int, color: int, background-color: int<span class="PreProc"> -&gt; </span>_/eax: int, _/<span class="muRegEcx">ecx</span>: int <span class="Delimiter">{</span>
<span id="L254" class="LineNr">254 </span> <span class="PreProc">var</span> x2/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L255" class="LineNr">255 </span> <span class="PreProc">var</span> y2/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L256" class="LineNr">256 </span> x2, y2 <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L86'>screen-size</a> <a href='500fake-screen.mu.html#L14'>screen</a> <span class="muComment"># width, height</span>
<span id="L257" class="LineNr">257 </span> x2, y2 <span class="Special">&lt;-</span> <a href='501draw-text.mu.html#L174'>draw-text-wrapping-right-then-down</a> <a href='500fake-screen.mu.html#L14'>screen</a>, text, <span class="Constant">0</span>/xmin, <span class="Constant">0</span>/ymin, x2, y2, x, y, color, background-color
<span id="L258" class="LineNr">258 </span> <span class="PreProc">return</span> x2, y2 <span class="muComment"># cursor-x, cursor-y</span>
<span id="L259" class="LineNr">259 </span><span class="Delimiter">}</span>
<span id="L260" class="LineNr">260 </span>
<span id="L261" class="LineNr">261 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L261'>draw-text-wrapping-right-then-down-from-cursor</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), text: (addr array byte), xmin: int, ymin: int, xmax: int, ymax: int, color: int, background-color: int <span class="Delimiter">{</span>
<span id="L262" class="LineNr">262 </span> <span class="PreProc">var</span> cursor-x/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L263" class="LineNr">263 </span> <span class="PreProc">var</span> cursor-y/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L264" class="LineNr">264 </span> cursor-x, cursor-y <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L174'>cursor-position</a> <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L265" class="LineNr">265 </span> <span class="PreProc">var</span> end-x/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy cursor-x
<span id="L266" class="LineNr">266 </span> end-x <span class="Special">&lt;-</span> increment
<span id="L267" class="LineNr">267 </span> compare end-x, xmax
<span id="L268" class="LineNr">268 </span> <span class="Delimiter">{</span>
<span id="L269" class="LineNr">269 </span> <span class="PreProc">break-if-&lt;</span>
<span id="L270" class="LineNr">270 </span> cursor-x <span class="Special">&lt;-</span> copy xmin
<span id="L271" class="LineNr">271 </span> cursor-y <span class="Special">&lt;-</span> increment
<span id="L272" class="LineNr">272 </span> <span class="Delimiter">}</span>
<span id="L273" class="LineNr">273 </span> cursor-x, cursor-y <span class="Special">&lt;-</span> <a href='501draw-text.mu.html#L174'>draw-text-wrapping-right-then-down</a> <a href='500fake-screen.mu.html#L14'>screen</a>, text, xmin, ymin, xmax, ymax, cursor-x, cursor-y, color, background-color
<span id="L274" class="LineNr">274 </span><span class="Delimiter">}</span>
<span id="L275" class="LineNr">275 </span>
<span id="L276" class="LineNr">276 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), text: (addr array byte), color: int, background-color: int <span class="Delimiter">{</span>
<span id="L277" class="LineNr">277 </span> <span class="PreProc">var</span> width/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L278" class="LineNr">278 </span> <span class="PreProc">var</span> height/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L279" class="LineNr">279 </span> width, height <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L86'>screen-size</a> <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L280" class="LineNr">280 </span> <a href='501draw-text.mu.html#L261'>draw-text-wrapping-right-then-down-from-cursor</a> <a href='500fake-screen.mu.html#L14'>screen</a>, text, <span class="Constant">0</span>/xmin, <span class="Constant">0</span>/ymin, width, height, color, background-color
<span id="L281" class="LineNr">281 </span><span class="Delimiter">}</span>
<span id="L282" class="LineNr">282 </span>
<span id="L283" class="LineNr">283 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L283'>draw-int32-hex-wrapping-right-then-down</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), n: int, xmin: int, ymin: int, xmax: int, ymax: int, x: int, y: int, color: int, background-color: int<span class="PreProc"> -&gt; </span>_/eax: int, _/<span class="muRegEcx">ecx</span>: int <span class="Delimiter">{</span>
<span id="L284" class="LineNr">284 </span> <span class="PreProc">var</span> stream-storage: (stream byte <span class="Constant">0x100</span>)
<span id="L285" class="LineNr">285 </span> <span class="PreProc">var</span> stream/<span class="muRegEsi">esi</span>: (addr stream byte) <span class="Special">&lt;-</span> address stream-storage
<span id="L286" class="LineNr">286 </span> <a href='117write-int-hex.subx.html#L92'>write-int32-hex</a> stream, n
<span id="L287" class="LineNr">287 </span> <span class="PreProc">var</span> xcurr/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy x
<span id="L288" class="LineNr">288 </span> <span class="PreProc">var</span> ycurr/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy y
<span id="L289" class="LineNr">289 </span> <span class="Delimiter">{</span>
<span id="L290" class="LineNr">290 </span> <span class="PreProc">var</span> g/eax: grapheme <span class="Special">&lt;-</span> <a href='403unicode.mu.html#L92'>read-grapheme</a> stream
<span id="L291" class="LineNr">291 </span> compare g, <span class="Constant">0xffffffff</span>/end-of-file
<span id="L292" class="LineNr">292 </span> <span class="PreProc">break-if-=</span>
<span id="L293" class="LineNr">293 </span> <a href='500fake-screen.mu.html#L104'>draw-grapheme</a> <a href='500fake-screen.mu.html#L14'>screen</a>, g, xcurr, ycurr, color, background-color
<span id="L294" class="LineNr">294 </span> xcurr <span class="Special">&lt;-</span> increment
<span id="L295" class="LineNr">295 </span> compare xcurr, xmax
<span id="L296" class="LineNr">296 </span> <span class="Delimiter">{</span>
<span id="L297" class="LineNr">297 </span> <span class="PreProc">break-if-&lt;</span>
<span id="L298" class="LineNr">298 </span> xcurr <span class="Special">&lt;-</span> copy xmin
<span id="L299" class="LineNr">299 </span> ycurr <span class="Special">&lt;-</span> increment
<span id="L300" class="LineNr">300 </span> <span class="Delimiter">}</span>
<span id="L301" class="LineNr">301 </span> <span class="PreProc">loop</span>
<span id="L302" class="LineNr">302 </span> <span class="Delimiter">}</span>
<span id="L303" class="LineNr">303 </span> <a href='500fake-screen.mu.html#L190'>set-cursor-position</a> <a href='500fake-screen.mu.html#L14'>screen</a>, xcurr, ycurr
<span id="L304" class="LineNr">304 </span> <span class="PreProc">return</span> xcurr, ycurr
<span id="L305" class="LineNr">305 </span><span class="Delimiter">}</span>
<span id="L306" class="LineNr">306 </span>
<span id="L307" class="LineNr">307 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L307'>draw-int32-hex-wrapping-right-then-down-over-full-screen</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), n: int, x: int, y: int, color: int, background-color: int<span class="PreProc"> -&gt; </span>_/eax: int, _/<span class="muRegEcx">ecx</span>: int <span class="Delimiter">{</span>
<span id="L308" class="LineNr">308 </span> <span class="PreProc">var</span> x2/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L309" class="LineNr">309 </span> <span class="PreProc">var</span> y2/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L310" class="LineNr">310 </span> x2, y2 <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L86'>screen-size</a> <a href='500fake-screen.mu.html#L14'>screen</a> <span class="muComment"># width, height</span>
<span id="L311" class="LineNr">311 </span> x2, y2 <span class="Special">&lt;-</span> <a href='501draw-text.mu.html#L283'>draw-int32-hex-wrapping-right-then-down</a> <a href='500fake-screen.mu.html#L14'>screen</a>, n, <span class="Constant">0</span>/xmin, <span class="Constant">0</span>/ymin, x2, y2, x, y, color, background-color
<span id="L312" class="LineNr">312 </span> <span class="PreProc">return</span> x2, y2 <span class="muComment"># cursor-x, cursor-y</span>
<span id="L313" class="LineNr">313 </span><span class="Delimiter">}</span>
<span id="L314" class="LineNr">314 </span>
<span id="L315" class="LineNr">315 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L315'>draw-int32-hex-wrapping-right-then-down-from-cursor</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), n: int, xmin: int, ymin: int, xmax: int, ymax: int, color: int, background-color: int <span class="Delimiter">{</span>
<span id="L316" class="LineNr">316 </span> <span class="PreProc">var</span> cursor-x/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L317" class="LineNr">317 </span> <span class="PreProc">var</span> cursor-y/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L318" class="LineNr">318 </span> cursor-x, cursor-y <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L174'>cursor-position</a> <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L319" class="LineNr">319 </span> <span class="PreProc">var</span> end-x/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy cursor-x
<span id="L320" class="LineNr">320 </span> end-x <span class="Special">&lt;-</span> increment
<span id="L321" class="LineNr">321 </span> compare end-x, xmax
<span id="L322" class="LineNr">322 </span> <span class="Delimiter">{</span>
<span id="L323" class="LineNr">323 </span> <span class="PreProc">break-if-&lt;</span>
<span id="L324" class="LineNr">324 </span> cursor-x <span class="Special">&lt;-</span> copy xmin
<span id="L325" class="LineNr">325 </span> cursor-y <span class="Special">&lt;-</span> increment
<span id="L326" class="LineNr">326 </span> <span class="Delimiter">}</span>
<span id="L327" class="LineNr">327 </span> cursor-x, cursor-y <span class="Special">&lt;-</span> <a href='501draw-text.mu.html#L283'>draw-int32-hex-wrapping-right-then-down</a> <a href='500fake-screen.mu.html#L14'>screen</a>, n, xmin, ymin, xmax, ymax, cursor-x, cursor-y, color, background-color
<span id="L328" class="LineNr">328 </span><span class="Delimiter">}</span>
<span id="L329" class="LineNr">329 </span>
<span id="L330" class="LineNr">330 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L330'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), n: int, color: int, background-color: int <span class="Delimiter">{</span>
<span id="L331" class="LineNr">331 </span> <span class="PreProc">var</span> width/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L332" class="LineNr">332 </span> <span class="PreProc">var</span> height/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L333" class="LineNr">333 </span> width, height <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L86'>screen-size</a> <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L334" class="LineNr">334 </span> <a href='501draw-text.mu.html#L315'>draw-int32-hex-wrapping-right-then-down-from-cursor</a> <a href='500fake-screen.mu.html#L14'>screen</a>, n, <span class="Constant">0</span>/xmin, <span class="Constant">0</span>/ymin, width, height, color, background-color
<span id="L335" class="LineNr">335 </span><span class="Delimiter">}</span>
<span id="L336" class="LineNr">336 </span>
<span id="L337" class="LineNr">337 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L337'>draw-int32-decimal-wrapping-right-then-down</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), n: int, xmin: int, ymin: int, xmax: int, ymax: int, x: int, y: int, color: int, background-color: int<span class="PreProc"> -&gt; </span>_/eax: int, _/<span class="muRegEcx">ecx</span>: int <span class="Delimiter">{</span>
<span id="L338" class="LineNr">338 </span> <span class="PreProc">var</span> stream-storage: (stream byte <span class="Constant">0x100</span>)
<span id="L339" class="LineNr">339 </span> <span class="PreProc">var</span> stream/<span class="muRegEsi">esi</span>: (addr stream byte) <span class="Special">&lt;-</span> address stream-storage
<span id="L340" class="LineNr">340 </span> <a href='126write-int-decimal.subx.html#L8'>write-int32-decimal</a> stream, n
<span id="L341" class="LineNr">341 </span> <span class="PreProc">var</span> xcurr/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy x
<span id="L342" class="LineNr">342 </span> <span class="PreProc">var</span> ycurr/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy y
<span id="L343" class="LineNr">343 </span> <span class="Delimiter">{</span>
<span id="L344" class="LineNr">344 </span> <span class="PreProc">var</span> g/eax: grapheme <span class="Special">&lt;-</span> <a href='403unicode.mu.html#L92'>read-grapheme</a> stream
<span id="L345" class="LineNr">345 </span> compare g, <span class="Constant">0xffffffff</span>/end-of-file
<span id="L346" class="LineNr">346 </span> <span class="PreProc">break-if-=</span>
<span id="L347" class="LineNr">347 </span> <a href='500fake-screen.mu.html#L104'>draw-grapheme</a> <a href='500fake-screen.mu.html#L14'>screen</a>, g, xcurr, ycurr, color, background-color
<span id="L348" class="LineNr">348 </span> xcurr <span class="Special">&lt;-</span> increment
<span id="L349" class="LineNr">349 </span> compare xcurr, xmax
<span id="L350" class="LineNr">350 </span> <span class="Delimiter">{</span>
<span id="L351" class="LineNr">351 </span> <span class="PreProc">break-if-&lt;</span>
<span id="L352" class="LineNr">352 </span> xcurr <span class="Special">&lt;-</span> copy xmin
<span id="L353" class="LineNr">353 </span> ycurr <span class="Special">&lt;-</span> increment
<span id="L354" class="LineNr">354 </span> <span class="Delimiter">}</span>
<span id="L355" class="LineNr">355 </span> <span class="PreProc">loop</span>
<span id="L356" class="LineNr">356 </span> <span class="Delimiter">}</span>
<span id="L357" class="LineNr">357 </span> <a href='500fake-screen.mu.html#L190'>set-cursor-position</a> <a href='500fake-screen.mu.html#L14'>screen</a>, xcurr, ycurr
<span id="L358" class="LineNr">358 </span> <span class="PreProc">return</span> xcurr, ycurr
<span id="L359" class="LineNr">359 </span><span class="Delimiter">}</span>
<span id="L360" class="LineNr">360 </span>
<span id="L361" class="LineNr">361 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L361'>draw-int32-decimal-wrapping-right-then-down-over-full-screen</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), n: int, x: int, y: int, color: int, background-color: int<span class="PreProc"> -&gt; </span>_/eax: int, _/<span class="muRegEcx">ecx</span>: int <span class="Delimiter">{</span>
<span id="L362" class="LineNr">362 </span> <span class="PreProc">var</span> x2/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L363" class="LineNr">363 </span> <span class="PreProc">var</span> y2/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L364" class="LineNr">364 </span> x2, y2 <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L86'>screen-size</a> <a href='500fake-screen.mu.html#L14'>screen</a> <span class="muComment"># width, height</span>
<span id="L365" class="LineNr">365 </span> x2, y2 <span class="Special">&lt;-</span> <a href='501draw-text.mu.html#L337'>draw-int32-decimal-wrapping-right-then-down</a> <a href='500fake-screen.mu.html#L14'>screen</a>, n, <span class="Constant">0</span>/xmin, <span class="Constant">0</span>/ymin, x2, y2, x, y, color, background-color
<span id="L366" class="LineNr">366 </span> <span class="PreProc">return</span> x2, y2 <span class="muComment"># cursor-x, cursor-y</span>
<span id="L367" class="LineNr">367 </span><span class="Delimiter">}</span>
<span id="L368" class="LineNr">368 </span>
<span id="L369" class="LineNr">369 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L369'>draw-int32-decimal-wrapping-right-then-down-from-cursor</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), n: int, xmin: int, ymin: int, xmax: int, ymax: int, color: int, background-color: int <span class="Delimiter">{</span>
<span id="L370" class="LineNr">370 </span> <span class="PreProc">var</span> cursor-x/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L371" class="LineNr">371 </span> <span class="PreProc">var</span> cursor-y/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L372" class="LineNr">372 </span> cursor-x, cursor-y <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L174'>cursor-position</a> <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L373" class="LineNr">373 </span> <span class="PreProc">var</span> end-x/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy cursor-x
<span id="L374" class="LineNr">374 </span> end-x <span class="Special">&lt;-</span> increment
<span id="L375" class="LineNr">375 </span> compare end-x, xmax
<span id="L376" class="LineNr">376 </span> <span class="Delimiter">{</span>
<span id="L377" class="LineNr">377 </span> <span class="PreProc">break-if-&lt;</span>
<span id="L378" class="LineNr">378 </span> cursor-x <span class="Special">&lt;-</span> copy xmin
<span id="L379" class="LineNr">379 </span> cursor-y <span class="Special">&lt;-</span> increment
<span id="L380" class="LineNr">380 </span> <span class="Delimiter">}</span>
<span id="L381" class="LineNr">381 </span> cursor-x, cursor-y <span class="Special">&lt;-</span> <a href='501draw-text.mu.html#L337'>draw-int32-decimal-wrapping-right-then-down</a> <a href='500fake-screen.mu.html#L14'>screen</a>, n, xmin, ymin, xmax, ymax, cursor-x, cursor-y, color, background-color
<span id="L382" class="LineNr">382 </span><span class="Delimiter">}</span>
<span id="L383" class="LineNr">383 </span>
<span id="L384" class="LineNr">384 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L384'>draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), n: int, color: int, background-color: int <span class="Delimiter">{</span>
<span id="L385" class="LineNr">385 </span> <span class="PreProc">var</span> width/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L386" class="LineNr">386 </span> <span class="PreProc">var</span> height/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L387" class="LineNr">387 </span> width, height <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L86'>screen-size</a> <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L388" class="LineNr">388 </span> <a href='501draw-text.mu.html#L369'>draw-int32-decimal-wrapping-right-then-down-from-cursor</a> <a href='500fake-screen.mu.html#L14'>screen</a>, n, <span class="Constant">0</span>/xmin, <span class="Constant">0</span>/ymin, width, height, color, background-color
<span id="L389" class="LineNr">389 </span><span class="Delimiter">}</span>
<span id="L390" class="LineNr">390 </span>
<span id="L391" class="LineNr">391 </span><span class="muComment">## Text direction: down then right</span>
<span id="L392" class="LineNr">392 </span>
<span id="L393" class="LineNr">393 </span><span class="muComment"># draw a single line of text vertically from x, y to ymax</span>
<span id="L394" class="LineNr">394 </span><span class="muComment"># return the next 'y' coordinate</span>
<span id="L395" class="LineNr">395 </span><span class="muComment"># if there isn't enough space, truncate</span>
<span id="L396" class="LineNr">396 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L396'>draw-text-downward</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), text: (addr array byte), x: int, y: int, ymax: int, color: int, background-color: int<span class="PreProc"> -&gt; </span>_/eax: int <span class="Delimiter">{</span>
<span id="L397" class="LineNr">397 </span> <span class="PreProc">var</span> stream-storage: (stream byte <span class="Constant">0x100</span>)
<span id="L398" class="LineNr">398 </span> <span class="PreProc">var</span> stream/<span class="muRegEsi">esi</span>: (addr stream byte) <span class="Special">&lt;-</span> address stream-storage
<span id="L399" class="LineNr">399 </span> <a href='108write.subx.html#L11'>write</a> stream, text
<span id="L400" class="LineNr">400 </span> <span class="PreProc">var</span> ycurr/eax: int <span class="Special">&lt;-</span> <a href='501draw-text.mu.html#L407'>draw-stream-downward</a> <a href='500fake-screen.mu.html#L14'>screen</a>, stream, x, y, ymax, color, background-color
<span id="L401" class="LineNr">401 </span> <span class="PreProc">return</span> ycurr
<span id="L402" class="LineNr">402 </span><span class="Delimiter">}</span>
<span id="L403" class="LineNr">403 </span>
<span id="L404" class="LineNr">404 </span><span class="muComment"># draw a single-line stream vertically from x, y to ymax</span>
<span id="L405" class="LineNr">405 </span><span class="muComment"># return the next 'y' coordinate</span>
<span id="L406" class="LineNr">406 </span><span class="muComment"># if there isn't enough space, truncate</span>
<span id="L407" class="LineNr">407 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L407'>draw-stream-downward</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), stream: (addr stream byte), x: int, y: int, ymax: int, color: int, background-color: int<span class="PreProc"> -&gt; </span>_/eax: int <span class="Delimiter">{</span>
<span id="L408" class="LineNr">408 </span> <span class="PreProc">var</span> ycurr/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy y
<span id="L409" class="LineNr">409 </span> <span class="Delimiter">{</span>
<span id="L410" class="LineNr">410 </span> <span class="PreProc">var</span> g/eax: grapheme <span class="Special">&lt;-</span> <a href='403unicode.mu.html#L92'>read-grapheme</a> stream
<span id="L411" class="LineNr">411 </span> compare g, <span class="Constant">0xffffffff</span>/end-of-file
<span id="L412" class="LineNr">412 </span> <span class="PreProc">break-if-=</span>
<span id="L413" class="LineNr">413 </span> <a href='500fake-screen.mu.html#L104'>draw-grapheme</a> <a href='500fake-screen.mu.html#L14'>screen</a>, g, x, ycurr, color, background-color
<span id="L414" class="LineNr">414 </span> ycurr <span class="Special">&lt;-</span> increment
<span id="L415" class="LineNr">415 </span> <span class="PreProc">loop</span>
<span id="L416" class="LineNr">416 </span> <span class="Delimiter">}</span>
<span id="L417" class="LineNr">417 </span> <a href='500fake-screen.mu.html#L190'>set-cursor-position</a> <a href='500fake-screen.mu.html#L14'>screen</a>, x, ycurr
<span id="L418" class="LineNr">418 </span> <span class="PreProc">return</span> ycurr
<span id="L419" class="LineNr">419 </span><span class="Delimiter">}</span>
<span id="L420" class="LineNr">420 </span>
<span id="L421" class="LineNr">421 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L421'>draw-text-downward-from-cursor</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), text: (addr array byte), ymax: int, color: int, background-color: int <span class="Delimiter">{</span>
<span id="L422" class="LineNr">422 </span> <span class="PreProc">var</span> cursor-x/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L423" class="LineNr">423 </span> <span class="PreProc">var</span> cursor-y/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L424" class="LineNr">424 </span> cursor-x, cursor-y <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L174'>cursor-position</a> <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L425" class="LineNr">425 </span> <span class="PreProc">var</span> result/eax: int <span class="Special">&lt;-</span> <a href='501draw-text.mu.html#L396'>draw-text-downward</a> <a href='500fake-screen.mu.html#L14'>screen</a>, text, cursor-x, cursor-y, ymax, color, background-color
<span id="L426" class="LineNr">426 </span><span class="Delimiter">}</span>
<span id="L427" class="LineNr">427 </span>
<span id="L428" class="LineNr">428 </span><span class="muComment"># draw text down and right in the rectangle from (xmin, ymin) to (xmax, ymax), starting from (x, y), wrapping as necessary</span>
<span id="L429" class="LineNr">429 </span><span class="muComment"># return the next (x, y) coordinate in raster order where drawing stopped</span>
<span id="L430" class="LineNr">430 </span><span class="muComment"># that way the caller can draw more if given the same min and max bounding-box.</span>
<span id="L431" class="LineNr">431 </span><span class="muComment"># if there isn't enough space, truncate</span>
<span id="L432" class="LineNr">432 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L432'>draw-text-wrapping-down-then-right</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), text: (addr array byte), xmin: int, ymin: int, xmax: int, ymax: int, _x: int, _y: int, color: int, background-color: int<span class="PreProc"> -&gt; </span>_/eax: int, _/<span class="muRegEcx">ecx</span>: int <span class="Delimiter">{</span>
<span id="L433" class="LineNr">433 </span> <span class="PreProc">var</span> stream-storage: (stream byte <span class="Constant">0x100</span>)
<span id="L434" class="LineNr">434 </span> <span class="PreProc">var</span> stream/<span class="muRegEsi">esi</span>: (addr stream byte) <span class="Special">&lt;-</span> address stream-storage
<span id="L435" class="LineNr">435 </span> <a href='108write.subx.html#L11'>write</a> stream, text
<span id="L436" class="LineNr">436 </span> <span class="PreProc">var</span> x/eax: int <span class="Special">&lt;-</span> copy _x
<span id="L437" class="LineNr">437 </span> <span class="PreProc">var</span> y/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy _y
<span id="L438" class="LineNr">438 </span> x, y <span class="Special">&lt;-</span> <a href='501draw-text.mu.html#L446'>draw-stream-wrapping-down-then-right</a> <a href='500fake-screen.mu.html#L14'>screen</a>, stream, xmin, ymin, xmax, ymax, x, y, color, background-color
<span id="L439" class="LineNr">439 </span> <span class="PreProc">return</span> x, y
<span id="L440" class="LineNr">440 </span><span class="Delimiter">}</span>
<span id="L441" class="LineNr">441 </span>
<span id="L442" class="LineNr">442 </span><span class="muComment"># draw a stream down and right in the rectangle from (xmin, ymin) to (xmax, ymax), starting from (x, y), wrapping as necessary</span>
<span id="L443" class="LineNr">443 </span><span class="muComment"># return the next (x, y) coordinate in raster order where drawing stopped</span>
<span id="L444" class="LineNr">444 </span><span class="muComment"># that way the caller can draw more if given the same min and max bounding-box.</span>
<span id="L445" class="LineNr">445 </span><span class="muComment"># if there isn't enough space, truncate</span>
<span id="L446" class="LineNr">446 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L446'>draw-stream-wrapping-down-then-right</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), stream: (addr stream byte), xmin: int, ymin: int, xmax: int, ymax: int, x: int, y: int, color: int, background-color: int<span class="PreProc"> -&gt; </span>_/eax: int, _/<span class="muRegEcx">ecx</span>: int <span class="Delimiter">{</span>
<span id="L447" class="LineNr">447 </span> <span class="PreProc">var</span> xcurr/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy x
<span id="L448" class="LineNr">448 </span> <span class="PreProc">var</span> ycurr/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy y
<span id="L449" class="LineNr">449 </span> <span class="Delimiter">{</span>
<span id="L450" class="LineNr">450 </span> <span class="PreProc">var</span> g/eax: grapheme <span class="Special">&lt;-</span> <a href='403unicode.mu.html#L92'>read-grapheme</a> stream
<span id="L451" class="LineNr">451 </span> compare g, <span class="Constant">0xffffffff</span>/end-of-file
<span id="L452" class="LineNr">452 </span> <span class="PreProc">break-if-=</span>
<span id="L453" class="LineNr">453 </span> <a href='500fake-screen.mu.html#L104'>draw-grapheme</a> <a href='500fake-screen.mu.html#L14'>screen</a>, g, xcurr, ycurr, color, background-color
<span id="L454" class="LineNr">454 </span> ycurr <span class="Special">&lt;-</span> increment
<span id="L455" class="LineNr">455 </span> compare ycurr, ymax
<span id="L456" class="LineNr">456 </span> <span class="Delimiter">{</span>
<span id="L457" class="LineNr">457 </span> <span class="PreProc">break-if-&lt;</span>
<span id="L458" class="LineNr">458 </span> xcurr <span class="Special">&lt;-</span> increment
<span id="L459" class="LineNr">459 </span> ycurr <span class="Special">&lt;-</span> copy ymin
<span id="L460" class="LineNr">460 </span> <span class="Delimiter">}</span>
<span id="L461" class="LineNr">461 </span> <span class="PreProc">loop</span>
<span id="L462" class="LineNr">462 </span> <span class="Delimiter">}</span>
<span id="L463" class="LineNr">463 </span> <a href='500fake-screen.mu.html#L190'>set-cursor-position</a> <a href='500fake-screen.mu.html#L14'>screen</a>, xcurr, ycurr
<span id="L464" class="LineNr">464 </span> <span class="PreProc">return</span> xcurr, ycurr
<span id="L465" class="LineNr">465 </span><span class="Delimiter">}</span>
<span id="L466" class="LineNr">466 </span>
<span id="L467" class="LineNr">467 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L467'>draw-text-wrapping-down-then-right-over-full-screen</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), text: (addr array byte), x: int, y: int, color: int, background-color: int<span class="PreProc"> -&gt; </span>_/eax: int, _/<span class="muRegEcx">ecx</span>: int <span class="Delimiter">{</span>
<span id="L468" class="LineNr">468 </span> <span class="PreProc">var</span> x2/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L469" class="LineNr">469 </span> <span class="PreProc">var</span> y2/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L470" class="LineNr">470 </span> x2, y2 <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L86'>screen-size</a> <a href='500fake-screen.mu.html#L14'>screen</a> <span class="muComment"># width, height</span>
<span id="L471" class="LineNr">471 </span> x2, y2 <span class="Special">&lt;-</span> <a href='501draw-text.mu.html#L432'>draw-text-wrapping-down-then-right</a> <a href='500fake-screen.mu.html#L14'>screen</a>, text, <span class="Constant">0</span>/xmin, <span class="Constant">0</span>/ymin, x2, y2, x, y, color, background-color
<span id="L472" class="LineNr">472 </span> <span class="PreProc">return</span> x2, y2 <span class="muComment"># cursor-x, cursor-y</span>
<span id="L473" class="LineNr">473 </span><span class="Delimiter">}</span>
<span id="L474" class="LineNr">474 </span>
<span id="L475" class="LineNr">475 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L475'>draw-text-wrapping-down-then-right-from-cursor</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), text: (addr array byte), xmin: int, ymin: int, xmax: int, ymax: int, color: int, background-color: int <span class="Delimiter">{</span>
<span id="L476" class="LineNr">476 </span> <span class="PreProc">var</span> cursor-x/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L477" class="LineNr">477 </span> <span class="PreProc">var</span> cursor-y/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L478" class="LineNr">478 </span> cursor-x, cursor-y <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L174'>cursor-position</a> <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L479" class="LineNr">479 </span> <span class="PreProc">var</span> end-y/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy cursor-y
<span id="L480" class="LineNr">480 </span> end-y <span class="Special">&lt;-</span> increment
<span id="L481" class="LineNr">481 </span> compare end-y, ymax
<span id="L482" class="LineNr">482 </span> <span class="Delimiter">{</span>
<span id="L483" class="LineNr">483 </span> <span class="PreProc">break-if-&lt;</span>
<span id="L484" class="LineNr">484 </span> cursor-x <span class="Special">&lt;-</span> increment
<span id="L485" class="LineNr">485 </span> cursor-y <span class="Special">&lt;-</span> copy ymin
<span id="L486" class="LineNr">486 </span> <span class="Delimiter">}</span>
<span id="L487" class="LineNr">487 </span> cursor-x, cursor-y <span class="Special">&lt;-</span> <a href='501draw-text.mu.html#L432'>draw-text-wrapping-down-then-right</a> <a href='500fake-screen.mu.html#L14'>screen</a>, text, xmin, ymin, xmax, ymax, cursor-x, cursor-y, color, background-color
<span id="L488" class="LineNr">488 </span><span class="Delimiter">}</span>
<span id="L489" class="LineNr">489 </span>
<span id="L490" class="LineNr">490 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='501draw-text.mu.html#L490'>draw-text-wrapping-down-then-right-from-cursor-over-full-screen</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), text: (addr array byte), color: int, background-color: int <span class="Delimiter">{</span>
<span id="L491" class="LineNr">491 </span> <span class="PreProc">var</span> width/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L492" class="LineNr">492 </span> <span class="PreProc">var</span> height/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L493" class="LineNr">493 </span> width, height <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L86'>screen-size</a> <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L494" class="LineNr">494 </span> <a href='501draw-text.mu.html#L475'>draw-text-wrapping-down-then-right-from-cursor</a> <a href='500fake-screen.mu.html#L14'>screen</a>, text, <span class="Constant">0</span>/xmin, <span class="Constant">0</span>/ymin, width, height, color, background-color
<span id="L495" class="LineNr">495 </span><span class="Delimiter">}</span>
</pre>
</body>
</html>

30
html/502test.mu.html generated
View File

@ -1,31 +1,31 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 502test.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.Special { color: #ff6060; }
.LineNr { }
.Constant { color: #008787; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muTest { color: #5f8700; }
.Delimiter { color: #c000c0; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -63,10 +63,10 @@ if ('onhashchange' in window) {
<span id="L4" class="LineNr"> 4 </span> compare a, b
<span id="L5" class="LineNr"> 5 </span> <span class="Delimiter">{</span>
<span id="L6" class="LineNr"> 6 </span> <span class="PreProc">break-if-!=</span>
<span id="L7" class="LineNr"> 7 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;.&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L7" class="LineNr"> 7 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;.&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L8" class="LineNr"> 8 </span> <span class="PreProc">return</span>
<span id="L9" class="LineNr"> 9 </span> <span class="Delimiter">}</span>
<span id="L10" class="LineNr">10 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, msg, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L10" class="LineNr">10 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, msg, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L11" class="LineNr">11 </span> <a href='501draw-text.mu.html#L65'>move-cursor-to-left-margin-of-next-line</a> <span class="Constant">0</span>/screen
<span id="L12" class="LineNr">12 </span> <a href='104test.subx.html#L5'>count-test-failure</a>
<span id="L13" class="LineNr">13 </span><span class="Delimiter">}</span>
@ -80,10 +80,10 @@ if ('onhashchange' in window) {
<span id="L21" class="LineNr">21 </span> compare a, <span class="Constant">0</span>/false
<span id="L22" class="LineNr">22 </span> <span class="Delimiter">{</span>
<span id="L23" class="LineNr">23 </span> <span class="PreProc">break-if-=</span>
<span id="L24" class="LineNr">24 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;.&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L24" class="LineNr">24 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;.&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L25" class="LineNr">25 </span> <span class="PreProc">return</span>
<span id="L26" class="LineNr">26 </span> <span class="Delimiter">}</span>
<span id="L27" class="LineNr">27 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, msg, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L27" class="LineNr">27 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, msg, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L28" class="LineNr">28 </span> <a href='501draw-text.mu.html#L65'>move-cursor-to-left-margin-of-next-line</a> <span class="Constant">0</span>/screen
<span id="L29" class="LineNr">29 </span> <a href='104test.subx.html#L5'>count-test-failure</a>
<span id="L30" class="LineNr">30 </span><span class="Delimiter">}</span>
@ -93,10 +93,10 @@ if ('onhashchange' in window) {
<span id="L34" class="LineNr">34 </span> compare a, <span class="Constant">0</span>/false
<span id="L35" class="LineNr">35 </span> <span class="Delimiter">{</span>
<span id="L36" class="LineNr">36 </span> <span class="PreProc">break-if-!=</span>
<span id="L37" class="LineNr">37 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;.&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L37" class="LineNr">37 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;.&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L38" class="LineNr">38 </span> <span class="PreProc">return</span>
<span id="L39" class="LineNr">39 </span> <span class="Delimiter">}</span>
<span id="L40" class="LineNr">40 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, msg, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L40" class="LineNr">40 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, msg, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L41" class="LineNr">41 </span> <a href='501draw-text.mu.html#L65'>move-cursor-to-left-margin-of-next-line</a> <span class="Constant">0</span>/screen
<span id="L42" class="LineNr">42 </span> <a href='104test.subx.html#L5'>count-test-failure</a>
<span id="L43" class="LineNr">43 </span><span class="Delimiter">}</span>

View File

@ -1,14 +1,14 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 503manhattan-line.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
@ -16,13 +16,13 @@ a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.LineNr { }
.muFunction { color: #af5f00; text-decoration: underline; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.Special { color: #ff6060; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

View File

@ -1,36 +1,36 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 504test-screen.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.muRegEbx { color: #5f00ff; }
.muRegEcx { color: #870000; }
.muRegEdx { color: #af5f00; }
.Special { color: #ff6060; }
.LineNr { }
.muRegEsi { color: #005faf; }
.muRegEdi { color: #00af00; }
.muRegEbx { color: #5f00ff; }
.Constant { color: #008787; }
.muRegEdi { color: #00af00; }
.muRegEcx { color: #870000; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muTest { color: #5f8700; }
.Delimiter { color: #c000c0; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -101,18 +101,18 @@ if ('onhashchange' in window) {
<span id="L37" class="LineNr"> 37 </span> <span class="PreProc">break-if-=</span>
<span id="L38" class="LineNr"> 38 </span> <span class="muComment"># otherwise print an error</span>
<span id="L39" class="LineNr"> 39 </span> failure-count <span class="Special">&lt;-</span> increment
<span id="L40" class="LineNr"> 40 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, msg, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L41" class="LineNr"> 41 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;: expected '&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L40" class="LineNr"> 40 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, msg, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L41" class="LineNr"> 41 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;: expected '&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L42" class="LineNr"> 42 </span> <a href='501draw-text.mu.html#L84'>draw-grapheme-at-cursor</a> <span class="Constant">0</span>/screen, expected-grapheme, <span class="Constant">3</span>/cyan, <span class="Constant">0</span>/bg
<span id="L43" class="LineNr"> 43 </span> <a href='501draw-text.mu.html#L242'>move-cursor-rightward-and-downward</a> <span class="Constant">0</span>/screen, <span class="Constant">0</span>/xmin, <span class="Constant">0x80</span>/xmax=screen-width
<span id="L44" class="LineNr"> 44 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;' at (&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L45" class="LineNr"> 45 </span> <a href='501draw-text.mu.html#L333'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, x, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L46" class="LineNr"> 46 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;, &quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L47" class="LineNr"> 47 </span> <a href='501draw-text.mu.html#L333'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, y, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L48" class="LineNr"> 48 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;) but observed '&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L43" class="LineNr"> 43 </span> <a href='501draw-text.mu.html#L239'>move-cursor-rightward-and-downward</a> <span class="Constant">0</span>/screen, <span class="Constant">0</span>/xmin, <span class="Constant">0x80</span>/xmax=screen-width
<span id="L44" class="LineNr"> 44 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;' at (&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L45" class="LineNr"> 45 </span> <a href='501draw-text.mu.html#L330'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, x, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L46" class="LineNr"> 46 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;, &quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L47" class="LineNr"> 47 </span> <a href='501draw-text.mu.html#L330'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, y, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L48" class="LineNr"> 48 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;) but observed '&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L49" class="LineNr"> 49 </span> <a href='501draw-text.mu.html#L84'>draw-grapheme-at-cursor</a> <span class="Constant">0</span>/screen, g, <span class="Constant">3</span>/cyan, <span class="Constant">0</span>/bg
<span id="L50" class="LineNr"> 50 </span> <a href='501draw-text.mu.html#L242'>move-cursor-rightward-and-downward</a> <span class="Constant">0</span>/screen, <span class="Constant">0</span>/xmin, <span class="Constant">0x80</span>/xmax=screen-width
<span id="L51" class="LineNr"> 51 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;'&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L50" class="LineNr"> 50 </span> <a href='501draw-text.mu.html#L239'>move-cursor-rightward-and-downward</a> <span class="Constant">0</span>/screen, <span class="Constant">0</span>/xmin, <span class="Constant">0x80</span>/xmax=screen-width
<span id="L51" class="LineNr"> 51 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;'&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L52" class="LineNr"> 52 </span> <a href='501draw-text.mu.html#L65'>move-cursor-to-left-margin-of-next-line</a> <span class="Constant">0</span>/screen
<span id="L53" class="LineNr"> 53 </span> <span class="Delimiter">}</span>
<span id="L54" class="LineNr"> 54 </span> idx <span class="Special">&lt;-</span> increment
@ -127,7 +127,7 @@ if ('onhashchange' in window) {
<span id="L63" class="LineNr"> 63 </span> <span class="PreProc">return</span>
<span id="L64" class="LineNr"> 64 </span> <span class="Delimiter">}</span>
<span id="L65" class="LineNr"> 65 </span> <span class="muComment"># otherwise print a &quot;.&quot;</span>
<span id="L66" class="LineNr"> 66 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;.&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L66" class="LineNr"> 66 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;.&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L67" class="LineNr"> 67 </span><span class="Delimiter">}</span>
<span id="L68" class="LineNr"> 68 </span>
<span id="L69" class="LineNr"> 69 </span><span class="muComment"># various variants by screen-cell attribute; spaces in the 'expected' data should not match the attribute</span>
@ -173,23 +173,23 @@ if ('onhashchange' in window) {
<span id="L109" class="LineNr">109 </span> compare g, expected-grapheme
<span id="L110" class="LineNr">110 </span> <span class="Delimiter">{</span>
<span id="L111" class="LineNr">111 </span> <span class="PreProc">break-if-!=</span>
<span id="L112" class="LineNr">112 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;.&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L112" class="LineNr">112 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;.&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L113" class="LineNr">113 </span> <span class="PreProc">break</span> $check-screen-row-in-color-from:compare-graphemes
<span id="L114" class="LineNr">114 </span> <span class="Delimiter">}</span>
<span id="L115" class="LineNr">115 </span> <span class="muComment"># otherwise print an error</span>
<span id="L116" class="LineNr">116 </span> <a href='104test.subx.html#L5'>count-test-failure</a>
<span id="L117" class="LineNr">117 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, msg, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L118" class="LineNr">118 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;: expected '&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L117" class="LineNr">117 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, msg, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L118" class="LineNr">118 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;: expected '&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L119" class="LineNr">119 </span> <a href='501draw-text.mu.html#L84'>draw-grapheme-at-cursor</a> <span class="Constant">0</span>/screen, expected-grapheme, <span class="Constant">3</span>/cyan, <span class="Constant">0</span>/bg
<span id="L120" class="LineNr">120 </span> <a href='501draw-text.mu.html#L242'>move-cursor-rightward-and-downward</a> <span class="Constant">0</span>/screen, <span class="Constant">0</span>/xmin, <span class="Constant">0x80</span>/xmax=screen-width
<span id="L121" class="LineNr">121 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;' at (&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L122" class="LineNr">122 </span> <a href='501draw-text.mu.html#L333'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, x, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L123" class="LineNr">123 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;, &quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L124" class="LineNr">124 </span> <a href='501draw-text.mu.html#L333'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, y, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L125" class="LineNr">125 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;) but observed '&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L120" class="LineNr">120 </span> <a href='501draw-text.mu.html#L239'>move-cursor-rightward-and-downward</a> <span class="Constant">0</span>/screen, <span class="Constant">0</span>/xmin, <span class="Constant">0x80</span>/xmax=screen-width
<span id="L121" class="LineNr">121 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;' at (&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L122" class="LineNr">122 </span> <a href='501draw-text.mu.html#L330'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, x, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L123" class="LineNr">123 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;, &quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L124" class="LineNr">124 </span> <a href='501draw-text.mu.html#L330'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, y, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L125" class="LineNr">125 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;) but observed '&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L126" class="LineNr">126 </span> <a href='501draw-text.mu.html#L84'>draw-grapheme-at-cursor</a> <span class="Constant">0</span>/screen, g, <span class="Constant">3</span>/cyan, <span class="Constant">0</span>/bg
<span id="L127" class="LineNr">127 </span> <a href='501draw-text.mu.html#L242'>move-cursor-rightward-and-downward</a> <span class="Constant">0</span>/screen, <span class="Constant">0</span>/xmin, <span class="Constant">0x80</span>/xmax=screen-width
<span id="L128" class="LineNr">128 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;'&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L127" class="LineNr">127 </span> <a href='501draw-text.mu.html#L239'>move-cursor-rightward-and-downward</a> <span class="Constant">0</span>/screen, <span class="Constant">0</span>/xmin, <span class="Constant">0x80</span>/xmax=screen-width
<span id="L128" class="LineNr">128 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;'&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L129" class="LineNr">129 </span> <a href='501draw-text.mu.html#L65'>move-cursor-to-left-margin-of-next-line</a> <span class="Constant">0</span>/screen
<span id="L130" class="LineNr">130 </span> <span class="Delimiter">}</span>
<span id="L131" class="LineNr">131 </span> $check-screen-row-in-color-from:compare-colors: <span class="Delimiter">{</span>
@ -197,23 +197,23 @@ if ('onhashchange' in window) {
<span id="L133" class="LineNr">133 </span> compare fg, color
<span id="L134" class="LineNr">134 </span> <span class="Delimiter">{</span>
<span id="L135" class="LineNr">135 </span> <span class="PreProc">break-if-!=</span>
<span id="L136" class="LineNr">136 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;.&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L136" class="LineNr">136 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;.&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L137" class="LineNr">137 </span> <span class="PreProc">break</span> $check-screen-row-in-color-from:compare-colors
<span id="L138" class="LineNr">138 </span> <span class="Delimiter">}</span>
<span id="L139" class="LineNr">139 </span> <span class="muComment"># otherwise print an error</span>
<span id="L140" class="LineNr">140 </span> <a href='104test.subx.html#L5'>count-test-failure</a>
<span id="L141" class="LineNr">141 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, msg, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L142" class="LineNr">142 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;: expected '&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L141" class="LineNr">141 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, msg, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L142" class="LineNr">142 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;: expected '&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L143" class="LineNr">143 </span> <a href='501draw-text.mu.html#L84'>draw-grapheme-at-cursor</a> <span class="Constant">0</span>/screen, expected-grapheme, <span class="Constant">3</span>/cyan, <span class="Constant">0</span>/bg
<span id="L144" class="LineNr">144 </span> <a href='501draw-text.mu.html#L242'>move-cursor-rightward-and-downward</a> <span class="Constant">0</span>/screen, <span class="Constant">0</span>/xmin, <span class="Constant">0x80</span>/xmax=screen-width
<span id="L145" class="LineNr">145 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;' at (&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L146" class="LineNr">146 </span> <a href='501draw-text.mu.html#L333'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, x, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L147" class="LineNr">147 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;, &quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L148" class="LineNr">148 </span> <a href='501draw-text.mu.html#L333'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, y, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L149" class="LineNr">149 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;) in color &quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L150" class="LineNr">150 </span> <a href='501draw-text.mu.html#L333'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, fg, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L151" class="LineNr">151 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot; but observed color &quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L152" class="LineNr">152 </span> <a href='501draw-text.mu.html#L333'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, color, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L144" class="LineNr">144 </span> <a href='501draw-text.mu.html#L239'>move-cursor-rightward-and-downward</a> <span class="Constant">0</span>/screen, <span class="Constant">0</span>/xmin, <span class="Constant">0x80</span>/xmax=screen-width
<span id="L145" class="LineNr">145 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;' at (&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L146" class="LineNr">146 </span> <a href='501draw-text.mu.html#L330'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, x, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L147" class="LineNr">147 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;, &quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L148" class="LineNr">148 </span> <a href='501draw-text.mu.html#L330'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, y, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L149" class="LineNr">149 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;) in color &quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L150" class="LineNr">150 </span> <a href='501draw-text.mu.html#L330'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, fg, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L151" class="LineNr">151 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot; but observed color &quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L152" class="LineNr">152 </span> <a href='501draw-text.mu.html#L330'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, color, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L153" class="LineNr">153 </span> <a href='501draw-text.mu.html#L65'>move-cursor-to-left-margin-of-next-line</a> <span class="Constant">0</span>/screen
<span id="L154" class="LineNr">154 </span> <span class="Delimiter">}</span>
<span id="L155" class="LineNr">155 </span> <span class="Delimiter">}</span>
@ -264,23 +264,23 @@ if ('onhashchange' in window) {
<span id="L200" class="LineNr">200 </span> compare g, expected-grapheme
<span id="L201" class="LineNr">201 </span> <span class="Delimiter">{</span>
<span id="L202" class="LineNr">202 </span> <span class="PreProc">break-if-!=</span>
<span id="L203" class="LineNr">203 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;.&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L203" class="LineNr">203 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;.&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L204" class="LineNr">204 </span> <span class="PreProc">break</span> $check-screen-row-in-background-color-from:compare-graphemes
<span id="L205" class="LineNr">205 </span> <span class="Delimiter">}</span>
<span id="L206" class="LineNr">206 </span> <span class="muComment"># otherwise print an error</span>
<span id="L207" class="LineNr">207 </span> <a href='104test.subx.html#L5'>count-test-failure</a>
<span id="L208" class="LineNr">208 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, msg, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L209" class="LineNr">209 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;: expected '&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L208" class="LineNr">208 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, msg, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L209" class="LineNr">209 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;: expected '&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L210" class="LineNr">210 </span> <a href='501draw-text.mu.html#L84'>draw-grapheme-at-cursor</a> <span class="Constant">0</span>/screen, expected-grapheme, <span class="Constant">3</span>/cyan, <span class="Constant">0</span>/bg
<span id="L211" class="LineNr">211 </span> <a href='501draw-text.mu.html#L242'>move-cursor-rightward-and-downward</a> <span class="Constant">0</span>/screen, <span class="Constant">0</span>/xmin, <span class="Constant">0x80</span>/xmax=screen-width
<span id="L212" class="LineNr">212 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;' at (&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L213" class="LineNr">213 </span> <a href='501draw-text.mu.html#L333'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, x, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L214" class="LineNr">214 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;, &quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L215" class="LineNr">215 </span> <a href='501draw-text.mu.html#L333'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, y, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L216" class="LineNr">216 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;) but observed '&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L211" class="LineNr">211 </span> <a href='501draw-text.mu.html#L239'>move-cursor-rightward-and-downward</a> <span class="Constant">0</span>/screen, <span class="Constant">0</span>/xmin, <span class="Constant">0x80</span>/xmax=screen-width
<span id="L212" class="LineNr">212 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;' at (&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L213" class="LineNr">213 </span> <a href='501draw-text.mu.html#L330'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, x, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L214" class="LineNr">214 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;, &quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L215" class="LineNr">215 </span> <a href='501draw-text.mu.html#L330'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, y, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L216" class="LineNr">216 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;) but observed '&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L217" class="LineNr">217 </span> <a href='501draw-text.mu.html#L84'>draw-grapheme-at-cursor</a> <span class="Constant">0</span>/screen, g, <span class="Constant">3</span>/cyan, <span class="Constant">0</span>/bg
<span id="L218" class="LineNr">218 </span> <a href='501draw-text.mu.html#L242'>move-cursor-rightward-and-downward</a> <span class="Constant">0</span>/screen, <span class="Constant">0</span>/xmin, <span class="Constant">0x80</span>/xmax=screen-width
<span id="L219" class="LineNr">219 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;'&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L218" class="LineNr">218 </span> <a href='501draw-text.mu.html#L239'>move-cursor-rightward-and-downward</a> <span class="Constant">0</span>/screen, <span class="Constant">0</span>/xmin, <span class="Constant">0x80</span>/xmax=screen-width
<span id="L219" class="LineNr">219 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;'&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L220" class="LineNr">220 </span> <a href='501draw-text.mu.html#L65'>move-cursor-to-left-margin-of-next-line</a> <span class="Constant">0</span>/screen
<span id="L221" class="LineNr">221 </span> <span class="PreProc">break</span> $check-screen-row-in-background-color-from:compare-graphemes
<span id="L222" class="LineNr">222 </span> <span class="Delimiter">}</span>
@ -289,23 +289,23 @@ if ('onhashchange' in window) {
<span id="L225" class="LineNr">225 </span> compare bg, background-color
<span id="L226" class="LineNr">226 </span> <span class="Delimiter">{</span>
<span id="L227" class="LineNr">227 </span> <span class="PreProc">break-if-!=</span>
<span id="L228" class="LineNr">228 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;.&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L228" class="LineNr">228 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;.&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L229" class="LineNr">229 </span> <span class="PreProc">break</span> $check-screen-row-in-background-color-from:compare-background-colors
<span id="L230" class="LineNr">230 </span> <span class="Delimiter">}</span>
<span id="L231" class="LineNr">231 </span> <span class="muComment"># otherwise print an error</span>
<span id="L232" class="LineNr">232 </span> <a href='104test.subx.html#L5'>count-test-failure</a>
<span id="L233" class="LineNr">233 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, msg, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L234" class="LineNr">234 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;: expected '&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L233" class="LineNr">233 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, msg, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L234" class="LineNr">234 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;: expected '&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L235" class="LineNr">235 </span> <a href='501draw-text.mu.html#L84'>draw-grapheme-at-cursor</a> <span class="Constant">0</span>/screen, expected-grapheme, <span class="Constant">3</span>/cyan, <span class="Constant">0</span>/bg
<span id="L236" class="LineNr">236 </span> <a href='501draw-text.mu.html#L242'>move-cursor-rightward-and-downward</a> <span class="Constant">0</span>/screen, <span class="Constant">0</span>/xmin, <span class="Constant">0x80</span>/xmax=screen-width
<span id="L237" class="LineNr">237 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;' at (&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L238" class="LineNr">238 </span> <a href='501draw-text.mu.html#L333'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, x, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L239" class="LineNr">239 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;, &quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L240" class="LineNr">240 </span> <a href='501draw-text.mu.html#L333'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, y, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L241" class="LineNr">241 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;) in background-color &quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L242" class="LineNr">242 </span> <a href='501draw-text.mu.html#L333'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, bg, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L243" class="LineNr">243 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot; but observed background-color &quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L244" class="LineNr">244 </span> <a href='501draw-text.mu.html#L333'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, background-color, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L236" class="LineNr">236 </span> <a href='501draw-text.mu.html#L239'>move-cursor-rightward-and-downward</a> <span class="Constant">0</span>/screen, <span class="Constant">0</span>/xmin, <span class="Constant">0x80</span>/xmax=screen-width
<span id="L237" class="LineNr">237 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;' at (&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L238" class="LineNr">238 </span> <a href='501draw-text.mu.html#L330'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, x, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L239" class="LineNr">239 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;, &quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L240" class="LineNr">240 </span> <a href='501draw-text.mu.html#L330'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, y, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L241" class="LineNr">241 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;) in background-color &quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L242" class="LineNr">242 </span> <a href='501draw-text.mu.html#L330'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, bg, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L243" class="LineNr">243 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot; but observed background-color &quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L244" class="LineNr">244 </span> <a href='501draw-text.mu.html#L330'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, background-color, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L245" class="LineNr">245 </span> <a href='501draw-text.mu.html#L65'>move-cursor-to-left-margin-of-next-line</a> <span class="Constant">0</span>/screen
<span id="L246" class="LineNr">246 </span> <span class="Delimiter">}</span>
<span id="L247" class="LineNr">247 </span> <span class="Delimiter">}</span>
@ -345,13 +345,13 @@ if ('onhashchange' in window) {
<span id="L281" class="LineNr">281 </span> compare background-color, bg
<span id="L282" class="LineNr">282 </span> <span class="PreProc">break-if-!=</span> $check-background-color-in-screen-row-from:compare-cells
<span id="L283" class="LineNr">283 </span> increment failure-count
<span id="L284" class="LineNr">284 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, msg, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L285" class="LineNr">285 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;: expected (&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L286" class="LineNr">286 </span> <a href='501draw-text.mu.html#L333'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, x, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L287" class="LineNr">287 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;, &quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L288" class="LineNr">288 </span> <a href='501draw-text.mu.html#L333'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, y, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L289" class="LineNr">289 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;) to not be in background-color &quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L290" class="LineNr">290 </span> <a href='501draw-text.mu.html#L333'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, bg, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L284" class="LineNr">284 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, msg, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L285" class="LineNr">285 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;: expected (&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L286" class="LineNr">286 </span> <a href='501draw-text.mu.html#L330'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, x, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L287" class="LineNr">287 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;, &quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L288" class="LineNr">288 </span> <a href='501draw-text.mu.html#L330'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, y, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L289" class="LineNr">289 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;) to not be in background-color &quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L290" class="LineNr">290 </span> <a href='501draw-text.mu.html#L330'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, bg, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L291" class="LineNr">291 </span> <a href='501draw-text.mu.html#L65'>move-cursor-to-left-margin-of-next-line</a> <span class="Constant">0</span>/screen
<span id="L292" class="LineNr">292 </span> <span class="PreProc">break</span> $check-background-color-in-screen-row-from:compare-cells
<span id="L293" class="LineNr">293 </span> <span class="Delimiter">}</span>
@ -359,15 +359,15 @@ if ('onhashchange' in window) {
<span id="L295" class="LineNr">295 </span> compare background-color, bg
<span id="L296" class="LineNr">296 </span> <span class="PreProc">break-if-=</span> $check-background-color-in-screen-row-from:compare-cells
<span id="L297" class="LineNr">297 </span> increment failure-count
<span id="L298" class="LineNr">298 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, msg, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L299" class="LineNr">299 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;: expected (&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L300" class="LineNr">300 </span> <a href='501draw-text.mu.html#L333'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, x, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L301" class="LineNr">301 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;, &quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L302" class="LineNr">302 </span> <a href='501draw-text.mu.html#L333'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, y, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L303" class="LineNr">303 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;) in background-color &quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L304" class="LineNr">304 </span> <a href='501draw-text.mu.html#L333'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, bg, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L305" class="LineNr">305 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot; but observed background-color &quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L306" class="LineNr">306 </span> <a href='501draw-text.mu.html#L333'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, background-color, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L298" class="LineNr">298 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, msg, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L299" class="LineNr">299 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;: expected (&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L300" class="LineNr">300 </span> <a href='501draw-text.mu.html#L330'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, x, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L301" class="LineNr">301 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;, &quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L302" class="LineNr">302 </span> <a href='501draw-text.mu.html#L330'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, y, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L303" class="LineNr">303 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;) in background-color &quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L304" class="LineNr">304 </span> <a href='501draw-text.mu.html#L330'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, bg, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L305" class="LineNr">305 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot; but observed background-color &quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L306" class="LineNr">306 </span> <a href='501draw-text.mu.html#L330'>draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, background-color, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L307" class="LineNr">307 </span> <a href='501draw-text.mu.html#L65'>move-cursor-to-left-margin-of-next-line</a> <span class="Constant">0</span>/screen
<span id="L308" class="LineNr">308 </span> <span class="Delimiter">}</span>
<span id="L309" class="LineNr">309 </span> idx <span class="Special">&lt;-</span> increment
@ -382,7 +382,7 @@ if ('onhashchange' in window) {
<span id="L318" class="LineNr">318 </span> <span class="PreProc">return</span>
<span id="L319" class="LineNr">319 </span> <span class="Delimiter">}</span>
<span id="L320" class="LineNr">320 </span> <span class="muComment"># otherwise print a &quot;.&quot;</span>
<span id="L321" class="LineNr">321 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;.&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L321" class="LineNr">321 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;.&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L322" class="LineNr">322 </span><span class="Delimiter">}</span>
<span id="L323" class="LineNr">323 </span>
<span id="L324" class="LineNr">324 </span><span class="PreProc">fn</span> <span class="muTest"><a href='504test-screen.mu.html#L324'>test-draw-single-grapheme</a></span> <span class="Delimiter">{</span>
@ -400,7 +400,7 @@ if ('onhashchange' in window) {
<span id="L336" class="LineNr">336 </span> <span class="PreProc">var</span> screen-on-stack: <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L337" class="LineNr">337 </span> <span class="PreProc">var</span> <a href='500fake-screen.mu.html#L14'>screen</a>/<span class="muRegEsi">esi</span>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>) <span class="Special">&lt;-</span> address screen-on-stack
<span id="L338" class="LineNr">338 </span> <a href='500fake-screen.mu.html#L33'>initialize-screen</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">0x10</span>/rows, <span class="Constant">4</span>/cols, <span class="Constant">0</span>/no-pixel-graphics
<span id="L339" class="LineNr">339 </span> <a href='501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot;Hello, 世界&quot;</span>, <span class="Constant">1</span>/fg, <span class="Constant">2</span>/bg
<span id="L339" class="LineNr">339 </span> <a href='501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot;Hello, 世界&quot;</span>, <span class="Constant">1</span>/fg, <span class="Constant">2</span>/bg
<span id="L340" class="LineNr">340 </span> <a href='504test-screen.mu.html#L7'>check-screen-row</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">0</span>/y, <span class="Constant">&quot;Hello, 世界&quot;</span>, <span class="Constant">&quot;F - test-draw-multiple-graphemes&quot;</span>
<span id="L341" class="LineNr">341 </span> <a href='504test-screen.mu.html#L71'>check-screen-row-in-color</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">1</span>/fg, <span class="Constant">0</span>/y, <span class="Constant">&quot;Hello, 世界&quot;</span>, <span class="Constant">&quot;F - test-draw-multiple-graphemes-fg&quot;</span>
<span id="L342" class="LineNr">342 </span> <a href='504test-screen.mu.html#L257'>check-background-color-in-screen-row</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">2</span>/bg, <span class="Constant">0</span>/y, <span class="Constant">&quot;xxxxxxxxx &quot;</span>, <span class="Constant">&quot;F - test-draw-multiple-graphemes-bg2&quot;</span>

22
html/505colors.mu.html generated
View File

@ -1,14 +1,14 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 505colors.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
@ -16,22 +16,22 @@ a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.LineNr { }
.Delimiter { color: #c000c0; }
.muRegEcx { color: #870000; }
.muRegEdx { color: #af5f00; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muRegEbx { color: #5f00ff; }
.muRegEsi { color: #005faf; }
.muRegEdi { color: #00af00; }
.Constant { color: #008787; }
.Special { color: #ff6060; }
.PreProc { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.CommentedCode { color: #8a8a8a; }
.muTest { color: #5f8700; }
.muComment { color: #005faf; }
.CommentedCode { color: #8a8a8a; }
.muRegEcx { color: #870000; }
.muRegEdx { color: #af5f00; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

18
html/506math.mu.html generated
View File

@ -1,14 +1,14 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 506math.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
@ -16,15 +16,15 @@ a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.LineNr { }
.muRegEdi { color: #00af00; }
.Constant { color: #008787; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muRegEdi { color: #00af00; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.Special { color: #ff6060; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

24
html/507line.mu.html generated
View File

@ -1,33 +1,33 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 507line.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.muRegEbx { color: #5f00ff; }
.muRegEcx { color: #870000; }
.muRegEdx { color: #af5f00; }
.Special { color: #ff6060; }
.LineNr { }
.Constant { color: #008787; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muRegEbx { color: #5f00ff; }
.muRegEdx { color: #af5f00; }
.muRegEcx { color: #870000; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

20
html/508circle.mu.html generated
View File

@ -1,32 +1,32 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 508circle.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.muRegEcx { color: #870000; }
.muRegEdx { color: #af5f00; }
.Special { color: #ff6060; }
.LineNr { }
.Constant { color: #008787; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muRegEcx { color: #870000; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

28
html/509bezier.mu.html generated
View File

@ -1,33 +1,33 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 509bezier.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.muRegEbx { color: #5f00ff; }
.muRegEcx { color: #870000; }
.muRegEdx { color: #af5f00; }
.LineNr { }
.Constant { color: #008787; }
.muFunction { color: #af5f00; text-decoration: underline; }
.Delimiter { color: #c000c0; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
.LineNr { }
.muRegEbx { color: #5f00ff; }
.Constant { color: #008787; }
.muRegEcx { color: #870000; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muComment { color: #005faf; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

24
html/510disk.mu.html generated
View File

@ -1,32 +1,32 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - 510disk.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.muComment { color: #005faf; }
.muRegEdx { color: #af5f00; }
.LineNr { }
.Constant { color: #008787; }
.muFunction { color: #af5f00; text-decoration: underline; }
.Delimiter { color: #c000c0; }
.Special { color: #ff6060; }
.muRegEbx { color: #5f00ff; }
.muRegEdx { color: #af5f00; }
.muComment { color: #005faf; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.Special { color: #ff6060; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

2140
html/511image.mu.html generated

File diff suppressed because it is too large Load Diff

188
html/512array.mu.html generated Normal file
View File

@ -0,0 +1,188 @@
<!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 - 512array.mu</title>
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<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: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.muRegEdx { color: #af5f00; }
.Special { color: #ff6060; }
.LineNr { }
.Constant { color: #008787; }
.muRegEbx { color: #5f00ff; }
.muRegEsi { color: #005faf; }
.muRegEcx { color: #870000; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muTest { color: #5f8700; }
.muComment { color: #005faf; }
-->
</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;
}
var 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/main/512array.mu'>https://github.com/akkartik/mu/blob/main/512array.mu</a>
<pre id='vimCodeElement'>
<span id="L1" class="LineNr"> 1 </span><span class="muComment"># Inserting and deleting in arrays.</span>
<span id="L2" class="LineNr"> 2 </span><span class="muComment">#</span>
<span id="L3" class="LineNr"> 3 </span><span class="muComment"># The primitives here just do the work of making space and compacting.</span>
<span id="L4" class="LineNr"> 4 </span>
<span id="L5" class="LineNr"> 5 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='512array.mu.html#L5'>slide-up</a></span> _a: (addr array int), start: int, end: int, target: int <span class="Delimiter">{</span>
<span id="L6" class="LineNr"> 6 </span> <span class="PreProc">var</span> a/<span class="muRegEsi">esi</span>: (addr array int) <span class="Special">&lt;-</span> copy _a
<span id="L7" class="LineNr"> 7 </span> <span class="PreProc">var</span> src-idx/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy start
<span id="L8" class="LineNr"> 8 </span> <span class="PreProc">var</span> dest-idx/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy target
<span id="L9" class="LineNr"> 9 </span> <span class="muComment"># if start == target, nothing to do</span>
<span id="L10" class="LineNr"> 10 </span> <span class="Delimiter">{</span>
<span id="L11" class="LineNr"> 11 </span> compare src-idx, dest-idx
<span id="L12" class="LineNr"> 12 </span> <span class="PreProc">break-if-!=</span>
<span id="L13" class="LineNr"> 13 </span> <span class="PreProc">return</span>
<span id="L14" class="LineNr"> 14 </span> <span class="Delimiter">}</span>
<span id="L15" class="LineNr"> 15 </span> <span class="muComment"># if start &lt; target, abort</span>
<span id="L16" class="LineNr"> 16 </span> <span class="Delimiter">{</span>
<span id="L17" class="LineNr"> 17 </span> compare src-idx, dest-idx
<span id="L18" class="LineNr"> 18 </span> <span class="PreProc">break-if-&gt;</span>
<span id="L19" class="LineNr"> 19 </span> <a href='317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;slide-up: target &gt; start; use <a href='512array.mu.html#L35'>slide-down</a> instead&quot;</span>
<span id="L20" class="LineNr"> 20 </span> <span class="Delimiter">}</span>
<span id="L21" class="LineNr"> 21 </span> <span class="muComment"># perform the copy</span>
<span id="L22" class="LineNr"> 22 </span> <span class="Delimiter">{</span>
<span id="L23" class="LineNr"> 23 </span> compare src-idx, end
<span id="L24" class="LineNr"> 24 </span> <span class="PreProc">break-if-&gt;=</span>
<span id="L25" class="LineNr"> 25 </span> <span class="PreProc">var</span> dest/<span class="muRegEbx">ebx</span>: (addr int) <span class="Special">&lt;-</span> index a, dest-idx
<span id="L26" class="LineNr"> 26 </span> <span class="PreProc">var</span> src/eax: (addr int) <span class="Special">&lt;-</span> index a, src-idx
<span id="L27" class="LineNr"> 27 </span> <span class="PreProc">var</span> val/eax: int <span class="Special">&lt;-</span> copy *src
<span id="L28" class="LineNr"> 28 </span> copy-to *dest, val
<span id="L29" class="LineNr"> 29 </span> src-idx <span class="Special">&lt;-</span> increment
<span id="L30" class="LineNr"> 30 </span> dest-idx <span class="Special">&lt;-</span> increment
<span id="L31" class="LineNr"> 31 </span> <span class="PreProc">loop</span>
<span id="L32" class="LineNr"> 32 </span> <span class="Delimiter">}</span>
<span id="L33" class="LineNr"> 33 </span><span class="Delimiter">}</span>
<span id="L34" class="LineNr"> 34 </span>
<span id="L35" class="LineNr"> 35 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='512array.mu.html#L35'>slide-down</a></span> _a: (addr array int), start: int, end: int, target: int <span class="Delimiter">{</span>
<span id="L36" class="LineNr"> 36 </span> <span class="PreProc">var</span> a/<span class="muRegEsi">esi</span>: (addr array int) <span class="Special">&lt;-</span> copy _a
<span id="L37" class="LineNr"> 37 </span> <span class="PreProc">var</span> src-idx/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy end
<span id="L38" class="LineNr"> 38 </span> src-idx <span class="Special">&lt;-</span> decrement
<span id="L39" class="LineNr"> 39 </span> <span class="PreProc">var</span> dest-idx/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy target
<span id="L40" class="LineNr"> 40 </span> dest-idx <span class="Special">&lt;-</span> add end
<span id="L41" class="LineNr"> 41 </span> dest-idx <span class="Special">&lt;-</span> subtract start
<span id="L42" class="LineNr"> 42 </span> dest-idx <span class="Special">&lt;-</span> decrement
<span id="L43" class="LineNr"> 43 </span> <span class="muComment"># if start == target, nothing to do</span>
<span id="L44" class="LineNr"> 44 </span> <span class="Delimiter">{</span>
<span id="L45" class="LineNr"> 45 </span> compare src-idx, dest-idx
<span id="L46" class="LineNr"> 46 </span> <span class="PreProc">break-if-!=</span>
<span id="L47" class="LineNr"> 47 </span> <span class="PreProc">return</span>
<span id="L48" class="LineNr"> 48 </span> <span class="Delimiter">}</span>
<span id="L49" class="LineNr"> 49 </span> <span class="muComment"># if start &gt; target, abort</span>
<span id="L50" class="LineNr"> 50 </span> <span class="Delimiter">{</span>
<span id="L51" class="LineNr"> 51 </span> compare src-idx, dest-idx
<span id="L52" class="LineNr"> 52 </span> <span class="PreProc">break-if-&lt;</span>
<span id="L53" class="LineNr"> 53 </span> <a href='317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;slide-down: target &lt; start; use <a href='512array.mu.html#L35'>slide-down</a> instead&quot;</span>
<span id="L54" class="LineNr"> 54 </span> <span class="Delimiter">}</span>
<span id="L55" class="LineNr"> 55 </span> <span class="muComment"># perform the copy</span>
<span id="L56" class="LineNr"> 56 </span> <span class="Delimiter">{</span>
<span id="L57" class="LineNr"> 57 </span> compare src-idx, start
<span id="L58" class="LineNr"> 58 </span> <span class="PreProc">break-if-&lt;</span>
<span id="L59" class="LineNr"> 59 </span> <span class="PreProc">var</span> dest/<span class="muRegEbx">ebx</span>: (addr int) <span class="Special">&lt;-</span> index a, dest-idx
<span id="L60" class="LineNr"> 60 </span> <span class="PreProc">var</span> src/eax: (addr int) <span class="Special">&lt;-</span> index a, src-idx
<span id="L61" class="LineNr"> 61 </span> <span class="PreProc">var</span> val/eax: int <span class="Special">&lt;-</span> copy *src
<span id="L62" class="LineNr"> 62 </span> copy-to *dest, val
<span id="L63" class="LineNr"> 63 </span> src-idx <span class="Special">&lt;-</span> decrement
<span id="L64" class="LineNr"> 64 </span> dest-idx <span class="Special">&lt;-</span> decrement
<span id="L65" class="LineNr"> 65 </span> <span class="PreProc">loop</span>
<span id="L66" class="LineNr"> 66 </span> <span class="Delimiter">}</span>
<span id="L67" class="LineNr"> 67 </span><span class="Delimiter">}</span>
<span id="L68" class="LineNr"> 68 </span>
<span id="L69" class="LineNr"> 69 </span><span class="PreProc">fn</span> <span class="muTest"><a href='512array.mu.html#L69'>test-slide-up</a></span> <span class="Delimiter">{</span>
<span id="L70" class="LineNr"> 70 </span> <a href='512array.mu.html#L105'>check-slide-up</a> <span class="Constant">&quot;0 1 2 3 0&quot;</span>, <span class="Constant">1</span>/start <span class="Constant">1</span>/end, <span class="Constant">0</span>/target, <span class="Constant">&quot;0 1 2 3 0&quot;</span>, <span class="Constant">&quot;F - <a href='512array.mu.html#L69'>test-slide-up</a>/empty-interval&quot;</span>
<span id="L71" class="LineNr"> 71 </span> <a href='512array.mu.html#L105'>check-slide-up</a> <span class="Constant">&quot;0 1 2 3 0&quot;</span>, <span class="Constant">1</span>/start <span class="Constant">2</span>/end, <span class="Constant">0</span>/target, <span class="Constant">&quot;1 1 2 3 0&quot;</span>, <span class="Constant">&quot;F - <a href='512array.mu.html#L69'>test-slide-up</a>/single-non-overlapping&quot;</span>
<span id="L72" class="LineNr"> 72 </span> <a href='512array.mu.html#L105'>check-slide-up</a> <span class="Constant">&quot;0 0 0 1 2 3 0&quot;</span>, <span class="Constant">3</span>/start <span class="Constant">6</span>/end, <span class="Constant">0</span>/target, <span class="Constant">&quot;1 2 3 1 2 3 0&quot;</span>, <span class="Constant">&quot;F - <a href='512array.mu.html#L69'>test-slide-up</a>/multiple-non-overlapping&quot;</span>
<span id="L73" class="LineNr"> 73 </span> <a href='512array.mu.html#L105'>check-slide-up</a> <span class="Constant">&quot;0 1 2 3 0&quot;</span>, <span class="Constant">1</span>/start <span class="Constant">4</span>/end, <span class="Constant">0</span>/target, <span class="Constant">&quot;1 2 3 3 0&quot;</span>, <span class="Constant">&quot;F - <a href='512array.mu.html#L69'>test-slide-up</a>/overlapping&quot;</span>
<span id="L74" class="LineNr"> 74 </span><span class="Delimiter">}</span>
<span id="L75" class="LineNr"> 75 </span>
<span id="L76" class="LineNr"> 76 </span><span class="PreProc">fn</span> <span class="muTest"><a href='512array.mu.html#L76'>test-slide-down</a></span> <span class="Delimiter">{</span>
<span id="L77" class="LineNr"> 77 </span> <a href='512array.mu.html#L114'>check-slide-down</a> <span class="Constant">&quot;0 1 2 3 0&quot;</span>, <span class="Constant">1</span>/start <span class="Constant">1</span>/end, <span class="Constant">4</span>/target, <span class="Constant">&quot;0 1 2 3 0&quot;</span>, <span class="Constant">&quot;F - <a href='512array.mu.html#L76'>test-slide-down</a>/empty-interval&quot;</span>
<span id="L78" class="LineNr"> 78 </span> <a href='512array.mu.html#L114'>check-slide-down</a> <span class="Constant">&quot;0 1 2 3 0&quot;</span>, <span class="Constant">1</span>/start <span class="Constant">2</span>/end, <span class="Constant">4</span>/target, <span class="Constant">&quot;0 1 2 3 1&quot;</span>, <span class="Constant">&quot;F - <a href='512array.mu.html#L76'>test-slide-down</a>/single-non-overlapping&quot;</span>
<span id="L79" class="LineNr"> 79 </span> <a href='512array.mu.html#L114'>check-slide-down</a> <span class="Constant">&quot;0 1 2 3 0 0 0&quot;</span>, <span class="Constant">1</span>/start <span class="Constant">4</span>/end, <span class="Constant">4</span>/target, <span class="Constant">&quot;0 1 2 3 1 2 3&quot;</span>, <span class="Constant">&quot;F - <a href='512array.mu.html#L76'>test-slide-down</a>/multiple-non-overlapping&quot;</span>
<span id="L80" class="LineNr"> 80 </span> <a href='512array.mu.html#L114'>check-slide-down</a> <span class="Constant">&quot;0 1 2 3 0&quot;</span>, <span class="Constant">1</span>/start <span class="Constant">4</span>/end, <span class="Constant">2</span>/target, <span class="Constant">&quot;0 1 1 2 3&quot;</span>, <span class="Constant">&quot;F - <a href='512array.mu.html#L76'>test-slide-down</a>/overlapping&quot;</span>
<span id="L81" class="LineNr"> 81 </span><span class="Delimiter">}</span>
<span id="L82" class="LineNr"> 82 </span>
<span id="L83" class="LineNr"> 83 </span><span class="muComment"># Return the index that val is at.</span>
<span id="L84" class="LineNr"> 84 </span><span class="muComment"># If not found, return len-1.</span>
<span id="L85" class="LineNr"> 85 </span><span class="muComment"># That way the result is always a valid index to pass into slide-down.</span>
<span id="L86" class="LineNr"> 86 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='512array.mu.html#L86'>find-slide-down-slot-in-array</a></span> _a: (addr array int), _val: int<span class="PreProc"> -&gt; </span>_/<span class="muRegEcx">ecx</span>: int <span class="Delimiter">{</span>
<span id="L87" class="LineNr"> 87 </span> <span class="PreProc">var</span> a/<span class="muRegEsi">esi</span>: (addr array int) <span class="Special">&lt;-</span> copy _a
<span id="L88" class="LineNr"> 88 </span> <span class="PreProc">var</span> val/<span class="muRegEbx">ebx</span>: int <span class="Special">&lt;-</span> copy _val
<span id="L89" class="LineNr"> 89 </span> <span class="PreProc">var</span> max/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> length a
<span id="L90" class="LineNr"> 90 </span> max <span class="Special">&lt;-</span> decrement
<span id="L91" class="LineNr"> 91 </span> <span class="PreProc">var</span> i/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L92" class="LineNr"> 92 </span> <span class="Delimiter">{</span>
<span id="L93" class="LineNr"> 93 </span> compare i, max
<span id="L94" class="LineNr"> 94 </span> <span class="PreProc">break-if-&gt;=</span>
<span id="L95" class="LineNr"> 95 </span> <span class="PreProc">var</span> curr/eax: (addr int) <span class="Special">&lt;-</span> index a, i
<span id="L96" class="LineNr"> 96 </span> compare *curr, val
<span id="L97" class="LineNr"> 97 </span> <span class="PreProc">break-if-=</span>
<span id="L98" class="LineNr"> 98 </span> i <span class="Special">&lt;-</span> increment
<span id="L99" class="LineNr"> 99 </span> <span class="PreProc">loop</span>
<span id="L100" class="LineNr">100 </span> <span class="Delimiter">}</span>
<span id="L101" class="LineNr">101 </span> <span class="PreProc">return</span> i
<span id="L102" class="LineNr">102 </span><span class="Delimiter">}</span>
<span id="L103" class="LineNr">103 </span>
<span id="L104" class="LineNr">104 </span><span class="muComment"># helpers for tests</span>
<span id="L105" class="LineNr">105 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='512array.mu.html#L105'>check-slide-up</a></span> before: (addr array byte), start: int, end: int, target: int, after: (addr array byte), msg: (addr array byte) <span class="Delimiter">{</span>
<span id="L106" class="LineNr">106 </span> <span class="PreProc">var</span> arr-h: (handle array int)
<span id="L107" class="LineNr">107 </span> <span class="PreProc">var</span> arr-ah/eax: (addr handle array int) <span class="Special">&lt;-</span> address arr-h
<span id="L108" class="LineNr">108 </span> <a href='311decimal-int.subx.html#L623'>parse-array-of-decimal-ints</a> before, arr-ah
<span id="L109" class="LineNr">109 </span> <span class="PreProc">var</span> arr/eax: (addr array int) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L235'>lookup</a> *arr-ah
<span id="L110" class="LineNr">110 </span> <a href='512array.mu.html#L5'>slide-up</a> arr, start, end, target
<span id="L111" class="LineNr">111 </span> <a href='301array-equal.subx.html#L382'>check-array-equal</a> arr, after, msg
<span id="L112" class="LineNr">112 </span><span class="Delimiter">}</span>
<span id="L113" class="LineNr">113 </span>
<span id="L114" class="LineNr">114 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='512array.mu.html#L114'>check-slide-down</a></span> before: (addr array byte), start: int, end: int, target: int, after: (addr array byte), msg: (addr array byte) <span class="Delimiter">{</span>
<span id="L115" class="LineNr">115 </span> <span class="PreProc">var</span> arr-h: (handle array int)
<span id="L116" class="LineNr">116 </span> <span class="PreProc">var</span> arr-ah/eax: (addr handle array int) <span class="Special">&lt;-</span> address arr-h
<span id="L117" class="LineNr">117 </span> <a href='311decimal-int.subx.html#L623'>parse-array-of-decimal-ints</a> before, arr-ah
<span id="L118" class="LineNr">118 </span> <span class="PreProc">var</span> arr/eax: (addr array int) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L235'>lookup</a> *arr-ah
<span id="L119" class="LineNr">119 </span> <a href='512array.mu.html#L35'>slide-down</a> arr, start, end, target
<span id="L120" class="LineNr">120 </span> <a href='301array-equal.subx.html#L382'>check-array-equal</a> arr, after, msg
<span id="L121" class="LineNr">121 </span><span class="Delimiter">}</span>
</pre>
</body>
</html>
<!-- vim: set foldmethod=manual : -->

624
html/513grapheme-stack.mu.html generated Normal file
View File

@ -0,0 +1,624 @@
<!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 - 513grapheme-stack.mu</title>
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<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: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.muRegEdx { color: #af5f00; }
.Special { color: #ff6060; }
.LineNr { }
.Constant { color: #008787; }
.muRegEbx { color: #5f00ff; }
.muRegEsi { color: #005faf; }
.muRegEdi { color: #00af00; }
.muRegEcx { color: #870000; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muTest { color: #5f8700; }
.muComment { color: #005faf; }
-->
</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;
}
var 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/main/513grapheme-stack.mu'>https://github.com/akkartik/mu/blob/main/513grapheme-stack.mu</a>
<pre id='vimCodeElement'>
<span id="L1" class="LineNr"> 1 </span><span class="muComment"># grapheme stacks are the smallest unit of editable text</span>
<span id="L2" class="LineNr"> 2 </span>
<span id="L3" class="LineNr"> 3 </span><span class="PreProc">type</span> <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a> <span class="Delimiter">{</span>
<span id="L4" class="LineNr"> 4 </span> data: (handle array grapheme)
<span id="L5" class="LineNr"> 5 </span> top: int
<span id="L6" class="LineNr"> 6 </span><span class="Delimiter">}</span>
<span id="L7" class="LineNr"> 7 </span>
<span id="L8" class="LineNr"> 8 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='513grapheme-stack.mu.html#L8'>initialize-grapheme-stack</a></span> _self: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>), n: int <span class="Delimiter">{</span>
<span id="L9" class="LineNr"> 9 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>) <span class="Special">&lt;-</span> copy _self
<span id="L10" class="LineNr"> 10 </span> <span class="PreProc">var</span> d/<span class="muRegEdi">edi</span>: (addr handle array grapheme) <span class="Special">&lt;-</span> get self, data
<span id="L11" class="LineNr"> 11 </span> populate d, n
<span id="L12" class="LineNr"> 12 </span> <span class="PreProc">var</span> top/eax: (addr int) <span class="Special">&lt;-</span> get self, top
<span id="L13" class="LineNr"> 13 </span> copy-to *top, <span class="Constant">0</span>
<span id="L14" class="LineNr"> 14 </span><span class="Delimiter">}</span>
<span id="L15" class="LineNr"> 15 </span>
<span id="L16" class="LineNr"> 16 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='513grapheme-stack.mu.html#L16'>clear-grapheme-stack</a></span> _self: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>) <span class="Delimiter">{</span>
<span id="L17" class="LineNr"> 17 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>) <span class="Special">&lt;-</span> copy _self
<span id="L18" class="LineNr"> 18 </span> <span class="PreProc">var</span> top/eax: (addr int) <span class="Special">&lt;-</span> get self, top
<span id="L19" class="LineNr"> 19 </span> copy-to *top, <span class="Constant">0</span>
<span id="L20" class="LineNr"> 20 </span><span class="Delimiter">}</span>
<span id="L21" class="LineNr"> 21 </span>
<span id="L22" class="LineNr"> 22 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='513grapheme-stack.mu.html#L22'>grapheme-stack-empty?</a></span> _self: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>)<span class="PreProc"> -&gt; </span>_/eax: boolean <span class="Delimiter">{</span>
<span id="L23" class="LineNr"> 23 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>) <span class="Special">&lt;-</span> copy _self
<span id="L24" class="LineNr"> 24 </span> <span class="PreProc">var</span> top/eax: (addr int) <span class="Special">&lt;-</span> get self, top
<span id="L25" class="LineNr"> 25 </span> compare *top, <span class="Constant">0</span>
<span id="L26" class="LineNr"> 26 </span> <span class="Delimiter">{</span>
<span id="L27" class="LineNr"> 27 </span> <span class="PreProc">break-if-!=</span>
<span id="L28" class="LineNr"> 28 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L29" class="LineNr"> 29 </span> <span class="Delimiter">}</span>
<span id="L30" class="LineNr"> 30 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false
<span id="L31" class="LineNr"> 31 </span><span class="Delimiter">}</span>
<span id="L32" class="LineNr"> 32 </span>
<span id="L33" class="LineNr"> 33 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='513grapheme-stack.mu.html#L33'>grapheme-stack-length</a></span> _self: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>)<span class="PreProc"> -&gt; </span>_/eax: int <span class="Delimiter">{</span>
<span id="L34" class="LineNr"> 34 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>) <span class="Special">&lt;-</span> copy _self
<span id="L35" class="LineNr"> 35 </span> <span class="PreProc">var</span> top/eax: (addr int) <span class="Special">&lt;-</span> get self, top
<span id="L36" class="LineNr"> 36 </span> <span class="PreProc">return</span> *top
<span id="L37" class="LineNr"> 37 </span><span class="Delimiter">}</span>
<span id="L38" class="LineNr"> 38 </span>
<span id="L39" class="LineNr"> 39 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='513grapheme-stack.mu.html#L39'>push-grapheme-stack</a></span> _self: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>), _val: grapheme <span class="Delimiter">{</span>
<span id="L40" class="LineNr"> 40 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>) <span class="Special">&lt;-</span> copy _self
<span id="L41" class="LineNr"> 41 </span> <span class="PreProc">var</span> top-addr/<span class="muRegEcx">ecx</span>: (addr int) <span class="Special">&lt;-</span> get self, top
<span id="L42" class="LineNr"> 42 </span> <span class="PreProc">var</span> data-ah/<span class="muRegEdx">edx</span>: (addr handle array grapheme) <span class="Special">&lt;-</span> get self, data
<span id="L43" class="LineNr"> 43 </span> <span class="PreProc">var</span> data/eax: (addr array grapheme) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L235'>lookup</a> *data-ah
<span id="L44" class="LineNr"> 44 </span> <span class="PreProc">var</span> top/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy *top-addr
<span id="L45" class="LineNr"> 45 </span> <span class="PreProc">var</span> dest-addr/<span class="muRegEdx">edx</span>: (addr grapheme) <span class="Special">&lt;-</span> index data, top
<span id="L46" class="LineNr"> 46 </span> <span class="PreProc">var</span> val/eax: grapheme <span class="Special">&lt;-</span> copy _val
<span id="L47" class="LineNr"> 47 </span> copy-to *dest-addr, val
<span id="L48" class="LineNr"> 48 </span> add-to *top-addr, <span class="Constant">1</span>
<span id="L49" class="LineNr"> 49 </span><span class="Delimiter">}</span>
<span id="L50" class="LineNr"> 50 </span>
<span id="L51" class="LineNr"> 51 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='513grapheme-stack.mu.html#L51'>pop-grapheme-stack</a></span> _self: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>)<span class="PreProc"> -&gt; </span>_/eax: grapheme <span class="Delimiter">{</span>
<span id="L52" class="LineNr"> 52 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>) <span class="Special">&lt;-</span> copy _self
<span id="L53" class="LineNr"> 53 </span> <span class="PreProc">var</span> top-addr/<span class="muRegEcx">ecx</span>: (addr int) <span class="Special">&lt;-</span> get self, top
<span id="L54" class="LineNr"> 54 </span> <span class="Delimiter">{</span>
<span id="L55" class="LineNr"> 55 </span> compare *top-addr, <span class="Constant">0</span>
<span id="L56" class="LineNr"> 56 </span> <span class="PreProc">break-if-&gt;</span>
<span id="L57" class="LineNr"> 57 </span> <span class="PreProc">return</span> <span class="Constant">-1</span>
<span id="L58" class="LineNr"> 58 </span> <span class="Delimiter">}</span>
<span id="L59" class="LineNr"> 59 </span> subtract-from *top-addr, <span class="Constant">1</span>
<span id="L60" class="LineNr"> 60 </span> <span class="PreProc">var</span> data-ah/<span class="muRegEdx">edx</span>: (addr handle array grapheme) <span class="Special">&lt;-</span> get self, data
<span id="L61" class="LineNr"> 61 </span> <span class="PreProc">var</span> data/eax: (addr array grapheme) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L235'>lookup</a> *data-ah
<span id="L62" class="LineNr"> 62 </span> <span class="PreProc">var</span> top/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy *top-addr
<span id="L63" class="LineNr"> 63 </span> <span class="PreProc">var</span> result-addr/eax: (addr grapheme) <span class="Special">&lt;-</span> index data, top
<span id="L64" class="LineNr"> 64 </span> <span class="PreProc">return</span> *result-addr
<span id="L65" class="LineNr"> 65 </span><span class="Delimiter">}</span>
<span id="L66" class="LineNr"> 66 </span>
<span id="L67" class="LineNr"> 67 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='513grapheme-stack.mu.html#L67'>copy-grapheme-stack</a></span> _src: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>), dest: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>) <span class="Delimiter">{</span>
<span id="L68" class="LineNr"> 68 </span> <span class="PreProc">var</span> src/<span class="muRegEsi">esi</span>: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>) <span class="Special">&lt;-</span> copy _src
<span id="L69" class="LineNr"> 69 </span> <span class="PreProc">var</span> data-ah/<span class="muRegEdi">edi</span>: (addr handle array grapheme) <span class="Special">&lt;-</span> get src, data
<span id="L70" class="LineNr"> 70 </span> <span class="PreProc">var</span> _data/eax: (addr array grapheme) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L235'>lookup</a> *data-ah
<span id="L71" class="LineNr"> 71 </span> <span class="PreProc">var</span> data/<span class="muRegEdi">edi</span>: (addr array grapheme) <span class="Special">&lt;-</span> copy _data
<span id="L72" class="LineNr"> 72 </span> <span class="PreProc">var</span> top-addr/<span class="muRegEcx">ecx</span>: (addr int) <span class="Special">&lt;-</span> get src, top
<span id="L73" class="LineNr"> 73 </span> <span class="PreProc">var</span> i/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L74" class="LineNr"> 74 </span> <span class="Delimiter">{</span>
<span id="L75" class="LineNr"> 75 </span> compare i, *top-addr
<span id="L76" class="LineNr"> 76 </span> <span class="PreProc">break-if-&gt;=</span>
<span id="L77" class="LineNr"> 77 </span> <span class="PreProc">var</span> g/<span class="muRegEdx">edx</span>: (addr grapheme) <span class="Special">&lt;-</span> index data, i
<span id="L78" class="LineNr"> 78 </span> <a href='513grapheme-stack.mu.html#L39'>push-grapheme-stack</a> dest, *g
<span id="L79" class="LineNr"> 79 </span> i <span class="Special">&lt;-</span> increment
<span id="L80" class="LineNr"> 80 </span> <span class="PreProc">loop</span>
<span id="L81" class="LineNr"> 81 </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="muComment"># dump stack to screen from bottom to top</span>
<span id="L85" class="LineNr"> 85 </span><span class="muComment"># hardcoded colors:</span>
<span id="L86" class="LineNr"> 86 </span><span class="muComment"># matching paren</span>
<span id="L87" class="LineNr"> 87 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='513grapheme-stack.mu.html#L87'>render-stack-from-bottom-wrapping-right-then-down</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), _self: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>), xmin: int, ymin: int, xmax: int, ymax: int, _x: int, _y: int, <a href='514gap-buffer.mu.html#L943'>highlight-matching-open-paren?</a>: boolean, open-paren-depth: int, color: int, background-color: int<span class="PreProc"> -&gt; </span>_/eax: int, _/<span class="muRegEcx">ecx</span>: int <span class="Delimiter">{</span>
<span id="L88" class="LineNr"> 88 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>) <span class="Special">&lt;-</span> copy _self
<span id="L89" class="LineNr"> 89 </span> <span class="PreProc">var</span> matching-open-paren-index/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> <a href='513grapheme-stack.mu.html#L434'>get-matching-open-paren-index</a> self, <a href='514gap-buffer.mu.html#L943'>highlight-matching-open-paren?</a>, open-paren-depth
<span id="L90" class="LineNr"> 90 </span> <span class="PreProc">var</span> data-ah/<span class="muRegEdi">edi</span>: (addr handle array grapheme) <span class="Special">&lt;-</span> get self, data
<span id="L91" class="LineNr"> 91 </span> <span class="PreProc">var</span> _data/eax: (addr array grapheme) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L235'>lookup</a> *data-ah
<span id="L92" class="LineNr"> 92 </span> <span class="PreProc">var</span> data/<span class="muRegEdi">edi</span>: (addr array grapheme) <span class="Special">&lt;-</span> copy _data
<span id="L93" class="LineNr"> 93 </span> <span class="PreProc">var</span> x/eax: int <span class="Special">&lt;-</span> copy _x
<span id="L94" class="LineNr"> 94 </span> <span class="PreProc">var</span> y/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy _y
<span id="L95" class="LineNr"> 95 </span> <span class="PreProc">var</span> top-addr/<span class="muRegEsi">esi</span>: (addr int) <span class="Special">&lt;-</span> get self, top
<span id="L96" class="LineNr"> 96 </span> <span class="PreProc">var</span> i/<span class="muRegEbx">ebx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L97" class="LineNr"> 97 </span> <span class="Delimiter">{</span>
<span id="L98" class="LineNr"> 98 </span> compare i, *top-addr
<span id="L99" class="LineNr"> 99 </span> <span class="PreProc">break-if-&gt;=</span>
<span id="L100" class="LineNr">100 </span> <span class="Delimiter">{</span>
<span id="L101" class="LineNr">101 </span> <span class="PreProc">var</span> g/<span class="muRegEsi">esi</span>: (addr grapheme) <span class="Special">&lt;-</span> index data, i
<span id="L102" class="LineNr">102 </span> <span class="PreProc">var</span> fg: int
<span id="L103" class="LineNr">103 </span> <span class="Delimiter">{</span>
<span id="L104" class="LineNr">104 </span> <span class="PreProc">var</span> tmp/eax: int <span class="Special">&lt;-</span> copy color
<span id="L105" class="LineNr">105 </span> copy-to fg, tmp
<span id="L106" class="LineNr">106 </span> <span class="Delimiter">}</span>
<span id="L107" class="LineNr">107 </span> <span class="Delimiter">{</span>
<span id="L108" class="LineNr">108 </span> compare i, matching-open-paren-index
<span id="L109" class="LineNr">109 </span> <span class="PreProc">break-if-!=</span>
<span id="L110" class="LineNr">110 </span> copy-to fg, <span class="Constant">0xf</span>/highlight
<span id="L111" class="LineNr">111 </span> <span class="Delimiter">}</span>
<span id="L112" class="LineNr">112 </span> x, y <span class="Special">&lt;-</span> <a href='501draw-text.mu.html#L148'>render-grapheme</a> <a href='500fake-screen.mu.html#L14'>screen</a>, *g, xmin, ymin, xmax, ymax, x, y, fg, background-color
<span id="L113" class="LineNr">113 </span> <span class="Delimiter">}</span>
<span id="L114" class="LineNr">114 </span> i <span class="Special">&lt;-</span> increment
<span id="L115" class="LineNr">115 </span> <span class="PreProc">loop</span>
<span id="L116" class="LineNr">116 </span> <span class="Delimiter">}</span>
<span id="L117" class="LineNr">117 </span> <span class="PreProc">return</span> x, y
<span id="L118" class="LineNr">118 </span><span class="Delimiter">}</span>
<span id="L119" class="LineNr">119 </span>
<span id="L120" class="LineNr">120 </span><span class="muComment"># helper for small words</span>
<span id="L121" class="LineNr">121 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='513grapheme-stack.mu.html#L121'>render-stack-from-bottom</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), self: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>), x: int, y: int, <a href='514gap-buffer.mu.html#L943'>highlight-matching-open-paren?</a>: boolean, open-paren-depth: int<span class="PreProc"> -&gt; </span>_/eax: int <span class="Delimiter">{</span>
<span id="L122" class="LineNr">122 </span> <span class="PreProc">var</span> _width/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L123" class="LineNr">123 </span> <span class="PreProc">var</span> _height/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L124" class="LineNr">124 </span> _width, _height <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L86'>screen-size</a> <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L125" class="LineNr">125 </span> <span class="PreProc">var</span> width/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy _width
<span id="L126" class="LineNr">126 </span> <span class="PreProc">var</span> height/<span class="muRegEbx">ebx</span>: int <span class="Special">&lt;-</span> copy _height
<span id="L127" class="LineNr">127 </span> <span class="PreProc">var</span> x2/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L128" class="LineNr">128 </span> <span class="PreProc">var</span> y2/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L129" class="LineNr">129 </span> x2, y2 <span class="Special">&lt;-</span> <a href='513grapheme-stack.mu.html#L87'>render-stack-from-bottom-wrapping-right-then-down</a> <a href='500fake-screen.mu.html#L14'>screen</a>, self, x, y, width, height, x, y, <a href='514gap-buffer.mu.html#L943'>highlight-matching-open-paren?</a>, open-paren-depth, <span class="Constant">3</span>/fg=cyan, <span class="Constant">0xc5</span>/bg=blue-bg
<span id="L130" class="LineNr">130 </span> <span class="PreProc">return</span> x2 <span class="muComment"># y2? yolo</span>
<span id="L131" class="LineNr">131 </span><span class="Delimiter">}</span>
<span id="L132" class="LineNr">132 </span>
<span id="L133" class="LineNr">133 </span><span class="muComment"># dump stack to screen from top to bottom</span>
<span id="L134" class="LineNr">134 </span><span class="muComment"># optionally render a 'cursor' with the top grapheme</span>
<span id="L135" class="LineNr">135 </span><span class="muComment"># hard-coded colors:</span>
<span id="L136" class="LineNr">136 </span><span class="muComment"># matching paren</span>
<span id="L137" class="LineNr">137 </span><span class="muComment"># cursor</span>
<span id="L138" class="LineNr">138 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='513grapheme-stack.mu.html#L138'>render-stack-from-top-wrapping-right-then-down</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), _self: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>), xmin: int, ymin: int, xmax: int, ymax: int, _x: int, _y: int, render-cursor?: boolean, color: int, background-color: int<span class="PreProc"> -&gt; </span>_/eax: int, _/<span class="muRegEcx">ecx</span>: int <span class="Delimiter">{</span>
<span id="L139" class="LineNr">139 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>) <span class="Special">&lt;-</span> copy _self
<span id="L140" class="LineNr">140 </span> <span class="PreProc">var</span> matching-close-paren-index/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> <a href='513grapheme-stack.mu.html#L378'>get-matching-close-paren-index</a> self, render-cursor?
<span id="L141" class="LineNr">141 </span> <span class="PreProc">var</span> data-ah/eax: (addr handle array grapheme) <span class="Special">&lt;-</span> get self, data
<span id="L142" class="LineNr">142 </span> <span class="PreProc">var</span> _data/eax: (addr array grapheme) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L235'>lookup</a> *data-ah
<span id="L143" class="LineNr">143 </span> <span class="PreProc">var</span> data/<span class="muRegEdi">edi</span>: (addr array grapheme) <span class="Special">&lt;-</span> copy _data
<span id="L144" class="LineNr">144 </span> <span class="PreProc">var</span> x/eax: int <span class="Special">&lt;-</span> copy _x
<span id="L145" class="LineNr">145 </span> <span class="PreProc">var</span> y/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy _y
<span id="L146" class="LineNr">146 </span> <span class="PreProc">var</span> top-addr/<span class="muRegEbx">ebx</span>: (addr int) <span class="Special">&lt;-</span> get self, top
<span id="L147" class="LineNr">147 </span> <span class="PreProc">var</span> i/<span class="muRegEbx">ebx</span>: int <span class="Special">&lt;-</span> copy *top-addr
<span id="L148" class="LineNr">148 </span> i <span class="Special">&lt;-</span> decrement
<span id="L149" class="LineNr">149 </span> <span class="muComment"># if render-cursor?, peel off first iteration</span>
<span id="L150" class="LineNr">150 </span> <span class="Delimiter">{</span>
<span id="L151" class="LineNr">151 </span> compare render-cursor?, <span class="Constant">0</span>/false
<span id="L152" class="LineNr">152 </span> <span class="PreProc">break-if-=</span>
<span id="L153" class="LineNr">153 </span> compare i, <span class="Constant">0</span>
<span id="L154" class="LineNr">154 </span> <span class="PreProc">break-if-&lt;</span>
<span id="L155" class="LineNr">155 </span> <span class="PreProc">var</span> g/<span class="muRegEsi">esi</span>: (addr grapheme) <span class="Special">&lt;-</span> index data, i
<span id="L156" class="LineNr">156 </span> x, y <span class="Special">&lt;-</span> <a href='501draw-text.mu.html#L148'>render-grapheme</a> <a href='500fake-screen.mu.html#L14'>screen</a>, *g, xmin, ymin, xmax, ymax, x, y, background-color, color
<span id="L157" class="LineNr">157 </span> i <span class="Special">&lt;-</span> decrement
<span id="L158" class="LineNr">158 </span> <span class="Delimiter">}</span>
<span id="L159" class="LineNr">159 </span> <span class="muComment"># remaining iterations</span>
<span id="L160" class="LineNr">160 </span> <span class="Delimiter">{</span>
<span id="L161" class="LineNr">161 </span> compare i, <span class="Constant">0</span>
<span id="L162" class="LineNr">162 </span> <span class="PreProc">break-if-&lt;</span>
<span id="L163" class="LineNr">163 </span> <span class="muComment"># highlight matching paren if needed</span>
<span id="L164" class="LineNr">164 </span> <span class="PreProc">var</span> fg: int
<span id="L165" class="LineNr">165 </span> <span class="Delimiter">{</span>
<span id="L166" class="LineNr">166 </span> <span class="PreProc">var</span> tmp/eax: int <span class="Special">&lt;-</span> copy color
<span id="L167" class="LineNr">167 </span> copy-to fg, tmp
<span id="L168" class="LineNr">168 </span> <span class="Delimiter">}</span>
<span id="L169" class="LineNr">169 </span> compare i, matching-close-paren-index
<span id="L170" class="LineNr">170 </span> <span class="Delimiter">{</span>
<span id="L171" class="LineNr">171 </span> <span class="PreProc">break-if-!=</span>
<span id="L172" class="LineNr">172 </span> copy-to fg, <span class="Constant">0xf</span>/highlight
<span id="L173" class="LineNr">173 </span> <span class="Delimiter">}</span>
<span id="L174" class="LineNr">174 </span> <span class="muComment">#</span>
<span id="L175" class="LineNr">175 </span> <span class="PreProc">var</span> g/<span class="muRegEsi">esi</span>: (addr grapheme) <span class="Special">&lt;-</span> index data, i
<span id="L176" class="LineNr">176 </span> x, y <span class="Special">&lt;-</span> <a href='501draw-text.mu.html#L148'>render-grapheme</a> <a href='500fake-screen.mu.html#L14'>screen</a>, *g, xmin, ymin, xmax, ymax, x, y, fg, background-color
<span id="L177" class="LineNr">177 </span> i <span class="Special">&lt;-</span> decrement
<span id="L178" class="LineNr">178 </span> <span class="PreProc">loop</span>
<span id="L179" class="LineNr">179 </span> <span class="Delimiter">}</span>
<span id="L180" class="LineNr">180 </span> <span class="PreProc">return</span> x, y
<span id="L181" class="LineNr">181 </span><span class="Delimiter">}</span>
<span id="L182" class="LineNr">182 </span>
<span id="L183" class="LineNr">183 </span><span class="muComment"># helper for small words</span>
<span id="L184" class="LineNr">184 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='513grapheme-stack.mu.html#L184'>render-stack-from-top</a></span> <a href='500fake-screen.mu.html#L14'>screen</a>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>), self: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>), x: int, y: int, render-cursor?: boolean<span class="PreProc"> -&gt; </span>_/eax: int <span class="Delimiter">{</span>
<span id="L185" class="LineNr">185 </span> <span class="PreProc">var</span> _width/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L186" class="LineNr">186 </span> <span class="PreProc">var</span> _height/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L187" class="LineNr">187 </span> _width, _height <span class="Special">&lt;-</span> <a href='500fake-screen.mu.html#L86'>screen-size</a> <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L188" class="LineNr">188 </span> <span class="PreProc">var</span> width/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy _width
<span id="L189" class="LineNr">189 </span> <span class="PreProc">var</span> height/<span class="muRegEbx">ebx</span>: int <span class="Special">&lt;-</span> copy _height
<span id="L190" class="LineNr">190 </span> <span class="PreProc">var</span> x2/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L191" class="LineNr">191 </span> <span class="PreProc">var</span> y2/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L192" class="LineNr">192 </span> x2, y2 <span class="Special">&lt;-</span> <a href='513grapheme-stack.mu.html#L138'>render-stack-from-top-wrapping-right-then-down</a> <a href='500fake-screen.mu.html#L14'>screen</a>, self, x, y, width, height, x, y, render-cursor?, <span class="Constant">3</span>/fg=cyan, <span class="Constant">0xc5</span>/bg=blue-bg
<span id="L193" class="LineNr">193 </span> <span class="PreProc">return</span> x2 <span class="muComment"># y2? yolo</span>
<span id="L194" class="LineNr">194 </span><span class="Delimiter">}</span>
<span id="L195" class="LineNr">195 </span>
<span id="L196" class="LineNr">196 </span><span class="PreProc">fn</span> <span class="muTest"><a href='513grapheme-stack.mu.html#L196'>test-render-grapheme-stack</a></span> <span class="Delimiter">{</span>
<span id="L197" class="LineNr">197 </span> <span class="muComment"># setup: gs = &quot;abc&quot;</span>
<span id="L198" class="LineNr">198 </span> <span class="PreProc">var</span> gs-storage: <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>
<span id="L199" class="LineNr">199 </span> <span class="PreProc">var</span> gs/<span class="muRegEdi">edi</span>: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>) <span class="Special">&lt;-</span> address gs-storage
<span id="L200" class="LineNr">200 </span> <a href='513grapheme-stack.mu.html#L8'>initialize-grapheme-stack</a> gs, <span class="Constant">5</span>
<span id="L201" class="LineNr">201 </span> <span class="PreProc">var</span> g/eax: grapheme <span class="Special">&lt;-</span> copy <span class="Constant">0x61</span>/a
<span id="L202" class="LineNr">202 </span> <a href='513grapheme-stack.mu.html#L39'>push-grapheme-stack</a> gs, g
<span id="L203" class="LineNr">203 </span> g <span class="Special">&lt;-</span> copy <span class="Constant">0x62</span>/b
<span id="L204" class="LineNr">204 </span> <a href='513grapheme-stack.mu.html#L39'>push-grapheme-stack</a> gs, g
<span id="L205" class="LineNr">205 </span> g <span class="Special">&lt;-</span> copy <span class="Constant">0x63</span>/c
<span id="L206" class="LineNr">206 </span> <a href='513grapheme-stack.mu.html#L39'>push-grapheme-stack</a> gs, g
<span id="L207" class="LineNr">207 </span> <span class="muComment"># setup: screen</span>
<span id="L208" class="LineNr">208 </span> <span class="PreProc">var</span> screen-on-stack: <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L209" class="LineNr">209 </span> <span class="PreProc">var</span> <a href='500fake-screen.mu.html#L14'>screen</a>/<span class="muRegEsi">esi</span>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>) <span class="Special">&lt;-</span> address screen-on-stack
<span id="L210" class="LineNr">210 </span> <a href='500fake-screen.mu.html#L33'>initialize-screen</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">5</span>, <span class="Constant">4</span>, <span class="Constant">0</span>/no-pixel-graphics
<span id="L211" class="LineNr">211 </span> <span class="muComment">#</span>
<span id="L212" class="LineNr">212 </span> <span class="PreProc">var</span> x/eax: int <span class="Special">&lt;-</span> <a href='513grapheme-stack.mu.html#L121'>render-stack-from-bottom</a> <a href='500fake-screen.mu.html#L14'>screen</a>, gs, <span class="Constant">0</span>/x, <span class="Constant">0</span>/y, <span class="Constant">0</span>/no-highlight-matching-open-paren, <span class="Constant">0</span>/open-paren-depth
<span id="L213" class="LineNr">213 </span> <a href='504test-screen.mu.html#L7'>check-screen-row</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">0</span>/y, <span class="Constant">&quot;abc &quot;</span>, <span class="Constant">&quot;F - <a href='513grapheme-stack.mu.html#L196'>test-render-grapheme-stack</a> from bottom&quot;</span>
<span id="L214" class="LineNr">214 </span> <a href='502test.mu.html#L2'>check-ints-equal</a> x, <span class="Constant">3</span>, <span class="Constant">&quot;F - <a href='513grapheme-stack.mu.html#L196'>test-render-grapheme-stack</a> from bottom: result&quot;</span>
<span id="L215" class="LineNr">215 </span> <a href='504test-screen.mu.html#L257'>check-background-color-in-screen-row</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">3</span>/bg=reverse, <span class="Constant">0</span>/y, <span class="Constant">&quot; &quot;</span>, <span class="Constant">&quot;F - <a href='513grapheme-stack.mu.html#L196'>test-render-grapheme-stack</a> from bottom: bg&quot;</span>
<span id="L216" class="LineNr">216 </span> <span class="muComment">#</span>
<span id="L217" class="LineNr">217 </span> <span class="PreProc">var</span> x/eax: int <span class="Special">&lt;-</span> <a href='513grapheme-stack.mu.html#L184'>render-stack-from-top</a> <a href='500fake-screen.mu.html#L14'>screen</a>, gs, <span class="Constant">0</span>/x, <span class="Constant">1</span>/y, <span class="Constant">0</span>/cursor=false
<span id="L218" class="LineNr">218 </span> <a href='504test-screen.mu.html#L7'>check-screen-row</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">1</span>/y, <span class="Constant">&quot;cba &quot;</span>, <span class="Constant">&quot;F - <a href='513grapheme-stack.mu.html#L196'>test-render-grapheme-stack</a> from top without cursor&quot;</span>
<span id="L219" class="LineNr">219 </span> <a href='502test.mu.html#L2'>check-ints-equal</a> x, <span class="Constant">3</span>, <span class="Constant">&quot;F - <a href='513grapheme-stack.mu.html#L196'>test-render-grapheme-stack</a> from top without cursor: result&quot;</span>
<span id="L220" class="LineNr">220 </span> <a href='504test-screen.mu.html#L257'>check-background-color-in-screen-row</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">3</span>/bg=reverse, <span class="Constant">1</span>/y, <span class="Constant">&quot; &quot;</span>, <span class="Constant">&quot;F - <a href='513grapheme-stack.mu.html#L196'>test-render-grapheme-stack</a> from top without cursor: bg&quot;</span>
<span id="L221" class="LineNr">221 </span> <span class="muComment">#</span>
<span id="L222" class="LineNr">222 </span> <span class="PreProc">var</span> x/eax: int <span class="Special">&lt;-</span> <a href='513grapheme-stack.mu.html#L184'>render-stack-from-top</a> <a href='500fake-screen.mu.html#L14'>screen</a>, gs, <span class="Constant">0</span>/x, <span class="Constant">2</span>/y, <span class="Constant">1</span>/cursor=true
<span id="L223" class="LineNr">223 </span> <a href='504test-screen.mu.html#L7'>check-screen-row</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">2</span>/y, <span class="Constant">&quot;cba &quot;</span>, <span class="Constant">&quot;F - <a href='513grapheme-stack.mu.html#L196'>test-render-grapheme-stack</a> from top with cursor&quot;</span>
<span id="L224" class="LineNr">224 </span> <a href='502test.mu.html#L2'>check-ints-equal</a> x, <span class="Constant">3</span>, <span class="Constant">&quot;F - <a href='513grapheme-stack.mu.html#L196'>test-render-grapheme-stack</a> from top with cursor: result&quot;</span>
<span id="L225" class="LineNr">225 </span> <a href='504test-screen.mu.html#L257'>check-background-color-in-screen-row</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">3</span>/bg=reverse, <span class="Constant">2</span>/y, <span class="Constant">&quot;| &quot;</span>, <span class="Constant">&quot;F - <a href='513grapheme-stack.mu.html#L196'>test-render-grapheme-stack</a> from top with cursor: bg&quot;</span>
<span id="L226" class="LineNr">226 </span><span class="Delimiter">}</span>
<span id="L227" class="LineNr">227 </span>
<span id="L228" class="LineNr">228 </span><span class="PreProc">fn</span> <span class="muTest"><a href='513grapheme-stack.mu.html#L228'>test-render-grapheme-stack-while-highlighting-matching-close-paren</a></span> <span class="Delimiter">{</span>
<span id="L229" class="LineNr">229 </span> <span class="muComment"># setup: gs = &quot;(b)&quot;</span>
<span id="L230" class="LineNr">230 </span> <span class="PreProc">var</span> gs-storage: <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>
<span id="L231" class="LineNr">231 </span> <span class="PreProc">var</span> gs/<span class="muRegEdi">edi</span>: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>) <span class="Special">&lt;-</span> address gs-storage
<span id="L232" class="LineNr">232 </span> <a href='513grapheme-stack.mu.html#L8'>initialize-grapheme-stack</a> gs, <span class="Constant">5</span>
<span id="L233" class="LineNr">233 </span> <span class="PreProc">var</span> g/eax: grapheme <span class="Special">&lt;-</span> copy <span class="Constant">0x29</span>/close-paren
<span id="L234" class="LineNr">234 </span> <a href='513grapheme-stack.mu.html#L39'>push-grapheme-stack</a> gs, g
<span id="L235" class="LineNr">235 </span> g <span class="Special">&lt;-</span> copy <span class="Constant">0x62</span>/b
<span id="L236" class="LineNr">236 </span> <a href='513grapheme-stack.mu.html#L39'>push-grapheme-stack</a> gs, g
<span id="L237" class="LineNr">237 </span> g <span class="Special">&lt;-</span> copy <span class="Constant">0x28</span>/open-paren
<span id="L238" class="LineNr">238 </span> <a href='513grapheme-stack.mu.html#L39'>push-grapheme-stack</a> gs, g
<span id="L239" class="LineNr">239 </span> <span class="muComment"># setup: screen</span>
<span id="L240" class="LineNr">240 </span> <span class="PreProc">var</span> screen-on-stack: <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L241" class="LineNr">241 </span> <span class="PreProc">var</span> <a href='500fake-screen.mu.html#L14'>screen</a>/<span class="muRegEsi">esi</span>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>) <span class="Special">&lt;-</span> address screen-on-stack
<span id="L242" class="LineNr">242 </span> <a href='500fake-screen.mu.html#L33'>initialize-screen</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">5</span>, <span class="Constant">4</span>, <span class="Constant">0</span>/no-pixel-graphics
<span id="L243" class="LineNr">243 </span> <span class="muComment">#</span>
<span id="L244" class="LineNr">244 </span> <span class="PreProc">var</span> x/eax: int <span class="Special">&lt;-</span> <a href='513grapheme-stack.mu.html#L184'>render-stack-from-top</a> <a href='500fake-screen.mu.html#L14'>screen</a>, gs, <span class="Constant">0</span>/x, <span class="Constant">2</span>/y, <span class="Constant">1</span>/cursor=true
<span id="L245" class="LineNr">245 </span> <a href='504test-screen.mu.html#L7'>check-screen-row</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">2</span>/y, <span class="Constant">&quot;(b) &quot;</span>, <span class="Constant">&quot;F - test-render-grapheme-stack-while-highlighting-matching-close-paren&quot;</span>
<span id="L246" class="LineNr">246 </span> <a href='504test-screen.mu.html#L257'>check-background-color-in-screen-row</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">3</span>/bg=reverse, <span class="Constant">2</span>/y, <span class="Constant">&quot;| &quot;</span>, <span class="Constant">&quot;F - <a href='513grapheme-stack.mu.html#L228'>test-render-grapheme-stack-while-highlighting-matching-close-paren</a>: cursor&quot;</span>
<span id="L247" class="LineNr">247 </span> <a href='504test-screen.mu.html#L71'>check-screen-row-in-color</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">0xf</span>/fg=white, <span class="Constant">2</span>/y, <span class="Constant">&quot; ) &quot;</span>, <span class="Constant">&quot;F - <a href='513grapheme-stack.mu.html#L228'>test-render-grapheme-stack-while-highlighting-matching-close-paren</a>: matching paren&quot;</span>
<span id="L248" class="LineNr">248 </span><span class="Delimiter">}</span>
<span id="L249" class="LineNr">249 </span>
<span id="L250" class="LineNr">250 </span><span class="PreProc">fn</span> <span class="muTest"><a href='513grapheme-stack.mu.html#L250'>test-render-grapheme-stack-while-highlighting-matching-close-paren-2</a></span> <span class="Delimiter">{</span>
<span id="L251" class="LineNr">251 </span> <span class="muComment"># setup: gs = &quot;(a (b)) c&quot;</span>
<span id="L252" class="LineNr">252 </span> <span class="PreProc">var</span> gs-storage: <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>
<span id="L253" class="LineNr">253 </span> <span class="PreProc">var</span> gs/<span class="muRegEdi">edi</span>: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>) <span class="Special">&lt;-</span> address gs-storage
<span id="L254" class="LineNr">254 </span> <a href='513grapheme-stack.mu.html#L8'>initialize-grapheme-stack</a> gs, <span class="Constant">0x10</span>
<span id="L255" class="LineNr">255 </span> <span class="PreProc">var</span> g/eax: grapheme <span class="Special">&lt;-</span> copy <span class="Constant">0x63</span>/c
<span id="L256" class="LineNr">256 </span> <a href='513grapheme-stack.mu.html#L39'>push-grapheme-stack</a> gs, g
<span id="L257" class="LineNr">257 </span> g <span class="Special">&lt;-</span> copy <span class="Constant">0x20</span>/space
<span id="L258" class="LineNr">258 </span> <a href='513grapheme-stack.mu.html#L39'>push-grapheme-stack</a> gs, g
<span id="L259" class="LineNr">259 </span> g <span class="Special">&lt;-</span> copy <span class="Constant">0x29</span>/close-paren
<span id="L260" class="LineNr">260 </span> <a href='513grapheme-stack.mu.html#L39'>push-grapheme-stack</a> gs, g
<span id="L261" class="LineNr">261 </span> g <span class="Special">&lt;-</span> copy <span class="Constant">0x29</span>/close-paren
<span id="L262" class="LineNr">262 </span> <a href='513grapheme-stack.mu.html#L39'>push-grapheme-stack</a> gs, g
<span id="L263" class="LineNr">263 </span> g <span class="Special">&lt;-</span> copy <span class="Constant">0x62</span>/b
<span id="L264" class="LineNr">264 </span> <a href='513grapheme-stack.mu.html#L39'>push-grapheme-stack</a> gs, g
<span id="L265" class="LineNr">265 </span> g <span class="Special">&lt;-</span> copy <span class="Constant">0x28</span>/open-paren
<span id="L266" class="LineNr">266 </span> <a href='513grapheme-stack.mu.html#L39'>push-grapheme-stack</a> gs, g
<span id="L267" class="LineNr">267 </span> g <span class="Special">&lt;-</span> copy <span class="Constant">0x20</span>/space
<span id="L268" class="LineNr">268 </span> <a href='513grapheme-stack.mu.html#L39'>push-grapheme-stack</a> gs, g
<span id="L269" class="LineNr">269 </span> g <span class="Special">&lt;-</span> copy <span class="Constant">0x61</span>/a
<span id="L270" class="LineNr">270 </span> <a href='513grapheme-stack.mu.html#L39'>push-grapheme-stack</a> gs, g
<span id="L271" class="LineNr">271 </span> g <span class="Special">&lt;-</span> copy <span class="Constant">0x28</span>/open-paren
<span id="L272" class="LineNr">272 </span> <a href='513grapheme-stack.mu.html#L39'>push-grapheme-stack</a> gs, g
<span id="L273" class="LineNr">273 </span> <span class="muComment"># setup: screen</span>
<span id="L274" class="LineNr">274 </span> <span class="PreProc">var</span> screen-on-stack: <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L275" class="LineNr">275 </span> <span class="PreProc">var</span> <a href='500fake-screen.mu.html#L14'>screen</a>/<span class="muRegEsi">esi</span>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>) <span class="Special">&lt;-</span> address screen-on-stack
<span id="L276" class="LineNr">276 </span> <a href='500fake-screen.mu.html#L33'>initialize-screen</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">5</span>, <span class="Constant">4</span>, <span class="Constant">0</span>/no-pixel-graphics
<span id="L277" class="LineNr">277 </span> <span class="muComment">#</span>
<span id="L278" class="LineNr">278 </span> <span class="PreProc">var</span> x/eax: int <span class="Special">&lt;-</span> <a href='513grapheme-stack.mu.html#L184'>render-stack-from-top</a> <a href='500fake-screen.mu.html#L14'>screen</a>, gs, <span class="Constant">0</span>/x, <span class="Constant">2</span>/y, <span class="Constant">1</span>/cursor=true
<span id="L279" class="LineNr">279 </span> <a href='504test-screen.mu.html#L7'>check-screen-row</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">2</span>/y, <span class="Constant">&quot;(a (b)) c &quot;</span>, <span class="Constant">&quot;F - test-render-grapheme-stack-while-highlighting-matching-close-paren-2&quot;</span>
<span id="L280" class="LineNr">280 </span> <a href='504test-screen.mu.html#L257'>check-background-color-in-screen-row</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">3</span>/bg=reverse, <span class="Constant">2</span>/y, <span class="Constant">&quot;| &quot;</span>, <span class="Constant">&quot;F - <a href='513grapheme-stack.mu.html#L250'>test-render-grapheme-stack-while-highlighting-matching-close-paren-2</a>: cursor&quot;</span>
<span id="L281" class="LineNr">281 </span> <a href='504test-screen.mu.html#L71'>check-screen-row-in-color</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">0xf</span>/fg=white, <span class="Constant">2</span>/y, <span class="Constant">&quot; ) &quot;</span>, <span class="Constant">&quot;F - <a href='513grapheme-stack.mu.html#L250'>test-render-grapheme-stack-while-highlighting-matching-close-paren-2</a>: matching paren&quot;</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="PreProc">fn</span> <span class="muTest"><a href='513grapheme-stack.mu.html#L284'>test-render-grapheme-stack-while-highlighting-matching-open-paren-with-close-paren-at-end</a></span> <span class="Delimiter">{</span>
<span id="L285" class="LineNr">285 </span> <span class="muComment"># setup: gs = &quot;(b)&quot;</span>
<span id="L286" class="LineNr">286 </span> <span class="PreProc">var</span> gs-storage: <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>
<span id="L287" class="LineNr">287 </span> <span class="PreProc">var</span> gs/<span class="muRegEdi">edi</span>: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>) <span class="Special">&lt;-</span> address gs-storage
<span id="L288" class="LineNr">288 </span> <a href='513grapheme-stack.mu.html#L8'>initialize-grapheme-stack</a> gs, <span class="Constant">5</span>
<span id="L289" class="LineNr">289 </span> <span class="PreProc">var</span> g/eax: grapheme <span class="Special">&lt;-</span> copy <span class="Constant">0x28</span>/open-paren
<span id="L290" class="LineNr">290 </span> <a href='513grapheme-stack.mu.html#L39'>push-grapheme-stack</a> gs, g
<span id="L291" class="LineNr">291 </span> g <span class="Special">&lt;-</span> copy <span class="Constant">0x62</span>/b
<span id="L292" class="LineNr">292 </span> <a href='513grapheme-stack.mu.html#L39'>push-grapheme-stack</a> gs, g
<span id="L293" class="LineNr">293 </span> g <span class="Special">&lt;-</span> copy <span class="Constant">0x29</span>/close-paren
<span id="L294" class="LineNr">294 </span> <a href='513grapheme-stack.mu.html#L39'>push-grapheme-stack</a> gs, g
<span id="L295" class="LineNr">295 </span> <span class="muComment"># setup: screen</span>
<span id="L296" class="LineNr">296 </span> <span class="PreProc">var</span> screen-on-stack: <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L297" class="LineNr">297 </span> <span class="PreProc">var</span> <a href='500fake-screen.mu.html#L14'>screen</a>/<span class="muRegEsi">esi</span>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>) <span class="Special">&lt;-</span> address screen-on-stack
<span id="L298" class="LineNr">298 </span> <a href='500fake-screen.mu.html#L33'>initialize-screen</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">5</span>, <span class="Constant">4</span>, <span class="Constant">0</span>/no-pixel-graphics
<span id="L299" class="LineNr">299 </span> <span class="muComment">#</span>
<span id="L300" class="LineNr">300 </span> <span class="PreProc">var</span> x/eax: int <span class="Special">&lt;-</span> <a href='513grapheme-stack.mu.html#L121'>render-stack-from-bottom</a> <a href='500fake-screen.mu.html#L14'>screen</a>, gs, <span class="Constant">0</span>/x, <span class="Constant">2</span>/y, <span class="Constant">1</span>/highlight-matching-open-paren, <span class="Constant">1</span>/open-paren-depth
<span id="L301" class="LineNr">301 </span> <a href='504test-screen.mu.html#L7'>check-screen-row</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">2</span>/y, <span class="Constant">&quot;(b) &quot;</span>, <span class="Constant">&quot;F - test-render-grapheme-stack-while-highlighting-matching-open-paren-with-close-paren-at-end&quot;</span>
<span id="L302" class="LineNr">302 </span> <a href='504test-screen.mu.html#L71'>check-screen-row-in-color</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">0xf</span>/fg=white, <span class="Constant">2</span>/y, <span class="Constant">&quot;( &quot;</span>, <span class="Constant">&quot;F - <a href='513grapheme-stack.mu.html#L284'>test-render-grapheme-stack-while-highlighting-matching-open-paren-with-close-paren-at-end</a>: matching paren&quot;</span>
<span id="L303" class="LineNr">303 </span><span class="Delimiter">}</span>
<span id="L304" class="LineNr">304 </span>
<span id="L305" class="LineNr">305 </span><span class="PreProc">fn</span> <span class="muTest"><a href='513grapheme-stack.mu.html#L305'>test-render-grapheme-stack-while-highlighting-matching-open-paren-with-close-paren-at-end-2</a></span> <span class="Delimiter">{</span>
<span id="L306" class="LineNr">306 </span> <span class="muComment"># setup: gs = &quot;a((b))&quot;</span>
<span id="L307" class="LineNr">307 </span> <span class="PreProc">var</span> gs-storage: <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>
<span id="L308" class="LineNr">308 </span> <span class="PreProc">var</span> gs/<span class="muRegEdi">edi</span>: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>) <span class="Special">&lt;-</span> address gs-storage
<span id="L309" class="LineNr">309 </span> <a href='513grapheme-stack.mu.html#L8'>initialize-grapheme-stack</a> gs, <span class="Constant">0x10</span>
<span id="L310" class="LineNr">310 </span> <span class="PreProc">var</span> g/eax: grapheme <span class="Special">&lt;-</span> copy <span class="Constant">0x61</span>/a
<span id="L311" class="LineNr">311 </span> <a href='513grapheme-stack.mu.html#L39'>push-grapheme-stack</a> gs, g
<span id="L312" class="LineNr">312 </span> g <span class="Special">&lt;-</span> copy <span class="Constant">0x28</span>/open-paren
<span id="L313" class="LineNr">313 </span> <a href='513grapheme-stack.mu.html#L39'>push-grapheme-stack</a> gs, g
<span id="L314" class="LineNr">314 </span> g <span class="Special">&lt;-</span> copy <span class="Constant">0x28</span>/open-paren
<span id="L315" class="LineNr">315 </span> <a href='513grapheme-stack.mu.html#L39'>push-grapheme-stack</a> gs, g
<span id="L316" class="LineNr">316 </span> g <span class="Special">&lt;-</span> copy <span class="Constant">0x62</span>/b
<span id="L317" class="LineNr">317 </span> <a href='513grapheme-stack.mu.html#L39'>push-grapheme-stack</a> gs, g
<span id="L318" class="LineNr">318 </span> g <span class="Special">&lt;-</span> copy <span class="Constant">0x29</span>/close-paren
<span id="L319" class="LineNr">319 </span> <a href='513grapheme-stack.mu.html#L39'>push-grapheme-stack</a> gs, g
<span id="L320" class="LineNr">320 </span> g <span class="Special">&lt;-</span> copy <span class="Constant">0x29</span>/close-paren
<span id="L321" class="LineNr">321 </span> <a href='513grapheme-stack.mu.html#L39'>push-grapheme-stack</a> gs, g
<span id="L322" class="LineNr">322 </span> <span class="muComment"># setup: screen</span>
<span id="L323" class="LineNr">323 </span> <span class="PreProc">var</span> screen-on-stack: <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L324" class="LineNr">324 </span> <span class="PreProc">var</span> <a href='500fake-screen.mu.html#L14'>screen</a>/<span class="muRegEsi">esi</span>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>) <span class="Special">&lt;-</span> address screen-on-stack
<span id="L325" class="LineNr">325 </span> <a href='500fake-screen.mu.html#L33'>initialize-screen</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">5</span>, <span class="Constant">4</span>, <span class="Constant">0</span>/no-pixel-graphics
<span id="L326" class="LineNr">326 </span> <span class="muComment">#</span>
<span id="L327" class="LineNr">327 </span> <span class="PreProc">var</span> x/eax: int <span class="Special">&lt;-</span> <a href='513grapheme-stack.mu.html#L121'>render-stack-from-bottom</a> <a href='500fake-screen.mu.html#L14'>screen</a>, gs, <span class="Constant">0</span>/x, <span class="Constant">2</span>/y, <span class="Constant">1</span>/highlight-matching-open-paren, <span class="Constant">1</span>/open-paren-depth
<span id="L328" class="LineNr">328 </span> <a href='504test-screen.mu.html#L7'>check-screen-row</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">2</span>/y, <span class="Constant">&quot;a((b)) &quot;</span>, <span class="Constant">&quot;F - test-render-grapheme-stack-while-highlighting-matching-open-paren-with-close-paren-at-end-2&quot;</span>
<span id="L329" class="LineNr">329 </span> <a href='504test-screen.mu.html#L71'>check-screen-row-in-color</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">0xf</span>/fg=white, <span class="Constant">2</span>/y, <span class="Constant">&quot; ( &quot;</span>, <span class="Constant">&quot;F - <a href='513grapheme-stack.mu.html#L305'>test-render-grapheme-stack-while-highlighting-matching-open-paren-with-close-paren-at-end-2</a>: matching paren&quot;</span>
<span id="L330" class="LineNr">330 </span><span class="Delimiter">}</span>
<span id="L331" class="LineNr">331 </span>
<span id="L332" class="LineNr">332 </span><span class="PreProc">fn</span> <span class="muTest"><a href='513grapheme-stack.mu.html#L332'>test-render-grapheme-stack-while-highlighting-matching-open-paren</a></span> <span class="Delimiter">{</span>
<span id="L333" class="LineNr">333 </span> <span class="muComment"># setup: gs = &quot;(b&quot;</span>
<span id="L334" class="LineNr">334 </span> <span class="PreProc">var</span> gs-storage: <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>
<span id="L335" class="LineNr">335 </span> <span class="PreProc">var</span> gs/<span class="muRegEdi">edi</span>: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>) <span class="Special">&lt;-</span> address gs-storage
<span id="L336" class="LineNr">336 </span> <a href='513grapheme-stack.mu.html#L8'>initialize-grapheme-stack</a> gs, <span class="Constant">5</span>
<span id="L337" class="LineNr">337 </span> <span class="PreProc">var</span> g/eax: grapheme <span class="Special">&lt;-</span> copy <span class="Constant">0x28</span>/open-paren
<span id="L338" class="LineNr">338 </span> <a href='513grapheme-stack.mu.html#L39'>push-grapheme-stack</a> gs, g
<span id="L339" class="LineNr">339 </span> g <span class="Special">&lt;-</span> copy <span class="Constant">0x62</span>/b
<span id="L340" class="LineNr">340 </span> <a href='513grapheme-stack.mu.html#L39'>push-grapheme-stack</a> gs, g
<span id="L341" class="LineNr">341 </span> <span class="muComment"># setup: screen</span>
<span id="L342" class="LineNr">342 </span> <span class="PreProc">var</span> screen-on-stack: <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L343" class="LineNr">343 </span> <span class="PreProc">var</span> <a href='500fake-screen.mu.html#L14'>screen</a>/<span class="muRegEsi">esi</span>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>) <span class="Special">&lt;-</span> address screen-on-stack
<span id="L344" class="LineNr">344 </span> <a href='500fake-screen.mu.html#L33'>initialize-screen</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">5</span>, <span class="Constant">4</span>, <span class="Constant">0</span>/no-pixel-graphics
<span id="L345" class="LineNr">345 </span> <span class="muComment">#</span>
<span id="L346" class="LineNr">346 </span> <span class="PreProc">var</span> x/eax: int <span class="Special">&lt;-</span> <a href='513grapheme-stack.mu.html#L121'>render-stack-from-bottom</a> <a href='500fake-screen.mu.html#L14'>screen</a>, gs, <span class="Constant">0</span>/x, <span class="Constant">2</span>/y, <span class="Constant">1</span>/highlight-matching-open-paren, <span class="Constant">0</span>/open-paren-depth
<span id="L347" class="LineNr">347 </span> <a href='504test-screen.mu.html#L7'>check-screen-row</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">2</span>/y, <span class="Constant">&quot;(b &quot;</span>, <span class="Constant">&quot;F - test-render-grapheme-stack-while-highlighting-matching-open-paren&quot;</span>
<span id="L348" class="LineNr">348 </span> <a href='504test-screen.mu.html#L71'>check-screen-row-in-color</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">0xf</span>/fg=white, <span class="Constant">2</span>/y, <span class="Constant">&quot;( &quot;</span>, <span class="Constant">&quot;F - <a href='513grapheme-stack.mu.html#L332'>test-render-grapheme-stack-while-highlighting-matching-open-paren</a>: matching paren&quot;</span>
<span id="L349" class="LineNr">349 </span><span class="Delimiter">}</span>
<span id="L350" class="LineNr">350 </span>
<span id="L351" class="LineNr">351 </span><span class="PreProc">fn</span> <span class="muTest"><a href='513grapheme-stack.mu.html#L351'>test-render-grapheme-stack-while-highlighting-matching-open-paren-2</a></span> <span class="Delimiter">{</span>
<span id="L352" class="LineNr">352 </span> <span class="muComment"># setup: gs = &quot;a((b)&quot;</span>
<span id="L353" class="LineNr">353 </span> <span class="PreProc">var</span> gs-storage: <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>
<span id="L354" class="LineNr">354 </span> <span class="PreProc">var</span> gs/<span class="muRegEdi">edi</span>: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>) <span class="Special">&lt;-</span> address gs-storage
<span id="L355" class="LineNr">355 </span> <a href='513grapheme-stack.mu.html#L8'>initialize-grapheme-stack</a> gs, <span class="Constant">0x10</span>
<span id="L356" class="LineNr">356 </span> <span class="PreProc">var</span> g/eax: grapheme <span class="Special">&lt;-</span> copy <span class="Constant">0x61</span>/a
<span id="L357" class="LineNr">357 </span> <a href='513grapheme-stack.mu.html#L39'>push-grapheme-stack</a> gs, g
<span id="L358" class="LineNr">358 </span> g <span class="Special">&lt;-</span> copy <span class="Constant">0x28</span>/open-paren
<span id="L359" class="LineNr">359 </span> <a href='513grapheme-stack.mu.html#L39'>push-grapheme-stack</a> gs, g
<span id="L360" class="LineNr">360 </span> g <span class="Special">&lt;-</span> copy <span class="Constant">0x28</span>/open-paren
<span id="L361" class="LineNr">361 </span> <a href='513grapheme-stack.mu.html#L39'>push-grapheme-stack</a> gs, g
<span id="L362" class="LineNr">362 </span> g <span class="Special">&lt;-</span> copy <span class="Constant">0x62</span>/b
<span id="L363" class="LineNr">363 </span> <a href='513grapheme-stack.mu.html#L39'>push-grapheme-stack</a> gs, g
<span id="L364" class="LineNr">364 </span> g <span class="Special">&lt;-</span> copy <span class="Constant">0x29</span>/close-paren
<span id="L365" class="LineNr">365 </span> <a href='513grapheme-stack.mu.html#L39'>push-grapheme-stack</a> gs, g
<span id="L366" class="LineNr">366 </span> <span class="muComment"># setup: screen</span>
<span id="L367" class="LineNr">367 </span> <span class="PreProc">var</span> screen-on-stack: <a href='500fake-screen.mu.html#L14'>screen</a>
<span id="L368" class="LineNr">368 </span> <span class="PreProc">var</span> <a href='500fake-screen.mu.html#L14'>screen</a>/<span class="muRegEsi">esi</span>: (addr <a href='500fake-screen.mu.html#L14'>screen</a>) <span class="Special">&lt;-</span> address screen-on-stack
<span id="L369" class="LineNr">369 </span> <a href='500fake-screen.mu.html#L33'>initialize-screen</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">5</span>, <span class="Constant">4</span>, <span class="Constant">0</span>/no-pixel-graphics
<span id="L370" class="LineNr">370 </span> <span class="muComment">#</span>
<span id="L371" class="LineNr">371 </span> <span class="PreProc">var</span> x/eax: int <span class="Special">&lt;-</span> <a href='513grapheme-stack.mu.html#L121'>render-stack-from-bottom</a> <a href='500fake-screen.mu.html#L14'>screen</a>, gs, <span class="Constant">0</span>/x, <span class="Constant">2</span>/y, <span class="Constant">1</span>/highlight-matching-open-paren, <span class="Constant">0</span>/open-paren-depth
<span id="L372" class="LineNr">372 </span> <a href='504test-screen.mu.html#L7'>check-screen-row</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">2</span>/y, <span class="Constant">&quot;a((b) &quot;</span>, <span class="Constant">&quot;F - test-render-grapheme-stack-while-highlighting-matching-open-paren-2&quot;</span>
<span id="L373" class="LineNr">373 </span> <a href='504test-screen.mu.html#L71'>check-screen-row-in-color</a> <a href='500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">0xf</span>/fg=white, <span class="Constant">2</span>/y, <span class="Constant">&quot; ( &quot;</span>, <span class="Constant">&quot;F - <a href='513grapheme-stack.mu.html#L351'>test-render-grapheme-stack-while-highlighting-matching-open-paren-2</a>: matching paren&quot;</span>
<span id="L374" class="LineNr">374 </span><span class="Delimiter">}</span>
<span id="L375" class="LineNr">375 </span>
<span id="L376" class="LineNr">376 </span><span class="muComment"># return the index of the matching close-paren of the grapheme at cursor (top of stack)</span>
<span id="L377" class="LineNr">377 </span><span class="muComment"># or top index if there's no matching close-paren</span>
<span id="L378" class="LineNr">378 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='513grapheme-stack.mu.html#L378'>get-matching-close-paren-index</a></span> _self: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>), render-cursor?: boolean<span class="PreProc"> -&gt; </span>_/<span class="muRegEdx">edx</span>: int <span class="Delimiter">{</span>
<span id="L379" class="LineNr">379 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>) <span class="Special">&lt;-</span> copy _self
<span id="L380" class="LineNr">380 </span> <span class="PreProc">var</span> top-addr/<span class="muRegEdx">edx</span>: (addr int) <span class="Special">&lt;-</span> get self, top
<span id="L381" class="LineNr">381 </span> <span class="muComment"># if not rendering cursor, return</span>
<span id="L382" class="LineNr">382 </span> compare render-cursor?, <span class="Constant">0</span>/false
<span id="L383" class="LineNr">383 </span> <span class="Delimiter">{</span>
<span id="L384" class="LineNr">384 </span> <span class="PreProc">break-if-!=</span>
<span id="L385" class="LineNr">385 </span> <span class="PreProc">return</span> *top-addr
<span id="L386" class="LineNr">386 </span> <span class="Delimiter">}</span>
<span id="L387" class="LineNr">387 </span> <span class="PreProc">var</span> data-ah/eax: (addr handle array grapheme) <span class="Special">&lt;-</span> get self, data
<span id="L388" class="LineNr">388 </span> <span class="PreProc">var</span> data/eax: (addr array grapheme) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L235'>lookup</a> *data-ah
<span id="L389" class="LineNr">389 </span> <span class="PreProc">var</span> i/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy *top-addr
<span id="L390" class="LineNr">390 </span> <span class="muComment"># if stack is empty, return</span>
<span id="L391" class="LineNr">391 </span> compare i, <span class="Constant">0</span>
<span id="L392" class="LineNr">392 </span> <span class="Delimiter">{</span>
<span id="L393" class="LineNr">393 </span> <span class="PreProc">break-if-&gt;</span>
<span id="L394" class="LineNr">394 </span> <span class="PreProc">return</span> *top-addr
<span id="L395" class="LineNr">395 </span> <span class="Delimiter">}</span>
<span id="L396" class="LineNr">396 </span> <span class="muComment"># if cursor is not '(' return</span>
<span id="L397" class="LineNr">397 </span> i <span class="Special">&lt;-</span> decrement
<span id="L398" class="LineNr">398 </span> <span class="PreProc">var</span> g/<span class="muRegEsi">esi</span>: (addr grapheme) <span class="Special">&lt;-</span> index data, i
<span id="L399" class="LineNr">399 </span> compare *g, <span class="Constant">0x28</span>/open-paren
<span id="L400" class="LineNr">400 </span> <span class="Delimiter">{</span>
<span id="L401" class="LineNr">401 </span> <span class="PreProc">break-if-=</span>
<span id="L402" class="LineNr">402 </span> <span class="PreProc">return</span> *top-addr
<span id="L403" class="LineNr">403 </span> <span class="Delimiter">}</span>
<span id="L404" class="LineNr">404 </span> <span class="muComment"># otherwise scan to matching paren</span>
<span id="L405" class="LineNr">405 </span> <span class="PreProc">var</span> paren-count/<span class="muRegEbx">ebx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">1</span>
<span id="L406" class="LineNr">406 </span> i <span class="Special">&lt;-</span> decrement
<span id="L407" class="LineNr">407 </span> <span class="Delimiter">{</span>
<span id="L408" class="LineNr">408 </span> compare i, <span class="Constant">0</span>
<span id="L409" class="LineNr">409 </span> <span class="PreProc">break-if-&lt;</span>
<span id="L410" class="LineNr">410 </span> <span class="PreProc">var</span> g/<span class="muRegEsi">esi</span>: (addr grapheme) <span class="Special">&lt;-</span> index data, i
<span id="L411" class="LineNr">411 </span> compare *g, <span class="Constant">0x28</span>/open-paren
<span id="L412" class="LineNr">412 </span> <span class="Delimiter">{</span>
<span id="L413" class="LineNr">413 </span> <span class="PreProc">break-if-!=</span>
<span id="L414" class="LineNr">414 </span> paren-count <span class="Special">&lt;-</span> increment
<span id="L415" class="LineNr">415 </span> <span class="Delimiter">}</span>
<span id="L416" class="LineNr">416 </span> compare *g, <span class="Constant">0x29</span>/close-paren
<span id="L417" class="LineNr">417 </span> <span class="Delimiter">{</span>
<span id="L418" class="LineNr">418 </span> <span class="PreProc">break-if-!=</span>
<span id="L419" class="LineNr">419 </span> compare paren-count, <span class="Constant">1</span>
<span id="L420" class="LineNr">420 </span> <span class="Delimiter">{</span>
<span id="L421" class="LineNr">421 </span> <span class="PreProc">break-if-!=</span>
<span id="L422" class="LineNr">422 </span> <span class="PreProc">return</span> i
<span id="L423" class="LineNr">423 </span> <span class="Delimiter">}</span>
<span id="L424" class="LineNr">424 </span> paren-count <span class="Special">&lt;-</span> decrement
<span id="L425" class="LineNr">425 </span> <span class="Delimiter">}</span>
<span id="L426" class="LineNr">426 </span> i <span class="Special">&lt;-</span> decrement
<span id="L427" class="LineNr">427 </span> <span class="PreProc">loop</span>
<span id="L428" class="LineNr">428 </span> <span class="Delimiter">}</span>
<span id="L429" class="LineNr">429 </span> <span class="PreProc">return</span> *top-addr
<span id="L430" class="LineNr">430 </span><span class="Delimiter">}</span>
<span id="L431" class="LineNr">431 </span>
<span id="L432" class="LineNr">432 </span><span class="muComment"># return the index of the first open-paren at the given depth</span>
<span id="L433" class="LineNr">433 </span><span class="muComment"># or top index if there's no matching close-paren</span>
<span id="L434" class="LineNr">434 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='513grapheme-stack.mu.html#L434'>get-matching-open-paren-index</a></span> _self: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>), control: boolean, depth: int<span class="PreProc"> -&gt; </span>_/<span class="muRegEdx">edx</span>: int <span class="Delimiter">{</span>
<span id="L435" class="LineNr">435 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>) <span class="Special">&lt;-</span> copy _self
<span id="L436" class="LineNr">436 </span> <span class="PreProc">var</span> top-addr/<span class="muRegEdx">edx</span>: (addr int) <span class="Special">&lt;-</span> get self, top
<span id="L437" class="LineNr">437 </span> <span class="muComment"># if not rendering cursor, return</span>
<span id="L438" class="LineNr">438 </span> compare control, <span class="Constant">0</span>/false
<span id="L439" class="LineNr">439 </span> <span class="Delimiter">{</span>
<span id="L440" class="LineNr">440 </span> <span class="PreProc">break-if-!=</span>
<span id="L441" class="LineNr">441 </span> <span class="PreProc">return</span> *top-addr
<span id="L442" class="LineNr">442 </span> <span class="Delimiter">}</span>
<span id="L443" class="LineNr">443 </span> <span class="PreProc">var</span> data-ah/eax: (addr handle array grapheme) <span class="Special">&lt;-</span> get self, data
<span id="L444" class="LineNr">444 </span> <span class="PreProc">var</span> data/eax: (addr array grapheme) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L235'>lookup</a> *data-ah
<span id="L445" class="LineNr">445 </span> <span class="PreProc">var</span> i/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy *top-addr
<span id="L446" class="LineNr">446 </span> <span class="muComment"># if stack is empty, return</span>
<span id="L447" class="LineNr">447 </span> compare i, <span class="Constant">0</span>
<span id="L448" class="LineNr">448 </span> <span class="Delimiter">{</span>
<span id="L449" class="LineNr">449 </span> <span class="PreProc">break-if-&gt;</span>
<span id="L450" class="LineNr">450 </span> <span class="PreProc">return</span> *top-addr
<span id="L451" class="LineNr">451 </span> <span class="Delimiter">}</span>
<span id="L452" class="LineNr">452 </span> <span class="muComment"># scan to matching open paren</span>
<span id="L453" class="LineNr">453 </span> <span class="PreProc">var</span> paren-count/<span class="muRegEbx">ebx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L454" class="LineNr">454 </span> i <span class="Special">&lt;-</span> decrement
<span id="L455" class="LineNr">455 </span> <span class="Delimiter">{</span>
<span id="L456" class="LineNr">456 </span> compare i, <span class="Constant">0</span>
<span id="L457" class="LineNr">457 </span> <span class="PreProc">break-if-&lt;</span>
<span id="L458" class="LineNr">458 </span> <span class="PreProc">var</span> g/<span class="muRegEsi">esi</span>: (addr grapheme) <span class="Special">&lt;-</span> index data, i
<span id="L459" class="LineNr">459 </span> compare *g, <span class="Constant">0x29</span>/close-paren
<span id="L460" class="LineNr">460 </span> <span class="Delimiter">{</span>
<span id="L461" class="LineNr">461 </span> <span class="PreProc">break-if-!=</span>
<span id="L462" class="LineNr">462 </span> paren-count <span class="Special">&lt;-</span> increment
<span id="L463" class="LineNr">463 </span> <span class="Delimiter">}</span>
<span id="L464" class="LineNr">464 </span> compare *g, <span class="Constant">0x28</span>/open-paren
<span id="L465" class="LineNr">465 </span> <span class="Delimiter">{</span>
<span id="L466" class="LineNr">466 </span> <span class="PreProc">break-if-!=</span>
<span id="L467" class="LineNr">467 </span> compare paren-count, depth
<span id="L468" class="LineNr">468 </span> <span class="Delimiter">{</span>
<span id="L469" class="LineNr">469 </span> <span class="PreProc">break-if-!=</span>
<span id="L470" class="LineNr">470 </span> <span class="PreProc">return</span> i
<span id="L471" class="LineNr">471 </span> <span class="Delimiter">}</span>
<span id="L472" class="LineNr">472 </span> paren-count <span class="Special">&lt;-</span> decrement
<span id="L473" class="LineNr">473 </span> <span class="Delimiter">}</span>
<span id="L474" class="LineNr">474 </span> i <span class="Special">&lt;-</span> decrement
<span id="L475" class="LineNr">475 </span> <span class="PreProc">loop</span>
<span id="L476" class="LineNr">476 </span> <span class="Delimiter">}</span>
<span id="L477" class="LineNr">477 </span> <span class="PreProc">return</span> *top-addr
<span id="L478" class="LineNr">478 </span><span class="Delimiter">}</span>
<span id="L479" class="LineNr">479 </span>
<span id="L480" class="LineNr">480 </span><span class="muComment"># compare from bottom</span>
<span id="L481" class="LineNr">481 </span><span class="muComment"># beware: modifies 'stream', which must be disposed of after a false result</span>
<span id="L482" class="LineNr">482 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='513grapheme-stack.mu.html#L482'>prefix-match?</a></span> _self: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>), s: (addr stream byte)<span class="PreProc"> -&gt; </span>_/eax: boolean <span class="Delimiter">{</span>
<span id="L483" class="LineNr">483 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>) <span class="Special">&lt;-</span> copy _self
<span id="L484" class="LineNr">484 </span> <span class="PreProc">var</span> data-ah/<span class="muRegEdi">edi</span>: (addr handle array grapheme) <span class="Special">&lt;-</span> get self, data
<span id="L485" class="LineNr">485 </span> <span class="PreProc">var</span> _data/eax: (addr array grapheme) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L235'>lookup</a> *data-ah
<span id="L486" class="LineNr">486 </span> <span class="PreProc">var</span> data/<span class="muRegEdi">edi</span>: (addr array grapheme) <span class="Special">&lt;-</span> copy _data
<span id="L487" class="LineNr">487 </span> <span class="PreProc">var</span> top-addr/<span class="muRegEcx">ecx</span>: (addr int) <span class="Special">&lt;-</span> get self, top
<span id="L488" class="LineNr">488 </span> <span class="PreProc">var</span> i/<span class="muRegEbx">ebx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L489" class="LineNr">489 </span> <span class="Delimiter">{</span>
<span id="L490" class="LineNr">490 </span> compare i, *top-addr
<span id="L491" class="LineNr">491 </span> <span class="PreProc">break-if-&gt;=</span>
<span id="L492" class="LineNr">492 </span> <span class="muComment"># if curr != expected, return false</span>
<span id="L493" class="LineNr">493 </span> <span class="Delimiter">{</span>
<span id="L494" class="LineNr">494 </span> <span class="PreProc">var</span> curr-a/<span class="muRegEdx">edx</span>: (addr grapheme) <span class="Special">&lt;-</span> index data, i
<span id="L495" class="LineNr">495 </span> <span class="PreProc">var</span> expected/eax: grapheme <span class="Special">&lt;-</span> <a href='403unicode.mu.html#L92'>read-grapheme</a> s
<span id="L496" class="LineNr">496 </span> <span class="Delimiter">{</span>
<span id="L497" class="LineNr">497 </span> compare expected, *curr-a
<span id="L498" class="LineNr">498 </span> <span class="PreProc">break-if-=</span>
<span id="L499" class="LineNr">499 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false
<span id="L500" class="LineNr">500 </span> <span class="Delimiter">}</span>
<span id="L501" class="LineNr">501 </span> <span class="Delimiter">}</span>
<span id="L502" class="LineNr">502 </span> i <span class="Special">&lt;-</span> increment
<span id="L503" class="LineNr">503 </span> <span class="PreProc">loop</span>
<span id="L504" class="LineNr">504 </span> <span class="Delimiter">}</span>
<span id="L505" class="LineNr">505 </span> <span class="PreProc">return</span> <span class="Constant">1</span> <span class="muComment"># true</span>
<span id="L506" class="LineNr">506 </span><span class="Delimiter">}</span>
<span id="L507" class="LineNr">507 </span>
<span id="L508" class="LineNr">508 </span><span class="muComment"># compare from bottom</span>
<span id="L509" class="LineNr">509 </span><span class="muComment"># beware: modifies 'stream', which must be disposed of after a false result</span>
<span id="L510" class="LineNr">510 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='513grapheme-stack.mu.html#L510'>suffix-match?</a></span> _self: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>), s: (addr stream byte)<span class="PreProc"> -&gt; </span>_/eax: boolean <span class="Delimiter">{</span>
<span id="L511" class="LineNr">511 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>) <span class="Special">&lt;-</span> copy _self
<span id="L512" class="LineNr">512 </span> <span class="PreProc">var</span> data-ah/<span class="muRegEdi">edi</span>: (addr handle array grapheme) <span class="Special">&lt;-</span> get self, data
<span id="L513" class="LineNr">513 </span> <span class="PreProc">var</span> _data/eax: (addr array grapheme) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L235'>lookup</a> *data-ah
<span id="L514" class="LineNr">514 </span> <span class="PreProc">var</span> data/<span class="muRegEdi">edi</span>: (addr array grapheme) <span class="Special">&lt;-</span> copy _data
<span id="L515" class="LineNr">515 </span> <span class="PreProc">var</span> top-addr/eax: (addr int) <span class="Special">&lt;-</span> get self, top
<span id="L516" class="LineNr">516 </span> <span class="PreProc">var</span> i/<span class="muRegEbx">ebx</span>: int <span class="Special">&lt;-</span> copy *top-addr
<span id="L517" class="LineNr">517 </span> i <span class="Special">&lt;-</span> decrement
<span id="L518" class="LineNr">518 </span> <span class="Delimiter">{</span>
<span id="L519" class="LineNr">519 </span> compare i, <span class="Constant">0</span>
<span id="L520" class="LineNr">520 </span> <span class="PreProc">break-if-&lt;</span>
<span id="L521" class="LineNr">521 </span> <span class="Delimiter">{</span>
<span id="L522" class="LineNr">522 </span> <span class="PreProc">var</span> curr-a/<span class="muRegEdx">edx</span>: (addr grapheme) <span class="Special">&lt;-</span> index data, i
<span id="L523" class="LineNr">523 </span> <span class="PreProc">var</span> expected/eax: grapheme <span class="Special">&lt;-</span> <a href='403unicode.mu.html#L92'>read-grapheme</a> s
<span id="L524" class="LineNr">524 </span> <span class="muComment"># if curr != expected, return false</span>
<span id="L525" class="LineNr">525 </span> <span class="Delimiter">{</span>
<span id="L526" class="LineNr">526 </span> compare expected, *curr-a
<span id="L527" class="LineNr">527 </span> <span class="PreProc">break-if-=</span>
<span id="L528" class="LineNr">528 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false
<span id="L529" class="LineNr">529 </span> <span class="Delimiter">}</span>
<span id="L530" class="LineNr">530 </span> <span class="Delimiter">}</span>
<span id="L531" class="LineNr">531 </span> i <span class="Special">&lt;-</span> decrement
<span id="L532" class="LineNr">532 </span> <span class="PreProc">loop</span>
<span id="L533" class="LineNr">533 </span> <span class="Delimiter">}</span>
<span id="L534" class="LineNr">534 </span> <span class="PreProc">return</span> <span class="Constant">1</span> <span class="muComment"># true</span>
<span id="L535" class="LineNr">535 </span><span class="Delimiter">}</span>
<span id="L536" class="LineNr">536 </span>
<span id="L537" class="LineNr">537 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='513grapheme-stack.mu.html#L537'>grapheme-stack-is-decimal-integer?</a></span> _self: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>)<span class="PreProc"> -&gt; </span>_/eax: boolean <span class="Delimiter">{</span>
<span id="L538" class="LineNr">538 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr <a href='513grapheme-stack.mu.html#L3'>grapheme-stack</a>) <span class="Special">&lt;-</span> copy _self
<span id="L539" class="LineNr">539 </span> <span class="PreProc">var</span> data-ah/eax: (addr handle array grapheme) <span class="Special">&lt;-</span> get self, data
<span id="L540" class="LineNr">540 </span> <span class="PreProc">var</span> _data/eax: (addr array grapheme) <span class="Special">&lt;-</span> <a href='120allocate.subx.html#L235'>lookup</a> *data-ah
<span id="L541" class="LineNr">541 </span> <span class="PreProc">var</span> data/<span class="muRegEdx">edx</span>: (addr array grapheme) <span class="Special">&lt;-</span> copy _data
<span id="L542" class="LineNr">542 </span> <span class="PreProc">var</span> top-addr/<span class="muRegEcx">ecx</span>: (addr int) <span class="Special">&lt;-</span> get self, top
<span id="L543" class="LineNr">543 </span> <span class="PreProc">var</span> i/<span class="muRegEbx">ebx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L544" class="LineNr">544 </span> <span class="PreProc">var</span> result/eax: boolean <span class="Special">&lt;-</span> copy <span class="Constant">1</span>/true
<span id="L545" class="LineNr">545 </span> $grapheme-stack-is-integer?:<span class="PreProc">loop</span>: <span class="Delimiter">{</span>
<span id="L546" class="LineNr">546 </span> compare i, *top-addr
<span id="L547" class="LineNr">547 </span> <span class="PreProc">break-if-&gt;=</span>
<span id="L548" class="LineNr">548 </span> <span class="PreProc">var</span> g/<span class="muRegEdx">edx</span>: (addr grapheme) <span class="Special">&lt;-</span> index data, i
<span id="L549" class="LineNr">549 </span> result <span class="Special">&lt;-</span> <a href='126write-int-decimal.subx.html#L327'>decimal-digit?</a> *g
<span id="L550" class="LineNr">550 </span> compare result, <span class="Constant">0</span>/false
<span id="L551" class="LineNr">551 </span> <span class="PreProc">break-if-=</span>
<span id="L552" class="LineNr">552 </span> i <span class="Special">&lt;-</span> increment
<span id="L553" class="LineNr">553 </span> <span class="PreProc">loop</span>
<span id="L554" class="LineNr">554 </span> <span class="Delimiter">}</span>
<span id="L555" class="LineNr">555 </span> <span class="PreProc">return</span> result
<span id="L556" class="LineNr">556 </span><span class="Delimiter">}</span>
</pre>
</body>
</html>
<!-- vim: set foldmethod=manual : -->

1538
html/514gap-buffer.mu.html generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,36 +1,35 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - apps/color-game.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.muRegEbx { color: #5f00ff; }
.muRegEcx { color: #870000; }
.muRegEdx { color: #af5f00; }
.Special { color: #ff6060; }
.LineNr { }
.muRegEsi { color: #005faf; }
.muRegEdi { color: #00af00; }
.muRegEbx { color: #5f00ff; }
.Constant { color: #008787; }
.muFunction { color: #af5f00; text-decoration: underline; }
.CommentedCode { color: #8a8a8a; }
.muRegEdi { color: #00af00; }
.muRegEcx { color: #870000; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

View File

@ -1,35 +1,35 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - apps/colors.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.muRegEbx { color: #5f00ff; }
.muRegEcx { color: #870000; }
.muRegEdx { color: #af5f00; }
.Special { color: #ff6060; }
.LineNr { }
.muRegEsi { color: #005faf; }
.muRegEbx { color: #5f00ff; }
.Constant { color: #008787; }
.muRegEcx { color: #870000; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.CommentedCode { color: #8a8a8a; }
.Delimiter { color: #c000c0; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -114,10 +114,10 @@ if ('onhashchange' in window) {
<span id="L51" class="LineNr"> 51 </span> <span class="muComment"># another metric</span>
<span id="L52" class="LineNr"> 52 </span> <span class="PreProc">var</span> color/eax: int <span class="Special">&lt;-</span> <a href='../505colors.mu.html#L260'>nearest-color-euclidean-hsl</a> a, b, c
<span id="L53" class="LineNr"> 53 </span> <a href='../500fake-screen.mu.html#L190'>set-cursor-position</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">0x10</span>/x, <span class="Constant">0x26</span>/y
<span id="L54" class="LineNr"> 54 </span> <a href='../501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot;nearest (euclidean, h/s/l): &quot;</span>, <span class="Constant">0xf</span>/fg, <span class="Constant">0</span>/bg
<span id="L55" class="LineNr"> 55 </span> <a href='../501draw-text.mu.html#L387'>draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, color, <span class="Constant">7</span>/fg, <span class="Constant">0</span>/bg
<span id="L56" class="LineNr"> 56 </span> <a href='../501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot; &quot;</span>, <span class="Constant">0xf</span>/fg, <span class="Constant">0</span>/bg
<span id="L57" class="LineNr"> 57 </span> <a href='../501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot; &quot;</span>, <span class="Constant">0</span>/fg, color
<span id="L54" class="LineNr"> 54 </span> <a href='../501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot;nearest (euclidean, h/s/l): &quot;</span>, <span class="Constant">0xf</span>/fg, <span class="Constant">0</span>/bg
<span id="L55" class="LineNr"> 55 </span> <a href='../501draw-text.mu.html#L384'>draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, color, <span class="Constant">7</span>/fg, <span class="Constant">0</span>/bg
<span id="L56" class="LineNr"> 56 </span> <a href='../501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot; &quot;</span>, <span class="Constant">0xf</span>/fg, <span class="Constant">0</span>/bg
<span id="L57" class="LineNr"> 57 </span> <a href='../501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot; &quot;</span>, <span class="Constant">0</span>/fg, color
<span id="L58" class="LineNr"> 58 </span> <span class="muComment">#</span>
<span id="L59" class="LineNr"> 59 </span> <span class="PreProc">loop</span>
<span id="L60" class="LineNr"> 60 </span> <span class="Delimiter">}</span>
@ -287,10 +287,10 @@ if ('onhashchange' in window) {
<span id="L224" class="LineNr">224 </span> compare c, l
<span id="L225" class="LineNr">225 </span> <span class="PreProc">break-if-!=</span>
<span id="L226" class="LineNr">226 </span> <a href='../500fake-screen.mu.html#L190'>set-cursor-position</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">0x10</span>/x, y
<span id="L227" class="LineNr">227 </span> <a href='../501draw-text.mu.html#L387'>draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, color, <span class="Constant">7</span>/fg, <span class="Constant">0</span>/bg
<span id="L227" class="LineNr">227 </span> <a href='../501draw-text.mu.html#L384'>draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, color, <span class="Constant">7</span>/fg, <span class="Constant">0</span>/bg
<span id="L228" class="LineNr">228 </span> <a href='../500fake-screen.mu.html#L190'>set-cursor-position</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">0x14</span>/x, y
<span id="L229" class="LineNr">229 </span> <a href='../501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot; &quot;</span>, <span class="Constant">7</span>/fg, <span class="Constant">0</span>/bg
<span id="L230" class="LineNr">230 </span> <a href='../501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot; &quot;</span>, <span class="Constant">0</span>/fg, color
<span id="L229" class="LineNr">229 </span> <a href='../501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot; &quot;</span>, <span class="Constant">7</span>/fg, <span class="Constant">0</span>/bg
<span id="L230" class="LineNr">230 </span> <a href='../501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot; &quot;</span>, <span class="Constant">0</span>/fg, color
<span id="L231" class="LineNr">231 </span><span class="CommentedCode">#? draw-text-wrapping-right-then-down-from-cursor-over-full-screen screen, &quot; &quot;, 7/fg, 0/bg</span>
<span id="L232" class="LineNr">232 </span><span class="CommentedCode">#? draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen screen, a, 7/fg, 0/bg</span>
<span id="L233" class="LineNr">233 </span><span class="CommentedCode">#? draw-text-wrapping-right-then-down-from-cursor-over-full-screen screen, &quot; &quot;, 7/fg, 0/bg</span>

16
html/apps/ex1.mu.html generated
View File

@ -1,14 +1,14 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - apps/ex1.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
@ -16,13 +16,13 @@ a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.LineNr { }
.muFunction { color: #af5f00; text-decoration: underline; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muComment { color: #005faf; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

26
html/apps/ex10.mu.html generated
View File

@ -1,31 +1,31 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - apps/ex10.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.muRegEcx { color: #870000; }
.Special { color: #ff6060; }
.LineNr { }
.Constant { color: #008787; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muRegEcx { color: #870000; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -86,15 +86,15 @@ if ('onhashchange' in window) {
<span id="L27" class="LineNr">27 </span> <span class="Delimiter">{</span>
<span id="L28" class="LineNr">28 </span> <span class="PreProc">var</span> dummy1/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L29" class="LineNr">29 </span> <span class="PreProc">var</span> dummy2/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L30" class="LineNr">30 </span> dummy1, dummy2 <span class="Special">&lt;-</span> <a href='../501draw-text.mu.html#L256'>draw-text-wrapping-right-then-down-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot; &quot;</span>, <span class="Constant">0</span>/x, <span class="Constant">0x10</span>/y, <span class="Constant">0x31</span>/fg, <span class="Constant">0</span>/bg
<span id="L30" class="LineNr">30 </span> dummy1, dummy2 <span class="Special">&lt;-</span> <a href='../501draw-text.mu.html#L253'>draw-text-wrapping-right-then-down-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot; &quot;</span>, <span class="Constant">0</span>/x, <span class="Constant">0x10</span>/y, <span class="Constant">0x31</span>/fg, <span class="Constant">0</span>/bg
<span id="L31" class="LineNr">31 </span> <span class="Delimiter">}</span>
<span id="L32" class="LineNr">32 </span> <span class="Delimiter">{</span>
<span id="L33" class="LineNr">33 </span> <span class="PreProc">var</span> dummy/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L34" class="LineNr">34 </span> dx, dummy <span class="Special">&lt;-</span> <a href='../501draw-text.mu.html#L364'>draw-int32-decimal-wrapping-right-then-down-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, dx, <span class="Constant">0</span>/x, <span class="Constant">0x10</span>/y, <span class="Constant">0x31</span>/fg, <span class="Constant">0</span>/bg
<span id="L34" class="LineNr">34 </span> dx, dummy <span class="Special">&lt;-</span> <a href='../501draw-text.mu.html#L361'>draw-int32-decimal-wrapping-right-then-down-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, dx, <span class="Constant">0</span>/x, <span class="Constant">0x10</span>/y, <span class="Constant">0x31</span>/fg, <span class="Constant">0</span>/bg
<span id="L35" class="LineNr">35 </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="PreProc">var</span> dummy/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L38" class="LineNr">38 </span> dummy, dy <span class="Special">&lt;-</span> <a href='../501draw-text.mu.html#L364'>draw-int32-decimal-wrapping-right-then-down-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, dy, <span class="Constant">5</span>/x, <span class="Constant">0x10</span>/y, <span class="Constant">0x31</span>/fg, <span class="Constant">0</span>/bg
<span id="L38" class="LineNr">38 </span> dummy, dy <span class="Special">&lt;-</span> <a href='../501draw-text.mu.html#L361'>draw-int32-decimal-wrapping-right-then-down-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, dy, <span class="Constant">5</span>/x, <span class="Constant">0x10</span>/y, <span class="Constant">0x31</span>/fg, <span class="Constant">0</span>/bg
<span id="L39" class="LineNr">39 </span> <span class="Delimiter">}</span>
<span id="L40" class="LineNr">40 </span> <span class="PreProc">loop</span>
<span id="L41" class="LineNr">41 </span> <span class="Delimiter">}</span>

52
html/apps/ex11.mu.html generated
View File

@ -1,35 +1,35 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - apps/ex11.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.muRegEbx { color: #5f00ff; }
.muRegEcx { color: #870000; }
.muRegEdx { color: #af5f00; }
.Special { color: #ff6060; }
.LineNr { }
.Constant { color: #008787; }
.muRegEbx { color: #5f00ff; }
.muRegEsi { color: #005faf; }
.muRegEdi { color: #00af00; }
.Constant { color: #008787; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muRegEcx { color: #870000; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -101,13 +101,13 @@ if ('onhashchange' in window) {
<span id="L38" class="LineNr"> 38 </span> <a href='../500fake-screen.mu.html#L251'>clear-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>
<span id="L39" class="LineNr"> 39 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr <a href='ex11.mu.html#L25'>environment</a>) <span class="Special">&lt;-</span> copy _self
<span id="L40" class="LineNr"> 40 </span> <span class="PreProc">var</span> tmp-ah/<span class="muRegEcx">ecx</span>: (addr handle <a href='ex11.mu.html#L32'>point</a>) <span class="Special">&lt;-</span> get self, p0
<span id="L41" class="LineNr"> 41 </span> <span class="PreProc">var</span> tmp/eax: (addr <a href='ex11.mu.html#L32'>point</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *tmp-ah
<span id="L41" class="LineNr"> 41 </span> <span class="PreProc">var</span> tmp/eax: (addr <a href='ex11.mu.html#L32'>point</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *tmp-ah
<span id="L42" class="LineNr"> 42 </span> <span class="PreProc">var</span> p0/<span class="muRegEbx">ebx</span>: (addr <a href='ex11.mu.html#L32'>point</a>) <span class="Special">&lt;-</span> copy tmp
<span id="L43" class="LineNr"> 43 </span> tmp-ah <span class="Special">&lt;-</span> get self, p1
<span id="L44" class="LineNr"> 44 </span> tmp <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *tmp-ah
<span id="L44" class="LineNr"> 44 </span> tmp <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *tmp-ah
<span id="L45" class="LineNr"> 45 </span> <span class="PreProc">var</span> p1/<span class="muRegEdx">edx</span>: (addr <a href='ex11.mu.html#L32'>point</a>) <span class="Special">&lt;-</span> copy tmp
<span id="L46" class="LineNr"> 46 </span> tmp-ah <span class="Special">&lt;-</span> get self, p2
<span id="L47" class="LineNr"> 47 </span> tmp <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *tmp-ah
<span id="L47" class="LineNr"> 47 </span> tmp <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *tmp-ah
<span id="L48" class="LineNr"> 48 </span> <span class="PreProc">var</span> p2/<span class="muRegEcx">ecx</span>: (addr <a href='ex11.mu.html#L32'>point</a>) <span class="Special">&lt;-</span> copy tmp
<span id="L49" class="LineNr"> 49 </span> <span class="muComment"># control lines</span>
<span id="L50" class="LineNr"> 50 </span> <a href='ex11.mu.html#L216'>line</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, p0, p1, <span class="Constant">7</span>/color
@ -120,7 +120,7 @@ if ('onhashchange' in window) {
<span id="L57" class="LineNr"> 57 </span> <a href='ex11.mu.html#L226'>disc</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, p2, <span class="Constant">3</span>/radius, <span class="Constant">7</span>/color <span class="Constant">0xf</span>/border
<span id="L58" class="LineNr"> 58 </span> <span class="muComment"># cursor last of all</span>
<span id="L59" class="LineNr"> 59 </span> <span class="PreProc">var</span> cursor-ah/eax: (addr handle <a href='ex11.mu.html#L32'>point</a>) <span class="Special">&lt;-</span> get self, <a href='ex11.mu.html#L77'>cursor</a>
<span id="L60" class="LineNr"> 60 </span> <span class="PreProc">var</span> <a href='ex11.mu.html#L77'>cursor</a>/eax: (addr <a href='ex11.mu.html#L32'>point</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *cursor-ah
<span id="L60" class="LineNr"> 60 </span> <span class="PreProc">var</span> <a href='ex11.mu.html#L77'>cursor</a>/eax: (addr <a href='ex11.mu.html#L32'>point</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *cursor-ah
<span id="L61" class="LineNr"> 61 </span> <a href='ex11.mu.html#L77'>cursor</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <a href='ex11.mu.html#L77'>cursor</a>, <span class="Constant">0xa</span>/side, <span class="Constant">3</span>/color
<span id="L62" class="LineNr"> 62 </span><span class="Delimiter">}</span>
<span id="L63" class="LineNr"> 63 </span>
@ -205,21 +205,21 @@ if ('onhashchange' in window) {
<span id="L142" class="LineNr">142 </span> <span class="PreProc">var</span> p1-ah/<span class="muRegEdx">edx</span>: (addr handle <a href='ex11.mu.html#L32'>point</a>) <span class="Special">&lt;-</span> get self, p1
<span id="L143" class="LineNr">143 </span> <span class="PreProc">var</span> p2-ah/<span class="muRegEbx">ebx</span>: (addr handle <a href='ex11.mu.html#L32'>point</a>) <span class="Special">&lt;-</span> get self, p2
<span id="L144" class="LineNr">144 </span> <span class="Delimiter">{</span>
<span id="L145" class="LineNr">145 </span> <span class="PreProc">var</span> p0?/eax: boolean <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L448'>handle-equal?</a> *p0-ah, *cursor-ah
<span id="L145" class="LineNr">145 </span> <span class="PreProc">var</span> p0?/eax: boolean <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L460'>handle-equal?</a> *p0-ah, *cursor-ah
<span id="L146" class="LineNr">146 </span> compare p0?, <span class="Constant">0</span>/false
<span id="L147" class="LineNr">147 </span> <span class="PreProc">break-if-=</span>
<span id="L148" class="LineNr">148 </span> copy-object p1-ah, cursor-ah
<span id="L149" class="LineNr">149 </span> <span class="PreProc">return</span>
<span id="L150" class="LineNr">150 </span> <span class="Delimiter">}</span>
<span id="L151" class="LineNr">151 </span> <span class="Delimiter">{</span>
<span id="L152" class="LineNr">152 </span> <span class="PreProc">var</span> p1?/eax: boolean <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L448'>handle-equal?</a> *p1-ah, *cursor-ah
<span id="L152" class="LineNr">152 </span> <span class="PreProc">var</span> p1?/eax: boolean <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L460'>handle-equal?</a> *p1-ah, *cursor-ah
<span id="L153" class="LineNr">153 </span> compare p1?, <span class="Constant">0</span>/false
<span id="L154" class="LineNr">154 </span> <span class="PreProc">break-if-=</span>
<span id="L155" class="LineNr">155 </span> copy-object p2-ah, cursor-ah
<span id="L156" class="LineNr">156 </span> <span class="PreProc">return</span>
<span id="L157" class="LineNr">157 </span> <span class="Delimiter">}</span>
<span id="L158" class="LineNr">158 </span> <span class="Delimiter">{</span>
<span id="L159" class="LineNr">159 </span> <span class="PreProc">var</span> p2?/eax: boolean <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L448'>handle-equal?</a> *p2-ah, *cursor-ah
<span id="L159" class="LineNr">159 </span> <span class="PreProc">var</span> p2?/eax: boolean <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L460'>handle-equal?</a> *p2-ah, *cursor-ah
<span id="L160" class="LineNr">160 </span> compare p2?, <span class="Constant">0</span>/false
<span id="L161" class="LineNr">161 </span> <span class="PreProc">break-if-=</span>
<span id="L162" class="LineNr">162 </span> copy-object p0-ah, cursor-ah
@ -231,7 +231,7 @@ if ('onhashchange' in window) {
<span id="L168" class="LineNr">168 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='ex11.mu.html#L168'>cursor-left</a></span> _self: (addr <a href='ex11.mu.html#L25'>environment</a>) <span class="Delimiter">{</span>
<span id="L169" class="LineNr">169 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr <a href='ex11.mu.html#L25'>environment</a>) <span class="Special">&lt;-</span> copy _self
<span id="L170" class="LineNr">170 </span> <span class="PreProc">var</span> cursor-ah/<span class="muRegEsi">esi</span>: (addr handle <a href='ex11.mu.html#L32'>point</a>) <span class="Special">&lt;-</span> get self, <a href='ex11.mu.html#L77'>cursor</a>
<span id="L171" class="LineNr">171 </span> <span class="PreProc">var</span> <a href='ex11.mu.html#L77'>cursor</a>/eax: (addr <a href='ex11.mu.html#L32'>point</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *cursor-ah
<span id="L171" class="LineNr">171 </span> <span class="PreProc">var</span> <a href='ex11.mu.html#L77'>cursor</a>/eax: (addr <a href='ex11.mu.html#L32'>point</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *cursor-ah
<span id="L172" class="LineNr">172 </span> <span class="PreProc">var</span> cursor-x/eax: (addr int) <span class="Special">&lt;-</span> get <a href='ex11.mu.html#L77'>cursor</a>, x
<span id="L173" class="LineNr">173 </span> compare *cursor-x, <span class="Constant">0x20</span>
<span id="L174" class="LineNr">174 </span> <span class="Delimiter">{</span>
@ -243,7 +243,7 @@ if ('onhashchange' in window) {
<span id="L180" class="LineNr">180 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='ex11.mu.html#L180'>cursor-right</a></span> _self: (addr <a href='ex11.mu.html#L25'>environment</a>) <span class="Delimiter">{</span>
<span id="L181" class="LineNr">181 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr <a href='ex11.mu.html#L25'>environment</a>) <span class="Special">&lt;-</span> copy _self
<span id="L182" class="LineNr">182 </span> <span class="PreProc">var</span> cursor-ah/<span class="muRegEsi">esi</span>: (addr handle <a href='ex11.mu.html#L32'>point</a>) <span class="Special">&lt;-</span> get self, <a href='ex11.mu.html#L77'>cursor</a>
<span id="L183" class="LineNr">183 </span> <span class="PreProc">var</span> <a href='ex11.mu.html#L77'>cursor</a>/eax: (addr <a href='ex11.mu.html#L32'>point</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *cursor-ah
<span id="L183" class="LineNr">183 </span> <span class="PreProc">var</span> <a href='ex11.mu.html#L77'>cursor</a>/eax: (addr <a href='ex11.mu.html#L32'>point</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *cursor-ah
<span id="L184" class="LineNr">184 </span> <span class="PreProc">var</span> cursor-x/eax: (addr int) <span class="Special">&lt;-</span> get <a href='ex11.mu.html#L77'>cursor</a>, x
<span id="L185" class="LineNr">185 </span> compare *cursor-x, <span class="Constant">0x3f0</span>
<span id="L186" class="LineNr">186 </span> <span class="Delimiter">{</span>
@ -255,7 +255,7 @@ if ('onhashchange' in window) {
<span id="L192" class="LineNr">192 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='ex11.mu.html#L192'>cursor-up</a></span> _self: (addr <a href='ex11.mu.html#L25'>environment</a>) <span class="Delimiter">{</span>
<span id="L193" class="LineNr">193 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr <a href='ex11.mu.html#L25'>environment</a>) <span class="Special">&lt;-</span> copy _self
<span id="L194" class="LineNr">194 </span> <span class="PreProc">var</span> cursor-ah/<span class="muRegEsi">esi</span>: (addr handle <a href='ex11.mu.html#L32'>point</a>) <span class="Special">&lt;-</span> get self, <a href='ex11.mu.html#L77'>cursor</a>
<span id="L195" class="LineNr">195 </span> <span class="PreProc">var</span> <a href='ex11.mu.html#L77'>cursor</a>/eax: (addr <a href='ex11.mu.html#L32'>point</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *cursor-ah
<span id="L195" class="LineNr">195 </span> <span class="PreProc">var</span> <a href='ex11.mu.html#L77'>cursor</a>/eax: (addr <a href='ex11.mu.html#L32'>point</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *cursor-ah
<span id="L196" class="LineNr">196 </span> <span class="PreProc">var</span> cursor-y/eax: (addr int) <span class="Special">&lt;-</span> get <a href='ex11.mu.html#L77'>cursor</a>, y
<span id="L197" class="LineNr">197 </span> compare *cursor-y, <span class="Constant">0x20</span>
<span id="L198" class="LineNr">198 </span> <span class="Delimiter">{</span>
@ -267,7 +267,7 @@ if ('onhashchange' in window) {
<span id="L204" class="LineNr">204 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='ex11.mu.html#L204'>cursor-down</a></span> _self: (addr <a href='ex11.mu.html#L25'>environment</a>) <span class="Delimiter">{</span>
<span id="L205" class="LineNr">205 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr <a href='ex11.mu.html#L25'>environment</a>) <span class="Special">&lt;-</span> copy _self
<span id="L206" class="LineNr">206 </span> <span class="PreProc">var</span> cursor-ah/<span class="muRegEsi">esi</span>: (addr handle <a href='ex11.mu.html#L32'>point</a>) <span class="Special">&lt;-</span> get self, <a href='ex11.mu.html#L77'>cursor</a>
<span id="L207" class="LineNr">207 </span> <span class="PreProc">var</span> <a href='ex11.mu.html#L77'>cursor</a>/eax: (addr <a href='ex11.mu.html#L32'>point</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *cursor-ah
<span id="L207" class="LineNr">207 </span> <span class="PreProc">var</span> <a href='ex11.mu.html#L77'>cursor</a>/eax: (addr <a href='ex11.mu.html#L32'>point</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *cursor-ah
<span id="L208" class="LineNr">208 </span> <span class="PreProc">var</span> cursor-y/eax: (addr int) <span class="Special">&lt;-</span> get <a href='ex11.mu.html#L77'>cursor</a>, y
<span id="L209" class="LineNr">209 </span> compare *cursor-y, <span class="Constant">0x2f0</span>
<span id="L210" class="LineNr">210 </span> <span class="Delimiter">{</span>
@ -297,15 +297,15 @@ if ('onhashchange' in window) {
<span id="L234" class="LineNr">234 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr <a href='ex11.mu.html#L25'>environment</a>) <span class="Special">&lt;-</span> copy _self
<span id="L235" class="LineNr">235 </span> <span class="PreProc">var</span> p0-ah/eax: (addr handle <a href='ex11.mu.html#L32'>point</a>) <span class="Special">&lt;-</span> get self, p0
<span id="L236" class="LineNr">236 </span> <a href='../120allocate.subx.html#L43'>allocate</a> p0-ah
<span id="L237" class="LineNr">237 </span> <span class="PreProc">var</span> p0/eax: (addr <a href='ex11.mu.html#L32'>point</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *p0-ah
<span id="L237" class="LineNr">237 </span> <span class="PreProc">var</span> p0/eax: (addr <a href='ex11.mu.html#L32'>point</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *p0-ah
<span id="L238" class="LineNr">238 </span> <a href='ex11.mu.html#L253'>initialize-point</a> p0, x0 y0
<span id="L239" class="LineNr">239 </span> <span class="PreProc">var</span> p1-ah/eax: (addr handle <a href='ex11.mu.html#L32'>point</a>) <span class="Special">&lt;-</span> get self, p1
<span id="L240" class="LineNr">240 </span> <a href='../120allocate.subx.html#L43'>allocate</a> p1-ah
<span id="L241" class="LineNr">241 </span> <span class="PreProc">var</span> p1/eax: (addr <a href='ex11.mu.html#L32'>point</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *p1-ah
<span id="L241" class="LineNr">241 </span> <span class="PreProc">var</span> p1/eax: (addr <a href='ex11.mu.html#L32'>point</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *p1-ah
<span id="L242" class="LineNr">242 </span> <a href='ex11.mu.html#L253'>initialize-point</a> p1, x1 y1
<span id="L243" class="LineNr">243 </span> <span class="PreProc">var</span> p2-ah/eax: (addr handle <a href='ex11.mu.html#L32'>point</a>) <span class="Special">&lt;-</span> get self, p2
<span id="L244" class="LineNr">244 </span> <a href='../120allocate.subx.html#L43'>allocate</a> p2-ah
<span id="L245" class="LineNr">245 </span> <span class="PreProc">var</span> p2/eax: (addr <a href='ex11.mu.html#L32'>point</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *p2-ah
<span id="L245" class="LineNr">245 </span> <span class="PreProc">var</span> p2/eax: (addr <a href='ex11.mu.html#L32'>point</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *p2-ah
<span id="L246" class="LineNr">246 </span> <a href='ex11.mu.html#L253'>initialize-point</a> p2, x2 y2
<span id="L247" class="LineNr">247 </span> <span class="muComment"># cursor initially at p0</span>
<span id="L248" class="LineNr">248 </span> <span class="PreProc">var</span> cursor-ah/<span class="muRegEdi">edi</span>: (addr handle <a href='ex11.mu.html#L32'>point</a>) <span class="Special">&lt;-</span> get self, <a href='ex11.mu.html#L77'>cursor</a>

20
html/apps/ex12.mu.html generated
View File

@ -1,32 +1,32 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - apps/ex12.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.muRegEcx { color: #870000; }
.muRegEdx { color: #af5f00; }
.Special { color: #ff6060; }
.LineNr { }
.Constant { color: #008787; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muRegEcx { color: #870000; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

32
html/apps/ex13.mu.html generated
View File

@ -1,32 +1,32 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - apps/ex13.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.muRegEbx { color: #5f00ff; }
.LineNr { }
.muRegEsi { color: #005faf; }
.Constant { color: #008787; }
.muFunction { color: #af5f00; text-decoration: underline; }
.Delimiter { color: #c000c0; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
.LineNr { }
.Constant { color: #008787; }
.muRegEbx { color: #5f00ff; }
.muRegEsi { color: #005faf; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muComment { color: #005faf; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -72,11 +72,11 @@ if ('onhashchange' in window) {
<span id="L12" class="LineNr">12 </span> <span class="PreProc">var</span> img-storage: <a href='../511image.mu.html#L6'>image</a>
<span id="L13" class="LineNr">13 </span> <span class="PreProc">var</span> img/<span class="muRegEsi">esi</span>: (addr <a href='../511image.mu.html#L6'>image</a>) <span class="Special">&lt;-</span> address img-storage
<span id="L14" class="LineNr">14 </span> <a href='ex13.mu.html#L18'>load-image</a> img, data-disk
<span id="L15" class="LineNr">15 </span> <a href='../511image.mu.html#L53'>render-image</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, img, <span class="Constant">0</span>/x, <span class="Constant">0</span>/y, <span class="Constant">0x300</span>/width, <span class="Constant">0x300</span>/height
<span id="L15" class="LineNr">15 </span> <a href='../511image.mu.html#L55'>render-image</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, img, <span class="Constant">0</span>/x, <span class="Constant">0</span>/y, <span class="Constant">0x300</span>/width, <span class="Constant">0x300</span>/height
<span id="L16" class="LineNr">16 </span><span class="Delimiter">}</span>
<span id="L17" class="LineNr">17 </span>
<span id="L18" class="LineNr">18 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='ex13.mu.html#L18'>load-image</a></span> self: (addr <a href='../511image.mu.html#L6'>image</a>), data-disk: (addr disk) <span class="Delimiter">{</span>
<span id="L19" class="LineNr">19 </span> <span class="PreProc">var</span> s-storage: (stream byte <span class="Constant">0x200000</span>) <span class="muComment"># 512* 0x1000 sectors</span>
<span id="L19" class="LineNr">19 </span> <span class="PreProc">var</span> s-storage: (stream byte <span class="Constant">0x200000</span>) <span class="muComment"># 512 * 0x1000 sectors</span>
<span id="L20" class="LineNr">20 </span> <span class="PreProc">var</span> s/<span class="muRegEbx">ebx</span>: (addr stream byte) <span class="Special">&lt;-</span> address s-storage
<span id="L21" class="LineNr">21 </span> <a href='../510disk.mu.html#L1'>load-sectors</a> data-disk, <span class="Constant">0</span>/lba, <span class="Constant">0x1000</span>/sectors, s
<span id="L22" class="LineNr">22 </span> <a href='../511image.mu.html#L17'>initialize-image</a> self, s

20
html/apps/ex2.mu.html generated
View File

@ -1,32 +1,32 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - apps/ex2.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.muRegEcx { color: #870000; }
.muRegEdx { color: #af5f00; }
.Special { color: #ff6060; }
.LineNr { }
.Constant { color: #008787; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muRegEcx { color: #870000; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

20
html/apps/ex3.mu.html generated
View File

@ -1,32 +1,32 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - apps/ex3.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.muRegEcx { color: #870000; }
.muRegEdx { color: #af5f00; }
.Special { color: #ff6060; }
.LineNr { }
.Constant { color: #008787; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muRegEcx { color: #870000; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

16
html/apps/ex4.mu.html generated
View File

@ -1,14 +1,14 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - apps/ex4.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
@ -17,13 +17,13 @@ a { color:inherit; }
.PreProc { color: #c000c0; }
.LineNr { }
.Constant { color: #008787; }
.muFunction { color: #af5f00; text-decoration: underline; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muComment { color: #005faf; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

18
html/apps/ex5.mu.html generated
View File

@ -1,30 +1,30 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - apps/ex5.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.Special { color: #ff6060; }
.LineNr { }
.Constant { color: #008787; }
.muFunction { color: #af5f00; text-decoration: underline; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

30
html/apps/ex6.mu.html generated
View File

@ -1,31 +1,31 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - apps/ex6.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.muRegEcx { color: #870000; }
.Special { color: #ff6060; }
.LineNr { }
.Constant { color: #008787; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muRegEcx { color: #870000; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -79,15 +79,15 @@ if ('onhashchange' in window) {
<span id="L20" class="LineNr">20 </span> x, y <span class="Special">&lt;-</span> <a href='../501draw-text.mu.html#L174'>draw-text-wrapping-right-then-down</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot;Mu!&quot;</span>, <span class="Constant">0x10</span>/xmin, <span class="Constant">0x20</span>/ymin, <span class="Constant">0x78</span>/xmax, <span class="Constant">0x50</span>/ymax, x, y, <span class="Constant">0xa</span>/fg, <span class="Constant">0</span>/bg
<span id="L21" class="LineNr">21 </span>
<span id="L22" class="LineNr">22 </span> <span class="muComment"># drawing at the cursor in multiple directions</span>
<span id="L23" class="LineNr">23 </span> <a href='../501draw-text.mu.html#L493'>draw-text-wrapping-down-then-right-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot;abc&quot;</span>, <span class="Constant">0xa</span>/fg, <span class="Constant">0</span>/bg
<span id="L24" class="LineNr">24 </span> <a href='../501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot;def&quot;</span>, <span class="Constant">0xa</span>/fg, <span class="Constant">0</span>/bg
<span id="L23" class="LineNr">23 </span> <a href='../501draw-text.mu.html#L490'>draw-text-wrapping-down-then-right-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot;abc&quot;</span>, <span class="Constant">0xa</span>/fg, <span class="Constant">0</span>/bg
<span id="L24" class="LineNr">24 </span> <a href='../501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot;def&quot;</span>, <span class="Constant">0xa</span>/fg, <span class="Constant">0</span>/bg
<span id="L25" class="LineNr">25 </span>
<span id="L26" class="LineNr">26 </span> <span class="muComment"># test drawing near the edge</span>
<span id="L27" class="LineNr">27 </span> x <span class="Special">&lt;-</span> <a href='../501draw-text.mu.html#L100'>draw-text-rightward</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot;R&quot;</span>, <span class="Constant">0x7f</span>/x, <span class="Constant">0x80</span>/xmax=screen-width, <span class="Constant">0x18</span>/y, <span class="Constant">0xa</span>/fg, <span class="Constant">0</span>/bg
<span id="L28" class="LineNr">28 </span> <a href='../501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot;wrapped from R&quot;</span>, <span class="Constant">0xa</span>/fg, <span class="Constant">0</span>/bg
<span id="L28" class="LineNr">28 </span> <a href='../501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot;wrapped from R&quot;</span>, <span class="Constant">0xa</span>/fg, <span class="Constant">0</span>/bg
<span id="L29" class="LineNr">29 </span>
<span id="L30" class="LineNr">30 </span> x <span class="Special">&lt;-</span> <a href='../501draw-text.mu.html#L399'>draw-text-downward</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot;D&quot;</span>, <span class="Constant">0x20</span>/x, <span class="Constant">0x2f</span>/y, <span class="Constant">0x30</span>/ymax=screen-height, <span class="Constant">0xa</span>/fg, <span class="Constant">0</span>/bg
<span id="L31" class="LineNr">31 </span> <a href='../501draw-text.mu.html#L493'>draw-text-wrapping-down-then-right-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot;wrapped from D&quot;</span>, <span class="Constant">0xa</span>/fg, <span class="Constant">0</span>/bg
<span id="L30" class="LineNr">30 </span> x <span class="Special">&lt;-</span> <a href='../501draw-text.mu.html#L396'>draw-text-downward</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot;D&quot;</span>, <span class="Constant">0x20</span>/x, <span class="Constant">0x2f</span>/y, <span class="Constant">0x30</span>/ymax=screen-height, <span class="Constant">0xa</span>/fg, <span class="Constant">0</span>/bg
<span id="L31" class="LineNr">31 </span> <a href='../501draw-text.mu.html#L490'>draw-text-wrapping-down-then-right-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot;wrapped from D&quot;</span>, <span class="Constant">0xa</span>/fg, <span class="Constant">0</span>/bg
<span id="L32" class="LineNr">32 </span><span class="Delimiter">}</span>
</pre>
</body>

18
html/apps/ex7.mu.html generated
View File

@ -1,30 +1,30 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - apps/ex7.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.Special { color: #ff6060; }
.LineNr { }
.Constant { color: #008787; }
.muFunction { color: #af5f00; text-decoration: underline; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

18
html/apps/ex8.mu.html generated
View File

@ -1,30 +1,30 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - apps/ex8.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.Special { color: #ff6060; }
.LineNr { }
.Constant { color: #008787; }
.muFunction { color: #af5f00; text-decoration: underline; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

20
html/apps/ex9.mu.html generated
View File

@ -1,32 +1,32 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - apps/ex9.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.Special { color: #ff6060; }
.LineNr { }
.muRegEsi { color: #005faf; }
.muRegEdi { color: #00af00; }
.Constant { color: #008787; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muRegEdi { color: #00af00; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

View File

@ -1,36 +1,36 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - apps/hest-life.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.CommentedCode { color: #8a8a8a; }
.muRegEcx { color: #870000; }
.muRegEbx { color: #5f00ff; }
.muRegEdx { color: #af5f00; }
.Special { color: #ff6060; }
.LineNr { }
.Constant { color: #008787; }
.CommentedCode { color: #8a8a8a; }
.muRegEsi { color: #005faf; }
.muRegEdi { color: #00af00; }
.Constant { color: #008787; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muRegEbx { color: #5f00ff; }
.muRegEcx { color: #870000; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -106,7 +106,7 @@ if ('onhashchange' in window) {
<span id="L42" class="LineNr"> 42 </span> <a href='../500fake-screen.mu.html#L588'>convert-graphemes-to-pixels</a> second-screen
<span id="L43" class="LineNr"> 43 </span> <a href='../500fake-screen.mu.html#L548'>copy-pixels</a> second-screen, <a href='../500fake-screen.mu.html#L14'>screen</a>
<span id="L44" class="LineNr"> 44 </span> <span class="Delimiter">}</span>
<span id="L45" class="LineNr"> 45 </span> <a href='hest-life.mu.html#L1019'>linger</a> env
<span id="L45" class="LineNr"> 45 </span> <a href='hest-life.mu.html#L1019'>linger</a>
<span id="L46" class="LineNr"> 46 </span> <span class="PreProc">loop</span>
<span id="L47" class="LineNr"> 47 </span> <span class="Delimiter">}</span>
<span id="L48" class="LineNr"> 48 </span><span class="Delimiter">}</span>
@ -147,7 +147,7 @@ if ('onhashchange' in window) {
<span id="L83" class="LineNr"> 83 </span> <span class="muComment"># clock</span>
<span id="L84" class="LineNr"> 84 </span> <span class="PreProc">var</span> tick-a/eax: (addr int) <span class="Special">&lt;-</span> get self, tick
<span id="L85" class="LineNr"> 85 </span> <a href='../500fake-screen.mu.html#L190'>set-cursor-position</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">0x78</span>/x, <span class="Constant">0</span>/y
<span id="L86" class="LineNr"> 86 </span> <a href='../501draw-text.mu.html#L387'>draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, *tick-a, <span class="Constant">7</span>/fg <span class="Constant">0</span>/bg
<span id="L86" class="LineNr"> 86 </span> <a href='../501draw-text.mu.html#L384'>draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, *tick-a, <span class="Constant">7</span>/fg <span class="Constant">0</span>/bg
<span id="L87" class="LineNr"> 87 </span><span class="Delimiter">}</span>
<span id="L88" class="LineNr"> 88 </span>
<span id="L89" class="LineNr"> 89 </span><span class="muComment"># Lots of hardcoded constants for now.</span>
@ -181,7 +181,7 @@ if ('onhashchange' in window) {
<span id="L117" class="LineNr"> 117 </span> <span class="muComment"># sum node</span>
<span id="L118" class="LineNr"> 118 </span> <a href='../507line.mu.html#L86'>draw-rect</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">0x170</span>/xsmin <span class="Constant">0x140</span>/ysmin, <span class="Constant">0x190</span>/xsmax <span class="Constant">0x160</span>/ysmax, <span class="Constant">0x40</span>/color
<span id="L119" class="LineNr"> 119 </span> <a href='../500fake-screen.mu.html#L190'>set-cursor-position</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">0x2d</span>/scol, <span class="Constant">0x13</span>/srow
<span id="L120" class="LineNr"> 120 </span> <a href='../501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot;+&quot;</span>, <span class="Constant">0xf</span>/color, <span class="Constant">0</span>/bg
<span id="L120" class="LineNr"> 120 </span> <a href='../501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot;+&quot;</span>, <span class="Constant">0xf</span>/color, <span class="Constant">0</span>/bg
<span id="L121" class="LineNr"> 121 </span> <span class="muComment"># conveyors from neighboring inputs to sum node</span>
<span id="L122" class="LineNr"> 122 </span> <a href='../509bezier.mu.html#L14'>draw-monotonic-bezier</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">0xa0</span>/x0 <span class="Constant">0x20</span>/y0, <span class="Constant">0x100</span>/x1 <span class="Constant">0x150</span>/ys, <span class="Constant">0x180</span>/xs <span class="Constant">0x150</span>/ys, <span class="Constant">4</span>/color
<span id="L123" class="LineNr"> 123 </span> <a href='../509bezier.mu.html#L14'>draw-monotonic-bezier</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">0xa0</span>/x0 <span class="Constant">0x180</span>/y0, <span class="Constant">0xc0</span>/x1 <span class="Constant">0x150</span>/ys, <span class="Constant">0x180</span>/xs <span class="Constant">0x150</span>/ys, <span class="Constant">4</span>/color
@ -194,7 +194,7 @@ if ('onhashchange' in window) {
<span id="L130" class="LineNr"> 130 </span> <span class="muComment"># filter node</span>
<span id="L131" class="LineNr"> 131 </span> <a href='../507line.mu.html#L86'>draw-rect</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">0x200</span>/xfmin <span class="Constant">0x1c0</span>/yfmin, <span class="Constant">0x220</span>/xfmax <span class="Constant">0x1e0</span>/yfmax, <span class="Constant">0x31</span>/color
<span id="L132" class="LineNr"> 132 </span> <a href='../500fake-screen.mu.html#L190'>set-cursor-position</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">0x40</span>/fcol, <span class="Constant">0x1b</span>/frow
<span id="L133" class="LineNr"> 133 </span> <a href='../501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot;?&quot;</span>, <span class="Constant">0xf</span>/color, <span class="Constant">0</span>/bg
<span id="L133" class="LineNr"> 133 </span> <a href='../501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot;?&quot;</span>, <span class="Constant">0xf</span>/color, <span class="Constant">0</span>/bg
<span id="L134" class="LineNr"> 134 </span> <span class="muComment"># conveyor from sum node to filter node</span>
<span id="L135" class="LineNr"> 135 </span> <a href='../507line.mu.html#L1'>draw-line</a> <a href='../500fake-screen.mu.html#L14'>screen</a> <span class="Constant">0x180</span>/xs, <span class="Constant">0x150</span>/ys, <span class="Constant">0x210</span>/xf, <span class="Constant">0x1d0</span>/yf, <span class="Constant">0xa2</span>/color
<span id="L136" class="LineNr"> 136 </span> <span class="muComment"># cell outputs at corners</span>
@ -253,7 +253,7 @@ if ('onhashchange' in window) {
<span id="L189" class="LineNr"> 189 </span> <a href='hest-life.mu.html#L588'>draw-linear-point</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, u, <span class="Constant">0x180</span>/xs, <span class="Constant">0x150</span>/ys, <span class="Constant">0x210</span>/xf, <span class="Constant">0x1d0</span>/yf, <span class="Constant">7</span>/color, <span class="Constant">4</span>/radius
<span id="L190" class="LineNr"> 190 </span> <a href='../500fake-screen.mu.html#L190'>set-cursor-position</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">0x3a</span>/scol, <span class="Constant">0x18</span>/srow
<span id="L191" class="LineNr"> 191 </span> <span class="PreProc">var</span> n/eax: int <span class="Special">&lt;-</span> <a href='hest-life.mu.html#L953'>num-live-neighbors</a> self, <span class="Constant">0x80</span>/curx, <span class="Constant">0x60</span>/cury
<span id="L192" class="LineNr"> 192 </span> <a href='../501draw-text.mu.html#L387'>draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, n, <span class="Constant">0xf</span>/fg <span class="Constant">0</span>/bg
<span id="L192" class="LineNr"> 192 </span> <a href='../501draw-text.mu.html#L384'>draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, n, <span class="Constant">0xf</span>/fg <span class="Constant">0</span>/bg
<span id="L193" class="LineNr"> 193 </span> <span class="PreProc">return</span>
<span id="L194" class="LineNr"> 194 </span> <span class="Delimiter">}</span>
<span id="L195" class="LineNr"> 195 </span> <span class="muComment"># final 7 time steps for updating output</span>
@ -370,16 +370,16 @@ if ('onhashchange' in window) {
<span id="L306" class="LineNr"> 306 </span> <span class="muComment"># neighbor counts</span>
<span id="L307" class="LineNr"> 307 </span> <span class="PreProc">var</span> n/eax: int <span class="Special">&lt;-</span> <a href='hest-life.mu.html#L953'>num-live-neighbors</a> self, <span class="Constant">0x80</span>/curx, <span class="Constant">0x60</span>/cury
<span id="L308" class="LineNr"> 308 </span> <a href='../500fake-screen.mu.html#L190'>set-cursor-position</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">0x2d</span>, <span class="Constant">0xe</span>
<span id="L309" class="LineNr"> 309 </span> <a href='../501draw-text.mu.html#L387'>draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, n, <span class="Constant">0xf</span>/fg <span class="Constant">0</span>/bg
<span id="L309" class="LineNr"> 309 </span> <a href='../501draw-text.mu.html#L384'>draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, n, <span class="Constant">0xf</span>/fg <span class="Constant">0</span>/bg
<span id="L310" class="LineNr"> 310 </span> <span class="PreProc">var</span> n/eax: int <span class="Special">&lt;-</span> <a href='hest-life.mu.html#L953'>num-live-neighbors</a> self, <span class="Constant">0x81</span>/curx, <span class="Constant">0x60</span>/cury
<span id="L311" class="LineNr"> 311 </span> <a href='../500fake-screen.mu.html#L190'>set-cursor-position</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">0x52</span>, <span class="Constant">0xe</span>
<span id="L312" class="LineNr"> 312 </span> <a href='../501draw-text.mu.html#L387'>draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, n, <span class="Constant">0xf</span>/fg <span class="Constant">0</span>/bg
<span id="L312" class="LineNr"> 312 </span> <a href='../501draw-text.mu.html#L384'>draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, n, <span class="Constant">0xf</span>/fg <span class="Constant">0</span>/bg
<span id="L313" class="LineNr"> 313 </span> <span class="PreProc">var</span> n/eax: int <span class="Special">&lt;-</span> <a href='hest-life.mu.html#L953'>num-live-neighbors</a> self, <span class="Constant">0x80</span>/curx, <span class="Constant">0x61</span>/cury
<span id="L314" class="LineNr"> 314 </span> <a href='../500fake-screen.mu.html#L190'>set-cursor-position</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">0x2d</span>, <span class="Constant">0x20</span>
<span id="L315" class="LineNr"> 315 </span> <a href='../501draw-text.mu.html#L387'>draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, n, <span class="Constant">0xf</span>/fg <span class="Constant">0</span>/bg
<span id="L315" class="LineNr"> 315 </span> <a href='../501draw-text.mu.html#L384'>draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, n, <span class="Constant">0xf</span>/fg <span class="Constant">0</span>/bg
<span id="L316" class="LineNr"> 316 </span> <span class="PreProc">var</span> n/eax: int <span class="Special">&lt;-</span> <a href='hest-life.mu.html#L953'>num-live-neighbors</a> self, <span class="Constant">0x81</span>/curx, <span class="Constant">0x61</span>/cury
<span id="L317" class="LineNr"> 317 </span> <a href='../500fake-screen.mu.html#L190'>set-cursor-position</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">0x52</span>, <span class="Constant">0x20</span>
<span id="L318" class="LineNr"> 318 </span> <a href='../501draw-text.mu.html#L387'>draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, n, <span class="Constant">0xf</span>/fg <span class="Constant">0</span>/bg
<span id="L318" class="LineNr"> 318 </span> <a href='../501draw-text.mu.html#L384'>draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, n, <span class="Constant">0xf</span>/fg <span class="Constant">0</span>/bg
<span id="L319" class="LineNr"> 319 </span> <span class="muComment"># cell 0: conveyors from neighboring inputs to sum node</span>
<span id="L320" class="LineNr"> 320 </span> <a href='../509bezier.mu.html#L14'>draw-monotonic-bezier</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">0xc0</span>/x0 <span class="Constant">0x40</span>/y0, <span class="Constant">0x100</span>/x1 <span class="Constant">0xd0</span>/ys, <span class="Constant">0x150</span>/xs <span class="Constant">0xd0</span>/ys, <span class="Constant">4</span>/color
<span id="L321" class="LineNr"> 321 </span> <a href='../509bezier.mu.html#L14'>draw-monotonic-bezier</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">0xc0</span>/x0 <span class="Constant">0xe8</span>/y0, <span class="Constant">0xc0</span>/x1 <span class="Constant">0xd0</span>/ys, <span class="Constant">0x150</span>/xs <span class="Constant">0xd0</span>/ys, <span class="Constant">4</span>/color
@ -787,7 +787,7 @@ if ('onhashchange' in window) {
<span id="L723" class="LineNr"> 723 </span> copy-to *play?, <span class="Constant">1</span>/true
<span id="L724" class="LineNr"> 724 </span> <span class="PreProc">var</span> data-ah/eax: (addr handle array handle array <a href='hest-life.mu.html#L58'>cell</a>) <span class="Special">&lt;-</span> get self, data
<span id="L725" class="LineNr"> 725 </span> populate data-ah, <span class="Constant">0x100</span>
<span id="L726" class="LineNr"> 726 </span> <span class="PreProc">var</span> data/eax: (addr array handle array <a href='hest-life.mu.html#L58'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *data-ah
<span id="L726" class="LineNr"> 726 </span> <span class="PreProc">var</span> data/eax: (addr array handle array <a href='hest-life.mu.html#L58'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *data-ah
<span id="L727" class="LineNr"> 727 </span> <span class="PreProc">var</span> y/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L728" class="LineNr"> 728 </span> <span class="Delimiter">{</span>
<span id="L729" class="LineNr"> 729 </span> compare y, <span class="Constant">0xc0</span>
@ -811,13 +811,13 @@ if ('onhashchange' in window) {
<span id="L747" class="LineNr"> 747 </span> copy-to *tick, <span class="Constant">0</span>
<span id="L748" class="LineNr"> 748 </span> <span class="muComment"># don't touch zoom or play settings</span>
<span id="L749" class="LineNr"> 749 </span> <span class="PreProc">var</span> data-ah/eax: (addr handle array handle array <a href='hest-life.mu.html#L58'>cell</a>) <span class="Special">&lt;-</span> get self, data
<span id="L750" class="LineNr"> 750 </span> <span class="PreProc">var</span> data/eax: (addr array handle array <a href='hest-life.mu.html#L58'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *data-ah
<span id="L750" class="LineNr"> 750 </span> <span class="PreProc">var</span> data/eax: (addr array handle array <a href='hest-life.mu.html#L58'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *data-ah
<span id="L751" class="LineNr"> 751 </span> <span class="PreProc">var</span> y/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L752" class="LineNr"> 752 </span> <span class="Delimiter">{</span>
<span id="L753" class="LineNr"> 753 </span> compare y, <span class="Constant">0xc0</span>
<span id="L754" class="LineNr"> 754 </span> <span class="PreProc">break-if-&gt;=</span>
<span id="L755" class="LineNr"> 755 </span> <span class="PreProc">var</span> row-ah/eax: (addr handle array <a href='hest-life.mu.html#L58'>cell</a>) <span class="Special">&lt;-</span> index data, y
<span id="L756" class="LineNr"> 756 </span> <span class="PreProc">var</span> row/eax: (addr array <a href='hest-life.mu.html#L58'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *row-ah
<span id="L756" class="LineNr"> 756 </span> <span class="PreProc">var</span> row/eax: (addr array <a href='hest-life.mu.html#L58'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *row-ah
<span id="L757" class="LineNr"> 757 </span> <span class="PreProc">var</span> x/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L758" class="LineNr"> 758 </span> <span class="Delimiter">{</span>
<span id="L759" class="LineNr"> 759 </span> compare x, <span class="Constant">0x100</span>
@ -841,10 +841,10 @@ if ('onhashchange' in window) {
<span id="L777" class="LineNr"> 777 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='hest-life.mu.html#L777'>set</a></span> _self: (addr <a href='hest-life.mu.html#L50'>environment</a>), _x: int, _y: int, _val: boolean <span class="Delimiter">{</span>
<span id="L778" class="LineNr"> 778 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr <a href='hest-life.mu.html#L50'>environment</a>) <span class="Special">&lt;-</span> copy _self
<span id="L779" class="LineNr"> 779 </span> <span class="PreProc">var</span> data-ah/eax: (addr handle array handle array <a href='hest-life.mu.html#L58'>cell</a>) <span class="Special">&lt;-</span> get self, data
<span id="L780" class="LineNr"> 780 </span> <span class="PreProc">var</span> data/eax: (addr array handle array <a href='hest-life.mu.html#L58'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *data-ah
<span id="L780" class="LineNr"> 780 </span> <span class="PreProc">var</span> data/eax: (addr array handle array <a href='hest-life.mu.html#L58'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *data-ah
<span id="L781" class="LineNr"> 781 </span> <span class="PreProc">var</span> y/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy _y
<span id="L782" class="LineNr"> 782 </span> <span class="PreProc">var</span> row-ah/eax: (addr handle array <a href='hest-life.mu.html#L58'>cell</a>) <span class="Special">&lt;-</span> index data, y
<span id="L783" class="LineNr"> 783 </span> <span class="PreProc">var</span> row/eax: (addr array <a href='hest-life.mu.html#L58'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *row-ah
<span id="L783" class="LineNr"> 783 </span> <span class="PreProc">var</span> row/eax: (addr array <a href='hest-life.mu.html#L58'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *row-ah
<span id="L784" class="LineNr"> 784 </span> <span class="PreProc">var</span> x/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy _x
<span id="L785" class="LineNr"> 785 </span> <span class="PreProc">var</span> <a href='hest-life.mu.html#L58'>cell</a>/eax: (addr <a href='hest-life.mu.html#L58'>cell</a>) <span class="Special">&lt;-</span> index row, x
<span id="L786" class="LineNr"> 786 </span> <span class="PreProc">var</span> dest/eax: (addr boolean) <span class="Special">&lt;-</span> get <a href='hest-life.mu.html#L58'>cell</a>, next
@ -878,9 +878,9 @@ if ('onhashchange' in window) {
<span id="L814" class="LineNr"> 814 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false
<span id="L815" class="LineNr"> 815 </span> <span class="Delimiter">}</span>
<span id="L816" class="LineNr"> 816 </span> <span class="PreProc">var</span> data-ah/eax: (addr handle array handle array <a href='hest-life.mu.html#L58'>cell</a>) <span class="Special">&lt;-</span> get self, data
<span id="L817" class="LineNr"> 817 </span> <span class="PreProc">var</span> data/eax: (addr array handle array <a href='hest-life.mu.html#L58'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *data-ah
<span id="L817" class="LineNr"> 817 </span> <span class="PreProc">var</span> data/eax: (addr array handle array <a href='hest-life.mu.html#L58'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *data-ah
<span id="L818" class="LineNr"> 818 </span> <span class="PreProc">var</span> row-ah/eax: (addr handle array <a href='hest-life.mu.html#L58'>cell</a>) <span class="Special">&lt;-</span> index data, y
<span id="L819" class="LineNr"> 819 </span> <span class="PreProc">var</span> row/eax: (addr array <a href='hest-life.mu.html#L58'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *row-ah
<span id="L819" class="LineNr"> 819 </span> <span class="PreProc">var</span> row/eax: (addr array <a href='hest-life.mu.html#L58'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *row-ah
<span id="L820" class="LineNr"> 820 </span> <span class="PreProc">var</span> <a href='hest-life.mu.html#L58'>cell</a>/eax: (addr <a href='hest-life.mu.html#L58'>cell</a>) <span class="Special">&lt;-</span> index row, x
<span id="L821" class="LineNr"> 821 </span> <span class="PreProc">var</span> src/eax: (addr boolean) <span class="Special">&lt;-</span> get <a href='hest-life.mu.html#L58'>cell</a>, curr
<span id="L822" class="LineNr"> 822 </span> <span class="PreProc">return</span> *src
@ -901,14 +901,14 @@ if ('onhashchange' in window) {
<span id="L837" class="LineNr"> 837 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='hest-life.mu.html#L837'>flush</a></span> _self: (addr <a href='hest-life.mu.html#L50'>environment</a>) <span class="Delimiter">{</span>
<span id="L838" class="LineNr"> 838 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr <a href='hest-life.mu.html#L50'>environment</a>) <span class="Special">&lt;-</span> copy _self
<span id="L839" class="LineNr"> 839 </span> <span class="PreProc">var</span> data-ah/eax: (addr handle array handle array <a href='hest-life.mu.html#L58'>cell</a>) <span class="Special">&lt;-</span> get self, data
<span id="L840" class="LineNr"> 840 </span> <span class="PreProc">var</span> _data/eax: (addr array handle array <a href='hest-life.mu.html#L58'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *data-ah
<span id="L840" class="LineNr"> 840 </span> <span class="PreProc">var</span> _data/eax: (addr array handle array <a href='hest-life.mu.html#L58'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *data-ah
<span id="L841" class="LineNr"> 841 </span> <span class="PreProc">var</span> data/<span class="muRegEsi">esi</span>: (addr array handle array <a href='hest-life.mu.html#L58'>cell</a>) <span class="Special">&lt;-</span> copy _data
<span id="L842" class="LineNr"> 842 </span> <span class="PreProc">var</span> y/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L843" class="LineNr"> 843 </span> <span class="Delimiter">{</span>
<span id="L844" class="LineNr"> 844 </span> compare y, <span class="Constant">0xc0</span>/height
<span id="L845" class="LineNr"> 845 </span> <span class="PreProc">break-if-&gt;=</span>
<span id="L846" class="LineNr"> 846 </span> <span class="PreProc">var</span> row-ah/eax: (addr handle array <a href='hest-life.mu.html#L58'>cell</a>) <span class="Special">&lt;-</span> index data, y
<span id="L847" class="LineNr"> 847 </span> <span class="PreProc">var</span> _row/eax: (addr array <a href='hest-life.mu.html#L58'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *row-ah
<span id="L847" class="LineNr"> 847 </span> <span class="PreProc">var</span> _row/eax: (addr array <a href='hest-life.mu.html#L58'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *row-ah
<span id="L848" class="LineNr"> 848 </span> <span class="PreProc">var</span> row/<span class="muRegEbx">ebx</span>: (addr array <a href='hest-life.mu.html#L58'>cell</a>) <span class="Special">&lt;-</span> copy _row
<span id="L849" class="LineNr"> 849 </span> <span class="PreProc">var</span> x/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L850" class="LineNr"> 850 </span> <span class="Delimiter">{</span>
@ -1080,17 +1080,16 @@ if ('onhashchange' in window) {
<span id="L1016" class="LineNr">1016 </span> <span class="PreProc">return</span> result
<span id="L1017" class="LineNr">1017 </span><span class="Delimiter">}</span>
<span id="L1018" class="LineNr">1018 </span>
<span id="L1019" class="LineNr">1019 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='hest-life.mu.html#L1019'>linger</a></span> _self: (addr <a href='hest-life.mu.html#L50'>environment</a>) <span class="Delimiter">{</span>
<span id="L1020" class="LineNr">1020 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr <a href='hest-life.mu.html#L50'>environment</a>) <span class="Special">&lt;-</span> copy _self
<span id="L1021" class="LineNr">1021 </span> <span class="PreProc">var</span> i/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L1022" class="LineNr">1022 </span> <span class="Delimiter">{</span>
<span id="L1023" class="LineNr">1023 </span> compare i, <span class="Constant">0x10000000</span> <span class="muComment"># Kartik's Linux with -enable-kvm</span>
<span id="L1024" class="LineNr">1024 </span><span class="CommentedCode">#? compare i, 0x8000000 # Kartik's Mac with -accel tcg</span>
<span id="L1025" class="LineNr">1025 </span> <span class="PreProc">break-if-&gt;=</span>
<span id="L1026" class="LineNr">1026 </span> i <span class="Special">&lt;-</span> increment
<span id="L1027" class="LineNr">1027 </span> <span class="PreProc">loop</span>
<span id="L1028" class="LineNr">1028 </span> <span class="Delimiter">}</span>
<span id="L1029" class="LineNr">1029 </span><span class="Delimiter">}</span>
<span id="L1019" class="LineNr">1019 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='hest-life.mu.html#L1019'>linger</a></span> <span class="Delimiter">{</span>
<span id="L1020" class="LineNr">1020 </span> <span class="PreProc">var</span> i/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L1021" class="LineNr">1021 </span> <span class="Delimiter">{</span>
<span id="L1022" class="LineNr">1022 </span> compare i, <span class="Constant">0x10000000</span> <span class="muComment"># Kartik's Linux with -accel kvm</span>
<span id="L1023" class="LineNr">1023 </span><span class="CommentedCode">#? compare i, 0x8000000 # Kartik's Mac with -accel tcg</span>
<span id="L1024" class="LineNr">1024 </span> <span class="PreProc">break-if-&gt;=</span>
<span id="L1025" class="LineNr">1025 </span> i <span class="Special">&lt;-</span> increment
<span id="L1026" class="LineNr">1026 </span> <span class="PreProc">loop</span>
<span id="L1027" class="LineNr">1027 </span> <span class="Delimiter">}</span>
<span id="L1028" class="LineNr">1028 </span><span class="Delimiter">}</span>
</pre>
</body>
</html>

89
html/apps/life.mu.html generated
View File

@ -1,36 +1,36 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - apps/life.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.muRegEbx { color: #5f00ff; }
.muRegEcx { color: #870000; }
.muRegEdx { color: #af5f00; }
.Special { color: #ff6060; }
.LineNr { }
.muRegEsi { color: #005faf; }
.muRegEdi { color: #00af00; }
.muRegEbx { color: #5f00ff; }
.Constant { color: #008787; }
.muRegEdi { color: #00af00; }
.muRegEcx { color: #870000; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.CommentedCode { color: #8a8a8a; }
.Delimiter { color: #c000c0; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -81,18 +81,18 @@ if ('onhashchange' in window) {
<span id="L17" class="LineNr"> 17 </span> <span class="PreProc">break-if-&gt;=</span>
<span id="L18" class="LineNr"> 18 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false
<span id="L19" class="LineNr"> 19 </span> <span class="Delimiter">}</span>
<span id="L20" class="LineNr"> 20 </span> compare x, <span class="Constant">0x100</span>/width
<span id="L20" class="LineNr"> 20 </span> compare x, <span class="Constant">0x80</span>/width
<span id="L21" class="LineNr"> 21 </span> <span class="Delimiter">{</span>
<span id="L22" class="LineNr"> 22 </span> <span class="PreProc">break-if-&lt;</span>
<span id="L23" class="LineNr"> 23 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false
<span id="L24" class="LineNr"> 24 </span> <span class="Delimiter">}</span>
<span id="L25" class="LineNr"> 25 </span> compare y, <span class="Constant">0xc0</span>/height
<span id="L25" class="LineNr"> 25 </span> compare y, <span class="Constant">0x60</span>/height
<span id="L26" class="LineNr"> 26 </span> <span class="Delimiter">{</span>
<span id="L27" class="LineNr"> 27 </span> <span class="PreProc">break-if-&lt;</span>
<span id="L28" class="LineNr"> 28 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false
<span id="L29" class="LineNr"> 29 </span> <span class="Delimiter">}</span>
<span id="L30" class="LineNr"> 30 </span> <span class="PreProc">var</span> idx/eax: int <span class="Special">&lt;-</span> copy y
<span id="L31" class="LineNr"> 31 </span> idx <span class="Special">&lt;-</span> shift-left <span class="Constant">8</span>/log2width
<span id="L31" class="LineNr"> 31 </span> idx <span class="Special">&lt;-</span> shift-left <span class="Constant">7</span>/log2width
<span id="L32" class="LineNr"> 32 </span> idx <span class="Special">&lt;-</span> add x
<span id="L33" class="LineNr"> 33 </span> <span class="PreProc">var</span> grid/<span class="muRegEsi">esi</span>: (addr array boolean) <span class="Special">&lt;-</span> copy _grid
<span id="L34" class="LineNr"> 34 </span> <span class="PreProc">var</span> result/eax: (addr boolean) <span class="Special">&lt;-</span> index grid, idx
@ -102,7 +102,7 @@ if ('onhashchange' in window) {
<span id="L38" class="LineNr"> 38 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='life.mu.html#L38'>set-state</a></span> _grid: (addr array boolean), x: int, y: int, val: boolean <span class="Delimiter">{</span>
<span id="L39" class="LineNr"> 39 </span> <span class="muComment"># don't bother checking bounds</span>
<span id="L40" class="LineNr"> 40 </span> <span class="PreProc">var</span> idx/eax: int <span class="Special">&lt;-</span> copy y
<span id="L41" class="LineNr"> 41 </span> idx <span class="Special">&lt;-</span> shift-left <span class="Constant">8</span>/log2width
<span id="L41" class="LineNr"> 41 </span> idx <span class="Special">&lt;-</span> shift-left <span class="Constant">7</span>/log2width
<span id="L42" class="LineNr"> 42 </span> idx <span class="Special">&lt;-</span> add x
<span id="L43" class="LineNr"> 43 </span> <span class="PreProc">var</span> grid/<span class="muRegEsi">esi</span>: (addr array boolean) <span class="Special">&lt;-</span> copy _grid
<span id="L44" class="LineNr"> 44 </span> <span class="PreProc">var</span> result/eax: (addr boolean) <span class="Special">&lt;-</span> index grid, idx
@ -178,11 +178,11 @@ if ('onhashchange' in window) {
<span id="L114" class="LineNr">114 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='life.mu.html#L114'>step</a></span> old-grid: (addr array boolean), new-grid: (addr array boolean) <span class="Delimiter">{</span>
<span id="L115" class="LineNr">115 </span> <span class="PreProc">var</span> y/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L116" class="LineNr">116 </span> <span class="Delimiter">{</span>
<span id="L117" class="LineNr">117 </span> compare y, <span class="Constant">0xc0</span>/height
<span id="L117" class="LineNr">117 </span> compare y, <span class="Constant">0x60</span>/height
<span id="L118" class="LineNr">118 </span> <span class="PreProc">break-if-&gt;=</span>
<span id="L119" class="LineNr">119 </span> <span class="PreProc">var</span> x/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L120" class="LineNr">120 </span> <span class="Delimiter">{</span>
<span id="L121" class="LineNr">121 </span> compare x, <span class="Constant">0x100</span>/width
<span id="L121" class="LineNr">121 </span> compare x, <span class="Constant">0x80</span>/width
<span id="L122" class="LineNr">122 </span> <span class="PreProc">break-if-&gt;=</span>
<span id="L123" class="LineNr">123 </span> <span class="PreProc">var</span> n/eax: int <span class="Special">&lt;-</span> <a href='life.mu.html#L49'>num-live-neighbors</a> old-grid, x, y
<span id="L124" class="LineNr">124 </span> <span class="muComment"># if neighbors &lt; 2, die of loneliness</span>
@ -221,9 +221,9 @@ if ('onhashchange' in window) {
<span id="L157" class="LineNr">157 </span><span class="muComment"># color a square of size 'side' starting at x*side, y*side</span>
<span id="L158" class="LineNr">158 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='life.mu.html#L158'>render-square</a></span> _x: int, _y: int, color: int <span class="Delimiter">{</span>
<span id="L159" class="LineNr">159 </span> <span class="PreProc">var</span> y/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy _y
<span id="L160" class="LineNr">160 </span> y <span class="Special">&lt;-</span> shift-left <span class="Constant">2</span>/log2side
<span id="L160" class="LineNr">160 </span> y <span class="Special">&lt;-</span> shift-left <span class="Constant">3</span>/log2side
<span id="L161" class="LineNr">161 </span> <span class="PreProc">var</span> side/<span class="muRegEbx">ebx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">1</span>
<span id="L162" class="LineNr">162 </span> side <span class="Special">&lt;-</span> shift-left <span class="Constant">2</span>/log2side
<span id="L162" class="LineNr">162 </span> side <span class="Special">&lt;-</span> shift-left <span class="Constant">3</span>/log2side
<span id="L163" class="LineNr">163 </span> <span class="PreProc">var</span> ymax/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy y
<span id="L164" class="LineNr">164 </span> ymax <span class="Special">&lt;-</span> add side
<span id="L165" class="LineNr">165 </span> <span class="Delimiter">{</span>
@ -231,7 +231,7 @@ if ('onhashchange' in window) {
<span id="L167" class="LineNr">167 </span> <span class="PreProc">break-if-&gt;=</span>
<span id="L168" class="LineNr">168 </span> <span class="Delimiter">{</span>
<span id="L169" class="LineNr">169 </span> <span class="PreProc">var</span> x/eax: int <span class="Special">&lt;-</span> copy _x
<span id="L170" class="LineNr">170 </span> x <span class="Special">&lt;-</span> shift-left <span class="Constant">2</span>/log2side
<span id="L170" class="LineNr">170 </span> x <span class="Special">&lt;-</span> shift-left <span class="Constant">3</span>/log2side
<span id="L171" class="LineNr">171 </span> <span class="PreProc">var</span> xmax/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy x
<span id="L172" class="LineNr">172 </span> xmax <span class="Special">&lt;-</span> add side
<span id="L173" class="LineNr">173 </span> <span class="Delimiter">{</span>
@ -260,12 +260,12 @@ if ('onhashchange' in window) {
<span id="L196" class="LineNr">196 </span> compare <a href='life.mu.html#L8'>state</a>, <span class="Constant">0</span>/false
<span id="L197" class="LineNr">197 </span> <span class="Delimiter">{</span>
<span id="L198" class="LineNr">198 </span> <span class="PreProc">break-if-=</span>
<span id="L199" class="LineNr">199 </span> <a href='life.mu.html#L158'>render-square</a> x, y, <span class="Constant">3</span>/cyan
<span id="L199" class="LineNr">199 </span> <a href='life.mu.html#L158'>render-square</a> x, y, <span class="Constant">0</span>/black
<span id="L200" class="LineNr">200 </span> <span class="Delimiter">}</span>
<span id="L201" class="LineNr">201 </span> compare <a href='life.mu.html#L8'>state</a>, <span class="Constant">0</span>/false
<span id="L202" class="LineNr">202 </span> <span class="Delimiter">{</span>
<span id="L203" class="LineNr">203 </span> <span class="PreProc">break-if-!=</span>
<span id="L204" class="LineNr">204 </span> <a href='life.mu.html#L158'>render-square</a> x, y, <span class="Constant">0</span>/black
<span id="L204" class="LineNr">204 </span> <a href='life.mu.html#L158'>render-square</a> x, y, <span class="Constant">3</span>/cyan
<span id="L205" class="LineNr">205 </span> <span class="Delimiter">}</span>
<span id="L206" class="LineNr">206 </span> x <span class="Special">&lt;-</span> increment
<span id="L207" class="LineNr">207 </span> <span class="PreProc">loop</span>
@ -284,20 +284,20 @@ if ('onhashchange' in window) {
<span id="L220" class="LineNr">220 </span> <span class="muComment"># allocate on the heap</span>
<span id="L221" class="LineNr">221 </span> <span class="PreProc">var</span> grid1-storage: (handle array boolean)
<span id="L222" class="LineNr">222 </span> <span class="PreProc">var</span> grid1-ah/eax: (addr handle array boolean) <span class="Special">&lt;-</span> address grid1-storage
<span id="L223" class="LineNr">223 </span> populate grid1-ah, <span class="Constant">0xc000</span> <span class="muComment"># width * height</span>
<span id="L224" class="LineNr">224 </span> <span class="PreProc">var</span> _grid1/eax: (addr array boolean) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *grid1-ah
<span id="L223" class="LineNr">223 </span> populate grid1-ah, <span class="Constant">0x3000</span> <span class="muComment"># width * height</span>
<span id="L224" class="LineNr">224 </span> <span class="PreProc">var</span> _grid1/eax: (addr array boolean) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *grid1-ah
<span id="L225" class="LineNr">225 </span> <span class="PreProc">var</span> grid1/<span class="muRegEsi">esi</span>: (addr array boolean) <span class="Special">&lt;-</span> copy _grid1
<span id="L226" class="LineNr">226 </span> <span class="PreProc">var</span> grid2-storage: (handle array boolean)
<span id="L227" class="LineNr">227 </span> <span class="PreProc">var</span> grid2-ah/eax: (addr handle array boolean) <span class="Special">&lt;-</span> address grid2-storage
<span id="L228" class="LineNr">228 </span> populate grid2-ah, <span class="Constant">0xc000</span> <span class="muComment"># width * height</span>
<span id="L229" class="LineNr">229 </span> <span class="PreProc">var</span> _grid2/eax: (addr array boolean) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *grid2-ah
<span id="L228" class="LineNr">228 </span> populate grid2-ah, <span class="Constant">0x3000</span> <span class="muComment"># width * height</span>
<span id="L229" class="LineNr">229 </span> <span class="PreProc">var</span> _grid2/eax: (addr array boolean) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *grid2-ah
<span id="L230" class="LineNr">230 </span> <span class="PreProc">var</span> grid2/<span class="muRegEdi">edi</span>: (addr array boolean) <span class="Special">&lt;-</span> copy _grid2
<span id="L231" class="LineNr">231 </span> <span class="muComment"># initialize grid1</span>
<span id="L232" class="LineNr">232 </span> <a href='life.mu.html#L38'>set-state</a> grid1, <span class="Constant">0x80</span>, <span class="Constant">0x5f</span>, <span class="Constant">1</span>/live
<span id="L233" class="LineNr">233 </span> <a href='life.mu.html#L38'>set-state</a> grid1, <span class="Constant">0x81</span>, <span class="Constant">0x5f</span>, <span class="Constant">1</span>/live
<span id="L234" class="LineNr">234 </span> <a href='life.mu.html#L38'>set-state</a> grid1, <span class="Constant">0x7f</span>, <span class="Constant">0x60</span>, <span class="Constant">1</span>/live
<span id="L235" class="LineNr">235 </span> <a href='life.mu.html#L38'>set-state</a> grid1, <span class="Constant">0x80</span>, <span class="Constant">0x60</span>, <span class="Constant">1</span>/live
<span id="L236" class="LineNr">236 </span> <a href='life.mu.html#L38'>set-state</a> grid1, <span class="Constant">0x80</span>, <span class="Constant">0x61</span>, <span class="Constant">1</span>/live
<span id="L232" class="LineNr">232 </span> <a href='life.mu.html#L38'>set-state</a> grid1, <span class="Constant">0x40</span>, <span class="Constant">0x2f</span>, <span class="Constant">1</span>/live
<span id="L233" class="LineNr">233 </span> <a href='life.mu.html#L38'>set-state</a> grid1, <span class="Constant">0x41</span>, <span class="Constant">0x2f</span>, <span class="Constant">1</span>/live
<span id="L234" class="LineNr">234 </span> <a href='life.mu.html#L38'>set-state</a> grid1, <span class="Constant">0x3f</span>, <span class="Constant">0x30</span>, <span class="Constant">1</span>/live
<span id="L235" class="LineNr">235 </span> <a href='life.mu.html#L38'>set-state</a> grid1, <span class="Constant">0x40</span>, <span class="Constant">0x30</span>, <span class="Constant">1</span>/live
<span id="L236" class="LineNr">236 </span> <a href='life.mu.html#L38'>set-state</a> grid1, <span class="Constant">0x40</span>, <span class="Constant">0x31</span>, <span class="Constant">1</span>/live
<span id="L237" class="LineNr">237 </span> <span class="muComment"># render grid1</span>
<span id="L238" class="LineNr">238 </span> <a href='life.mu.html#L186'>render</a> grid1
<span id="L239" class="LineNr">239 </span> <span class="Delimiter">{</span>
@ -308,12 +308,25 @@ if ('onhashchange' in window) {
<span id="L244" class="LineNr">244 </span> <span class="muComment"># iter: grid1 -&gt; grid2</span>
<span id="L245" class="LineNr">245 </span> <a href='life.mu.html#L114'>step</a> grid1, grid2
<span id="L246" class="LineNr">246 </span> <a href='life.mu.html#L186'>render</a> grid2
<span id="L247" class="LineNr">247 </span> <span class="muComment"># iter: grid2 -&gt; grid1</span>
<span id="L248" class="LineNr">248 </span> <a href='life.mu.html#L114'>step</a> grid2, grid1
<span id="L249" class="LineNr">249 </span> <a href='life.mu.html#L186'>render</a> grid1
<span id="L250" class="LineNr">250 </span> <span class="PreProc">loop</span>
<span id="L251" class="LineNr">251 </span> <span class="Delimiter">}</span>
<span id="L252" class="LineNr">252 </span><span class="Delimiter">}</span>
<span id="L247" class="LineNr">247 </span><span class="CommentedCode">#? linger</span>
<span id="L248" class="LineNr">248 </span> <span class="muComment"># iter: grid2 -&gt; grid1</span>
<span id="L249" class="LineNr">249 </span> <a href='life.mu.html#L114'>step</a> grid2, grid1
<span id="L250" class="LineNr">250 </span> <a href='life.mu.html#L186'>render</a> grid1
<span id="L251" class="LineNr">251 </span><span class="CommentedCode">#? linger</span>
<span id="L252" class="LineNr">252 </span> <span class="PreProc">loop</span>
<span id="L253" class="LineNr">253 </span> <span class="Delimiter">}</span>
<span id="L254" class="LineNr">254 </span><span class="Delimiter">}</span>
<span id="L255" class="LineNr">255 </span>
<span id="L256" class="LineNr">256 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='life.mu.html#L256'>linger</a></span> <span class="Delimiter">{</span>
<span id="L257" class="LineNr">257 </span> <span class="PreProc">var</span> i/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L258" class="LineNr">258 </span> <span class="Delimiter">{</span>
<span id="L259" class="LineNr">259 </span> compare i, <span class="Constant">0x10000000</span> <span class="muComment"># Kartik's Linux with -accel kvm</span>
<span id="L260" class="LineNr">260 </span><span class="CommentedCode">#? compare i, 0x8000000 # Kartik's Mac with -accel tcg</span>
<span id="L261" class="LineNr">261 </span> <span class="PreProc">break-if-&gt;=</span>
<span id="L262" class="LineNr">262 </span> i <span class="Special">&lt;-</span> increment
<span id="L263" class="LineNr">263 </span> <span class="PreProc">loop</span>
<span id="L264" class="LineNr">264 </span> <span class="Delimiter">}</span>
<span id="L265" class="LineNr">265 </span><span class="Delimiter">}</span>
</pre>
</body>
</html>

View File

@ -1,36 +1,36 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - apps/mandelbrot-fixed.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.muRegEbx { color: #5f00ff; }
.muRegEcx { color: #870000; }
.muRegEdx { color: #af5f00; }
.Special { color: #ff6060; }
.LineNr { }
.muRegEsi { color: #005faf; }
.muRegEdi { color: #00af00; }
.muRegEbx { color: #5f00ff; }
.Constant { color: #008787; }
.muRegEdi { color: #00af00; }
.muRegEcx { color: #870000; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muTest { color: #5f8700; }
.Delimiter { color: #c000c0; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

View File

@ -1,34 +1,34 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - apps/mandelbrot-silhouette.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.muRegEcx { color: #870000; }
.muRegEdx { color: #af5f00; }
.Special { color: #ff6060; }
.LineNr { }
.muRegEsi { color: #005faf; }
.muRegEdi { color: #00af00; }
.Constant { color: #008787; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muRegEdi { color: #00af00; }
.muRegEcx { color: #870000; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

View File

@ -1,35 +1,35 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - apps/mandelbrot.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.muRegEbx { color: #5f00ff; }
.muRegEcx { color: #870000; }
.muRegEdx { color: #af5f00; }
.Special { color: #ff6060; }
.LineNr { }
.muRegEsi { color: #005faf; }
.muRegEdi { color: #00af00; }
.muRegEbx { color: #5f00ff; }
.Constant { color: #008787; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muRegEdi { color: #00af00; }
.muRegEcx { color: #870000; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

28
html/apps/rpn.mu.html generated
View File

@ -1,34 +1,34 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - apps/rpn.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.muRegEcx { color: #870000; }
.muRegEdx { color: #af5f00; }
.Special { color: #ff6060; }
.LineNr { }
.muRegEsi { color: #005faf; }
.muRegEdi { color: #00af00; }
.Constant { color: #008787; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muRegEdi { color: #00af00; }
.muRegEcx { color: #870000; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -108,7 +108,7 @@ if ('onhashchange' in window) {
<span id="L46" class="LineNr"> 46 </span> <span class="PreProc">var</span> out/eax: int <span class="Special">&lt;-</span> <a href='rpn.mu.html#L62'>simplify</a> in
<span id="L47" class="LineNr"> 47 </span> <span class="muComment"># print</span>
<span id="L48" class="LineNr"> 48 </span> y <span class="Special">&lt;-</span> increment
<span id="L49" class="LineNr"> 49 </span> out, y <span class="Special">&lt;-</span> <a href='../501draw-text.mu.html#L340'>draw-int32-decimal-wrapping-right-then-down</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, out, <span class="Constant">0</span>/xmin, y, <span class="Constant">0x80</span>/xmax, <span class="Constant">0x30</span>/ymax, <span class="Constant">0</span>/x, y, <span class="Constant">7</span>/fg, <span class="Constant">0</span>/bg
<span id="L49" class="LineNr"> 49 </span> out, y <span class="Special">&lt;-</span> <a href='../501draw-text.mu.html#L337'>draw-int32-decimal-wrapping-right-then-down</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, out, <span class="Constant">0</span>/xmin, y, <span class="Constant">0x80</span>/xmax, <span class="Constant">0x30</span>/ymax, <span class="Constant">0</span>/x, y, <span class="Constant">7</span>/fg, <span class="Constant">0</span>/bg
<span id="L50" class="LineNr"> 50 </span> <span class="muComment"># newline</span>
<span id="L51" class="LineNr"> 51 </span> y <span class="Special">&lt;-</span> increment
<span id="L52" class="LineNr"> 52 </span> <span class="muComment">#</span>
@ -187,7 +187,7 @@ if ('onhashchange' in window) {
<span id="L125" class="LineNr">125 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr <a href='rpn.mu.html#L57'>int-stack</a>) <span class="Special">&lt;-</span> copy _self
<span id="L126" class="LineNr">126 </span> <span class="PreProc">var</span> top-addr/<span class="muRegEcx">ecx</span>: (addr int) <span class="Special">&lt;-</span> get self, top
<span id="L127" class="LineNr">127 </span> <span class="PreProc">var</span> data-ah/<span class="muRegEdx">edx</span>: (addr handle array int) <span class="Special">&lt;-</span> get self, data
<span id="L128" class="LineNr">128 </span> <span class="PreProc">var</span> data/eax: (addr array int) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *data-ah
<span id="L128" class="LineNr">128 </span> <span class="PreProc">var</span> data/eax: (addr array int) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *data-ah
<span id="L129" class="LineNr">129 </span> <span class="PreProc">var</span> top/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy *top-addr
<span id="L130" class="LineNr">130 </span> <span class="PreProc">var</span> dest-addr/<span class="muRegEdx">edx</span>: (addr int) <span class="Special">&lt;-</span> index data, top
<span id="L131" class="LineNr">131 </span> <span class="PreProc">var</span> val/eax: int <span class="Special">&lt;-</span> copy _val
@ -205,7 +205,7 @@ if ('onhashchange' in window) {
<span id="L143" class="LineNr">143 </span> <span class="Delimiter">}</span>
<span id="L144" class="LineNr">144 </span> subtract-from *top-addr, <span class="Constant">1</span>
<span id="L145" class="LineNr">145 </span> <span class="PreProc">var</span> data-ah/<span class="muRegEdx">edx</span>: (addr handle array int) <span class="Special">&lt;-</span> get self, data
<span id="L146" class="LineNr">146 </span> <span class="PreProc">var</span> data/eax: (addr array int) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *data-ah
<span id="L146" class="LineNr">146 </span> <span class="PreProc">var</span> data/eax: (addr array int) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *data-ah
<span id="L147" class="LineNr">147 </span> <span class="PreProc">var</span> top/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy *top-addr
<span id="L148" class="LineNr">148 </span> <span class="PreProc">var</span> result-addr/eax: (addr int) <span class="Special">&lt;-</span> index data, top
<span id="L149" class="LineNr">149 </span> <span class="PreProc">var</span> val/eax: int <span class="Special">&lt;-</span> copy *result-addr

56
html/boot.subx.html generated
View File

@ -1,32 +1,32 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - boot.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.subxH1Comment { color: #005faf; text-decoration: underline; }
.subxComment { color: #005faf; }
.LineNr { }
.subxFunction { color: #af5f00; text-decoration: underline; }
.subxS1Comment { color: #0000af; }
.LineNr { }
.CommentedCode { color: #8a8a8a; }
.SpecialChar { color: #d70000; }
.Constant { color: #008787; }
.Folded { color: #080808; background-color: #949494; }
.subxH1Comment { color: #005faf; text-decoration: underline; }
.subxS1Comment { color: #0000af; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -75,10 +75,10 @@ if ('onhashchange' in window) {
<span id="L15" class="LineNr"> 15 </span><span class="subxComment"># understand hardware interfaces well enough to explain to others.</span>
<span id="L16" class="LineNr"> 16 </span>
<span id="L17" class="LineNr"> 17 </span><span class="subxComment"># Memory map of a Mu computer:</span>
<span id="L18" class="LineNr"> 18 </span><span class="subxComment"># code: currently 4 tracks loaded from the primary disk to [0x00007c00, 0x00048600)</span>
<span id="L18" class="LineNr"> 18 </span><span class="subxComment"># code: some tracks loaded from primary disk to [0x00007c00, 0x00080000)</span>
<span id="L19" class="LineNr"> 19 </span><span class="subxComment"># stack: grows down from 0x02000000 to 0x01000000</span>
<span id="L20" class="LineNr"> 20 </span><span class="subxComment"># heap: [0x02000000, 0x08000000)</span>
<span id="L21" class="LineNr"> 21 </span><span class="subxComment"># see 120allocate.subx; Qemu initializes with 128MB RAM by default</span>
<span id="L20" class="LineNr"> 20 </span><span class="subxComment"># heap: [0x02000000, 0x80000000)</span>
<span id="L21" class="LineNr"> 21 </span><span class="subxComment"># see 120allocate.subx; Qemu initializes with 128MB RAM by default; simulating 2GB RAM is known to work</span>
<span id="L22" class="LineNr"> 22 </span><span class="subxComment"># Consult <a href="https://wiki.osdev.org/Memory_Map_(x86)">https://wiki.osdev.org/Memory_Map_(x86)</a> before modifying any of</span>
<span id="L23" class="LineNr"> 23 </span><span class="subxComment"># this. And don't forget to keep *stack-debug.subx in sync.</span>
<span id="L24" class="LineNr"> 24 </span>
@ -358,7 +358,7 @@ if ('onhashchange' in window) {
<span id="L298" class="LineNr"> 298 </span> ff 03 <span class="subxComment"># final index of idt = size of idt - 1</span>
<span id="L299" class="LineNr"> 299 </span> <a href='boot.subx.html#L303'>idt_start</a>/imm32/start
<span id="L300" class="LineNr"> 300 </span>
<span id="L301" class="Folded"> 301 </span><span class="Folded">+-- 55 lines: # interrupt descriptor table ---------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L301" class="Folded"> 301 </span><span class="Folded">+-- 55 lines: # interrupt descriptor table ----------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L356" class="LineNr"> 356 </span>
<span id="L357" class="LineNr"> 357 </span>== code
<span id="L358" class="LineNr"> 358 </span>
@ -524,13 +524,13 @@ if ('onhashchange' in window) {
<span id="L518" class="LineNr"> 518 </span> 00 00 00 00
<span id="L519" class="LineNr"> 519 </span> 00 00 00 00
<span id="L520" class="LineNr"> 520 </span>
<span id="L521" class="Folded"> 521 </span><span class="Folded">+-- 95 lines: # Keyboard maps for translating keys to ASCII ----------------------------------------------------------------------------------------------------------------</span>
<span id="L521" class="Folded"> 521 </span><span class="Folded">+-- 95 lines: # Keyboard maps for translating keys to ASCII -----------------------------------------------------------------------------------------------------------------------------</span>
<span id="L616" class="LineNr"> 616 </span>
<span id="L617" class="LineNr"> 617 </span><span class="SpecialChar">Video-mode-info</span>:
<span id="L618" class="Folded"> 618 </span><span class="Folded">+-- 53 lines: # video mode info --------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L618" class="Folded"> 618 </span><span class="Folded">+-- 53 lines: # video mode info ---------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L671" class="LineNr"> 671 </span>
<span id="L672" class="LineNr"> 672 </span><span class="SpecialChar">Font</span>:
<span id="L673" class="Folded"> 673 </span><span class="Folded">+--236 lines: # Bitmaps for some ASCII characters (soon Unicode) -----------------------------------------------------------------------------------------------------------</span>
<span id="L673" class="Folded"> 673 </span><span class="Folded">+--236 lines: # Bitmaps for some ASCII characters (soon Unicode) ------------------------------------------------------------------------------------------------------------------------</span>
<span id="L909" class="LineNr"> 909 </span>
<span id="L910" class="LineNr"> 910 </span><span class="subxComment">## Controlling IDE (ATA) hard disks</span>
<span id="L911" class="LineNr"> 911 </span><span class="subxComment"># Uses 28-bit PIO mode.</span>
@ -598,7 +598,7 @@ if ('onhashchange' in window) {
<span id="L973" class="LineNr"> 973 </span>== code
<span id="L974" class="LineNr"> 974 </span>
<span id="L975" class="LineNr"> 975 </span><span class="subxComment"># No more than 0x100 sectors</span>
<span id="L976" class="LineNr"> 976 </span><span class="subxFunction">load-sectors</span>: <span class="subxComment"># disk: (addr disk), lba: int, n: int, out: (addr stream byte)</span>
<span id="L976" class="LineNr"> 976 </span><span class="subxFunction">read-ata-disk</span>: <span class="subxComment"># disk: (addr disk), lba: int, n: int, out: (addr stream byte)</span>
<span id="L977" class="LineNr"> 977 </span> <span class="subxS1Comment"># . prologue</span>
<span id="L978" class="LineNr"> 978 </span> 55/push-ebp
<span id="L979" class="LineNr"> 979 </span> 89/&lt;- %ebp 4/r32/esp
@ -610,12 +610,12 @@ if ('onhashchange' in window) {
<span id="L985" class="LineNr"> 985 </span> 81 7/subop/compare *(ebp+0x10) 0x100/imm32
<span id="L986" class="LineNr"> 986 </span> {
<span id="L987" class="LineNr"> 987 </span> 7e/jump-if-&lt;= <span class="Constant">break</span>/disp8
<span id="L988" class="LineNr"> 988 </span> (<a href='317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;load-sectors: no more than 0x100 sectors&quot;</span>)
<span id="L988" class="LineNr"> 988 </span> (<a href='317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;read-ata-disk: no more than 0x100 sectors&quot;</span>)
<span id="L989" class="LineNr"> 989 </span> }
<span id="L990" class="LineNr"> 990 </span> <span class="subxComment"># check for drive</span>
<span id="L991" class="LineNr"> 991 </span> (<a href='boot.subx.html#L1154'>drive-exists?</a> *(ebp+8)) <span class="subxComment"># =&gt; eax</span>
<span id="L992" class="LineNr"> 992 </span> 3d/compare-eax-and 0/imm32/false
<span id="L993" class="LineNr"> 993 </span> 0f 84/jump-if-= $load-sectors:end/disp32
<span id="L993" class="LineNr"> 993 </span> 0f 84/jump-if-= $read-ata-disk:end/disp32
<span id="L994" class="LineNr"> 994 </span> <span class="subxComment"># kick off read</span>
<span id="L995" class="LineNr"> 995 </span> (<a href='boot.subx.html#L1218'>ata-drive-select</a> *(ebp+8) *(ebp+0xc))
<span id="L996" class="LineNr"> 996 </span> (<a href='boot.subx.html#L1247'>clear-ata-error</a> *(ebp+8))
@ -657,7 +657,7 @@ if ('onhashchange' in window) {
<span id="L1032" class="LineNr">1032 </span><span class="CommentedCode">#? (draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0 &quot;next sector\n&quot; 7 0)</span>
<span id="L1033" class="LineNr">1033 </span> e9/jump <span class="Constant">loop</span>/disp32
<span id="L1034" class="LineNr">1034 </span> }
<span id="L1035" class="LineNr">1035 </span><span class="Constant">$load-sectors:end</span>:
<span id="L1035" class="LineNr">1035 </span><span class="Constant">$read-ata-disk:end</span>:
<span id="L1036" class="LineNr">1036 </span> <span class="subxS1Comment"># . restore registers</span>
<span id="L1037" class="LineNr">1037 </span> 5a/pop-to-edx
<span id="L1038" class="LineNr">1038 </span> 59/pop-to-ecx
@ -667,7 +667,7 @@ if ('onhashchange' in window) {
<span id="L1042" class="LineNr">1042 </span> 5d/pop-to-ebp
<span id="L1043" class="LineNr">1043 </span> c3/return
<span id="L1044" class="LineNr">1044 </span>
<span id="L1045" class="LineNr">1045 </span><span class="subxFunction">store-sectors</span>: <span class="subxComment"># disk: (addr disk), lba: int, n: int, in: (addr stream byte)</span>
<span id="L1045" class="LineNr">1045 </span><span class="subxFunction">write-ata-disk</span>: <span class="subxComment"># disk: (addr disk), lba: int, n: int, in: (addr stream byte)</span>
<span id="L1046" class="LineNr">1046 </span> <span class="subxS1Comment"># . prologue</span>
<span id="L1047" class="LineNr">1047 </span> 55/push-ebp
<span id="L1048" class="LineNr">1048 </span> 89/&lt;- %ebp 4/r32/esp
@ -679,7 +679,7 @@ if ('onhashchange' in window) {
<span id="L1054" class="LineNr">1054 </span> <span class="subxComment"># check for drive</span>
<span id="L1055" class="LineNr">1055 </span> (<a href='boot.subx.html#L1154'>drive-exists?</a> *(ebp+8)) <span class="subxComment"># =&gt; eax</span>
<span id="L1056" class="LineNr">1056 </span> 3d/compare-eax-and 0/imm32/false
<span id="L1057" class="LineNr">1057 </span> 0f 84/jump-if-= $store-sectors:end/disp32
<span id="L1057" class="LineNr">1057 </span> 0f 84/jump-if-= $write-ata-disk:end/disp32
<span id="L1058" class="LineNr">1058 </span> <span class="subxComment"># kick off write</span>
<span id="L1059" class="LineNr">1059 </span> (<a href='boot.subx.html#L1218'>ata-drive-select</a> *(ebp+8) *(ebp+0xc))
<span id="L1060" class="LineNr">1060 </span> (<a href='boot.subx.html#L1247'>clear-ata-error</a> *(ebp+8))
@ -702,7 +702,7 @@ if ('onhashchange' in window) {
<span id="L1077" class="LineNr">1077 </span> <span class="subxS1Comment"># . when it's more than 0xff, we're at an even-numbered byte</span>
<span id="L1078" class="LineNr">1078 </span> bb/copy-to-ebx 0xffff/imm32
<span id="L1079" class="LineNr">1079 </span><span class="CommentedCode">#? (draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0 &quot;D&quot; 7 0)</span>
<span id="L1080" class="LineNr">1080 </span><span class="Constant">$store-sectors:store-sector</span>:
<span id="L1080" class="LineNr">1080 </span><span class="Constant">$write-ata-disk:store-sector</span>:
<span id="L1081" class="LineNr">1081 </span> {
<span id="L1082" class="LineNr">1082 </span> 81 7/subop/compare %ecx 0/imm32
<span id="L1083" class="LineNr">1083 </span> 74/jump-if-= <span class="Constant">break</span>/disp8
@ -717,7 +717,7 @@ if ('onhashchange' in window) {
<span id="L1092" class="LineNr">1092 </span> {
<span id="L1093" class="LineNr">1093 </span> 7e/jump-if-&lt;= <span class="Constant">break</span>/disp8
<span id="L1094" class="LineNr">1094 </span> 89/&lt;- %ebx 0/r32/eax
<span id="L1095" class="LineNr">1095 </span> eb/jump $store-sectors:store-sector/disp8
<span id="L1095" class="LineNr">1095 </span> eb/jump $write-ata-disk:store-sector/disp8
<span id="L1096" class="LineNr">1096 </span> }
<span id="L1097" class="LineNr">1097 </span> <span class="subxComment"># otherwise OR it with first-byte and write it out</span>
<span id="L1098" class="LineNr">1098 </span> c1/shift 4/subop/left %eax 8/imm8
@ -763,7 +763,7 @@ if ('onhashchange' in window) {
<span id="L1138" class="LineNr">1138 </span><span class="CommentedCode">#? (draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0 &quot;F&quot; 7 0)</span>
<span id="L1139" class="LineNr">1139 </span> (<a href='boot.subx.html#L1421'>flush-ata-cache</a> *(ebp+8))
<span id="L1140" class="LineNr">1140 </span><span class="CommentedCode">#? (draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0 &quot;Y&quot; 7 0)</span>
<span id="L1141" class="LineNr">1141 </span><span class="Constant">$store-sectors:end</span>:
<span id="L1141" class="LineNr">1141 </span><span class="Constant">$write-ata-disk:end</span>:
<span id="L1142" class="LineNr">1142 </span> <span class="subxS1Comment"># . restore registers</span>
<span id="L1143" class="LineNr">1143 </span> 5b/pop-to-ebx
<span id="L1144" class="LineNr">1144 </span> 5a/pop-to-edx
@ -774,7 +774,7 @@ if ('onhashchange' in window) {
<span id="L1149" class="LineNr">1149 </span> 5d/pop-to-ebp
<span id="L1150" class="LineNr">1150 </span> c3/return
<span id="L1151" class="LineNr">1151 </span>
<span id="L1152" class="Folded">1152 </span><span class="Folded">+--289 lines: # disk helpers -----------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L1152" class="Folded">1152 </span><span class="Folded">+--289 lines: # disk helpers ------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L1441" class="LineNr">1441 </span>
<span id="L1442" class="LineNr">1442 </span><span class="subxComment">## Controlling a PS/2 mouse</span>
<span id="L1443" class="LineNr">1443 </span><span class="subxComment"># Uses no IRQs, just polling.</span>
@ -835,7 +835,7 @@ if ('onhashchange' in window) {
<span id="L1498" class="LineNr">1498 </span> 5d/pop-to-ebp
<span id="L1499" class="LineNr">1499 </span> c3/return
<span id="L1500" class="LineNr">1500 </span>
<span id="L1501" class="Folded">1501 </span><span class="Folded">+--147 lines: # mouse helpers ----------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L1501" class="Folded">1501 </span><span class="Folded">+--147 lines: # mouse helpers -----------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L1648" class="LineNr">1648 </span>
<span id="L1649" class="LineNr">1649 </span><span class="subxComment"># vim&#0058;ft=subx</span>
</pre>

File diff suppressed because it is too large Load Diff

View File

@ -1,36 +1,36 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - browse-slack/main.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.muRegEbx { color: #5f00ff; }
.muRegEcx { color: #870000; }
.muRegEdx { color: #af5f00; }
.LineNr { }
.CommentedCode { color: #8a8a8a; }
.muRegEdi { color: #00af00; }
.Constant { color: #008787; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muRegEsi { color: #005faf; }
.Delimiter { color: #c000c0; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
.LineNr { }
.muRegEcx { color: #870000; }
.muRegEsi { color: #005faf; }
.muRegEbx { color: #5f00ff; }
.Constant { color: #008787; }
.muRegEdi { color: #00af00; }
.CommentedCode { color: #8a8a8a; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muComment { color: #005faf; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -65,7 +65,7 @@ if ('onhashchange' in window) {
<span id="L1" class="LineNr"> 1 </span><span class="PreProc">type</span> <a href='main.mu.html#L1'>channel</a> <span class="Delimiter">{</span>
<span id="L2" class="LineNr"> 2 </span> name: (handle array byte)
<span id="L3" class="LineNr"> 3 </span> posts: (handle array int) <span class="muComment"># item indices</span>
<span id="L4" class="LineNr"> 4 </span> newest-post-index: int
<span id="L4" class="LineNr"> 4 </span> posts-first-free: int
<span id="L5" class="LineNr"> 5 </span><span class="Delimiter">}</span>
<span id="L6" class="LineNr"> 6 </span>
<span id="L7" class="LineNr"> 7 </span><span class="PreProc">type</span> <a href='main.mu.html#L7'>user</a> <span class="Delimiter">{</span>
@ -82,12 +82,12 @@ if ('onhashchange' in window) {
<span id="L18" class="LineNr"> 18 </span> text: (handle array byte)
<span id="L19" class="LineNr"> 19 </span> parent: int <span class="muComment"># item index</span>
<span id="L20" class="LineNr"> 20 </span> comments: (handle array int)
<span id="L21" class="LineNr"> 21 </span> newest-comment-index: int
<span id="L21" class="LineNr"> 21 </span> comments-first-free: int
<span id="L22" class="LineNr"> 22 </span><span class="Delimiter">}</span>
<span id="L23" class="LineNr"> 23 </span>
<span id="L24" class="LineNr"> 24 </span><span class="PreProc">type</span> <a href='main.mu.html#L24'>item-list</a> <span class="Delimiter">{</span>
<span id="L25" class="LineNr"> 25 </span> data: (handle array <a href='main.mu.html#L14'>item</a>)
<span id="L26" class="LineNr"> 26 </span> newest: int
<span id="L26" class="LineNr"> 26 </span> data-first-free: int
<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="muComment"># globals:</span>
@ -121,397 +121,414 @@ if ('onhashchange' in window) {
<span id="L57" class="LineNr"> 57 </span> <span class="PreProc">var</span> s/<span class="muRegEbx">ebx</span>: (addr stream byte) <span class="Special">&lt;-</span> copy _s
<span id="L58" class="LineNr"> 58 </span> <span class="PreProc">var</span> sector-count/eax: int <span class="Special">&lt;-</span> copy <span class="Constant">0x400</span> <span class="muComment"># test_data</span>
<span id="L59" class="LineNr"> 59 </span><span class="CommentedCode">#? var sector-count/eax: int &lt;- copy 0x20000 # largest size tested; slow</span>
<span id="L60" class="LineNr"> 60 </span> <a href='../501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot;loading &quot;</span>, <span class="Constant">3</span>/fg <span class="Constant">0</span>/bg
<span id="L61" class="LineNr"> 61 </span> <a href='../501draw-text.mu.html#L384'>draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, sector-count, <span class="Constant">3</span>/fg <span class="Constant">0</span>/bg
<span id="L62" class="LineNr"> 62 </span> <a href='../501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot; sectors from data disk..&quot;</span>, <span class="Constant">3</span>/fg <span class="Constant">0</span>/bg
<span id="L63" class="LineNr"> 63 </span> <a href='../510disk.mu.html#L1'>load-sectors</a> data-disk, <span class="Constant">0</span>/lba, sector-count, s
<span id="L64" class="LineNr"> 64 </span> <a href='../501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot;done&quot;</span>, <span class="Constant">3</span>/fg <span class="Constant">0</span>/bg
<span id="L65" class="LineNr"> 65 </span> <span class="muComment"># parse global data structures out of the stream</span>
<span id="L66" class="LineNr"> 66 </span> <span class="PreProc">var</span> users-h: (handle array <a href='main.mu.html#L7'>user</a>)
<span id="L67" class="LineNr"> 67 </span> <span class="PreProc">var</span> users-ah/eax: (addr handle array <a href='main.mu.html#L7'>user</a>) <span class="Special">&lt;-</span> address users-h
<span id="L68" class="LineNr"> 68 </span> populate users-ah, <span class="Constant">0x800</span>/num-users
<span id="L69" class="LineNr"> 69 </span> <span class="PreProc">var</span> _users/eax: (addr array <a href='main.mu.html#L7'>user</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *users-ah
<span id="L70" class="LineNr"> 70 </span> <span class="PreProc">var</span> users/<span class="muRegEdi">edi</span>: (addr array <a href='main.mu.html#L7'>user</a>) <span class="Special">&lt;-</span> copy _users
<span id="L71" class="LineNr"> 71 </span> <span class="PreProc">var</span> channels-h: (handle array <a href='main.mu.html#L1'>channel</a>)
<span id="L72" class="LineNr"> 72 </span> <span class="PreProc">var</span> channels-ah/eax: (addr handle array <a href='main.mu.html#L1'>channel</a>) <span class="Special">&lt;-</span> address channels-h
<span id="L73" class="LineNr"> 73 </span> populate channels-ah, <span class="Constant">0x20</span>/num-channels
<span id="L74" class="LineNr"> 74 </span> <span class="PreProc">var</span> _channels/eax: (addr array <a href='main.mu.html#L1'>channel</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *channels-ah
<span id="L75" class="LineNr"> 75 </span> <span class="PreProc">var</span> channels/<span class="muRegEsi">esi</span>: (addr array <a href='main.mu.html#L1'>channel</a>) <span class="Special">&lt;-</span> copy _channels
<span id="L76" class="LineNr"> 76 </span> <span class="PreProc">var</span> items-storage: <a href='main.mu.html#L24'>item-list</a>
<span id="L77" class="LineNr"> 77 </span> <span class="PreProc">var</span> items/<span class="muRegEdx">edx</span>: (addr <a href='main.mu.html#L24'>item-list</a>) <span class="Special">&lt;-</span> address items-storage
<span id="L78" class="LineNr"> 78 </span> <span class="PreProc">var</span> items-data-ah/eax: (addr handle array <a href='main.mu.html#L14'>item</a>) <span class="Special">&lt;-</span> get items, data
<span id="L79" class="LineNr"> 79 </span> populate items-data-ah, <span class="Constant">0x10000</span>/num-items
<span id="L80" class="LineNr"> 80 </span> <a href='main.mu.html#L97'>parse</a> s, users, channels, items
<span id="L81" class="LineNr"> 81 </span> <span class="muComment"># render</span>
<span id="L82" class="LineNr"> 82 </span> <span class="PreProc">var</span> env-storage: <a href='environment.mu.html#L1'>environment</a>
<span id="L83" class="LineNr"> 83 </span> <span class="PreProc">var</span> env/<span class="muRegEbx">ebx</span>: (addr <a href='environment.mu.html#L1'>environment</a>) <span class="Special">&lt;-</span> address env-storage
<span id="L84" class="LineNr"> 84 </span> <a href='environment.mu.html#L19'>initialize-environment</a> env, items
<span id="L85" class="LineNr"> 85 </span> <span class="Delimiter">{</span>
<span id="L86" class="LineNr"> 86 </span> <a href='environment.mu.html#L28'>render-environment</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, env, users, channels, items
<span id="L87" class="LineNr"> 87 </span> <span class="Delimiter">{</span>
<span id="L88" class="LineNr"> 88 </span> <span class="PreProc">var</span> key/eax: byte <span class="Special">&lt;-</span> <a href='../102keyboard.subx.html#L21'>read-key</a> keyboard
<span id="L89" class="LineNr"> 89 </span> compare key, <span class="Constant">0</span>
<span id="L90" class="LineNr"> 90 </span> <span class="PreProc">loop-if-=</span>
<span id="L91" class="LineNr"> 91 </span> <a href='environment.mu.html#L175'>update-environment</a> env, key, items
<span id="L92" class="LineNr"> 92 </span> <span class="Delimiter">}</span>
<span id="L93" class="LineNr"> 93 </span> <span class="PreProc">loop</span>
<span id="L94" class="LineNr"> 94 </span> <span class="Delimiter">}</span>
<span id="L95" class="LineNr"> 95 </span><span class="Delimiter">}</span>
<span id="L96" class="LineNr"> 96 </span>
<span id="L97" class="LineNr"> 97 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='main.mu.html#L97'>parse</a></span> in: (addr stream byte), users: (addr array <a href='main.mu.html#L7'>user</a>), channels: (addr array <a href='main.mu.html#L1'>channel</a>), _items: (addr <a href='main.mu.html#L24'>item-list</a>) <span class="Delimiter">{</span>
<span id="L98" class="LineNr"> 98 </span> <span class="PreProc">var</span> items/<span class="muRegEsi">esi</span>: (addr <a href='main.mu.html#L24'>item-list</a>) <span class="Special">&lt;-</span> copy _items
<span id="L99" class="LineNr"> 99 </span> <span class="PreProc">var</span> items-data-ah/eax: (addr handle array <a href='main.mu.html#L14'>item</a>) <span class="Special">&lt;-</span> get items, data
<span id="L100" class="LineNr">100 </span> <span class="PreProc">var</span> _items-data/eax: (addr array <a href='main.mu.html#L14'>item</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *items-data-ah
<span id="L101" class="LineNr">101 </span> <span class="PreProc">var</span> items-data/<span class="muRegEdi">edi</span>: (addr array <a href='main.mu.html#L14'>item</a>) <span class="Special">&lt;-</span> copy _items-data
<span id="L102" class="LineNr">102 </span> <span class="muComment"># 'in' consists of a long, flat sequence of records surrounded by parens</span>
<span id="L103" class="LineNr">103 </span> <span class="PreProc">var</span> record-storage: (stream byte <span class="Constant">0x18000</span>)
<span id="L104" class="LineNr">104 </span> <span class="PreProc">var</span> record/<span class="muRegEcx">ecx</span>: (addr stream byte) <span class="Special">&lt;-</span> address record-storage
<span id="L105" class="LineNr">105 </span> <span class="PreProc">var</span> user-idx/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L106" class="LineNr">106 </span> <span class="PreProc">var</span> item-idx/<span class="muRegEbx">ebx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L107" class="LineNr">107 </span> <span class="Delimiter">{</span>
<span id="L108" class="LineNr">108 </span> <span class="PreProc">var</span> done?/eax: boolean <span class="Special">&lt;-</span> <a href='../309stream.subx.html#L6'>stream-empty?</a> in
<span id="L109" class="LineNr">109 </span> compare done?, <span class="Constant">0</span>/false
<span id="L110" class="LineNr">110 </span> <span class="PreProc">break-if-!=</span>
<span id="L111" class="LineNr">111 </span> <span class="PreProc">var</span> c/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L47'>peek-byte</a> in
<span id="L112" class="LineNr">112 </span> compare c, <span class="Constant">0</span>
<span id="L113" class="LineNr">113 </span> <span class="PreProc">break-if-=</span>
<span id="L114" class="LineNr">114 </span> <a href='../500fake-screen.mu.html#L190'>set-cursor-position</a> <span class="Constant">0</span>/screen, <span class="Constant">0x20</span> <span class="Constant">0x20</span>
<span id="L115" class="LineNr">115 </span> <a href='../501draw-text.mu.html#L384'>draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, user-idx, <span class="Constant">3</span>/fg <span class="Constant">0</span>/bg
<span id="L116" class="LineNr">116 </span> <a href='../501draw-text.mu.html#L384'>draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, item-idx, <span class="Constant">4</span>/fg <span class="Constant">0</span>/bg
<span id="L117" class="LineNr">117 </span> <a href='../106stream.subx.html#L20'>clear-stream</a> record
<span id="L118" class="LineNr">118 </span> <a href='main.mu.html#L139'>parse-record</a> in, record
<span id="L119" class="LineNr">119 </span> <span class="PreProc">var</span> user?/eax: boolean <span class="Special">&lt;-</span> <a href='main.mu.html#L175'>user-record?</a> record
<span id="L120" class="LineNr">120 </span> <span class="Delimiter">{</span>
<span id="L121" class="LineNr">121 </span> compare user?, <span class="Constant">0</span>/false
<span id="L122" class="LineNr">122 </span> <span class="PreProc">break-if-=</span>
<span id="L123" class="LineNr">123 </span> <a href='main.mu.html#L189'>parse-user</a> record, users, user-idx
<span id="L124" class="LineNr">124 </span> user-idx <span class="Special">&lt;-</span> increment
<span id="L125" class="LineNr">125 </span> <span class="Delimiter">}</span>
<span id="L126" class="LineNr">126 </span> <span class="Delimiter">{</span>
<span id="L127" class="LineNr">127 </span> compare user?, <span class="Constant">0</span>/false
<span id="L128" class="LineNr">128 </span> <span class="PreProc">break-if-!=</span>
<span id="L129" class="LineNr">129 </span> <a href='main.mu.html#L259'>parse-item</a> record, channels, items-data, item-idx
<span id="L130" class="LineNr">130 </span> item-idx <span class="Special">&lt;-</span> increment
<span id="L131" class="LineNr">131 </span> <span class="Delimiter">}</span>
<span id="L132" class="LineNr">132 </span> <span class="PreProc">loop</span>
<span id="L133" class="LineNr">133 </span> <span class="Delimiter">}</span>
<span id="L134" class="LineNr">134 </span> <span class="PreProc">var</span> dest/eax: (addr int) <span class="Special">&lt;-</span> get items, newest
<span id="L135" class="LineNr">135 </span> copy-to *dest, item-idx
<span id="L136" class="LineNr">136 </span> decrement *dest
<span id="L137" class="LineNr">137 </span><span class="Delimiter">}</span>
<span id="L138" class="LineNr">138 </span>
<span id="L139" class="LineNr">139 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='main.mu.html#L139'>parse-record</a></span> in: (addr stream byte), out: (addr stream byte) <span class="Delimiter">{</span>
<span id="L140" class="LineNr">140 </span> <span class="PreProc">var</span> paren/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> in
<span id="L141" class="LineNr">141 </span> compare paren, <span class="Constant">0x28</span>/open-paren
<span id="L142" class="LineNr">142 </span> <span class="Delimiter">{</span>
<span id="L143" class="LineNr">143 </span> <span class="PreProc">break-if-=</span>
<span id="L144" class="LineNr">144 </span> <a href='../500fake-screen.mu.html#L190'>set-cursor-position</a> <span class="Constant">0</span>/screen, <span class="Constant">0x20</span> <span class="Constant">0x10</span>
<span id="L145" class="LineNr">145 </span> <span class="PreProc">var</span> c/eax: int <span class="Special">&lt;-</span> copy paren
<span id="L146" class="LineNr">146 </span> <a href='../501draw-text.mu.html#L384'>draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen c, <span class="Constant">5</span>/fg <span class="Constant">0</span>/bg
<span id="L147" class="LineNr">147 </span> <a href='../317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;parse-record: (&quot;</span>
<span id="L148" class="LineNr">148 </span> <span class="Delimiter">}</span>
<span id="L149" class="LineNr">149 </span> <span class="PreProc">var</span> paren-int/eax: int <span class="Special">&lt;-</span> copy paren
<span id="L150" class="LineNr">150 </span> <a href='../115write-byte.subx.html#L12'>append-byte</a> out, paren-int
<span id="L151" class="LineNr">151 </span> <span class="Delimiter">{</span>
<span id="L152" class="LineNr">152 </span> <span class="Delimiter">{</span>
<span id="L153" class="LineNr">153 </span> <span class="PreProc">var</span> eof?/eax: boolean <span class="Special">&lt;-</span> <a href='../309stream.subx.html#L6'>stream-empty?</a> in
<span id="L154" class="LineNr">154 </span> compare eof?, <span class="Constant">0</span>/false
<span id="L155" class="LineNr">155 </span> <span class="PreProc">break-if-=</span>
<span id="L156" class="LineNr">156 </span> <a href='../317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;parse-record: truncated; increase the sector-count to load from disk&quot;</span>
<span id="L157" class="LineNr">157 </span> <span class="Delimiter">}</span>
<span id="L158" class="LineNr">158 </span> <span class="PreProc">var</span> c/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> in
<span id="L159" class="LineNr">159 </span> <span class="Delimiter">{</span>
<span id="L160" class="LineNr">160 </span> <span class="PreProc">var</span> c-int/eax: int <span class="Special">&lt;-</span> copy c
<span id="L161" class="LineNr">161 </span> <a href='../115write-byte.subx.html#L12'>append-byte</a> out, c-int
<span id="L162" class="LineNr">162 </span> <span class="Delimiter">}</span>
<span id="L163" class="LineNr">163 </span> compare c, <span class="Constant">0x29</span>/close-paren
<span id="L164" class="LineNr">164 </span> <span class="PreProc">break-if-=</span>
<span id="L165" class="LineNr">165 </span> compare c, <span class="Constant">0x22</span>/double-quote
<span id="L166" class="LineNr">166 </span> <span class="Delimiter">{</span>
<span id="L167" class="LineNr">167 </span> <span class="PreProc">break-if-!=</span>
<span id="L168" class="LineNr">168 </span> <a href='main.mu.html#L395'>slurp-json-string</a> in, out
<span id="L169" class="LineNr">169 </span> <span class="Delimiter">}</span>
<span id="L170" class="LineNr">170 </span> <span class="PreProc">loop</span>
<span id="L171" class="LineNr">171 </span> <span class="Delimiter">}</span>
<span id="L172" class="LineNr">172 </span> <a href='../124next-token.subx.html#L311'>skip-chars-matching-whitespace</a> in
<span id="L173" class="LineNr">173 </span><span class="Delimiter">}</span>
<span id="L174" class="LineNr">174 </span>
<span id="L175" class="LineNr">175 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='main.mu.html#L175'>user-record?</a></span> record: (addr stream byte)<span class="PreProc"> -&gt; </span>_/eax: boolean <span class="Delimiter">{</span>
<span id="L176" class="LineNr">176 </span> <a href='../106stream.subx.html#L59'>rewind-stream</a> record
<span id="L177" class="LineNr">177 </span> <span class="PreProc">var</span> c/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> record <span class="muComment"># skip paren</span>
<span id="L178" class="LineNr">178 </span> <span class="PreProc">var</span> c/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> record <span class="muComment"># skip double quote</span>
<span id="L179" class="LineNr">179 </span> <span class="PreProc">var</span> c/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> record
<span id="L180" class="LineNr">180 </span> compare c, <span class="Constant">0x55</span>/U
<span id="L181" class="LineNr">181 </span> <span class="Delimiter">{</span>
<span id="L182" class="LineNr">182 </span> <span class="PreProc">break-if-!=</span>
<span id="L183" class="LineNr">183 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L184" class="LineNr">184 </span> <span class="Delimiter">}</span>
<span id="L185" class="LineNr">185 </span> <a href='../106stream.subx.html#L59'>rewind-stream</a> record
<span id="L186" class="LineNr">186 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false
<span id="L187" class="LineNr">187 </span><span class="Delimiter">}</span>
<span id="L188" class="LineNr">188 </span>
<span id="L189" class="LineNr">189 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='main.mu.html#L189'>parse-user</a></span> record: (addr stream byte), _users: (addr array <a href='main.mu.html#L7'>user</a>), user-idx: int <span class="Delimiter">{</span>
<span id="L190" class="LineNr">190 </span> <span class="PreProc">var</span> users/<span class="muRegEsi">esi</span>: (addr array <a href='main.mu.html#L7'>user</a>) <span class="Special">&lt;-</span> copy _users
<span id="L191" class="LineNr">191 </span> <span class="PreProc">var</span> offset/eax: (offset <a href='main.mu.html#L7'>user</a>) <span class="Special">&lt;-</span> compute-offset users, user-idx
<span id="L192" class="LineNr">192 </span> <span class="PreProc">var</span> <a href='main.mu.html#L7'>user</a>/<span class="muRegEsi">esi</span>: (addr <a href='main.mu.html#L7'>user</a>) <span class="Special">&lt;-</span> index users, offset
<span id="L193" class="LineNr">193 </span> <span class="muComment">#</span>
<span id="L194" class="LineNr">194 </span> <span class="PreProc">var</span> s-storage: (stream byte <span class="Constant">0x100</span>)
<span id="L195" class="LineNr">195 </span> <span class="PreProc">var</span> s/<span class="muRegEcx">ecx</span>: (addr stream byte) <span class="Special">&lt;-</span> address s-storage
<span id="L60" class="LineNr"> 60 </span> <a href='../500fake-screen.mu.html#L190'>set-cursor-position</a> <span class="Constant">0</span>/screen, <span class="Constant">0x20</span>/x <span class="Constant">0</span>/y <span class="muComment"># aborts clobber the screen starting x=0</span>
<span id="L61" class="LineNr"> 61 </span> <a href='../501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot;loading &quot;</span>, <span class="Constant">3</span>/fg <span class="Constant">0</span>/bg
<span id="L62" class="LineNr"> 62 </span> <a href='../501draw-text.mu.html#L384'>draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, sector-count, <span class="Constant">3</span>/fg <span class="Constant">0</span>/bg
<span id="L63" class="LineNr"> 63 </span> <a href='../501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot; sectors from data disk..&quot;</span>, <span class="Constant">3</span>/fg <span class="Constant">0</span>/bg
<span id="L64" class="LineNr"> 64 </span> <a href='../510disk.mu.html#L1'>load-sectors</a> data-disk, <span class="Constant">0</span>/lba, sector-count, s
<span id="L65" class="LineNr"> 65 </span> <a href='../501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot;done&quot;</span>, <span class="Constant">3</span>/fg <span class="Constant">0</span>/bg
<span id="L66" class="LineNr"> 66 </span> <span class="muComment"># parse global data structures out of the stream</span>
<span id="L67" class="LineNr"> 67 </span> <span class="PreProc">var</span> users-h: (handle array <a href='main.mu.html#L7'>user</a>)
<span id="L68" class="LineNr"> 68 </span> <span class="PreProc">var</span> users-ah/eax: (addr handle array <a href='main.mu.html#L7'>user</a>) <span class="Special">&lt;-</span> address users-h
<span id="L69" class="LineNr"> 69 </span> populate users-ah, <span class="Constant">0x800</span>/num-users
<span id="L70" class="LineNr"> 70 </span> <span class="PreProc">var</span> _users/eax: (addr array <a href='main.mu.html#L7'>user</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *users-ah
<span id="L71" class="LineNr"> 71 </span> <span class="PreProc">var</span> users/<span class="muRegEdi">edi</span>: (addr array <a href='main.mu.html#L7'>user</a>) <span class="Special">&lt;-</span> copy _users
<span id="L72" class="LineNr"> 72 </span> <span class="PreProc">var</span> channels-h: (handle array <a href='main.mu.html#L1'>channel</a>)
<span id="L73" class="LineNr"> 73 </span> <span class="PreProc">var</span> channels-ah/eax: (addr handle array <a href='main.mu.html#L1'>channel</a>) <span class="Special">&lt;-</span> address channels-h
<span id="L74" class="LineNr"> 74 </span> populate channels-ah, <span class="Constant">0x20</span>/num-channels
<span id="L75" class="LineNr"> 75 </span> <span class="PreProc">var</span> _channels/eax: (addr array <a href='main.mu.html#L1'>channel</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *channels-ah
<span id="L76" class="LineNr"> 76 </span> <span class="PreProc">var</span> channels/<span class="muRegEsi">esi</span>: (addr array <a href='main.mu.html#L1'>channel</a>) <span class="Special">&lt;-</span> copy _channels
<span id="L77" class="LineNr"> 77 </span> <span class="PreProc">var</span> items-storage: <a href='main.mu.html#L24'>item-list</a>
<span id="L78" class="LineNr"> 78 </span> <span class="PreProc">var</span> items/<span class="muRegEdx">edx</span>: (addr <a href='main.mu.html#L24'>item-list</a>) <span class="Special">&lt;-</span> address items-storage
<span id="L79" class="LineNr"> 79 </span> <span class="PreProc">var</span> items-data-ah/eax: (addr handle array <a href='main.mu.html#L14'>item</a>) <span class="Special">&lt;-</span> get items, data
<span id="L80" class="LineNr"> 80 </span> populate items-data-ah, <span class="Constant">0x10000</span>/num-items
<span id="L81" class="LineNr"> 81 </span> <a href='main.mu.html#L98'>parse</a> s, users, channels, items
<span id="L82" class="LineNr"> 82 </span> <span class="muComment"># render</span>
<span id="L83" class="LineNr"> 83 </span> <span class="PreProc">var</span> env-storage: <a href='environment.mu.html#L1'>environment</a>
<span id="L84" class="LineNr"> 84 </span> <span class="PreProc">var</span> env/<span class="muRegEbx">ebx</span>: (addr <a href='environment.mu.html#L1'>environment</a>) <span class="Special">&lt;-</span> address env-storage
<span id="L85" class="LineNr"> 85 </span> <a href='environment.mu.html#L46'>initialize-environment</a> env, items
<span id="L86" class="LineNr"> 86 </span> <span class="Delimiter">{</span>
<span id="L87" class="LineNr"> 87 </span> <a href='environment.mu.html#L67'>render-environment</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, env, users, channels, items
<span id="L88" class="LineNr"> 88 </span> <span class="Delimiter">{</span>
<span id="L89" class="LineNr"> 89 </span> <span class="PreProc">var</span> key/eax: byte <span class="Special">&lt;-</span> <a href='../102keyboard.subx.html#L21'>read-key</a> keyboard
<span id="L90" class="LineNr"> 90 </span> compare key, <span class="Constant">0</span>
<span id="L91" class="LineNr"> 91 </span> <span class="PreProc">loop-if-=</span>
<span id="L92" class="LineNr"> 92 </span> <a href='environment.mu.html#L764'>update-environment</a> env, key, users, channels, items
<span id="L93" class="LineNr"> 93 </span> <span class="Delimiter">}</span>
<span id="L94" class="LineNr"> 94 </span> <span class="PreProc">loop</span>
<span id="L95" class="LineNr"> 95 </span> <span class="Delimiter">}</span>
<span id="L96" class="LineNr"> 96 </span><span class="Delimiter">}</span>
<span id="L97" class="LineNr"> 97 </span>
<span id="L98" class="LineNr"> 98 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='main.mu.html#L98'>parse</a></span> in: (addr stream byte), users: (addr array <a href='main.mu.html#L7'>user</a>), channels: (addr array <a href='main.mu.html#L1'>channel</a>), _items: (addr <a href='main.mu.html#L24'>item-list</a>) <span class="Delimiter">{</span>
<span id="L99" class="LineNr"> 99 </span> <span class="PreProc">var</span> items/<span class="muRegEsi">esi</span>: (addr <a href='main.mu.html#L24'>item-list</a>) <span class="Special">&lt;-</span> copy _items
<span id="L100" class="LineNr">100 </span> <span class="PreProc">var</span> items-data-ah/eax: (addr handle array <a href='main.mu.html#L14'>item</a>) <span class="Special">&lt;-</span> get items, data
<span id="L101" class="LineNr">101 </span> <span class="PreProc">var</span> _items-data/eax: (addr array <a href='main.mu.html#L14'>item</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *items-data-ah
<span id="L102" class="LineNr">102 </span> <span class="PreProc">var</span> items-data/<span class="muRegEdi">edi</span>: (addr array <a href='main.mu.html#L14'>item</a>) <span class="Special">&lt;-</span> copy _items-data
<span id="L103" class="LineNr">103 </span> <span class="muComment"># 'in' consists of a long, flat sequence of records surrounded by parens</span>
<span id="L104" class="LineNr">104 </span> <span class="PreProc">var</span> record-storage: (stream byte <span class="Constant">0x18000</span>)
<span id="L105" class="LineNr">105 </span> <span class="PreProc">var</span> record/<span class="muRegEcx">ecx</span>: (addr stream byte) <span class="Special">&lt;-</span> address record-storage
<span id="L106" class="LineNr">106 </span> <span class="PreProc">var</span> user-idx/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L107" class="LineNr">107 </span> <span class="PreProc">var</span> item-idx/<span class="muRegEbx">ebx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L108" class="LineNr">108 </span> <span class="Delimiter">{</span>
<span id="L109" class="LineNr">109 </span> <span class="PreProc">var</span> done?/eax: boolean <span class="Special">&lt;-</span> <a href='../309stream.subx.html#L6'>stream-empty?</a> in
<span id="L110" class="LineNr">110 </span> compare done?, <span class="Constant">0</span>/false
<span id="L111" class="LineNr">111 </span> <span class="PreProc">break-if-!=</span>
<span id="L112" class="LineNr">112 </span> <span class="PreProc">var</span> c/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L47'>peek-byte</a> in
<span id="L113" class="LineNr">113 </span> compare c, <span class="Constant">0</span>
<span id="L114" class="LineNr">114 </span> <span class="PreProc">break-if-=</span>
<span id="L115" class="LineNr">115 </span> <a href='../500fake-screen.mu.html#L190'>set-cursor-position</a> <span class="Constant">0</span>/screen, <span class="Constant">0x20</span>/x <span class="Constant">1</span>/y
<span id="L116" class="LineNr">116 </span> <a href='../501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;parsed &quot;</span> <span class="Constant">3</span>/fg <span class="Constant">0</span>/bg
<span id="L117" class="LineNr">117 </span> <a href='../501draw-text.mu.html#L384'>draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, user-idx, <span class="Constant">3</span>/fg <span class="Constant">0</span>/bg
<span id="L118" class="LineNr">118 </span> <a href='../501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot; users, &quot;</span> <span class="Constant">3</span>/fg <span class="Constant">0</span>/bg
<span id="L119" class="LineNr">119 </span> <a href='../501draw-text.mu.html#L384'>draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, item-idx, <span class="Constant">3</span>/fg <span class="Constant">0</span>/bg
<span id="L120" class="LineNr">120 </span> <a href='../501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot; posts/comments&quot;</span> <span class="Constant">3</span>/fg <span class="Constant">0</span>/bg
<span id="L121" class="LineNr">121 </span> <a href='../106stream.subx.html#L20'>clear-stream</a> record
<span id="L122" class="LineNr">122 </span> <a href='main.mu.html#L142'>parse-record</a> in, record
<span id="L123" class="LineNr">123 </span> <span class="PreProc">var</span> user?/eax: boolean <span class="Special">&lt;-</span> <a href='main.mu.html#L178'>user-record?</a> record
<span id="L124" class="LineNr">124 </span> <span class="Delimiter">{</span>
<span id="L125" class="LineNr">125 </span> compare user?, <span class="Constant">0</span>/false
<span id="L126" class="LineNr">126 </span> <span class="PreProc">break-if-=</span>
<span id="L127" class="LineNr">127 </span> <a href='main.mu.html#L192'>parse-user</a> record, users, user-idx
<span id="L128" class="LineNr">128 </span> user-idx <span class="Special">&lt;-</span> increment
<span id="L129" class="LineNr">129 </span> <span class="Delimiter">}</span>
<span id="L130" class="LineNr">130 </span> <span class="Delimiter">{</span>
<span id="L131" class="LineNr">131 </span> compare user?, <span class="Constant">0</span>/false
<span id="L132" class="LineNr">132 </span> <span class="PreProc">break-if-!=</span>
<span id="L133" class="LineNr">133 </span> <a href='main.mu.html#L262'>parse-item</a> record, channels, items-data, item-idx
<span id="L134" class="LineNr">134 </span> item-idx <span class="Special">&lt;-</span> increment
<span id="L135" class="LineNr">135 </span> <span class="Delimiter">}</span>
<span id="L136" class="LineNr">136 </span> <span class="PreProc">loop</span>
<span id="L137" class="LineNr">137 </span> <span class="Delimiter">}</span>
<span id="L138" class="LineNr">138 </span> <span class="PreProc">var</span> dest/eax: (addr int) <span class="Special">&lt;-</span> get items, data-first-free
<span id="L139" class="LineNr">139 </span> copy-to *dest, item-idx
<span id="L140" class="LineNr">140 </span><span class="Delimiter">}</span>
<span id="L141" class="LineNr">141 </span>
<span id="L142" class="LineNr">142 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='main.mu.html#L142'>parse-record</a></span> in: (addr stream byte), out: (addr stream byte) <span class="Delimiter">{</span>
<span id="L143" class="LineNr">143 </span> <span class="PreProc">var</span> paren/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> in
<span id="L144" class="LineNr">144 </span> compare paren, <span class="Constant">0x28</span>/open-paren
<span id="L145" class="LineNr">145 </span> <span class="Delimiter">{</span>
<span id="L146" class="LineNr">146 </span> <span class="PreProc">break-if-=</span>
<span id="L147" class="LineNr">147 </span> <a href='../500fake-screen.mu.html#L190'>set-cursor-position</a> <span class="Constant">0</span>/screen, <span class="Constant">0x20</span> <span class="Constant">0x10</span>
<span id="L148" class="LineNr">148 </span> <span class="PreProc">var</span> c/eax: int <span class="Special">&lt;-</span> copy paren
<span id="L149" class="LineNr">149 </span> <a href='../501draw-text.mu.html#L384'>draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen c, <span class="Constant">5</span>/fg <span class="Constant">0</span>/bg
<span id="L150" class="LineNr">150 </span> <a href='../317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;parse-record: (&quot;</span>
<span id="L151" class="LineNr">151 </span> <span class="Delimiter">}</span>
<span id="L152" class="LineNr">152 </span> <span class="PreProc">var</span> paren-int/eax: int <span class="Special">&lt;-</span> copy paren
<span id="L153" class="LineNr">153 </span> <a href='../115write-byte.subx.html#L12'>append-byte</a> out, paren-int
<span id="L154" class="LineNr">154 </span> <span class="Delimiter">{</span>
<span id="L155" class="LineNr">155 </span> <span class="Delimiter">{</span>
<span id="L156" class="LineNr">156 </span> <span class="PreProc">var</span> eof?/eax: boolean <span class="Special">&lt;-</span> <a href='../309stream.subx.html#L6'>stream-empty?</a> in
<span id="L157" class="LineNr">157 </span> compare eof?, <span class="Constant">0</span>/false
<span id="L158" class="LineNr">158 </span> <span class="PreProc">break-if-=</span>
<span id="L159" class="LineNr">159 </span> <a href='../317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;parse-record: truncated; increase the sector-count to load from disk&quot;</span>
<span id="L160" class="LineNr">160 </span> <span class="Delimiter">}</span>
<span id="L161" class="LineNr">161 </span> <span class="PreProc">var</span> c/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> in
<span id="L162" class="LineNr">162 </span> <span class="Delimiter">{</span>
<span id="L163" class="LineNr">163 </span> <span class="PreProc">var</span> c-int/eax: int <span class="Special">&lt;-</span> copy c
<span id="L164" class="LineNr">164 </span> <a href='../115write-byte.subx.html#L12'>append-byte</a> out, c-int
<span id="L165" class="LineNr">165 </span> <span class="Delimiter">}</span>
<span id="L166" class="LineNr">166 </span> compare c, <span class="Constant">0x29</span>/close-paren
<span id="L167" class="LineNr">167 </span> <span class="PreProc">break-if-=</span>
<span id="L168" class="LineNr">168 </span> compare c, <span class="Constant">0x22</span>/double-quote
<span id="L169" class="LineNr">169 </span> <span class="Delimiter">{</span>
<span id="L170" class="LineNr">170 </span> <span class="PreProc">break-if-!=</span>
<span id="L171" class="LineNr">171 </span> <a href='main.mu.html#L412'>slurp-json-string</a> in, out
<span id="L172" class="LineNr">172 </span> <span class="Delimiter">}</span>
<span id="L173" class="LineNr">173 </span> <span class="PreProc">loop</span>
<span id="L174" class="LineNr">174 </span> <span class="Delimiter">}</span>
<span id="L175" class="LineNr">175 </span> <a href='../124next-token.subx.html#L311'>skip-chars-matching-whitespace</a> in
<span id="L176" class="LineNr">176 </span><span class="Delimiter">}</span>
<span id="L177" class="LineNr">177 </span>
<span id="L178" class="LineNr">178 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='main.mu.html#L178'>user-record?</a></span> record: (addr stream byte)<span class="PreProc"> -&gt; </span>_/eax: boolean <span class="Delimiter">{</span>
<span id="L179" class="LineNr">179 </span> <a href='../106stream.subx.html#L59'>rewind-stream</a> record
<span id="L180" class="LineNr">180 </span> <span class="PreProc">var</span> c/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> record <span class="muComment"># skip paren</span>
<span id="L181" class="LineNr">181 </span> <span class="PreProc">var</span> c/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> record <span class="muComment"># skip double quote</span>
<span id="L182" class="LineNr">182 </span> <span class="PreProc">var</span> c/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> record
<span id="L183" class="LineNr">183 </span> compare c, <span class="Constant">0x55</span>/U
<span id="L184" class="LineNr">184 </span> <span class="Delimiter">{</span>
<span id="L185" class="LineNr">185 </span> <span class="PreProc">break-if-!=</span>
<span id="L186" class="LineNr">186 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L187" class="LineNr">187 </span> <span class="Delimiter">}</span>
<span id="L188" class="LineNr">188 </span> <a href='../106stream.subx.html#L59'>rewind-stream</a> record
<span id="L189" class="LineNr">189 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false
<span id="L190" class="LineNr">190 </span><span class="Delimiter">}</span>
<span id="L191" class="LineNr">191 </span>
<span id="L192" class="LineNr">192 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='main.mu.html#L192'>parse-user</a></span> record: (addr stream byte), _users: (addr array <a href='main.mu.html#L7'>user</a>), user-idx: int <span class="Delimiter">{</span>
<span id="L193" class="LineNr">193 </span> <span class="PreProc">var</span> users/<span class="muRegEsi">esi</span>: (addr array <a href='main.mu.html#L7'>user</a>) <span class="Special">&lt;-</span> copy _users
<span id="L194" class="LineNr">194 </span> <span class="PreProc">var</span> offset/eax: (offset <a href='main.mu.html#L7'>user</a>) <span class="Special">&lt;-</span> compute-offset users, user-idx
<span id="L195" class="LineNr">195 </span> <span class="PreProc">var</span> <a href='main.mu.html#L7'>user</a>/<span class="muRegEsi">esi</span>: (addr <a href='main.mu.html#L7'>user</a>) <span class="Special">&lt;-</span> index users, offset
<span id="L196" class="LineNr">196 </span> <span class="muComment">#</span>
<span id="L197" class="LineNr">197 </span> <a href='../106stream.subx.html#L59'>rewind-stream</a> record
<span id="L198" class="LineNr">198 </span> <span class="PreProc">var</span> paren/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> record
<span id="L199" class="LineNr">199 </span> compare paren, <span class="Constant">0x28</span>/open-paren
<span id="L200" class="LineNr">200 </span> <span class="Delimiter">{</span>
<span id="L201" class="LineNr">201 </span> <span class="PreProc">break-if-=</span>
<span id="L202" class="LineNr">202 </span> <a href='../317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;parse-user: (&quot;</span>
<span id="L203" class="LineNr">203 </span> <span class="Delimiter">}</span>
<span id="L204" class="LineNr">204 </span> <span class="muComment"># user id</span>
<span id="L205" class="LineNr">205 </span> <a href='../124next-token.subx.html#L311'>skip-chars-matching-whitespace</a> record
<span id="L206" class="LineNr">206 </span> <span class="PreProc">var</span> double-quote/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> record
<span id="L207" class="LineNr">207 </span> compare double-quote, <span class="Constant">0x22</span>/double-quote
<span id="L208" class="LineNr">208 </span> <span class="Delimiter">{</span>
<span id="L209" class="LineNr">209 </span> <span class="PreProc">break-if-=</span>
<span id="L210" class="LineNr">210 </span> <a href='../317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;parse-user: id&quot;</span>
<span id="L211" class="LineNr">211 </span> <span class="Delimiter">}</span>
<span id="L212" class="LineNr">212 </span> <a href='main.mu.html#L424'>next-json-string</a> record, s
<span id="L213" class="LineNr">213 </span> <span class="PreProc">var</span> dest/eax: (addr handle array byte) <span class="Special">&lt;-</span> get <a href='main.mu.html#L7'>user</a>, id
<span id="L214" class="LineNr">214 </span> <a href='../310copy-bytes.subx.html#L60'>stream-to-array</a> s, dest
<span id="L215" class="LineNr">215 </span> <span class="muComment"># user name</span>
<span id="L216" class="LineNr">216 </span> <a href='../124next-token.subx.html#L311'>skip-chars-matching-whitespace</a> record
<span id="L217" class="LineNr">217 </span> <span class="PreProc">var</span> double-quote/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> record
<span id="L218" class="LineNr">218 </span> compare double-quote, <span class="Constant">0x22</span>/double-quote
<span id="L219" class="LineNr">219 </span> <span class="Delimiter">{</span>
<span id="L220" class="LineNr">220 </span> <span class="PreProc">break-if-=</span>
<span id="L221" class="LineNr">221 </span> <a href='../317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;parse-user: name&quot;</span>
<span id="L222" class="LineNr">222 </span> <span class="Delimiter">}</span>
<span id="L223" class="LineNr">223 </span> <a href='../106stream.subx.html#L20'>clear-stream</a> s
<span id="L224" class="LineNr">224 </span> <a href='main.mu.html#L424'>next-json-string</a> record, s
<span id="L225" class="LineNr">225 </span> <span class="PreProc">var</span> dest/eax: (addr handle array byte) <span class="Special">&lt;-</span> get <a href='main.mu.html#L7'>user</a>, name
<span id="L226" class="LineNr">226 </span> <a href='../310copy-bytes.subx.html#L60'>stream-to-array</a> s, dest
<span id="L227" class="LineNr">227 </span> <span class="muComment"># real name</span>
<span id="L228" class="LineNr">228 </span> <a href='../124next-token.subx.html#L311'>skip-chars-matching-whitespace</a> record
<span id="L229" class="LineNr">229 </span> <span class="PreProc">var</span> double-quote/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> record
<span id="L230" class="LineNr">230 </span> compare double-quote, <span class="Constant">0x22</span>/double-quote
<span id="L231" class="LineNr">231 </span> <span class="Delimiter">{</span>
<span id="L232" class="LineNr">232 </span> <span class="PreProc">break-if-=</span>
<span id="L233" class="LineNr">233 </span> <a href='../317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;parse-user: real-name&quot;</span>
<span id="L234" class="LineNr">234 </span> <span class="Delimiter">}</span>
<span id="L235" class="LineNr">235 </span> <a href='../106stream.subx.html#L20'>clear-stream</a> s
<span id="L236" class="LineNr">236 </span> <a href='main.mu.html#L424'>next-json-string</a> record, s
<span id="L237" class="LineNr">237 </span> <span class="PreProc">var</span> dest/eax: (addr handle array byte) <span class="Special">&lt;-</span> get <a href='main.mu.html#L7'>user</a>, real-name
<span id="L238" class="LineNr">238 </span> <a href='../310copy-bytes.subx.html#L60'>stream-to-array</a> s, dest
<span id="L239" class="LineNr">239 </span> <span class="muComment"># avatar</span>
<span id="L240" class="LineNr">240 </span> <a href='../124next-token.subx.html#L311'>skip-chars-matching-whitespace</a> record
<span id="L241" class="LineNr">241 </span> <span class="PreProc">var</span> open-bracket/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> record
<span id="L242" class="LineNr">242 </span> compare open-bracket, <span class="Constant">0x5b</span>/open-bracket
<span id="L243" class="LineNr">243 </span> <span class="Delimiter">{</span>
<span id="L244" class="LineNr">244 </span> <span class="PreProc">break-if-=</span>
<span id="L245" class="LineNr">245 </span> <a href='../317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;parse-user: avatar&quot;</span>
<span id="L246" class="LineNr">246 </span> <span class="Delimiter">}</span>
<span id="L247" class="LineNr">247 </span> <a href='../124next-token.subx.html#L311'>skip-chars-matching-whitespace</a> record
<span id="L248" class="LineNr">248 </span> <span class="PreProc">var</span> c/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L47'>peek-byte</a> record
<span id="L249" class="LineNr">249 </span> <span class="Delimiter">{</span>
<span id="L250" class="LineNr">250 </span> compare c, <span class="Constant">0x5d</span>/close-bracket
<span id="L251" class="LineNr">251 </span> <span class="PreProc">break-if-=</span>
<span id="L252" class="LineNr">252 </span> <span class="PreProc">var</span> dest-ah/eax: (addr handle <a href='../511image.mu.html#L6'>image</a>) <span class="Special">&lt;-</span> get <a href='main.mu.html#L7'>user</a>, avatar
<span id="L253" class="LineNr">253 </span> <a href='../120allocate.subx.html#L43'>allocate</a> dest-ah
<span id="L254" class="LineNr">254 </span> <span class="PreProc">var</span> dest/eax: (addr <a href='../511image.mu.html#L6'>image</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *dest-ah
<span id="L255" class="LineNr">255 </span> <a href='../511image.mu.html#L17'>initialize-image</a> dest, record
<span id="L256" class="LineNr">256 </span> <span class="Delimiter">}</span>
<span id="L257" class="LineNr">257 </span><span class="Delimiter">}</span>
<span id="L258" class="LineNr">258 </span>
<span id="L259" class="LineNr">259 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='main.mu.html#L259'>parse-item</a></span> record: (addr stream byte), _channels: (addr array <a href='main.mu.html#L1'>channel</a>), _items: (addr array <a href='main.mu.html#L14'>item</a>), item-idx: int <span class="Delimiter">{</span>
<span id="L260" class="LineNr">260 </span> <span class="PreProc">var</span> items/<span class="muRegEsi">esi</span>: (addr array <a href='main.mu.html#L14'>item</a>) <span class="Special">&lt;-</span> copy _items
<span id="L261" class="LineNr">261 </span> <span class="PreProc">var</span> offset/eax: (offset <a href='main.mu.html#L14'>item</a>) <span class="Special">&lt;-</span> compute-offset items, item-idx
<span id="L262" class="LineNr">262 </span> <span class="PreProc">var</span> <a href='main.mu.html#L14'>item</a>/<span class="muRegEdi">edi</span>: (addr <a href='main.mu.html#L14'>item</a>) <span class="Special">&lt;-</span> index items, offset
<span id="L263" class="LineNr">263 </span> <span class="muComment">#</span>
<span id="L264" class="LineNr">264 </span> <span class="PreProc">var</span> s-storage: (stream byte <span class="Constant">0x40</span>)
<span id="L265" class="LineNr">265 </span> <span class="PreProc">var</span> s/<span class="muRegEcx">ecx</span>: (addr stream byte) <span class="Special">&lt;-</span> address s-storage
<span id="L197" class="LineNr">197 </span> <span class="PreProc">var</span> s-storage: (stream byte <span class="Constant">0x100</span>)
<span id="L198" class="LineNr">198 </span> <span class="PreProc">var</span> s/<span class="muRegEcx">ecx</span>: (addr stream byte) <span class="Special">&lt;-</span> address s-storage
<span id="L199" class="LineNr">199 </span> <span class="muComment">#</span>
<span id="L200" class="LineNr">200 </span> <a href='../106stream.subx.html#L59'>rewind-stream</a> record
<span id="L201" class="LineNr">201 </span> <span class="PreProc">var</span> paren/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> record
<span id="L202" class="LineNr">202 </span> compare paren, <span class="Constant">0x28</span>/open-paren
<span id="L203" class="LineNr">203 </span> <span class="Delimiter">{</span>
<span id="L204" class="LineNr">204 </span> <span class="PreProc">break-if-=</span>
<span id="L205" class="LineNr">205 </span> <a href='../317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;parse-user: (&quot;</span>
<span id="L206" class="LineNr">206 </span> <span class="Delimiter">}</span>
<span id="L207" class="LineNr">207 </span> <span class="muComment"># user id</span>
<span id="L208" class="LineNr">208 </span> <a href='../124next-token.subx.html#L311'>skip-chars-matching-whitespace</a> record
<span id="L209" class="LineNr">209 </span> <span class="PreProc">var</span> double-quote/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> record
<span id="L210" class="LineNr">210 </span> compare double-quote, <span class="Constant">0x22</span>/double-quote
<span id="L211" class="LineNr">211 </span> <span class="Delimiter">{</span>
<span id="L212" class="LineNr">212 </span> <span class="PreProc">break-if-=</span>
<span id="L213" class="LineNr">213 </span> <a href='../317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;parse-user: id&quot;</span>
<span id="L214" class="LineNr">214 </span> <span class="Delimiter">}</span>
<span id="L215" class="LineNr">215 </span> <a href='main.mu.html#L441'>next-json-string</a> record, s
<span id="L216" class="LineNr">216 </span> <span class="PreProc">var</span> dest/eax: (addr handle array byte) <span class="Special">&lt;-</span> get <a href='main.mu.html#L7'>user</a>, id
<span id="L217" class="LineNr">217 </span> <a href='../310copy-bytes.subx.html#L60'>stream-to-array</a> s, dest
<span id="L218" class="LineNr">218 </span> <span class="muComment"># user name</span>
<span id="L219" class="LineNr">219 </span> <a href='../124next-token.subx.html#L311'>skip-chars-matching-whitespace</a> record
<span id="L220" class="LineNr">220 </span> <span class="PreProc">var</span> double-quote/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> record
<span id="L221" class="LineNr">221 </span> compare double-quote, <span class="Constant">0x22</span>/double-quote
<span id="L222" class="LineNr">222 </span> <span class="Delimiter">{</span>
<span id="L223" class="LineNr">223 </span> <span class="PreProc">break-if-=</span>
<span id="L224" class="LineNr">224 </span> <a href='../317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;parse-user: name&quot;</span>
<span id="L225" class="LineNr">225 </span> <span class="Delimiter">}</span>
<span id="L226" class="LineNr">226 </span> <a href='../106stream.subx.html#L20'>clear-stream</a> s
<span id="L227" class="LineNr">227 </span> <a href='main.mu.html#L441'>next-json-string</a> record, s
<span id="L228" class="LineNr">228 </span> <span class="PreProc">var</span> dest/eax: (addr handle array byte) <span class="Special">&lt;-</span> get <a href='main.mu.html#L7'>user</a>, name
<span id="L229" class="LineNr">229 </span> <a href='../310copy-bytes.subx.html#L60'>stream-to-array</a> s, dest
<span id="L230" class="LineNr">230 </span> <span class="muComment"># real name</span>
<span id="L231" class="LineNr">231 </span> <a href='../124next-token.subx.html#L311'>skip-chars-matching-whitespace</a> record
<span id="L232" class="LineNr">232 </span> <span class="PreProc">var</span> double-quote/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> record
<span id="L233" class="LineNr">233 </span> compare double-quote, <span class="Constant">0x22</span>/double-quote
<span id="L234" class="LineNr">234 </span> <span class="Delimiter">{</span>
<span id="L235" class="LineNr">235 </span> <span class="PreProc">break-if-=</span>
<span id="L236" class="LineNr">236 </span> <a href='../317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;parse-user: real-name&quot;</span>
<span id="L237" class="LineNr">237 </span> <span class="Delimiter">}</span>
<span id="L238" class="LineNr">238 </span> <a href='../106stream.subx.html#L20'>clear-stream</a> s
<span id="L239" class="LineNr">239 </span> <a href='main.mu.html#L441'>next-json-string</a> record, s
<span id="L240" class="LineNr">240 </span> <span class="PreProc">var</span> dest/eax: (addr handle array byte) <span class="Special">&lt;-</span> get <a href='main.mu.html#L7'>user</a>, real-name
<span id="L241" class="LineNr">241 </span> <a href='../310copy-bytes.subx.html#L60'>stream-to-array</a> s, dest
<span id="L242" class="LineNr">242 </span> <span class="muComment"># avatar</span>
<span id="L243" class="LineNr">243 </span> <a href='../124next-token.subx.html#L311'>skip-chars-matching-whitespace</a> record
<span id="L244" class="LineNr">244 </span> <span class="PreProc">var</span> open-bracket/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> record
<span id="L245" class="LineNr">245 </span> compare open-bracket, <span class="Constant">0x5b</span>/open-bracket
<span id="L246" class="LineNr">246 </span> <span class="Delimiter">{</span>
<span id="L247" class="LineNr">247 </span> <span class="PreProc">break-if-=</span>
<span id="L248" class="LineNr">248 </span> <a href='../317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;parse-user: avatar&quot;</span>
<span id="L249" class="LineNr">249 </span> <span class="Delimiter">}</span>
<span id="L250" class="LineNr">250 </span> <a href='../124next-token.subx.html#L311'>skip-chars-matching-whitespace</a> record
<span id="L251" class="LineNr">251 </span> <span class="PreProc">var</span> c/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L47'>peek-byte</a> record
<span id="L252" class="LineNr">252 </span> <span class="Delimiter">{</span>
<span id="L253" class="LineNr">253 </span> compare c, <span class="Constant">0x5d</span>/close-bracket
<span id="L254" class="LineNr">254 </span> <span class="PreProc">break-if-=</span>
<span id="L255" class="LineNr">255 </span> <span class="PreProc">var</span> dest-ah/eax: (addr handle <a href='../511image.mu.html#L6'>image</a>) <span class="Special">&lt;-</span> get <a href='main.mu.html#L7'>user</a>, avatar
<span id="L256" class="LineNr">256 </span> <a href='../120allocate.subx.html#L43'>allocate</a> dest-ah
<span id="L257" class="LineNr">257 </span> <span class="PreProc">var</span> dest/eax: (addr <a href='../511image.mu.html#L6'>image</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *dest-ah
<span id="L258" class="LineNr">258 </span> <a href='../511image.mu.html#L17'>initialize-image</a> dest, record
<span id="L259" class="LineNr">259 </span> <span class="Delimiter">}</span>
<span id="L260" class="LineNr">260 </span><span class="Delimiter">}</span>
<span id="L261" class="LineNr">261 </span>
<span id="L262" class="LineNr">262 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='main.mu.html#L262'>parse-item</a></span> record: (addr stream byte), _channels: (addr array <a href='main.mu.html#L1'>channel</a>), _items: (addr array <a href='main.mu.html#L14'>item</a>), item-idx: int <span class="Delimiter">{</span>
<span id="L263" class="LineNr">263 </span> <span class="PreProc">var</span> items/<span class="muRegEsi">esi</span>: (addr array <a href='main.mu.html#L14'>item</a>) <span class="Special">&lt;-</span> copy _items
<span id="L264" class="LineNr">264 </span> <span class="PreProc">var</span> offset/eax: (offset <a href='main.mu.html#L14'>item</a>) <span class="Special">&lt;-</span> compute-offset items, item-idx
<span id="L265" class="LineNr">265 </span> <span class="PreProc">var</span> <a href='main.mu.html#L14'>item</a>/<span class="muRegEdi">edi</span>: (addr <a href='main.mu.html#L14'>item</a>) <span class="Special">&lt;-</span> index items, offset
<span id="L266" class="LineNr">266 </span> <span class="muComment">#</span>
<span id="L267" class="LineNr">267 </span> <a href='../106stream.subx.html#L59'>rewind-stream</a> record
<span id="L268" class="LineNr">268 </span> <span class="PreProc">var</span> paren/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> record
<span id="L269" class="LineNr">269 </span> compare paren, <span class="Constant">0x28</span>/open-paren
<span id="L270" class="LineNr">270 </span> <span class="Delimiter">{</span>
<span id="L271" class="LineNr">271 </span> <span class="PreProc">break-if-=</span>
<span id="L272" class="LineNr">272 </span> <a href='../317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;parse-item: (&quot;</span>
<span id="L273" class="LineNr">273 </span> <span class="Delimiter">}</span>
<span id="L274" class="LineNr">274 </span> <span class="muComment"># item id</span>
<span id="L275" class="LineNr">275 </span> <a href='../124next-token.subx.html#L311'>skip-chars-matching-whitespace</a> record
<span id="L276" class="LineNr">276 </span> <span class="PreProc">var</span> double-quote/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> record
<span id="L277" class="LineNr">277 </span> compare double-quote, <span class="Constant">0x22</span>/double-quote
<span id="L278" class="LineNr">278 </span> <span class="Delimiter">{</span>
<span id="L279" class="LineNr">279 </span> <span class="PreProc">break-if-=</span>
<span id="L280" class="LineNr">280 </span> <a href='../317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;parse-item: id&quot;</span>
<span id="L281" class="LineNr">281 </span> <span class="Delimiter">}</span>
<span id="L282" class="LineNr">282 </span> <a href='main.mu.html#L424'>next-json-string</a> record, s
<span id="L283" class="LineNr">283 </span> <span class="PreProc">var</span> dest/eax: (addr handle array byte) <span class="Special">&lt;-</span> get <a href='main.mu.html#L14'>item</a>, id
<span id="L284" class="LineNr">284 </span> <a href='../310copy-bytes.subx.html#L60'>stream-to-array</a> s, dest
<span id="L285" class="LineNr">285 </span> <span class="muComment"># parent index</span>
<span id="L286" class="LineNr">286 </span> <span class="Delimiter">{</span>
<span id="L287" class="LineNr">287 </span> <span class="PreProc">var</span> word-slice-storage: slice
<span id="L288" class="LineNr">288 </span> <span class="PreProc">var</span> word-slice/<span class="muRegEcx">ecx</span>: (addr slice) <span class="Special">&lt;-</span> address word-slice-storage
<span id="L289" class="LineNr">289 </span> <a href='../127next-word.subx.html#L11'>next-word</a> record, word-slice
<span id="L290" class="LineNr">290 </span> <span class="PreProc">var</span> src/eax: int <span class="Special">&lt;-</span> <a href='../311decimal-int.subx.html#L4'>parse-decimal-int-from-slice</a> word-slice
<span id="L291" class="LineNr">291 </span> compare src, <span class="Constant">-1</span>
<span id="L292" class="LineNr">292 </span> <span class="PreProc">break-if-=</span>
<span id="L293" class="LineNr">293 </span> <span class="PreProc">var</span> dest/<span class="muRegEdx">edx</span>: (addr int) <span class="Special">&lt;-</span> get <a href='main.mu.html#L14'>item</a>, parent
<span id="L294" class="LineNr">294 </span> copy-to *dest, src
<span id="L295" class="LineNr">295 </span> <span class="muComment"># cross-link to parent</span>
<span id="L296" class="LineNr">296 </span> <span class="PreProc">var</span> parent-offset/eax: (offset <a href='main.mu.html#L14'>item</a>) <span class="Special">&lt;-</span> compute-offset items, src
<span id="L297" class="LineNr">297 </span> <span class="PreProc">var</span> parent-item/<span class="muRegEsi">esi</span>: (addr <a href='main.mu.html#L14'>item</a>) <span class="Special">&lt;-</span> index items, parent-offset
<span id="L298" class="LineNr">298 </span> <span class="PreProc">var</span> parent-comments-ah/<span class="muRegEbx">ebx</span>: (addr handle array int) <span class="Special">&lt;-</span> get parent-item, comments
<span id="L299" class="LineNr">299 </span> <span class="PreProc">var</span> parent-comments/eax: (addr array int) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *parent-comments-ah
<span id="L300" class="LineNr">300 </span> compare parent-comments, <span class="Constant">0</span>
<span id="L301" class="LineNr">301 </span> <span class="Delimiter">{</span>
<span id="L302" class="LineNr">302 </span> <span class="PreProc">break-if-!=</span>
<span id="L303" class="LineNr">303 </span> populate parent-comments-ah, <span class="Constant">0x200</span>/num-comments
<span id="L304" class="LineNr">304 </span> parent-comments <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *parent-comments-ah
<span id="L305" class="LineNr">305 </span> <span class="Delimiter">}</span>
<span id="L306" class="LineNr">306 </span> <span class="PreProc">var</span> parent-newest-comment-index-addr/<span class="muRegEdi">edi</span>: (addr int) <span class="Special">&lt;-</span> get parent-item, newest-comment-index
<span id="L307" class="LineNr">307 </span> <span class="PreProc">var</span> parent-newest-comment-index/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy *parent-newest-comment-index-addr
<span id="L308" class="LineNr">308 </span> <span class="PreProc">var</span> dest/eax: (addr int) <span class="Special">&lt;-</span> index parent-comments, parent-newest-comment-index
<span id="L309" class="LineNr">309 </span> <span class="PreProc">var</span> src/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy item-idx
<span id="L310" class="LineNr">310 </span> copy-to *dest, src
<span id="L311" class="LineNr">311 </span> increment *parent-newest-comment-index-addr
<span id="L312" class="LineNr">312 </span> <span class="Delimiter">}</span>
<span id="L313" class="LineNr">313 </span> <span class="muComment"># channel name</span>
<span id="L314" class="LineNr">314 </span> <a href='../124next-token.subx.html#L311'>skip-chars-matching-whitespace</a> record
<span id="L315" class="LineNr">315 </span> <span class="PreProc">var</span> double-quote/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> record
<span id="L316" class="LineNr">316 </span> compare double-quote, <span class="Constant">0x22</span>/double-quote
<span id="L317" class="LineNr">317 </span> <span class="Delimiter">{</span>
<span id="L318" class="LineNr">318 </span> <span class="PreProc">break-if-=</span>
<span id="L319" class="LineNr">319 </span> <a href='../317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;parse-item: channel&quot;</span>
<span id="L320" class="LineNr">320 </span> <span class="Delimiter">}</span>
<span id="L321" class="LineNr">321 </span> <a href='../106stream.subx.html#L20'>clear-stream</a> s
<span id="L322" class="LineNr">322 </span> <a href='main.mu.html#L424'>next-json-string</a> record, s
<span id="L323" class="LineNr">323 </span> <span class="PreProc">var</span> dest/eax: (addr handle array byte) <span class="Special">&lt;-</span> get <a href='main.mu.html#L14'>item</a>, <a href='main.mu.html#L1'>channel</a>
<span id="L324" class="LineNr">324 </span> <a href='../310copy-bytes.subx.html#L60'>stream-to-array</a> s, dest
<span id="L325" class="LineNr">325 </span> <span class="muComment"># cross-link to channels</span>
<span id="L326" class="LineNr">326 </span> <span class="Delimiter">{</span>
<span id="L327" class="LineNr">327 </span> <span class="PreProc">var</span> channels/<span class="muRegEsi">esi</span>: (addr array <a href='main.mu.html#L1'>channel</a>) <span class="Special">&lt;-</span> copy _channels
<span id="L328" class="LineNr">328 </span> <span class="PreProc">var</span> channel-index/eax: int <span class="Special">&lt;-</span> <a href='main.mu.html#L361'>find-or-insert</a> channels, s
<span id="L329" class="LineNr">329 </span> <span class="PreProc">var</span> channel-offset/eax: (offset <a href='main.mu.html#L1'>channel</a>) <span class="Special">&lt;-</span> compute-offset channels, channel-index
<span id="L330" class="LineNr">330 </span> <span class="PreProc">var</span> <a href='main.mu.html#L1'>channel</a>/eax: (addr <a href='main.mu.html#L1'>channel</a>) <span class="Special">&lt;-</span> index channels, channel-offset
<span id="L331" class="LineNr">331 </span> <span class="PreProc">var</span> channel-posts-ah/<span class="muRegEcx">ecx</span>: (addr handle array int) <span class="Special">&lt;-</span> get <a href='main.mu.html#L1'>channel</a>, posts
<span id="L332" class="LineNr">332 </span> <span class="PreProc">var</span> channel-newest-post-index-addr/<span class="muRegEdx">edx</span>: (addr int) <span class="Special">&lt;-</span> get <a href='main.mu.html#L1'>channel</a>, newest-post-index
<span id="L333" class="LineNr">333 </span> <span class="PreProc">var</span> channel-newest-post-index/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy *channel-newest-post-index-addr
<span id="L334" class="LineNr">334 </span> <span class="PreProc">var</span> channel-posts/eax: (addr array int) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *channel-posts-ah
<span id="L335" class="LineNr">335 </span> <span class="PreProc">var</span> dest/eax: (addr int) <span class="Special">&lt;-</span> index channel-posts, channel-newest-post-index
<span id="L336" class="LineNr">336 </span> <span class="Delimiter">}</span>
<span id="L337" class="LineNr">337 </span> <span class="muComment"># user index</span>
<span id="L338" class="LineNr">338 </span> <span class="Delimiter">{</span>
<span id="L339" class="LineNr">339 </span> <span class="PreProc">var</span> word-slice-storage: slice
<span id="L340" class="LineNr">340 </span> <span class="PreProc">var</span> word-slice/<span class="muRegEcx">ecx</span>: (addr slice) <span class="Special">&lt;-</span> address word-slice-storage
<span id="L341" class="LineNr">341 </span> <a href='../127next-word.subx.html#L11'>next-word</a> record, word-slice
<span id="L342" class="LineNr">342 </span> <span class="PreProc">var</span> src/eax: int <span class="Special">&lt;-</span> <a href='../311decimal-int.subx.html#L4'>parse-decimal-int-from-slice</a> word-slice
<span id="L343" class="LineNr">343 </span> <span class="PreProc">var</span> dest/<span class="muRegEdx">edx</span>: (addr int) <span class="Special">&lt;-</span> get <a href='main.mu.html#L14'>item</a>, by
<span id="L344" class="LineNr">344 </span> copy-to *dest, src
<span id="L345" class="LineNr">345 </span> <span class="Delimiter">}</span>
<span id="L346" class="LineNr">346 </span> <span class="muComment"># text</span>
<span id="L347" class="LineNr">347 </span> <span class="PreProc">var</span> s-storage: (stream byte <span class="Constant">0x4000</span>) <span class="muComment"># message-text-limit</span>
<span id="L348" class="LineNr">348 </span> <span class="PreProc">var</span> s/<span class="muRegEcx">ecx</span>: (addr stream byte) <span class="Special">&lt;-</span> address s-storage
<span id="L349" class="LineNr">349 </span> <a href='../124next-token.subx.html#L311'>skip-chars-matching-whitespace</a> record
<span id="L350" class="LineNr">350 </span> <span class="PreProc">var</span> double-quote/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> record
<span id="L351" class="LineNr">351 </span> compare double-quote, <span class="Constant">0x22</span>/double-quote
<span id="L352" class="LineNr">352 </span> <span class="Delimiter">{</span>
<span id="L353" class="LineNr">353 </span> <span class="PreProc">break-if-=</span>
<span id="L354" class="LineNr">354 </span> <a href='../317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;parse-item: text&quot;</span>
<span id="L355" class="LineNr">355 </span> <span class="Delimiter">}</span>
<span id="L356" class="LineNr">356 </span> <a href='main.mu.html#L424'>next-json-string</a> record, s
<span id="L357" class="LineNr">357 </span> <span class="PreProc">var</span> dest/eax: (addr handle array byte) <span class="Special">&lt;-</span> get <a href='main.mu.html#L14'>item</a>, text
<span id="L358" class="LineNr">358 </span> <a href='../310copy-bytes.subx.html#L60'>stream-to-array</a> s, dest
<span id="L359" class="LineNr">359 </span><span class="Delimiter">}</span>
<span id="L360" class="LineNr">360 </span>
<span id="L361" class="LineNr">361 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='main.mu.html#L361'>find-or-insert</a></span> _channels: (addr array <a href='main.mu.html#L1'>channel</a>), name: (addr stream byte)<span class="PreProc"> -&gt; </span>_/eax: int <span class="Delimiter">{</span>
<span id="L362" class="LineNr">362 </span> <span class="PreProc">var</span> channels/<span class="muRegEsi">esi</span>: (addr array <a href='main.mu.html#L1'>channel</a>) <span class="Special">&lt;-</span> copy _channels
<span id="L363" class="LineNr">363 </span> <span class="PreProc">var</span> i/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L364" class="LineNr">364 </span> <span class="PreProc">var</span> max/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> length channels
<span id="L365" class="LineNr">365 </span> <span class="Delimiter">{</span>
<span id="L366" class="LineNr">366 </span> compare i, max
<span id="L367" class="LineNr">367 </span> <span class="PreProc">break-if-&gt;=</span>
<span id="L368" class="LineNr">368 </span> <span class="PreProc">var</span> offset/eax: (offset <a href='main.mu.html#L1'>channel</a>) <span class="Special">&lt;-</span> compute-offset channels, i
<span id="L369" class="LineNr">369 </span> <span class="PreProc">var</span> curr/<span class="muRegEbx">ebx</span>: (addr <a href='main.mu.html#L1'>channel</a>) <span class="Special">&lt;-</span> index channels, offset
<span id="L370" class="LineNr">370 </span> <span class="PreProc">var</span> curr-name-ah/<span class="muRegEdi">edi</span>: (addr handle array byte) <span class="Special">&lt;-</span> get curr, name
<span id="L371" class="LineNr">371 </span> <span class="PreProc">var</span> curr-name/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *curr-name-ah
<span id="L372" class="LineNr">372 </span> <span class="Delimiter">{</span>
<span id="L373" class="LineNr">373 </span> compare curr-name, <span class="Constant">0</span>
<span id="L374" class="LineNr">374 </span> <span class="PreProc">break-if-!=</span>
<span id="L375" class="LineNr">375 </span> <a href='../106stream.subx.html#L59'>rewind-stream</a> name
<span id="L376" class="LineNr">376 </span> <a href='../310copy-bytes.subx.html#L60'>stream-to-array</a> name, curr-name-ah
<span id="L377" class="LineNr">377 </span> <span class="PreProc">var</span> posts-ah/eax: (addr handle array int) <span class="Special">&lt;-</span> get curr, posts
<span id="L378" class="LineNr">378 </span> populate posts-ah, <span class="Constant">0x8000</span>/channel-capacity
<span id="L379" class="LineNr">379 </span> <span class="PreProc">return</span> i
<span id="L380" class="LineNr">380 </span> <span class="Delimiter">}</span>
<span id="L381" class="LineNr">381 </span> <span class="PreProc">var</span> found?/eax: boolean <span class="Special">&lt;-</span> <a href='../109stream-equal.subx.html#L9'>stream-data-equal?</a> name, curr-name
<span id="L382" class="LineNr">382 </span> <span class="Delimiter">{</span>
<span id="L383" class="LineNr">383 </span> compare found?, <span class="Constant">0</span>/false
<span id="L384" class="LineNr">384 </span> <span class="PreProc">break-if-=</span>
<span id="L385" class="LineNr">385 </span> <span class="PreProc">return</span> i
<span id="L386" class="LineNr">386 </span> <span class="Delimiter">}</span>
<span id="L387" class="LineNr">387 </span> i <span class="Special">&lt;-</span> increment
<span id="L388" class="LineNr">388 </span> <span class="PreProc">loop</span>
<span id="L389" class="LineNr">389 </span> <span class="Delimiter">}</span>
<span id="L390" class="LineNr">390 </span> <a href='../317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;out of channels&quot;</span>
<span id="L391" class="LineNr">391 </span> <span class="PreProc">return</span> <span class="Constant">-1</span>
<span id="L392" class="LineNr">392 </span><span class="Delimiter">}</span>
<span id="L393" class="LineNr">393 </span>
<span id="L394" class="LineNr">394 </span><span class="muComment"># includes trailing double quote</span>
<span id="L395" class="LineNr">395 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='main.mu.html#L395'>slurp-json-string</a></span> in: (addr stream byte), out: (addr stream byte) <span class="Delimiter">{</span>
<span id="L396" class="LineNr">396 </span> <span class="muComment"># open quote is already slurped</span>
<span id="L397" class="LineNr">397 </span> <span class="Delimiter">{</span>
<span id="L398" class="LineNr">398 </span> <span class="Delimiter">{</span>
<span id="L399" class="LineNr">399 </span> <span class="PreProc">var</span> eof?/eax: boolean <span class="Special">&lt;-</span> <a href='../309stream.subx.html#L6'>stream-empty?</a> in
<span id="L400" class="LineNr">400 </span> compare eof?, <span class="Constant">0</span>/false
<span id="L267" class="LineNr">267 </span> <span class="PreProc">var</span> s-storage: (stream byte <span class="Constant">0x40</span>)
<span id="L268" class="LineNr">268 </span> <span class="PreProc">var</span> s/<span class="muRegEcx">ecx</span>: (addr stream byte) <span class="Special">&lt;-</span> address s-storage
<span id="L269" class="LineNr">269 </span> <span class="muComment">#</span>
<span id="L270" class="LineNr">270 </span> <a href='../106stream.subx.html#L59'>rewind-stream</a> record
<span id="L271" class="LineNr">271 </span> <span class="PreProc">var</span> paren/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> record
<span id="L272" class="LineNr">272 </span> compare paren, <span class="Constant">0x28</span>/open-paren
<span id="L273" class="LineNr">273 </span> <span class="Delimiter">{</span>
<span id="L274" class="LineNr">274 </span> <span class="PreProc">break-if-=</span>
<span id="L275" class="LineNr">275 </span> <a href='../317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;parse-item: (&quot;</span>
<span id="L276" class="LineNr">276 </span> <span class="Delimiter">}</span>
<span id="L277" class="LineNr">277 </span> <span class="muComment"># item id</span>
<span id="L278" class="LineNr">278 </span> <a href='../124next-token.subx.html#L311'>skip-chars-matching-whitespace</a> record
<span id="L279" class="LineNr">279 </span> <span class="PreProc">var</span> double-quote/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> record
<span id="L280" class="LineNr">280 </span> compare double-quote, <span class="Constant">0x22</span>/double-quote
<span id="L281" class="LineNr">281 </span> <span class="Delimiter">{</span>
<span id="L282" class="LineNr">282 </span> <span class="PreProc">break-if-=</span>
<span id="L283" class="LineNr">283 </span> <a href='../317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;parse-item: id&quot;</span>
<span id="L284" class="LineNr">284 </span> <span class="Delimiter">}</span>
<span id="L285" class="LineNr">285 </span> <a href='main.mu.html#L441'>next-json-string</a> record, s
<span id="L286" class="LineNr">286 </span> <span class="PreProc">var</span> dest/eax: (addr handle array byte) <span class="Special">&lt;-</span> get <a href='main.mu.html#L14'>item</a>, id
<span id="L287" class="LineNr">287 </span> <a href='../310copy-bytes.subx.html#L60'>stream-to-array</a> s, dest
<span id="L288" class="LineNr">288 </span> <span class="muComment"># parent index</span>
<span id="L289" class="LineNr">289 </span> <span class="Delimiter">{</span>
<span id="L290" class="LineNr">290 </span> <span class="PreProc">var</span> word-slice-storage: slice
<span id="L291" class="LineNr">291 </span> <span class="PreProc">var</span> word-slice/<span class="muRegEcx">ecx</span>: (addr slice) <span class="Special">&lt;-</span> address word-slice-storage
<span id="L292" class="LineNr">292 </span> <a href='../127next-word.subx.html#L11'>next-word</a> record, word-slice
<span id="L293" class="LineNr">293 </span> <span class="PreProc">var</span> src/eax: int <span class="Special">&lt;-</span> <a href='../311decimal-int.subx.html#L4'>parse-decimal-int-from-slice</a> word-slice
<span id="L294" class="LineNr">294 </span> compare src, <span class="Constant">-1</span>
<span id="L295" class="LineNr">295 </span> <span class="PreProc">break-if-=</span>
<span id="L296" class="LineNr">296 </span> <span class="PreProc">var</span> dest/<span class="muRegEdx">edx</span>: (addr int) <span class="Special">&lt;-</span> get <a href='main.mu.html#L14'>item</a>, parent
<span id="L297" class="LineNr">297 </span> copy-to *dest, src
<span id="L298" class="LineNr">298 </span> <span class="muComment"># cross-link to parent</span>
<span id="L299" class="LineNr">299 </span> <span class="PreProc">var</span> parent-offset/eax: (offset <a href='main.mu.html#L14'>item</a>) <span class="Special">&lt;-</span> compute-offset items, src
<span id="L300" class="LineNr">300 </span> <span class="PreProc">var</span> parent-item/<span class="muRegEsi">esi</span>: (addr <a href='main.mu.html#L14'>item</a>) <span class="Special">&lt;-</span> index items, parent-offset
<span id="L301" class="LineNr">301 </span> <span class="PreProc">var</span> parent-comments-ah/<span class="muRegEbx">ebx</span>: (addr handle array int) <span class="Special">&lt;-</span> get parent-item, comments
<span id="L302" class="LineNr">302 </span> <span class="PreProc">var</span> parent-comments/eax: (addr array int) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *parent-comments-ah
<span id="L303" class="LineNr">303 </span> compare parent-comments, <span class="Constant">0</span>
<span id="L304" class="LineNr">304 </span> <span class="Delimiter">{</span>
<span id="L305" class="LineNr">305 </span> <span class="PreProc">break-if-!=</span>
<span id="L306" class="LineNr">306 </span> populate parent-comments-ah, <span class="Constant">0x200</span>/num-comments
<span id="L307" class="LineNr">307 </span> parent-comments <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *parent-comments-ah
<span id="L308" class="LineNr">308 </span> <span class="Delimiter">}</span>
<span id="L309" class="LineNr">309 </span> <span class="PreProc">var</span> parent-comments-first-free-addr/<span class="muRegEdi">edi</span>: (addr int) <span class="Special">&lt;-</span> get parent-item, comments-first-free
<span id="L310" class="LineNr">310 </span> <span class="PreProc">var</span> parent-comments-first-free/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy *parent-comments-first-free-addr
<span id="L311" class="LineNr">311 </span> <span class="PreProc">var</span> dest/eax: (addr int) <span class="Special">&lt;-</span> index parent-comments, parent-comments-first-free
<span id="L312" class="LineNr">312 </span> <span class="PreProc">var</span> src/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy item-idx
<span id="L313" class="LineNr">313 </span> copy-to *dest, src
<span id="L314" class="LineNr">314 </span> increment *parent-comments-first-free-addr
<span id="L315" class="LineNr">315 </span> <span class="Delimiter">}</span>
<span id="L316" class="LineNr">316 </span> <span class="muComment"># channel name</span>
<span id="L317" class="LineNr">317 </span> <a href='../124next-token.subx.html#L311'>skip-chars-matching-whitespace</a> record
<span id="L318" class="LineNr">318 </span> <span class="PreProc">var</span> double-quote/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> record
<span id="L319" class="LineNr">319 </span> compare double-quote, <span class="Constant">0x22</span>/double-quote
<span id="L320" class="LineNr">320 </span> <span class="Delimiter">{</span>
<span id="L321" class="LineNr">321 </span> <span class="PreProc">break-if-=</span>
<span id="L322" class="LineNr">322 </span> <a href='../317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;parse-item: channel&quot;</span>
<span id="L323" class="LineNr">323 </span> <span class="Delimiter">}</span>
<span id="L324" class="LineNr">324 </span> <a href='../106stream.subx.html#L20'>clear-stream</a> s
<span id="L325" class="LineNr">325 </span> <a href='main.mu.html#L441'>next-json-string</a> record, s
<span id="L326" class="LineNr">326 </span> <span class="PreProc">var</span> dest/eax: (addr handle array byte) <span class="Special">&lt;-</span> get <a href='main.mu.html#L14'>item</a>, <a href='main.mu.html#L1'>channel</a>
<span id="L327" class="LineNr">327 </span> <a href='../310copy-bytes.subx.html#L60'>stream-to-array</a> s, dest
<span id="L328" class="LineNr">328 </span><span class="CommentedCode">#? set-cursor-position 0/screen, 0x70 item-idx</span>
<span id="L329" class="LineNr">329 </span> <span class="muComment"># cross-link to channels</span>
<span id="L330" class="LineNr">330 </span> <span class="Delimiter">{</span>
<span id="L331" class="LineNr">331 </span> <span class="PreProc">var</span> channels/<span class="muRegEsi">esi</span>: (addr array <a href='main.mu.html#L1'>channel</a>) <span class="Special">&lt;-</span> copy _channels
<span id="L332" class="LineNr">332 </span> <span class="PreProc">var</span> channel-index/eax: int <span class="Special">&lt;-</span> <a href='main.mu.html#L378'>find-or-insert</a> channels, s
<span id="L333" class="LineNr">333 </span><span class="CommentedCode">#? draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, channel-index, 5/fg 0/bg</span>
<span id="L334" class="LineNr">334 </span> <span class="PreProc">var</span> channel-offset/eax: (offset <a href='main.mu.html#L1'>channel</a>) <span class="Special">&lt;-</span> compute-offset channels, channel-index
<span id="L335" class="LineNr">335 </span> <span class="PreProc">var</span> <a href='main.mu.html#L1'>channel</a>/eax: (addr <a href='main.mu.html#L1'>channel</a>) <span class="Special">&lt;-</span> index channels, channel-offset
<span id="L336" class="LineNr">336 </span><span class="CommentedCode">#? {</span>
<span id="L337" class="LineNr">337 </span><span class="CommentedCode">#? var foo/eax: int &lt;- copy channel</span>
<span id="L338" class="LineNr">338 </span><span class="CommentedCode">#? draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, foo, 4/fg 0/bg</span>
<span id="L339" class="LineNr">339 </span><span class="CommentedCode">#? }</span>
<span id="L340" class="LineNr">340 </span> <span class="PreProc">var</span> channel-posts-ah/<span class="muRegEcx">ecx</span>: (addr handle array int) <span class="Special">&lt;-</span> get <a href='main.mu.html#L1'>channel</a>, posts
<span id="L341" class="LineNr">341 </span> <span class="PreProc">var</span> channel-posts-first-free-addr/<span class="muRegEdx">edx</span>: (addr int) <span class="Special">&lt;-</span> get <a href='main.mu.html#L1'>channel</a>, posts-first-free
<span id="L342" class="LineNr">342 </span><span class="CommentedCode">#? {</span>
<span id="L343" class="LineNr">343 </span><span class="CommentedCode">#? var foo/eax: int &lt;- copy channel-posts-first-free-addr</span>
<span id="L344" class="LineNr">344 </span><span class="CommentedCode">#? draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, foo, 4/fg 0/bg</span>
<span id="L345" class="LineNr">345 </span><span class="CommentedCode">#? }</span>
<span id="L346" class="LineNr">346 </span> <span class="PreProc">var</span> channel-posts-first-free/<span class="muRegEbx">ebx</span>: int <span class="Special">&lt;-</span> copy *channel-posts-first-free-addr
<span id="L347" class="LineNr">347 </span><span class="CommentedCode">#? draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, channel-posts-first-free, 3/fg 0/bg</span>
<span id="L348" class="LineNr">348 </span> <span class="PreProc">var</span> channel-posts/eax: (addr array int) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *channel-posts-ah
<span id="L349" class="LineNr">349 </span> <span class="PreProc">var</span> dest/eax: (addr int) <span class="Special">&lt;-</span> index channel-posts, channel-posts-first-free
<span id="L350" class="LineNr">350 </span> <span class="PreProc">var</span> src/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy item-idx
<span id="L351" class="LineNr">351 </span> copy-to *dest, src
<span id="L352" class="LineNr">352 </span> increment *channel-posts-first-free-addr
<span id="L353" class="LineNr">353 </span> <span class="Delimiter">}</span>
<span id="L354" class="LineNr">354 </span> <span class="muComment"># user index</span>
<span id="L355" class="LineNr">355 </span> <span class="Delimiter">{</span>
<span id="L356" class="LineNr">356 </span> <span class="PreProc">var</span> word-slice-storage: slice
<span id="L357" class="LineNr">357 </span> <span class="PreProc">var</span> word-slice/<span class="muRegEcx">ecx</span>: (addr slice) <span class="Special">&lt;-</span> address word-slice-storage
<span id="L358" class="LineNr">358 </span> <a href='../127next-word.subx.html#L11'>next-word</a> record, word-slice
<span id="L359" class="LineNr">359 </span> <span class="PreProc">var</span> src/eax: int <span class="Special">&lt;-</span> <a href='../311decimal-int.subx.html#L4'>parse-decimal-int-from-slice</a> word-slice
<span id="L360" class="LineNr">360 </span> <span class="PreProc">var</span> dest/<span class="muRegEdx">edx</span>: (addr int) <span class="Special">&lt;-</span> get <a href='main.mu.html#L14'>item</a>, by
<span id="L361" class="LineNr">361 </span> copy-to *dest, src
<span id="L362" class="LineNr">362 </span> <span class="Delimiter">}</span>
<span id="L363" class="LineNr">363 </span> <span class="muComment"># text</span>
<span id="L364" class="LineNr">364 </span> <span class="PreProc">var</span> s-storage: (stream byte <span class="Constant">0x4000</span>) <span class="muComment"># message-text-limit</span>
<span id="L365" class="LineNr">365 </span> <span class="PreProc">var</span> s/<span class="muRegEcx">ecx</span>: (addr stream byte) <span class="Special">&lt;-</span> address s-storage
<span id="L366" class="LineNr">366 </span> <a href='../124next-token.subx.html#L311'>skip-chars-matching-whitespace</a> record
<span id="L367" class="LineNr">367 </span> <span class="PreProc">var</span> double-quote/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> record
<span id="L368" class="LineNr">368 </span> compare double-quote, <span class="Constant">0x22</span>/double-quote
<span id="L369" class="LineNr">369 </span> <span class="Delimiter">{</span>
<span id="L370" class="LineNr">370 </span> <span class="PreProc">break-if-=</span>
<span id="L371" class="LineNr">371 </span> <a href='../317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;parse-item: text&quot;</span>
<span id="L372" class="LineNr">372 </span> <span class="Delimiter">}</span>
<span id="L373" class="LineNr">373 </span> <a href='main.mu.html#L441'>next-json-string</a> record, s
<span id="L374" class="LineNr">374 </span> <span class="PreProc">var</span> dest/eax: (addr handle array byte) <span class="Special">&lt;-</span> get <a href='main.mu.html#L14'>item</a>, text
<span id="L375" class="LineNr">375 </span> <a href='../310copy-bytes.subx.html#L60'>stream-to-array</a> s, dest
<span id="L376" class="LineNr">376 </span><span class="Delimiter">}</span>
<span id="L377" class="LineNr">377 </span>
<span id="L378" class="LineNr">378 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='main.mu.html#L378'>find-or-insert</a></span> _channels: (addr array <a href='main.mu.html#L1'>channel</a>), name: (addr stream byte)<span class="PreProc"> -&gt; </span>_/eax: int <span class="Delimiter">{</span>
<span id="L379" class="LineNr">379 </span> <span class="PreProc">var</span> channels/<span class="muRegEsi">esi</span>: (addr array <a href='main.mu.html#L1'>channel</a>) <span class="Special">&lt;-</span> copy _channels
<span id="L380" class="LineNr">380 </span> <span class="PreProc">var</span> i/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L381" class="LineNr">381 </span> <span class="PreProc">var</span> max/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> length channels
<span id="L382" class="LineNr">382 </span> <span class="Delimiter">{</span>
<span id="L383" class="LineNr">383 </span> compare i, max
<span id="L384" class="LineNr">384 </span> <span class="PreProc">break-if-&gt;=</span>
<span id="L385" class="LineNr">385 </span> <span class="PreProc">var</span> offset/eax: (offset <a href='main.mu.html#L1'>channel</a>) <span class="Special">&lt;-</span> compute-offset channels, i
<span id="L386" class="LineNr">386 </span> <span class="PreProc">var</span> curr/<span class="muRegEbx">ebx</span>: (addr <a href='main.mu.html#L1'>channel</a>) <span class="Special">&lt;-</span> index channels, offset
<span id="L387" class="LineNr">387 </span> <span class="PreProc">var</span> curr-name-ah/<span class="muRegEdi">edi</span>: (addr handle array byte) <span class="Special">&lt;-</span> get curr, name
<span id="L388" class="LineNr">388 </span> <span class="PreProc">var</span> curr-name/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *curr-name-ah
<span id="L389" class="LineNr">389 </span> <span class="Delimiter">{</span>
<span id="L390" class="LineNr">390 </span> compare curr-name, <span class="Constant">0</span>
<span id="L391" class="LineNr">391 </span> <span class="PreProc">break-if-!=</span>
<span id="L392" class="LineNr">392 </span> <a href='../106stream.subx.html#L59'>rewind-stream</a> name
<span id="L393" class="LineNr">393 </span> <a href='../310copy-bytes.subx.html#L60'>stream-to-array</a> name, curr-name-ah
<span id="L394" class="LineNr">394 </span> <span class="PreProc">var</span> posts-ah/eax: (addr handle array int) <span class="Special">&lt;-</span> get curr, posts
<span id="L395" class="LineNr">395 </span> populate posts-ah, <span class="Constant">0x8000</span>/channel-capacity
<span id="L396" class="LineNr">396 </span> <span class="PreProc">return</span> i
<span id="L397" class="LineNr">397 </span> <span class="Delimiter">}</span>
<span id="L398" class="LineNr">398 </span> <span class="PreProc">var</span> found?/eax: boolean <span class="Special">&lt;-</span> <a href='../109stream-equal.subx.html#L9'>stream-data-equal?</a> name, curr-name
<span id="L399" class="LineNr">399 </span> <span class="Delimiter">{</span>
<span id="L400" class="LineNr">400 </span> compare found?, <span class="Constant">0</span>/false
<span id="L401" class="LineNr">401 </span> <span class="PreProc">break-if-=</span>
<span id="L402" class="LineNr">402 </span> <a href='../317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;slurp-json-string: truncated&quot;</span>
<span id="L402" class="LineNr">402 </span> <span class="PreProc">return</span> i
<span id="L403" class="LineNr">403 </span> <span class="Delimiter">}</span>
<span id="L404" class="LineNr">404 </span> <span class="PreProc">var</span> c/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> in
<span id="L405" class="LineNr">405 </span> <span class="Delimiter">{</span>
<span id="L406" class="LineNr">406 </span> <span class="PreProc">var</span> c-int/eax: int <span class="Special">&lt;-</span> copy c
<span id="L407" class="LineNr">407 </span> <a href='../115write-byte.subx.html#L12'>append-byte</a> out, c-int
<span id="L408" class="LineNr">408 </span> <span class="Delimiter">}</span>
<span id="L409" class="LineNr">409 </span> compare c, <span class="Constant">0x22</span>/double-quote
<span id="L410" class="LineNr">410 </span> <span class="PreProc">break-if-=</span>
<span id="L411" class="LineNr">411 </span> compare c, <span class="Constant">0x5c</span>/backslash
<span id="L412" class="LineNr">412 </span> <span class="Delimiter">{</span>
<span id="L413" class="LineNr">413 </span> <span class="PreProc">break-if-!=</span>
<span id="L414" class="LineNr">414 </span> <span class="muComment"># read next byte raw</span>
<span id="L415" class="LineNr">415 </span> c <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> in
<span id="L416" class="LineNr">416 </span> <span class="PreProc">var</span> c-int/eax: int <span class="Special">&lt;-</span> copy c
<span id="L417" class="LineNr">417 </span> <a href='../115write-byte.subx.html#L12'>append-byte</a> out, c-int
<span id="L418" class="LineNr">418 </span> <span class="Delimiter">}</span>
<span id="L419" class="LineNr">419 </span> <span class="PreProc">loop</span>
<span id="L420" class="LineNr">420 </span> <span class="Delimiter">}</span>
<span id="L421" class="LineNr">421 </span><span class="Delimiter">}</span>
<span id="L422" class="LineNr">422 </span>
<span id="L423" class="LineNr">423 </span><span class="muComment"># drops trailing double quote</span>
<span id="L424" class="LineNr">424 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='main.mu.html#L424'>next-json-string</a></span> in: (addr stream byte), out: (addr stream byte) <span class="Delimiter">{</span>
<span id="L425" class="LineNr">425 </span> <span class="muComment"># open quote is already read</span>
<span id="L426" class="LineNr">426 </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="PreProc">var</span> eof?/eax: boolean <span class="Special">&lt;-</span> <a href='../309stream.subx.html#L6'>stream-empty?</a> in
<span id="L429" class="LineNr">429 </span> compare eof?, <span class="Constant">0</span>/false
<span id="L430" class="LineNr">430 </span> <span class="PreProc">break-if-=</span>
<span id="L431" class="LineNr">431 </span> <a href='../317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;next-json-string: truncated&quot;</span>
<span id="L432" class="LineNr">432 </span> <span class="Delimiter">}</span>
<span id="L433" class="LineNr">433 </span> <span class="PreProc">var</span> c/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> in
<span id="L434" class="LineNr">434 </span> compare c, <span class="Constant">0x22</span>/double-quote
<span id="L435" class="LineNr">435 </span> <span class="PreProc">break-if-=</span>
<span id="L436" class="LineNr">436 </span> <span class="Delimiter">{</span>
<span id="L437" class="LineNr">437 </span> <span class="PreProc">var</span> c-int/eax: int <span class="Special">&lt;-</span> copy c
<span id="L438" class="LineNr">438 </span> <a href='../115write-byte.subx.html#L12'>append-byte</a> out, c-int
<span id="L439" class="LineNr">439 </span> <span class="Delimiter">}</span>
<span id="L440" class="LineNr">440 </span> compare c, <span class="Constant">0x5c</span>/backslash
<span id="L441" class="LineNr">441 </span> <span class="Delimiter">{</span>
<span id="L442" class="LineNr">442 </span> <span class="PreProc">break-if-!=</span>
<span id="L443" class="LineNr">443 </span> <span class="muComment"># read next byte raw</span>
<span id="L444" class="LineNr">444 </span> c <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> in
<span id="L445" class="LineNr">445 </span> <span class="PreProc">var</span> c-int/eax: int <span class="Special">&lt;-</span> copy c
<span id="L446" class="LineNr">446 </span> <a href='../115write-byte.subx.html#L12'>append-byte</a> out, c-int
<span id="L447" class="LineNr">447 </span> <span class="Delimiter">}</span>
<span id="L448" class="LineNr">448 </span> <span class="PreProc">loop</span>
<span id="L449" class="LineNr">449 </span> <span class="Delimiter">}</span>
<span id="L450" class="LineNr">450 </span><span class="Delimiter">}</span>
<span id="L404" class="LineNr">404 </span> i <span class="Special">&lt;-</span> increment
<span id="L405" class="LineNr">405 </span> <span class="PreProc">loop</span>
<span id="L406" class="LineNr">406 </span> <span class="Delimiter">}</span>
<span id="L407" class="LineNr">407 </span> <a href='../317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;out of channels&quot;</span>
<span id="L408" class="LineNr">408 </span> <span class="PreProc">return</span> <span class="Constant">-1</span>
<span id="L409" class="LineNr">409 </span><span class="Delimiter">}</span>
<span id="L410" class="LineNr">410 </span>
<span id="L411" class="LineNr">411 </span><span class="muComment"># includes trailing double quote</span>
<span id="L412" class="LineNr">412 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='main.mu.html#L412'>slurp-json-string</a></span> in: (addr stream byte), out: (addr stream byte) <span class="Delimiter">{</span>
<span id="L413" class="LineNr">413 </span> <span class="muComment"># open quote is already slurped</span>
<span id="L414" class="LineNr">414 </span> <span class="Delimiter">{</span>
<span id="L415" class="LineNr">415 </span> <span class="Delimiter">{</span>
<span id="L416" class="LineNr">416 </span> <span class="PreProc">var</span> eof?/eax: boolean <span class="Special">&lt;-</span> <a href='../309stream.subx.html#L6'>stream-empty?</a> in
<span id="L417" class="LineNr">417 </span> compare eof?, <span class="Constant">0</span>/false
<span id="L418" class="LineNr">418 </span> <span class="PreProc">break-if-=</span>
<span id="L419" class="LineNr">419 </span> <a href='../317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;slurp-json-string: truncated&quot;</span>
<span id="L420" class="LineNr">420 </span> <span class="Delimiter">}</span>
<span id="L421" class="LineNr">421 </span> <span class="PreProc">var</span> c/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> in
<span id="L422" class="LineNr">422 </span> <span class="Delimiter">{</span>
<span id="L423" class="LineNr">423 </span> <span class="PreProc">var</span> c-int/eax: int <span class="Special">&lt;-</span> copy c
<span id="L424" class="LineNr">424 </span> <a href='../115write-byte.subx.html#L12'>append-byte</a> out, c-int
<span id="L425" class="LineNr">425 </span> <span class="Delimiter">}</span>
<span id="L426" class="LineNr">426 </span> compare c, <span class="Constant">0x22</span>/double-quote
<span id="L427" class="LineNr">427 </span> <span class="PreProc">break-if-=</span>
<span id="L428" class="LineNr">428 </span> compare c, <span class="Constant">0x5c</span>/backslash
<span id="L429" class="LineNr">429 </span> <span class="Delimiter">{</span>
<span id="L430" class="LineNr">430 </span> <span class="PreProc">break-if-!=</span>
<span id="L431" class="LineNr">431 </span> <span class="muComment"># read next byte raw</span>
<span id="L432" class="LineNr">432 </span> c <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> in
<span id="L433" class="LineNr">433 </span> <span class="PreProc">var</span> c-int/eax: int <span class="Special">&lt;-</span> copy c
<span id="L434" class="LineNr">434 </span> <a href='../115write-byte.subx.html#L12'>append-byte</a> out, c-int
<span id="L435" class="LineNr">435 </span> <span class="Delimiter">}</span>
<span id="L436" class="LineNr">436 </span> <span class="PreProc">loop</span>
<span id="L437" class="LineNr">437 </span> <span class="Delimiter">}</span>
<span id="L438" class="LineNr">438 </span><span class="Delimiter">}</span>
<span id="L439" class="LineNr">439 </span>
<span id="L440" class="LineNr">440 </span><span class="muComment"># drops trailing double quote</span>
<span id="L441" class="LineNr">441 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='main.mu.html#L441'>next-json-string</a></span> in: (addr stream byte), out: (addr stream byte) <span class="Delimiter">{</span>
<span id="L442" class="LineNr">442 </span> <span class="muComment"># open quote is already read</span>
<span id="L443" class="LineNr">443 </span> <span class="Delimiter">{</span>
<span id="L444" class="LineNr">444 </span> <span class="Delimiter">{</span>
<span id="L445" class="LineNr">445 </span> <span class="PreProc">var</span> eof?/eax: boolean <span class="Special">&lt;-</span> <a href='../309stream.subx.html#L6'>stream-empty?</a> in
<span id="L446" class="LineNr">446 </span> compare eof?, <span class="Constant">0</span>/false
<span id="L447" class="LineNr">447 </span> <span class="PreProc">break-if-=</span>
<span id="L448" class="LineNr">448 </span> <a href='../317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;next-json-string: truncated&quot;</span>
<span id="L449" class="LineNr">449 </span> <span class="Delimiter">}</span>
<span id="L450" class="LineNr">450 </span> <span class="PreProc">var</span> c/eax: byte <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> in
<span id="L451" class="LineNr">451 </span> compare c, <span class="Constant">0x22</span>/double-quote
<span id="L452" class="LineNr">452 </span> <span class="PreProc">break-if-=</span>
<span id="L453" class="LineNr">453 </span> <span class="Delimiter">{</span>
<span id="L454" class="LineNr">454 </span> <span class="PreProc">var</span> c-int/eax: int <span class="Special">&lt;-</span> copy c
<span id="L455" class="LineNr">455 </span> <a href='../115write-byte.subx.html#L12'>append-byte</a> out, c-int
<span id="L456" class="LineNr">456 </span> <span class="Delimiter">}</span>
<span id="L457" class="LineNr">457 </span> compare c, <span class="Constant">0x5c</span>/backslash
<span id="L458" class="LineNr">458 </span> <span class="Delimiter">{</span>
<span id="L459" class="LineNr">459 </span> <span class="PreProc">break-if-!=</span>
<span id="L460" class="LineNr">460 </span> <span class="muComment"># read next byte raw</span>
<span id="L461" class="LineNr">461 </span> c <span class="Special">&lt;-</span> <a href='../112read-byte.subx.html#L13'>read-byte</a> in
<span id="L462" class="LineNr">462 </span> <span class="PreProc">var</span> c-int/eax: int <span class="Special">&lt;-</span> copy c
<span id="L463" class="LineNr">463 </span> <a href='../115write-byte.subx.html#L12'>append-byte</a> out, c-int
<span id="L464" class="LineNr">464 </span> <span class="Delimiter">}</span>
<span id="L465" class="LineNr">465 </span> <span class="PreProc">loop</span>
<span id="L466" class="LineNr">466 </span> <span class="Delimiter">}</span>
<span id="L467" class="LineNr">467 </span><span class="Delimiter">}</span>
</pre>
</body>
</html>

14
html/mu-init.subx.html generated
View File

@ -1,14 +1,14 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - mu-init.subx</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
@ -22,7 +22,7 @@ a { color:inherit; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */

509
html/shell/cell.mu.html generated
View File

@ -1,32 +1,32 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - shell/cell.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.muRegEcx { color: #870000; }
.Special { color: #ff6060; }
.LineNr { }
.muRegEsi { color: #005faf; }
.Constant { color: #008787; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muRegEcx { color: #870000; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -73,197 +73,314 @@ if ('onhashchange' in window) {
<span id="L13" class="LineNr"> 13 </span> <span class="muComment"># type 5: screen</span>
<span id="L14" class="LineNr"> 14 </span> screen-data: (handle <a href='../500fake-screen.mu.html#L14'>screen</a>)
<span id="L15" class="LineNr"> 15 </span> <span class="muComment"># type 6: keyboard</span>
<span id="L16" class="LineNr"> 16 </span> keyboard-data: (handle <a href='gap-buffer.mu.html#L3'>gap-buffer</a>)
<span id="L17" class="LineNr"> 17 </span> <span class="muComment"># TODO: array, (associative) table</span>
<span id="L18" class="LineNr"> 18 </span> <span class="muComment"># if you add types here, don't forget to update cell-isomorphic?</span>
<span id="L19" class="LineNr"> 19 </span><span class="Delimiter">}</span>
<span id="L20" class="LineNr"> 20 </span>
<span id="L21" class="LineNr"> 21 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L21'>allocate-symbol</a></span> _out: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Delimiter">{</span>
<span id="L22" class="LineNr"> 22 </span> <span class="PreProc">var</span> out/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out
<span id="L23" class="LineNr"> 23 </span> <a href='../120allocate.subx.html#L43'>allocate</a> out
<span id="L24" class="LineNr"> 24 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *out
<span id="L25" class="LineNr"> 25 </span> <span class="PreProc">var</span> <span class="PreProc">type</span>/<span class="muRegEcx">ecx</span>: (addr int) <span class="Special">&lt;-</span> get out-addr, <span class="PreProc">type</span>
<span id="L26" class="LineNr"> 26 </span> copy-to *<span class="PreProc">type</span>, <span class="Constant">2</span>/symbol
<span id="L27" class="LineNr"> 27 </span> <span class="PreProc">var</span> dest-ah/eax: (addr handle stream byte) <span class="Special">&lt;-</span> get out-addr, text-data
<span id="L28" class="LineNr"> 28 </span> populate-stream dest-ah, <span class="Constant">0x40</span>/max-symbol-size
<span id="L29" class="LineNr"> 29 </span><span class="Delimiter">}</span>
<span id="L30" class="LineNr"> 30 </span>
<span id="L31" class="LineNr"> 31 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L31'>initialize-symbol</a></span> _out: (addr handle <a href='cell.mu.html#L1'>cell</a>), val: (addr array byte) <span class="Delimiter">{</span>
<span id="L32" class="LineNr"> 32 </span> <span class="PreProc">var</span> out/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out
<span id="L33" class="LineNr"> 33 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *out
<span id="L34" class="LineNr"> 34 </span> <span class="PreProc">var</span> dest-ah/eax: (addr handle stream byte) <span class="Special">&lt;-</span> get out-addr, text-data
<span id="L35" class="LineNr"> 35 </span> <span class="PreProc">var</span> dest/eax: (addr stream byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *dest-ah
<span id="L36" class="LineNr"> 36 </span> <a href='../108write.subx.html#L11'>write</a> dest, val
<span id="L37" class="LineNr"> 37 </span><span class="Delimiter">}</span>
<span id="L38" class="LineNr"> 38 </span>
<span id="L39" class="LineNr"> 39 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L39'>new-symbol</a></span> out: (addr handle <a href='cell.mu.html#L1'>cell</a>), val: (addr array byte) <span class="Delimiter">{</span>
<span id="L40" class="LineNr"> 40 </span> <a href='cell.mu.html#L21'>allocate-symbol</a> out
<span id="L41" class="LineNr"> 41 </span> <a href='cell.mu.html#L31'>initialize-symbol</a> out, val
<span id="L42" class="LineNr"> 42 </span><span class="Delimiter">}</span>
<span id="L43" class="LineNr"> 43 </span>
<span id="L44" class="LineNr"> 44 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L44'>symbol-equal?</a></span> _in: (addr <a href='cell.mu.html#L1'>cell</a>), name: (addr array byte)<span class="PreProc"> -&gt; </span>_/eax: boolean <span class="Delimiter">{</span>
<span id="L45" class="LineNr"> 45 </span> <span class="PreProc">var</span> in/<span class="muRegEsi">esi</span>: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _in
<span id="L46" class="LineNr"> 46 </span> <span class="PreProc">var</span> in-type/eax: (addr int) <span class="Special">&lt;-</span> get in, <span class="PreProc">type</span>
<span id="L47" class="LineNr"> 47 </span> compare *in-type, <span class="Constant">2</span>/symbol
<span id="L48" class="LineNr"> 48 </span> <span class="Delimiter">{</span>
<span id="L49" class="LineNr"> 49 </span> <span class="PreProc">break-if-=</span>
<span id="L50" class="LineNr"> 50 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false
<span id="L51" class="LineNr"> 51 </span> <span class="Delimiter">}</span>
<span id="L52" class="LineNr"> 52 </span> <span class="PreProc">var</span> in-data-ah/eax: (addr handle stream byte) <span class="Special">&lt;-</span> get in, text-data
<span id="L53" class="LineNr"> 53 </span> <span class="PreProc">var</span> in-data/eax: (addr stream byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *in-data-ah
<span id="L54" class="LineNr"> 54 </span> <span class="PreProc">var</span> result/eax: boolean <span class="Special">&lt;-</span> <a href='../109stream-equal.subx.html#L9'>stream-data-equal?</a> in-data, name
<span id="L55" class="LineNr"> 55 </span> <span class="PreProc">return</span> result
<span id="L56" class="LineNr"> 56 </span><span class="Delimiter">}</span>
<span id="L57" class="LineNr"> 57 </span>
<span id="L58" class="LineNr"> 58 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L58'>allocate-stream</a></span> _out: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Delimiter">{</span>
<span id="L59" class="LineNr"> 59 </span> <span class="PreProc">var</span> out/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out
<span id="L60" class="LineNr"> 60 </span> <a href='../120allocate.subx.html#L43'>allocate</a> out
<span id="L61" class="LineNr"> 61 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *out
<span id="L62" class="LineNr"> 62 </span> <span class="PreProc">var</span> <span class="PreProc">type</span>/<span class="muRegEcx">ecx</span>: (addr int) <span class="Special">&lt;-</span> get out-addr, <span class="PreProc">type</span>
<span id="L63" class="LineNr"> 63 </span> copy-to *<span class="PreProc">type</span>, <span class="Constant">3</span>/stream
<span id="L64" class="LineNr"> 64 </span> <span class="PreProc">var</span> dest-ah/eax: (addr handle stream byte) <span class="Special">&lt;-</span> get out-addr, text-data
<span id="L65" class="LineNr"> 65 </span> populate-stream dest-ah, <span class="Constant">0x40</span>/max-stream-size
<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="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L68'>allocate-number</a></span> _out: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Delimiter">{</span>
<span id="L69" class="LineNr"> 69 </span> <span class="PreProc">var</span> out/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out
<span id="L70" class="LineNr"> 70 </span> <a href='../120allocate.subx.html#L43'>allocate</a> out
<span id="L71" class="LineNr"> 71 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *out
<span id="L72" class="LineNr"> 72 </span> <span class="PreProc">var</span> <span class="PreProc">type</span>/<span class="muRegEcx">ecx</span>: (addr int) <span class="Special">&lt;-</span> get out-addr, <span class="PreProc">type</span>
<span id="L73" class="LineNr"> 73 </span> copy-to *<span class="PreProc">type</span>, <span class="Constant">1</span>/number
<span id="L74" class="LineNr"> 74 </span><span class="Delimiter">}</span>
<span id="L75" class="LineNr"> 75 </span>
<span id="L76" class="LineNr"> 76 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L76'>initialize-integer</a></span> _out: (addr handle <a href='cell.mu.html#L1'>cell</a>), n: int <span class="Delimiter">{</span>
<span id="L77" class="LineNr"> 77 </span> <span class="PreProc">var</span> out/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out
<span id="L78" class="LineNr"> 78 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *out
<span id="L79" class="LineNr"> 79 </span> <span class="PreProc">var</span> dest-addr/eax: (addr float) <span class="Special">&lt;-</span> get out-addr, number-data
<span id="L80" class="LineNr"> 80 </span> <span class="PreProc">var</span> src/<span class="Constant">xmm0</span>: float <span class="Special">&lt;-</span> convert n
<span id="L81" class="LineNr"> 81 </span> copy-to *dest-addr, src
<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="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L84'>new-integer</a></span> out: (addr handle <a href='cell.mu.html#L1'>cell</a>), n: int <span class="Delimiter">{</span>
<span id="L85" class="LineNr"> 85 </span> <a href='cell.mu.html#L68'>allocate-number</a> out
<span id="L86" class="LineNr"> 86 </span> <a href='cell.mu.html#L76'>initialize-integer</a> out, n
<span id="L87" class="LineNr"> 87 </span><span class="Delimiter">}</span>
<span id="L88" class="LineNr"> 88 </span>
<span id="L89" class="LineNr"> 89 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L89'>initialize-float</a></span> _out: (addr handle <a href='cell.mu.html#L1'>cell</a>), n: float <span class="Delimiter">{</span>
<span id="L90" class="LineNr"> 90 </span> <span class="PreProc">var</span> out/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out
<span id="L91" class="LineNr"> 91 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *out
<span id="L92" class="LineNr"> 92 </span> <span class="PreProc">var</span> dest-ah/eax: (addr float) <span class="Special">&lt;-</span> get out-addr, number-data
<span id="L93" class="LineNr"> 93 </span> <span class="PreProc">var</span> src/<span class="Constant">xmm0</span>: float <span class="Special">&lt;-</span> copy n
<span id="L94" class="LineNr"> 94 </span> copy-to *dest-ah, src
<span id="L95" class="LineNr"> 95 </span><span class="Delimiter">}</span>
<span id="L96" class="LineNr"> 96 </span>
<span id="L97" class="LineNr"> 97 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L97'>new-float</a></span> out: (addr handle <a href='cell.mu.html#L1'>cell</a>), n: float <span class="Delimiter">{</span>
<span id="L98" class="LineNr"> 98 </span> <a href='cell.mu.html#L68'>allocate-number</a> out
<span id="L99" class="LineNr"> 99 </span> <a href='cell.mu.html#L89'>initialize-float</a> out, n
<span id="L100" class="LineNr">100 </span><span class="Delimiter">}</span>
<span id="L101" class="LineNr">101 </span>
<span id="L102" class="LineNr">102 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L102'>allocate-pair</a></span> out: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Delimiter">{</span>
<span id="L103" class="LineNr">103 </span> <a href='../120allocate.subx.html#L43'>allocate</a> out
<span id="L104" class="LineNr">104 </span> <span class="muComment"># new cells have type pair by default</span>
<span id="L105" class="LineNr">105 </span><span class="Delimiter">}</span>
<span id="L106" class="LineNr">106 </span>
<span id="L107" class="LineNr">107 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L107'>initialize-pair</a></span> _out: (addr handle <a href='cell.mu.html#L1'>cell</a>), left: (handle <a href='cell.mu.html#L1'>cell</a>), right: (handle <a href='cell.mu.html#L1'>cell</a>) <span class="Delimiter">{</span>
<span id="L108" class="LineNr">108 </span> <span class="PreProc">var</span> out/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out
<span id="L109" class="LineNr">109 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *out
<span id="L110" class="LineNr">110 </span> <span class="PreProc">var</span> dest-ah/<span class="muRegEcx">ecx</span>: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> get out-addr, left
<span id="L111" class="LineNr">111 </span> <a href='../120allocate.subx.html#L479'>copy-handle</a> left, dest-ah
<span id="L112" class="LineNr">112 </span> dest-ah <span class="Special">&lt;-</span> get out-addr, right
<span id="L113" class="LineNr">113 </span> <a href='../120allocate.subx.html#L479'>copy-handle</a> right, dest-ah
<span id="L114" class="LineNr">114 </span><span class="Delimiter">}</span>
<span id="L115" class="LineNr">115 </span>
<span id="L116" class="LineNr">116 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L116'>new-pair</a></span> out: (addr handle <a href='cell.mu.html#L1'>cell</a>), left: (handle <a href='cell.mu.html#L1'>cell</a>), right: (handle <a href='cell.mu.html#L1'>cell</a>) <span class="Delimiter">{</span>
<span id="L117" class="LineNr">117 </span> <a href='cell.mu.html#L102'>allocate-pair</a> out
<span id="L118" class="LineNr">118 </span> <a href='cell.mu.html#L107'>initialize-pair</a> out, left, right
<span id="L119" class="LineNr">119 </span><span class="Delimiter">}</span>
<span id="L120" class="LineNr">120 </span>
<span id="L121" class="LineNr">121 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L121'>nil</a></span> out: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Delimiter">{</span>
<span id="L122" class="LineNr">122 </span> <a href='cell.mu.html#L102'>allocate-pair</a> out
<span id="L123" class="LineNr">123 </span><span class="Delimiter">}</span>
<span id="L124" class="LineNr">124 </span>
<span id="L125" class="LineNr">125 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L125'>allocate-primitive-function</a></span> _out: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Delimiter">{</span>
<span id="L126" class="LineNr">126 </span> <span class="PreProc">var</span> out/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out
<span id="L127" class="LineNr">127 </span> <a href='../120allocate.subx.html#L43'>allocate</a> out
<span id="L128" class="LineNr">128 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *out
<span id="L129" class="LineNr">129 </span> <span class="PreProc">var</span> <span class="PreProc">type</span>/<span class="muRegEcx">ecx</span>: (addr int) <span class="Special">&lt;-</span> get out-addr, <span class="PreProc">type</span>
<span id="L130" class="LineNr">130 </span> copy-to *<span class="PreProc">type</span>, <span class="Constant">4</span>/primitive-function
<span id="L16" class="LineNr"> 16 </span> keyboard-data: (handle <a href='../514gap-buffer.mu.html#L3'>gap-buffer</a>)
<span id="L17" class="LineNr"> 17 </span> <span class="muComment"># type 7: array</span>
<span id="L18" class="LineNr"> 18 </span> array-data: (handle array handle <a href='cell.mu.html#L1'>cell</a>)
<span id="L19" class="LineNr"> 19 </span> <span class="muComment"># type 8: image</span>
<span id="L20" class="LineNr"> 20 </span> image-data: (handle <a href='../511image.mu.html#L6'>image</a>)
<span id="L21" class="LineNr"> 21 </span> <span class="muComment"># TODO: (associative) table</span>
<span id="L22" class="LineNr"> 22 </span> <span class="muComment"># if you add types here, don't forget to update cell-isomorphic?</span>
<span id="L23" class="LineNr"> 23 </span><span class="Delimiter">}</span>
<span id="L24" class="LineNr"> 24 </span>
<span id="L25" class="LineNr"> 25 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L25'>allocate-symbol</a></span> _out: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Delimiter">{</span>
<span id="L26" class="LineNr"> 26 </span> <span class="PreProc">var</span> out/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out
<span id="L27" class="LineNr"> 27 </span> <a href='../120allocate.subx.html#L43'>allocate</a> out
<span id="L28" class="LineNr"> 28 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *out
<span id="L29" class="LineNr"> 29 </span> <span class="PreProc">var</span> <span class="PreProc">type</span>/<span class="muRegEcx">ecx</span>: (addr int) <span class="Special">&lt;-</span> get out-addr, <span class="PreProc">type</span>
<span id="L30" class="LineNr"> 30 </span> copy-to *<span class="PreProc">type</span>, <span class="Constant">2</span>/symbol
<span id="L31" class="LineNr"> 31 </span> <span class="PreProc">var</span> dest-ah/eax: (addr handle stream byte) <span class="Special">&lt;-</span> get out-addr, text-data
<span id="L32" class="LineNr"> 32 </span> populate-stream dest-ah, <span class="Constant">0x40</span>/max-symbol-size
<span id="L33" class="LineNr"> 33 </span><span class="Delimiter">}</span>
<span id="L34" class="LineNr"> 34 </span>
<span id="L35" class="LineNr"> 35 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L35'>initialize-symbol</a></span> _out: (addr handle <a href='cell.mu.html#L1'>cell</a>), val: (addr array byte) <span class="Delimiter">{</span>
<span id="L36" class="LineNr"> 36 </span> <span class="PreProc">var</span> out/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out
<span id="L37" class="LineNr"> 37 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *out
<span id="L38" class="LineNr"> 38 </span> <span class="PreProc">var</span> dest-ah/eax: (addr handle stream byte) <span class="Special">&lt;-</span> get out-addr, text-data
<span id="L39" class="LineNr"> 39 </span> <span class="PreProc">var</span> dest/eax: (addr stream byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *dest-ah
<span id="L40" class="LineNr"> 40 </span> <a href='../108write.subx.html#L11'>write</a> dest, val
<span id="L41" class="LineNr"> 41 </span><span class="Delimiter">}</span>
<span id="L42" class="LineNr"> 42 </span>
<span id="L43" class="LineNr"> 43 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L43'>new-symbol</a></span> out: (addr handle <a href='cell.mu.html#L1'>cell</a>), val: (addr array byte) <span class="Delimiter">{</span>
<span id="L44" class="LineNr"> 44 </span> <a href='cell.mu.html#L25'>allocate-symbol</a> out
<span id="L45" class="LineNr"> 45 </span> <a href='cell.mu.html#L35'>initialize-symbol</a> out, val
<span id="L46" class="LineNr"> 46 </span><span class="Delimiter">}</span>
<span id="L47" class="LineNr"> 47 </span>
<span id="L48" class="LineNr"> 48 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L48'>symbol?</a></span> _x: (addr <a href='cell.mu.html#L1'>cell</a>)<span class="PreProc"> -&gt; </span>_/eax: boolean <span class="Delimiter">{</span>
<span id="L49" class="LineNr"> 49 </span> <span class="PreProc">var</span> x/<span class="muRegEsi">esi</span>: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _x
<span id="L50" class="LineNr"> 50 </span> <span class="PreProc">var</span> <span class="PreProc">type</span>/eax: (addr int) <span class="Special">&lt;-</span> get x, <span class="PreProc">type</span>
<span id="L51" class="LineNr"> 51 </span> compare *<span class="PreProc">type</span>, <span class="Constant">2</span>/symbol
<span id="L52" class="LineNr"> 52 </span> <span class="Delimiter">{</span>
<span id="L53" class="LineNr"> 53 </span> <span class="PreProc">break-if-=</span>
<span id="L54" class="LineNr"> 54 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false
<span id="L55" class="LineNr"> 55 </span> <span class="Delimiter">}</span>
<span id="L56" class="LineNr"> 56 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L57" class="LineNr"> 57 </span><span class="Delimiter">}</span>
<span id="L58" class="LineNr"> 58 </span>
<span id="L59" class="LineNr"> 59 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L59'>symbol-equal?</a></span> _in: (addr <a href='cell.mu.html#L1'>cell</a>), name: (addr array byte)<span class="PreProc"> -&gt; </span>_/eax: boolean <span class="Delimiter">{</span>
<span id="L60" class="LineNr"> 60 </span> <span class="PreProc">var</span> in/<span class="muRegEsi">esi</span>: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _in
<span id="L61" class="LineNr"> 61 </span> <span class="PreProc">var</span> in-type/eax: (addr int) <span class="Special">&lt;-</span> get in, <span class="PreProc">type</span>
<span id="L62" class="LineNr"> 62 </span> compare *in-type, <span class="Constant">2</span>/symbol
<span id="L63" class="LineNr"> 63 </span> <span class="Delimiter">{</span>
<span id="L64" class="LineNr"> 64 </span> <span class="PreProc">break-if-=</span>
<span id="L65" class="LineNr"> 65 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false
<span id="L66" class="LineNr"> 66 </span> <span class="Delimiter">}</span>
<span id="L67" class="LineNr"> 67 </span> <span class="PreProc">var</span> in-data-ah/eax: (addr handle stream byte) <span class="Special">&lt;-</span> get in, text-data
<span id="L68" class="LineNr"> 68 </span> <span class="PreProc">var</span> in-data/eax: (addr stream byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *in-data-ah
<span id="L69" class="LineNr"> 69 </span> <span class="PreProc">var</span> result/eax: boolean <span class="Special">&lt;-</span> <a href='../109stream-equal.subx.html#L9'>stream-data-equal?</a> in-data, name
<span id="L70" class="LineNr"> 70 </span> <span class="PreProc">return</span> result
<span id="L71" class="LineNr"> 71 </span><span class="Delimiter">}</span>
<span id="L72" class="LineNr"> 72 </span>
<span id="L73" class="LineNr"> 73 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L73'>allocate-stream</a></span> _out: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Delimiter">{</span>
<span id="L74" class="LineNr"> 74 </span> <span class="PreProc">var</span> out/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out
<span id="L75" class="LineNr"> 75 </span> <a href='../120allocate.subx.html#L43'>allocate</a> out
<span id="L76" class="LineNr"> 76 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *out
<span id="L77" class="LineNr"> 77 </span> <span class="PreProc">var</span> <span class="PreProc">type</span>/<span class="muRegEcx">ecx</span>: (addr int) <span class="Special">&lt;-</span> get out-addr, <span class="PreProc">type</span>
<span id="L78" class="LineNr"> 78 </span> copy-to *<span class="PreProc">type</span>, <span class="Constant">3</span>/stream
<span id="L79" class="LineNr"> 79 </span> <span class="PreProc">var</span> dest-ah/eax: (addr handle stream byte) <span class="Special">&lt;-</span> get out-addr, text-data
<span id="L80" class="LineNr"> 80 </span> populate-stream dest-ah, <span class="Constant">0x40</span>/max-stream-size
<span id="L81" class="LineNr"> 81 </span><span class="Delimiter">}</span>
<span id="L82" class="LineNr"> 82 </span>
<span id="L83" class="LineNr"> 83 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L83'>allocate-number</a></span> _out: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Delimiter">{</span>
<span id="L84" class="LineNr"> 84 </span> <span class="PreProc">var</span> out/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out
<span id="L85" class="LineNr"> 85 </span> <a href='../120allocate.subx.html#L43'>allocate</a> out
<span id="L86" class="LineNr"> 86 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *out
<span id="L87" class="LineNr"> 87 </span> <span class="PreProc">var</span> <span class="PreProc">type</span>/<span class="muRegEcx">ecx</span>: (addr int) <span class="Special">&lt;-</span> get out-addr, <span class="PreProc">type</span>
<span id="L88" class="LineNr"> 88 </span> copy-to *<span class="PreProc">type</span>, <span class="Constant">1</span>/number
<span id="L89" class="LineNr"> 89 </span><span class="Delimiter">}</span>
<span id="L90" class="LineNr"> 90 </span>
<span id="L91" class="LineNr"> 91 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L91'>initialize-integer</a></span> _out: (addr handle <a href='cell.mu.html#L1'>cell</a>), n: int <span class="Delimiter">{</span>
<span id="L92" class="LineNr"> 92 </span> <span class="PreProc">var</span> out/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out
<span id="L93" class="LineNr"> 93 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *out
<span id="L94" class="LineNr"> 94 </span> <span class="PreProc">var</span> dest-addr/eax: (addr float) <span class="Special">&lt;-</span> get out-addr, number-data
<span id="L95" class="LineNr"> 95 </span> <span class="PreProc">var</span> src/<span class="Constant">xmm0</span>: float <span class="Special">&lt;-</span> convert n
<span id="L96" class="LineNr"> 96 </span> copy-to *dest-addr, src
<span id="L97" class="LineNr"> 97 </span><span class="Delimiter">}</span>
<span id="L98" class="LineNr"> 98 </span>
<span id="L99" class="LineNr"> 99 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L99'>new-integer</a></span> out: (addr handle <a href='cell.mu.html#L1'>cell</a>), n: int <span class="Delimiter">{</span>
<span id="L100" class="LineNr">100 </span> <a href='cell.mu.html#L83'>allocate-number</a> out
<span id="L101" class="LineNr">101 </span> <a href='cell.mu.html#L91'>initialize-integer</a> out, n
<span id="L102" class="LineNr">102 </span><span class="Delimiter">}</span>
<span id="L103" class="LineNr">103 </span>
<span id="L104" class="LineNr">104 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L104'>initialize-float</a></span> _out: (addr handle <a href='cell.mu.html#L1'>cell</a>), n: float <span class="Delimiter">{</span>
<span id="L105" class="LineNr">105 </span> <span class="PreProc">var</span> out/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out
<span id="L106" class="LineNr">106 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *out
<span id="L107" class="LineNr">107 </span> <span class="PreProc">var</span> dest-ah/eax: (addr float) <span class="Special">&lt;-</span> get out-addr, number-data
<span id="L108" class="LineNr">108 </span> <span class="PreProc">var</span> src/<span class="Constant">xmm0</span>: float <span class="Special">&lt;-</span> copy n
<span id="L109" class="LineNr">109 </span> copy-to *dest-ah, src
<span id="L110" class="LineNr">110 </span><span class="Delimiter">}</span>
<span id="L111" class="LineNr">111 </span>
<span id="L112" class="LineNr">112 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L112'>new-float</a></span> out: (addr handle <a href='cell.mu.html#L1'>cell</a>), n: float <span class="Delimiter">{</span>
<span id="L113" class="LineNr">113 </span> <a href='cell.mu.html#L83'>allocate-number</a> out
<span id="L114" class="LineNr">114 </span> <a href='cell.mu.html#L104'>initialize-float</a> out, n
<span id="L115" class="LineNr">115 </span><span class="Delimiter">}</span>
<span id="L116" class="LineNr">116 </span>
<span id="L117" class="LineNr">117 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L117'>number?</a></span> _x: (addr <a href='cell.mu.html#L1'>cell</a>)<span class="PreProc"> -&gt; </span>_/eax: boolean <span class="Delimiter">{</span>
<span id="L118" class="LineNr">118 </span> <span class="PreProc">var</span> x/<span class="muRegEsi">esi</span>: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _x
<span id="L119" class="LineNr">119 </span> <span class="PreProc">var</span> <span class="PreProc">type</span>/eax: (addr int) <span class="Special">&lt;-</span> get x, <span class="PreProc">type</span>
<span id="L120" class="LineNr">120 </span> compare *<span class="PreProc">type</span>, <span class="Constant">1</span>/number
<span id="L121" class="LineNr">121 </span> <span class="Delimiter">{</span>
<span id="L122" class="LineNr">122 </span> <span class="PreProc">break-if-=</span>
<span id="L123" class="LineNr">123 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false
<span id="L124" class="LineNr">124 </span> <span class="Delimiter">}</span>
<span id="L125" class="LineNr">125 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L126" class="LineNr">126 </span><span class="Delimiter">}</span>
<span id="L127" class="LineNr">127 </span>
<span id="L128" class="LineNr">128 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L128'>allocate-pair</a></span> out: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Delimiter">{</span>
<span id="L129" class="LineNr">129 </span> <a href='../120allocate.subx.html#L43'>allocate</a> out
<span id="L130" class="LineNr">130 </span> <span class="muComment"># new cells have type pair by default</span>
<span id="L131" class="LineNr">131 </span><span class="Delimiter">}</span>
<span id="L132" class="LineNr">132 </span>
<span id="L133" class="LineNr">133 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L133'>initialize-primitive-function</a></span> _out: (addr handle <a href='cell.mu.html#L1'>cell</a>), n: int <span class="Delimiter">{</span>
<span id="L133" class="LineNr">133 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L133'>initialize-pair</a></span> _out: (addr handle <a href='cell.mu.html#L1'>cell</a>), left: (handle <a href='cell.mu.html#L1'>cell</a>), right: (handle <a href='cell.mu.html#L1'>cell</a>) <span class="Delimiter">{</span>
<span id="L134" class="LineNr">134 </span> <span class="PreProc">var</span> out/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out
<span id="L135" class="LineNr">135 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *out
<span id="L136" class="LineNr">136 </span> <span class="PreProc">var</span> dest-addr/eax: (addr int) <span class="Special">&lt;-</span> get out-addr, index-data
<span id="L137" class="LineNr">137 </span> <span class="PreProc">var</span> src/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy n
<span id="L138" class="LineNr">138 </span> copy-to *dest-addr, src
<span id="L139" class="LineNr">139 </span><span class="Delimiter">}</span>
<span id="L140" class="LineNr">140 </span>
<span id="L141" class="LineNr">141 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L141'>new-primitive-function</a></span> out: (addr handle <a href='cell.mu.html#L1'>cell</a>), n: int <span class="Delimiter">{</span>
<span id="L142" class="LineNr">142 </span> <a href='cell.mu.html#L125'>allocate-primitive-function</a> out
<span id="L143" class="LineNr">143 </span> <a href='cell.mu.html#L133'>initialize-primitive-function</a> out, n
<span id="L144" class="LineNr">144 </span><span class="Delimiter">}</span>
<span id="L145" class="LineNr">145 </span>
<span id="L146" class="LineNr">146 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L146'>allocate-screen</a></span> _out: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Delimiter">{</span>
<span id="L147" class="LineNr">147 </span> <span class="PreProc">var</span> out/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out
<span id="L148" class="LineNr">148 </span> <a href='../120allocate.subx.html#L43'>allocate</a> out
<span id="L149" class="LineNr">149 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *out
<span id="L150" class="LineNr">150 </span> <span class="PreProc">var</span> <span class="PreProc">type</span>/<span class="muRegEcx">ecx</span>: (addr int) <span class="Special">&lt;-</span> get out-addr, <span class="PreProc">type</span>
<span id="L151" class="LineNr">151 </span> copy-to *<span class="PreProc">type</span>, <span class="Constant">5</span>/screen
<span id="L152" class="LineNr">152 </span><span class="Delimiter">}</span>
<span id="L153" class="LineNr">153 </span>
<span id="L154" class="LineNr">154 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L154'>new-fake-screen</a></span> _out: (addr handle <a href='cell.mu.html#L1'>cell</a>), width: int, height: int, pixel-graphics?: boolean <span class="Delimiter">{</span>
<span id="L155" class="LineNr">155 </span> <span class="PreProc">var</span> out/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out
<span id="L156" class="LineNr">156 </span> <a href='cell.mu.html#L146'>allocate-screen</a> out
<span id="L157" class="LineNr">157 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *out
<span id="L158" class="LineNr">158 </span> <span class="PreProc">var</span> dest-ah/eax: (addr handle <a href='../500fake-screen.mu.html#L14'>screen</a>) <span class="Special">&lt;-</span> get out-addr, screen-data
<span id="L159" class="LineNr">159 </span> <a href='../120allocate.subx.html#L43'>allocate</a> dest-ah
<span id="L160" class="LineNr">160 </span> <span class="PreProc">var</span> dest-addr/eax: (addr <a href='../500fake-screen.mu.html#L14'>screen</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *dest-ah
<span id="L161" class="LineNr">161 </span> <a href='../500fake-screen.mu.html#L33'>initialize-screen</a> dest-addr, width, height, pixel-graphics?
<span id="L162" class="LineNr">162 </span><span class="Delimiter">}</span>
<span id="L163" class="LineNr">163 </span>
<span id="L164" class="LineNr">164 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L164'>clear-screen-var</a></span> _self-ah: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Delimiter">{</span>
<span id="L165" class="LineNr">165 </span> <span class="PreProc">var</span> self-ah/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _self-ah
<span id="L166" class="LineNr">166 </span> <span class="PreProc">var</span> self/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *self-ah
<span id="L167" class="LineNr">167 </span> compare self, <span class="Constant">0</span>
<span id="L168" class="LineNr">168 </span> <span class="Delimiter">{</span>
<span id="L169" class="LineNr">169 </span> <span class="PreProc">break-if-!=</span>
<span id="L170" class="LineNr">170 </span> <span class="PreProc">return</span>
<span id="L171" class="LineNr">171 </span> <span class="Delimiter">}</span>
<span id="L172" class="LineNr">172 </span> <span class="PreProc">var</span> screen-ah/eax: (addr handle <a href='../500fake-screen.mu.html#L14'>screen</a>) <span class="Special">&lt;-</span> get self, screen-data
<span id="L173" class="LineNr">173 </span> <span class="PreProc">var</span> <a href='../500fake-screen.mu.html#L14'>screen</a>/eax: (addr <a href='../500fake-screen.mu.html#L14'>screen</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *screen-ah
<span id="L174" class="LineNr">174 </span> <a href='../500fake-screen.mu.html#L251'>clear-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>
<span id="L175" class="LineNr">175 </span><span class="Delimiter">}</span>
<span id="L176" class="LineNr">176 </span>
<span id="L177" class="LineNr">177 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L177'>allocate-keyboard</a></span> _out: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Delimiter">{</span>
<span id="L178" class="LineNr">178 </span> <span class="PreProc">var</span> out/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out
<span id="L179" class="LineNr">179 </span> <a href='../120allocate.subx.html#L43'>allocate</a> out
<span id="L180" class="LineNr">180 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *out
<span id="L181" class="LineNr">181 </span> <span class="PreProc">var</span> <span class="PreProc">type</span>/<span class="muRegEcx">ecx</span>: (addr int) <span class="Special">&lt;-</span> get out-addr, <span class="PreProc">type</span>
<span id="L182" class="LineNr">182 </span> copy-to *<span class="PreProc">type</span>, <span class="Constant">6</span>/keyboard
<span id="L135" class="LineNr">135 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *out
<span id="L136" class="LineNr">136 </span> <span class="PreProc">var</span> dest-ah/<span class="muRegEcx">ecx</span>: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> get out-addr, left
<span id="L137" class="LineNr">137 </span> <a href='../120allocate.subx.html#L491'>copy-handle</a> left, dest-ah
<span id="L138" class="LineNr">138 </span> dest-ah <span class="Special">&lt;-</span> get out-addr, right
<span id="L139" class="LineNr">139 </span> <a href='../120allocate.subx.html#L491'>copy-handle</a> right, dest-ah
<span id="L140" class="LineNr">140 </span><span class="Delimiter">}</span>
<span id="L141" class="LineNr">141 </span>
<span id="L142" class="LineNr">142 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L142'>new-pair</a></span> out: (addr handle <a href='cell.mu.html#L1'>cell</a>), left: (handle <a href='cell.mu.html#L1'>cell</a>), right: (handle <a href='cell.mu.html#L1'>cell</a>) <span class="Delimiter">{</span>
<span id="L143" class="LineNr">143 </span> <a href='cell.mu.html#L128'>allocate-pair</a> out
<span id="L144" class="LineNr">144 </span> <a href='cell.mu.html#L133'>initialize-pair</a> out, left, right
<span id="L145" class="LineNr">145 </span><span class="Delimiter">}</span>
<span id="L146" class="LineNr">146 </span>
<span id="L147" class="LineNr">147 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L147'>nil</a></span> out: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Delimiter">{</span>
<span id="L148" class="LineNr">148 </span> <a href='cell.mu.html#L128'>allocate-pair</a> out
<span id="L149" class="LineNr">149 </span><span class="Delimiter">}</span>
<span id="L150" class="LineNr">150 </span>
<span id="L151" class="LineNr">151 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L151'>pair?</a></span> _x: (addr <a href='cell.mu.html#L1'>cell</a>)<span class="PreProc"> -&gt; </span>_/eax: boolean <span class="Delimiter">{</span>
<span id="L152" class="LineNr">152 </span> <span class="PreProc">var</span> x/<span class="muRegEsi">esi</span>: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _x
<span id="L153" class="LineNr">153 </span> <span class="PreProc">var</span> <span class="PreProc">type</span>/eax: (addr int) <span class="Special">&lt;-</span> get x, <span class="PreProc">type</span>
<span id="L154" class="LineNr">154 </span> compare *<span class="PreProc">type</span>, <span class="Constant">0</span>/pair
<span id="L155" class="LineNr">155 </span> <span class="Delimiter">{</span>
<span id="L156" class="LineNr">156 </span> <span class="PreProc">break-if-=</span>
<span id="L157" class="LineNr">157 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false
<span id="L158" class="LineNr">158 </span> <span class="Delimiter">}</span>
<span id="L159" class="LineNr">159 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L160" class="LineNr">160 </span><span class="Delimiter">}</span>
<span id="L161" class="LineNr">161 </span>
<span id="L162" class="LineNr">162 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L162'>allocate-primitive-function</a></span> _out: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Delimiter">{</span>
<span id="L163" class="LineNr">163 </span> <span class="PreProc">var</span> out/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out
<span id="L164" class="LineNr">164 </span> <a href='../120allocate.subx.html#L43'>allocate</a> out
<span id="L165" class="LineNr">165 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *out
<span id="L166" class="LineNr">166 </span> <span class="PreProc">var</span> <span class="PreProc">type</span>/<span class="muRegEcx">ecx</span>: (addr int) <span class="Special">&lt;-</span> get out-addr, <span class="PreProc">type</span>
<span id="L167" class="LineNr">167 </span> copy-to *<span class="PreProc">type</span>, <span class="Constant">4</span>/primitive-function
<span id="L168" class="LineNr">168 </span><span class="Delimiter">}</span>
<span id="L169" class="LineNr">169 </span>
<span id="L170" class="LineNr">170 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L170'>initialize-primitive-function</a></span> _out: (addr handle <a href='cell.mu.html#L1'>cell</a>), n: int <span class="Delimiter">{</span>
<span id="L171" class="LineNr">171 </span> <span class="PreProc">var</span> out/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out
<span id="L172" class="LineNr">172 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *out
<span id="L173" class="LineNr">173 </span> <span class="PreProc">var</span> <span class="PreProc">type</span>/<span class="muRegEcx">ecx</span>: (addr int) <span class="Special">&lt;-</span> get out-addr, <span class="PreProc">type</span>
<span id="L174" class="LineNr">174 </span> copy-to *<span class="PreProc">type</span>, <span class="Constant">4</span>/primitive
<span id="L175" class="LineNr">175 </span> <span class="PreProc">var</span> dest-addr/eax: (addr int) <span class="Special">&lt;-</span> get out-addr, index-data
<span id="L176" class="LineNr">176 </span> <span class="PreProc">var</span> src/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy n
<span id="L177" class="LineNr">177 </span> copy-to *dest-addr, src
<span id="L178" class="LineNr">178 </span><span class="Delimiter">}</span>
<span id="L179" class="LineNr">179 </span>
<span id="L180" class="LineNr">180 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L180'>new-primitive-function</a></span> out: (addr handle <a href='cell.mu.html#L1'>cell</a>), n: int <span class="Delimiter">{</span>
<span id="L181" class="LineNr">181 </span> <a href='cell.mu.html#L162'>allocate-primitive-function</a> out
<span id="L182" class="LineNr">182 </span> <a href='cell.mu.html#L170'>initialize-primitive-function</a> out, n
<span id="L183" class="LineNr">183 </span><span class="Delimiter">}</span>
<span id="L184" class="LineNr">184 </span>
<span id="L185" class="LineNr">185 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L185'>new-fake-keyboard</a></span> _out: (addr handle <a href='cell.mu.html#L1'>cell</a>), capacity: int <span class="Delimiter">{</span>
<span id="L186" class="LineNr">186 </span> <span class="PreProc">var</span> out/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out
<span id="L187" class="LineNr">187 </span> <a href='cell.mu.html#L177'>allocate-keyboard</a> out
<span id="L188" class="LineNr">188 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *out
<span id="L189" class="LineNr">189 </span> <span class="PreProc">var</span> dest-ah/eax: (addr handle <a href='gap-buffer.mu.html#L3'>gap-buffer</a>) <span class="Special">&lt;-</span> get out-addr, keyboard-data
<span id="L190" class="LineNr">190 </span> <a href='../120allocate.subx.html#L43'>allocate</a> dest-ah
<span id="L191" class="LineNr">191 </span> <span class="PreProc">var</span> dest-addr/eax: (addr <a href='gap-buffer.mu.html#L3'>gap-buffer</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *dest-ah
<span id="L192" class="LineNr">192 </span> <a href='gap-buffer.mu.html#L11'>initialize-gap-buffer</a> dest-addr, capacity
<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="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L195'>rewind-keyboard-var</a></span> _self-ah: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Delimiter">{</span>
<span id="L196" class="LineNr">196 </span> <span class="PreProc">var</span> self-ah/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _self-ah
<span id="L197" class="LineNr">197 </span> <span class="PreProc">var</span> self/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *self-ah
<span id="L198" class="LineNr">198 </span> compare self, <span class="Constant">0</span>
<span id="L199" class="LineNr">199 </span> <span class="Delimiter">{</span>
<span id="L200" class="LineNr">200 </span> <span class="PreProc">break-if-!=</span>
<span id="L201" class="LineNr">201 </span> <span class="PreProc">return</span>
<span id="L202" class="LineNr">202 </span> <span class="Delimiter">}</span>
<span id="L203" class="LineNr">203 </span> <span class="PreProc">var</span> keyboard-ah/eax: (addr handle <a href='gap-buffer.mu.html#L3'>gap-buffer</a>) <span class="Special">&lt;-</span> get self, keyboard-data
<span id="L204" class="LineNr">204 </span> <span class="PreProc">var</span> keyboard/eax: (addr <a href='gap-buffer.mu.html#L3'>gap-buffer</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *keyboard-ah
<span id="L205" class="LineNr">205 </span> <a href='gap-buffer.mu.html#L1015'>rewind-gap-buffer</a> keyboard
<span id="L206" class="LineNr">206 </span><span class="Delimiter">}</span>
<span id="L185" class="LineNr">185 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L185'>primitive?</a></span> _x: (addr <a href='cell.mu.html#L1'>cell</a>)<span class="PreProc"> -&gt; </span>_/eax: boolean <span class="Delimiter">{</span>
<span id="L186" class="LineNr">186 </span> <span class="PreProc">var</span> x/<span class="muRegEsi">esi</span>: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _x
<span id="L187" class="LineNr">187 </span> <span class="PreProc">var</span> <span class="PreProc">type</span>/eax: (addr int) <span class="Special">&lt;-</span> get x, <span class="PreProc">type</span>
<span id="L188" class="LineNr">188 </span> compare *<span class="PreProc">type</span>, <span class="Constant">4</span>/primitive
<span id="L189" class="LineNr">189 </span> <span class="Delimiter">{</span>
<span id="L190" class="LineNr">190 </span> <span class="PreProc">break-if-=</span>
<span id="L191" class="LineNr">191 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false
<span id="L192" class="LineNr">192 </span> <span class="Delimiter">}</span>
<span id="L193" class="LineNr">193 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L194" class="LineNr">194 </span><span class="Delimiter">}</span>
<span id="L195" class="LineNr">195 </span>
<span id="L196" class="LineNr">196 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L196'>allocate-screen</a></span> _out: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Delimiter">{</span>
<span id="L197" class="LineNr">197 </span> <span class="PreProc">var</span> out/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out
<span id="L198" class="LineNr">198 </span> <a href='../120allocate.subx.html#L43'>allocate</a> out
<span id="L199" class="LineNr">199 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *out
<span id="L200" class="LineNr">200 </span> <span class="PreProc">var</span> <span class="PreProc">type</span>/<span class="muRegEcx">ecx</span>: (addr int) <span class="Special">&lt;-</span> get out-addr, <span class="PreProc">type</span>
<span id="L201" class="LineNr">201 </span> copy-to *<span class="PreProc">type</span>, <span class="Constant">5</span>/screen
<span id="L202" class="LineNr">202 </span><span class="Delimiter">}</span>
<span id="L203" class="LineNr">203 </span>
<span id="L204" class="LineNr">204 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L204'>new-fake-screen</a></span> _out: (addr handle <a href='cell.mu.html#L1'>cell</a>), width: int, height: int, pixel-graphics?: boolean <span class="Delimiter">{</span>
<span id="L205" class="LineNr">205 </span> <span class="PreProc">var</span> out/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out
<span id="L206" class="LineNr">206 </span> <a href='cell.mu.html#L196'>allocate-screen</a> out
<span id="L207" class="LineNr">207 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *out
<span id="L208" class="LineNr">208 </span> <span class="PreProc">var</span> dest-ah/eax: (addr handle <a href='../500fake-screen.mu.html#L14'>screen</a>) <span class="Special">&lt;-</span> get out-addr, screen-data
<span id="L209" class="LineNr">209 </span> <a href='../120allocate.subx.html#L43'>allocate</a> dest-ah
<span id="L210" class="LineNr">210 </span> <span class="PreProc">var</span> dest-addr/eax: (addr <a href='../500fake-screen.mu.html#L14'>screen</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *dest-ah
<span id="L211" class="LineNr">211 </span> <a href='../500fake-screen.mu.html#L33'>initialize-screen</a> dest-addr, width, height, pixel-graphics?
<span id="L212" class="LineNr">212 </span><span class="Delimiter">}</span>
<span id="L213" class="LineNr">213 </span>
<span id="L214" class="LineNr">214 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L214'>screen?</a></span> _x: (addr <a href='cell.mu.html#L1'>cell</a>)<span class="PreProc"> -&gt; </span>_/eax: boolean <span class="Delimiter">{</span>
<span id="L215" class="LineNr">215 </span> <span class="PreProc">var</span> x/<span class="muRegEsi">esi</span>: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _x
<span id="L216" class="LineNr">216 </span> <span class="PreProc">var</span> <span class="PreProc">type</span>/eax: (addr int) <span class="Special">&lt;-</span> get x, <span class="PreProc">type</span>
<span id="L217" class="LineNr">217 </span> compare *<span class="PreProc">type</span>, <span class="Constant">5</span>/screen
<span id="L218" class="LineNr">218 </span> <span class="Delimiter">{</span>
<span id="L219" class="LineNr">219 </span> <span class="PreProc">break-if-=</span>
<span id="L220" class="LineNr">220 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false
<span id="L221" class="LineNr">221 </span> <span class="Delimiter">}</span>
<span id="L222" class="LineNr">222 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L223" class="LineNr">223 </span><span class="Delimiter">}</span>
<span id="L224" class="LineNr">224 </span>
<span id="L225" class="LineNr">225 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L225'>clear-screen-var</a></span> _self-ah: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Delimiter">{</span>
<span id="L226" class="LineNr">226 </span> <span class="PreProc">var</span> self-ah/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _self-ah
<span id="L227" class="LineNr">227 </span> <span class="PreProc">var</span> self/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *self-ah
<span id="L228" class="LineNr">228 </span> compare self, <span class="Constant">0</span>
<span id="L229" class="LineNr">229 </span> <span class="Delimiter">{</span>
<span id="L230" class="LineNr">230 </span> <span class="PreProc">break-if-!=</span>
<span id="L231" class="LineNr">231 </span> <span class="PreProc">return</span>
<span id="L232" class="LineNr">232 </span> <span class="Delimiter">}</span>
<span id="L233" class="LineNr">233 </span> <span class="PreProc">var</span> screen-ah/eax: (addr handle <a href='../500fake-screen.mu.html#L14'>screen</a>) <span class="Special">&lt;-</span> get self, screen-data
<span id="L234" class="LineNr">234 </span> <span class="PreProc">var</span> <a href='../500fake-screen.mu.html#L14'>screen</a>/eax: (addr <a href='../500fake-screen.mu.html#L14'>screen</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *screen-ah
<span id="L235" class="LineNr">235 </span> <a href='../500fake-screen.mu.html#L251'>clear-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>
<span id="L236" class="LineNr">236 </span><span class="Delimiter">}</span>
<span id="L237" class="LineNr">237 </span>
<span id="L238" class="LineNr">238 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L238'>allocate-keyboard</a></span> _out: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Delimiter">{</span>
<span id="L239" class="LineNr">239 </span> <span class="PreProc">var</span> out/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out
<span id="L240" class="LineNr">240 </span> <a href='../120allocate.subx.html#L43'>allocate</a> out
<span id="L241" class="LineNr">241 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *out
<span id="L242" class="LineNr">242 </span> <span class="PreProc">var</span> <span class="PreProc">type</span>/<span class="muRegEcx">ecx</span>: (addr int) <span class="Special">&lt;-</span> get out-addr, <span class="PreProc">type</span>
<span id="L243" class="LineNr">243 </span> copy-to *<span class="PreProc">type</span>, <span class="Constant">6</span>/keyboard
<span id="L244" class="LineNr">244 </span><span class="Delimiter">}</span>
<span id="L245" class="LineNr">245 </span>
<span id="L246" class="LineNr">246 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L246'>new-fake-keyboard</a></span> _out: (addr handle <a href='cell.mu.html#L1'>cell</a>), capacity: int <span class="Delimiter">{</span>
<span id="L247" class="LineNr">247 </span> <span class="PreProc">var</span> out/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out
<span id="L248" class="LineNr">248 </span> <a href='cell.mu.html#L238'>allocate-keyboard</a> out
<span id="L249" class="LineNr">249 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *out
<span id="L250" class="LineNr">250 </span> <span class="PreProc">var</span> dest-ah/eax: (addr handle <a href='../514gap-buffer.mu.html#L3'>gap-buffer</a>) <span class="Special">&lt;-</span> get out-addr, keyboard-data
<span id="L251" class="LineNr">251 </span> <a href='../120allocate.subx.html#L43'>allocate</a> dest-ah
<span id="L252" class="LineNr">252 </span> <span class="PreProc">var</span> dest-addr/eax: (addr <a href='../514gap-buffer.mu.html#L3'>gap-buffer</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *dest-ah
<span id="L253" class="LineNr">253 </span> <a href='../514gap-buffer.mu.html#L11'>initialize-gap-buffer</a> dest-addr, capacity
<span id="L254" class="LineNr">254 </span><span class="Delimiter">}</span>
<span id="L255" class="LineNr">255 </span>
<span id="L256" class="LineNr">256 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L256'>keyboard?</a></span> _x: (addr <a href='cell.mu.html#L1'>cell</a>)<span class="PreProc"> -&gt; </span>_/eax: boolean <span class="Delimiter">{</span>
<span id="L257" class="LineNr">257 </span> <span class="PreProc">var</span> x/<span class="muRegEsi">esi</span>: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _x
<span id="L258" class="LineNr">258 </span> <span class="PreProc">var</span> <span class="PreProc">type</span>/eax: (addr int) <span class="Special">&lt;-</span> get x, <span class="PreProc">type</span>
<span id="L259" class="LineNr">259 </span> compare *<span class="PreProc">type</span>, <span class="Constant">6</span>/keyboard
<span id="L260" class="LineNr">260 </span> <span class="Delimiter">{</span>
<span id="L261" class="LineNr">261 </span> <span class="PreProc">break-if-=</span>
<span id="L262" class="LineNr">262 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false
<span id="L263" class="LineNr">263 </span> <span class="Delimiter">}</span>
<span id="L264" class="LineNr">264 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L265" class="LineNr">265 </span><span class="Delimiter">}</span>
<span id="L266" class="LineNr">266 </span>
<span id="L267" class="LineNr">267 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L267'>rewind-keyboard-var</a></span> _self-ah: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Delimiter">{</span>
<span id="L268" class="LineNr">268 </span> <span class="PreProc">var</span> self-ah/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _self-ah
<span id="L269" class="LineNr">269 </span> <span class="PreProc">var</span> self/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *self-ah
<span id="L270" class="LineNr">270 </span> compare self, <span class="Constant">0</span>
<span id="L271" class="LineNr">271 </span> <span class="Delimiter">{</span>
<span id="L272" class="LineNr">272 </span> <span class="PreProc">break-if-!=</span>
<span id="L273" class="LineNr">273 </span> <span class="PreProc">return</span>
<span id="L274" class="LineNr">274 </span> <span class="Delimiter">}</span>
<span id="L275" class="LineNr">275 </span> <span class="PreProc">var</span> keyboard-ah/eax: (addr handle <a href='../514gap-buffer.mu.html#L3'>gap-buffer</a>) <span class="Special">&lt;-</span> get self, keyboard-data
<span id="L276" class="LineNr">276 </span> <span class="PreProc">var</span> keyboard/eax: (addr <a href='../514gap-buffer.mu.html#L3'>gap-buffer</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *keyboard-ah
<span id="L277" class="LineNr">277 </span> <a href='../514gap-buffer.mu.html#L1015'>rewind-gap-buffer</a> keyboard
<span id="L278" class="LineNr">278 </span><span class="Delimiter">}</span>
<span id="L279" class="LineNr">279 </span>
<span id="L280" class="LineNr">280 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L280'>new-array</a></span> _out: (addr handle <a href='cell.mu.html#L1'>cell</a>), capacity: int <span class="Delimiter">{</span>
<span id="L281" class="LineNr">281 </span> <span class="PreProc">var</span> out/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out
<span id="L282" class="LineNr">282 </span> <a href='../120allocate.subx.html#L43'>allocate</a> out
<span id="L283" class="LineNr">283 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *out
<span id="L284" class="LineNr">284 </span> <span class="PreProc">var</span> <span class="PreProc">type</span>/<span class="muRegEcx">ecx</span>: (addr int) <span class="Special">&lt;-</span> get out-addr, <span class="PreProc">type</span>
<span id="L285" class="LineNr">285 </span> copy-to *<span class="PreProc">type</span>, <span class="Constant">7</span>/array
<span id="L286" class="LineNr">286 </span> <span class="PreProc">var</span> dest-ah/eax: (addr handle array handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> get out-addr, array-data
<span id="L287" class="LineNr">287 </span> populate dest-ah, capacity
<span id="L288" class="LineNr">288 </span><span class="Delimiter">}</span>
<span id="L289" class="LineNr">289 </span>
<span id="L290" class="LineNr">290 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L290'>array?</a></span> _x: (addr <a href='cell.mu.html#L1'>cell</a>)<span class="PreProc"> -&gt; </span>_/eax: boolean <span class="Delimiter">{</span>
<span id="L291" class="LineNr">291 </span> <span class="PreProc">var</span> x/<span class="muRegEsi">esi</span>: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _x
<span id="L292" class="LineNr">292 </span> <span class="PreProc">var</span> <span class="PreProc">type</span>/eax: (addr int) <span class="Special">&lt;-</span> get x, <span class="PreProc">type</span>
<span id="L293" class="LineNr">293 </span> compare *<span class="PreProc">type</span>, <span class="Constant">7</span>/array
<span id="L294" class="LineNr">294 </span> <span class="Delimiter">{</span>
<span id="L295" class="LineNr">295 </span> <span class="PreProc">break-if-=</span>
<span id="L296" class="LineNr">296 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false
<span id="L297" class="LineNr">297 </span> <span class="Delimiter">}</span>
<span id="L298" class="LineNr">298 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L299" class="LineNr">299 </span><span class="Delimiter">}</span>
<span id="L300" class="LineNr">300 </span>
<span id="L301" class="LineNr">301 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L301'>new-image</a></span> _out-ah: (addr handle <a href='cell.mu.html#L1'>cell</a>), in: (addr stream byte) <span class="Delimiter">{</span>
<span id="L302" class="LineNr">302 </span> <a href='../106stream.subx.html#L59'>rewind-stream</a> in
<span id="L303" class="LineNr">303 </span> <span class="PreProc">var</span> out-ah/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out-ah
<span id="L304" class="LineNr">304 </span> <a href='../120allocate.subx.html#L43'>allocate</a> out-ah
<span id="L305" class="LineNr">305 </span> <span class="PreProc">var</span> out/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *out-ah
<span id="L306" class="LineNr">306 </span> <span class="PreProc">var</span> <span class="PreProc">type</span>/<span class="muRegEcx">ecx</span>: (addr int) <span class="Special">&lt;-</span> get out, <span class="PreProc">type</span>
<span id="L307" class="LineNr">307 </span> copy-to *<span class="PreProc">type</span>, <span class="Constant">8</span>/image
<span id="L308" class="LineNr">308 </span> <span class="PreProc">var</span> dest-ah/eax: (addr handle <a href='../511image.mu.html#L6'>image</a>) <span class="Special">&lt;-</span> get out, image-data
<span id="L309" class="LineNr">309 </span> <a href='../120allocate.subx.html#L43'>allocate</a> dest-ah
<span id="L310" class="LineNr">310 </span> <span class="PreProc">var</span> dest/eax: (addr <a href='../511image.mu.html#L6'>image</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *dest-ah
<span id="L311" class="LineNr">311 </span> <a href='../511image.mu.html#L17'>initialize-image</a> dest, in
<span id="L312" class="LineNr">312 </span><span class="Delimiter">}</span>
<span id="L313" class="LineNr">313 </span>
<span id="L314" class="LineNr">314 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='cell.mu.html#L314'>image?</a></span> _x: (addr <a href='cell.mu.html#L1'>cell</a>)<span class="PreProc"> -&gt; </span>_/eax: boolean <span class="Delimiter">{</span>
<span id="L315" class="LineNr">315 </span> <span class="PreProc">var</span> x/<span class="muRegEsi">esi</span>: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _x
<span id="L316" class="LineNr">316 </span> <span class="PreProc">var</span> <span class="PreProc">type</span>/eax: (addr int) <span class="Special">&lt;-</span> get x, <span class="PreProc">type</span>
<span id="L317" class="LineNr">317 </span> compare *<span class="PreProc">type</span>, <span class="Constant">8</span>/image
<span id="L318" class="LineNr">318 </span> <span class="Delimiter">{</span>
<span id="L319" class="LineNr">319 </span> <span class="PreProc">break-if-=</span>
<span id="L320" class="LineNr">320 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false
<span id="L321" class="LineNr">321 </span> <span class="Delimiter">}</span>
<span id="L322" class="LineNr">322 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L323" class="LineNr">323 </span><span class="Delimiter">}</span>
</pre>
</body>
</html>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1253
html/shell/global.mu.html generated

File diff suppressed because it is too large Load Diff

634
html/shell/infix.mu.html generated
View File

@ -1,38 +1,38 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - shell/infix.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.CommentedCode { color: #8a8a8a; }
.LineNr { }
.Delimiter { color: #c000c0; }
.muComment { color: #005faf; }
.muRegEcx { color: #870000; }
.muRegEdx { color: #af5f00; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muRegEbx { color: #5f00ff; }
.muRegEsi { color: #005faf; }
.muRegEdi { color: #00af00; }
.Constant { color: #008787; }
.Special { color: #ff6060; }
.PreProc { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muTest { color: #5f8700; }
.Folded { color: #080808; background-color: #949494; }
.CommentedCode { color: #8a8a8a; }
.muTest { color: #5f8700; }
.muComment { color: #005faf; }
.muRegEcx { color: #870000; }
.muRegEdx { color: #af5f00; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -79,8 +79,8 @@ if ('onhashchange' in window) {
<span id="L13" class="LineNr"> 13 </span><span class="muComment"># Lisp code typed in at the keyboard will never have cycles</span>
<span id="L14" class="LineNr"> 14 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='infix.mu.html#L14'>transform-infix-2</a></span> _x-ah: (addr handle <a href='cell.mu.html#L1'>cell</a>), trace: (addr trace), at-head-of-list?: boolean <span class="Delimiter">{</span>
<span id="L15" class="LineNr"> 15 </span> <span class="PreProc">var</span> x-ah/<span class="muRegEdi">edi</span>: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _x-ah
<span id="L16" class="LineNr"> 16 </span> <span class="PreProc">var</span> x/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *x-ah
<span id="L17" class="Folded"> 17 </span><span class="Folded">+-- 14 lines: # trace x-ah -------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L16" class="LineNr"> 16 </span> <span class="PreProc">var</span> x/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *x-ah
<span id="L17" class="Folded"> 17 </span><span class="Folded">+-- 14 lines: # trace x-ah --------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L31" class="LineNr"> 31 </span> <a href='trace.mu.html#L239'>trace-lower</a> trace
<span id="L32" class="LineNr"> 32 </span><span class="CommentedCode">#? {</span>
<span id="L33" class="LineNr"> 33 </span><span class="CommentedCode">#? var foo/eax: int &lt;- copy x</span>
@ -97,8 +97,8 @@ if ('onhashchange' in window) {
<span id="L44" class="LineNr"> 44 </span> <span class="Delimiter">}</span>
<span id="L45" class="LineNr"> 45 </span> <span class="muComment"># nil? return</span>
<span id="L46" class="LineNr"> 46 </span> <span class="Delimiter">{</span>
<span id="L47" class="LineNr"> 47 </span> <span class="PreProc">var</span> <a href='print.mu.html#L353'>nil?</a>/eax: boolean <span class="Special">&lt;-</span> <a href='print.mu.html#L353'>nil?</a> x
<span id="L48" class="LineNr"> 48 </span> compare <a href='print.mu.html#L353'>nil?</a>, <span class="Constant">0</span>/false
<span id="L47" class="LineNr"> 47 </span> <span class="PreProc">var</span> <a href='print.mu.html#L390'>nil?</a>/eax: boolean <span class="Special">&lt;-</span> <a href='print.mu.html#L390'>nil?</a> x
<span id="L48" class="LineNr"> 48 </span> compare <a href='print.mu.html#L390'>nil?</a>, <span class="Constant">0</span>/false
<span id="L49" class="LineNr"> 49 </span> <span class="PreProc">break-if-=</span>
<span id="L50" class="LineNr"> 50 </span> <a href='trace.mu.html#L250'>trace-higher</a> trace
<span id="L51" class="LineNr"> 51 </span> <a href='trace.mu.html#L185'>trace-text</a> trace, <span class="Constant">&quot;infix&quot;</span>, <span class="Constant">&quot;=&gt; nil&quot;</span>
@ -118,7 +118,7 @@ if ('onhashchange' in window) {
<span id="L65" class="LineNr"> 65 </span> compare *x-type, <span class="Constant">0</span>/pair
<span id="L66" class="LineNr"> 66 </span> <span class="PreProc">break-if-=</span>
<span id="L67" class="LineNr"> 67 </span> <a href='trace.mu.html#L250'>trace-higher</a> trace
<span id="L68" class="Folded"> 68 </span><span class="Folded">+-- 15 lines: # trace &quot;=&gt; &quot; x-ah -------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L68" class="Folded"> 68 </span><span class="Folded">+-- 15 lines: # trace &quot;=&gt; &quot; x-ah --------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L83" class="LineNr"> 83 </span><span class="CommentedCode">#? draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, &quot;^&quot;, 4/fg 0/bg</span>
<span id="L84" class="LineNr"> 84 </span> <span class="PreProc">return</span>
<span id="L85" class="LineNr"> 85 </span> <span class="Delimiter">}</span>
@ -127,19 +127,19 @@ if ('onhashchange' in window) {
<span id="L88" class="LineNr"> 88 </span> <span class="Delimiter">{</span>
<span id="L89" class="LineNr"> 89 </span> <span class="PreProc">var</span> first-ah/<span class="muRegEcx">ecx</span>: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> get x, left
<span id="L90" class="LineNr"> 90 </span> <span class="Delimiter">{</span>
<span id="L91" class="LineNr"> 91 </span> <span class="PreProc">var</span> first/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *first-ah
<span id="L92" class="LineNr"> 92 </span> <span class="PreProc">var</span> infix?/eax: boolean <span class="Special">&lt;-</span> <a href='infix.mu.html#L409'>operator-symbol?</a> first
<span id="L93" class="LineNr"> 93 </span> compare infix?, <span class="Constant">0</span>/false
<span id="L91" class="LineNr"> 91 </span> <span class="PreProc">var</span> first/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *first-ah
<span id="L92" class="LineNr"> 92 </span> <span class="PreProc">var</span> operator?/eax: boolean <span class="Special">&lt;-</span> <a href='infix.mu.html#L412'>operator-symbol?</a> first
<span id="L93" class="LineNr"> 93 </span> compare operator?, <span class="Constant">0</span>/false
<span id="L94" class="LineNr"> 94 </span> <span class="Delimiter">}</span>
<span id="L95" class="LineNr"> 95 </span> <span class="PreProc">break-if-=</span>
<span id="L96" class="LineNr"> 96 </span> <span class="PreProc">var</span> rest-ah/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> get x, right
<span id="L97" class="LineNr"> 97 </span> <span class="PreProc">var</span> rest/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *rest-ah
<span id="L98" class="LineNr"> 98 </span> <span class="PreProc">var</span> rest-nil?/eax: boolean <span class="Special">&lt;-</span> <a href='print.mu.html#L353'>nil?</a> rest
<span id="L97" class="LineNr"> 97 </span> <span class="PreProc">var</span> rest/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *rest-ah
<span id="L98" class="LineNr"> 98 </span> <span class="PreProc">var</span> rest-nil?/eax: boolean <span class="Special">&lt;-</span> <a href='print.mu.html#L390'>nil?</a> rest
<span id="L99" class="LineNr"> 99 </span> compare rest-nil?, <span class="Constant">0</span>/false
<span id="L100" class="LineNr">100 </span> <span class="PreProc">break-if-=</span>
<span id="L101" class="LineNr">101 </span> copy-object first-ah, x-ah
<span id="L102" class="LineNr">102 </span> <a href='trace.mu.html#L250'>trace-higher</a> trace
<span id="L103" class="Folded">103 </span><span class="Folded">+-- 15 lines: # trace &quot;=&gt; &quot; x-ah -------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L103" class="Folded">103 </span><span class="Folded">+-- 15 lines: # trace &quot;=&gt; &quot; x-ah --------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L118" class="LineNr">118 </span> <span class="PreProc">return</span>
<span id="L119" class="LineNr">119 </span> <span class="Delimiter">}</span>
<span id="L120" class="LineNr">120 </span><span class="CommentedCode">#? draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, &quot;c&quot;, 4/fg 0/bg</span>
@ -151,11 +151,11 @@ if ('onhashchange' in window) {
<span id="L126" class="LineNr">126 </span> <span class="PreProc">break-if-=</span>
<span id="L127" class="LineNr">127 </span> <span class="PreProc">var</span> first-ah/<span class="muRegEcx">ecx</span>: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> get x, left
<span id="L128" class="LineNr">128 </span> <span class="PreProc">var</span> rest-ah/<span class="muRegEsi">esi</span>: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> get x, right
<span id="L129" class="LineNr">129 </span> <span class="PreProc">var</span> first/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *first-ah
<span id="L130" class="LineNr">130 </span> <span class="PreProc">var</span> first-infix?/eax: boolean <span class="Special">&lt;-</span> <a href='infix.mu.html#L409'>operator-symbol?</a> first
<span id="L131" class="LineNr">131 </span> compare first-infix?, <span class="Constant">0</span>/false
<span id="L129" class="LineNr">129 </span> <span class="PreProc">var</span> first/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *first-ah
<span id="L130" class="LineNr">130 </span> <span class="PreProc">var</span> first-operator?/eax: boolean <span class="Special">&lt;-</span> <a href='infix.mu.html#L412'>operator-symbol?</a> first
<span id="L131" class="LineNr">131 </span> compare first-operator?, <span class="Constant">0</span>/false
<span id="L132" class="LineNr">132 </span> <span class="PreProc">break-if-=</span>
<span id="L133" class="LineNr">133 </span> <span class="PreProc">var</span> rest/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *rest-ah
<span id="L133" class="LineNr">133 </span> <span class="PreProc">var</span> rest/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *rest-ah
<span id="L134" class="LineNr">134 </span> <span class="Delimiter">{</span>
<span id="L135" class="LineNr">135 </span> <span class="PreProc">var</span> continue?/eax: boolean <span class="Special">&lt;-</span> <a href='infix.mu.html#L273'>not-null-not-nil-pair?</a> rest
<span id="L136" class="LineNr">136 </span> compare continue?, <span class="Constant">0</span>/false
@ -163,7 +163,7 @@ if ('onhashchange' in window) {
<span id="L138" class="LineNr">138 </span> <span class="PreProc">break-if-=</span>
<span id="L139" class="LineNr">139 </span> <span class="PreProc">var</span> second-ah/<span class="muRegEdx">edx</span>: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> get rest, left
<span id="L140" class="LineNr">140 </span> rest-ah <span class="Special">&lt;-</span> get rest, right
<span id="L141" class="LineNr">141 </span> <span class="PreProc">var</span> rest/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *rest-ah
<span id="L141" class="LineNr">141 </span> <span class="PreProc">var</span> rest/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *rest-ah
<span id="L142" class="LineNr">142 </span> <span class="Delimiter">{</span>
<span id="L143" class="LineNr">143 </span> <span class="PreProc">var</span> continue?/eax: boolean <span class="Special">&lt;-</span> <a href='infix.mu.html#L273'>not-null-not-nil-pair?</a> rest
<span id="L144" class="LineNr">144 </span> compare continue?, <span class="Constant">0</span>/false
@ -171,8 +171,8 @@ if ('onhashchange' in window) {
<span id="L146" class="LineNr">146 </span> <span class="PreProc">break-if-=</span>
<span id="L147" class="LineNr">147 </span> <span class="PreProc">var</span> third-ah/<span class="muRegEbx">ebx</span>: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> get rest, left
<span id="L148" class="LineNr">148 </span> <span class="Delimiter">{</span>
<span id="L149" class="LineNr">149 </span> <span class="PreProc">var</span> third/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *third-ah
<span id="L150" class="LineNr">150 </span> <span class="PreProc">var</span> third-is-operator?/eax: boolean <span class="Special">&lt;-</span> <a href='infix.mu.html#L409'>operator-symbol?</a> third
<span id="L149" class="LineNr">149 </span> <span class="PreProc">var</span> third/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *third-ah
<span id="L150" class="LineNr">150 </span> <span class="PreProc">var</span> third-is-operator?/eax: boolean <span class="Special">&lt;-</span> <a href='infix.mu.html#L412'>operator-symbol?</a> third
<span id="L151" class="LineNr">151 </span> compare third-is-operator?, <span class="Constant">0</span>/false
<span id="L152" class="LineNr">152 </span> <span class="Delimiter">}</span>
<span id="L153" class="LineNr">153 </span> <span class="PreProc">break-if-=</span>
@ -180,10 +180,10 @@ if ('onhashchange' in window) {
<span id="L155" class="LineNr">155 </span> <span class="PreProc">var</span> saved-rest-h: (handle <a href='cell.mu.html#L1'>cell</a>)
<span id="L156" class="LineNr">156 </span> <span class="PreProc">var</span> saved-rest-ah/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> address saved-rest-h
<span id="L157" class="LineNr">157 </span> copy-object rest-ah, saved-rest-ah
<span id="L158" class="LineNr">158 </span> <a href='cell.mu.html#L121'>nil</a> rest-ah
<span id="L158" class="LineNr">158 </span> <a href='cell.mu.html#L147'>nil</a> rest-ah
<span id="L159" class="LineNr">159 </span> <span class="PreProc">var</span> result-h: (handle <a href='cell.mu.html#L1'>cell</a>)
<span id="L160" class="LineNr">160 </span> <span class="PreProc">var</span> result-ah/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> address result-h
<span id="L161" class="LineNr">161 </span> <a href='cell.mu.html#L116'>new-pair</a> result-ah, *x-ah, saved-rest-h
<span id="L161" class="LineNr">161 </span> <a href='cell.mu.html#L142'>new-pair</a> result-ah, *x-ah, saved-rest-h
<span id="L162" class="LineNr">162 </span> <span class="muComment"># save</span>
<span id="L163" class="LineNr">163 </span> copy-object result-ah, x-ah
<span id="L164" class="LineNr">164 </span> <span class="muComment"># there was a mutation; rerun</span>
@ -195,11 +195,11 @@ if ('onhashchange' in window) {
<span id="L170" class="LineNr">170 </span> <span class="PreProc">var</span> first-ah/<span class="muRegEcx">ecx</span>: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> get x, left
<span id="L171" class="LineNr">171 </span> <span class="PreProc">var</span> rest-ah/<span class="muRegEsi">esi</span>: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> get x, right
<span id="L172" class="LineNr">172 </span> <span class="Delimiter">{</span>
<span id="L173" class="LineNr">173 </span> <span class="PreProc">var</span> <a href='infix.mu.html#L543'>quote-or-unquote?</a>/eax: boolean <span class="Special">&lt;-</span> <a href='infix.mu.html#L543'>quote-or-unquote?</a> first-ah
<span id="L174" class="LineNr">174 </span> compare <a href='infix.mu.html#L543'>quote-or-unquote?</a>, <span class="Constant">0</span>/false
<span id="L173" class="LineNr">173 </span> <span class="PreProc">var</span> <a href='infix.mu.html#L545'>quote-or-unquote?</a>/eax: boolean <span class="Special">&lt;-</span> <a href='infix.mu.html#L545'>quote-or-unquote?</a> first-ah
<span id="L174" class="LineNr">174 </span> compare <a href='infix.mu.html#L545'>quote-or-unquote?</a>, <span class="Constant">0</span>/false
<span id="L175" class="LineNr">175 </span> <span class="Delimiter">}</span>
<span id="L176" class="LineNr">176 </span> <span class="PreProc">break-if-!=</span>
<span id="L177" class="LineNr">177 </span> <span class="PreProc">var</span> rest/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *rest-ah
<span id="L177" class="LineNr">177 </span> <span class="PreProc">var</span> rest/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *rest-ah
<span id="L178" class="LineNr">178 </span> <span class="Delimiter">{</span>
<span id="L179" class="LineNr">179 </span> <span class="PreProc">var</span> continue?/eax: boolean <span class="Special">&lt;-</span> <a href='infix.mu.html#L273'>not-null-not-nil-pair?</a> rest
<span id="L180" class="LineNr">180 </span> compare continue?, <span class="Constant">0</span>/false
@ -209,7 +209,7 @@ if ('onhashchange' in window) {
<span id="L184" class="LineNr">184 </span><span class="CommentedCode">#? dump-cell-from-cursor-over-full-screen rest-ah, 7/fg 0/bg</span>
<span id="L185" class="LineNr">185 </span> <span class="PreProc">var</span> second-ah/<span class="muRegEdx">edx</span>: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> get rest, left
<span id="L186" class="LineNr">186 </span> rest-ah <span class="Special">&lt;-</span> get rest, right
<span id="L187" class="LineNr">187 </span> <span class="PreProc">var</span> rest/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *rest-ah
<span id="L187" class="LineNr">187 </span> <span class="PreProc">var</span> rest/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *rest-ah
<span id="L188" class="LineNr">188 </span> <span class="Delimiter">{</span>
<span id="L189" class="LineNr">189 </span> <span class="PreProc">var</span> continue?/eax: boolean <span class="Special">&lt;-</span> <a href='infix.mu.html#L273'>not-null-not-nil-pair?</a> rest
<span id="L190" class="LineNr">190 </span> compare continue?, <span class="Constant">0</span>/false
@ -220,8 +220,8 @@ if ('onhashchange' in window) {
<span id="L195" class="LineNr">195 </span> rest-ah <span class="Special">&lt;-</span> get rest, right
<span id="L196" class="LineNr">196 </span> <span class="muComment"># if second is not an operator, break</span>
<span id="L197" class="LineNr">197 </span> <span class="Delimiter">{</span>
<span id="L198" class="LineNr">198 </span> <span class="PreProc">var</span> second/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *second-ah
<span id="L199" class="LineNr">199 </span> <span class="PreProc">var</span> infix?/eax: boolean <span class="Special">&lt;-</span> <a href='infix.mu.html#L409'>operator-symbol?</a> second
<span id="L198" class="LineNr">198 </span> <span class="PreProc">var</span> second/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *second-ah
<span id="L199" class="LineNr">199 </span> <span class="PreProc">var</span> infix?/eax: boolean <span class="Special">&lt;-</span> <a href='infix.mu.html#L412'>operator-symbol?</a> second
<span id="L200" class="LineNr">200 </span> compare infix?, <span class="Constant">0</span>/false
<span id="L201" class="LineNr">201 </span> <span class="Delimiter">}</span>
<span id="L202" class="LineNr">202 </span> <span class="PreProc">break-if-=</span>
@ -232,8 +232,8 @@ if ('onhashchange' in window) {
<span id="L207" class="LineNr">207 </span> <span class="Delimiter">{</span>
<span id="L208" class="LineNr">208 </span> compare at-head-of-list?, <span class="Constant">0</span>/false
<span id="L209" class="LineNr">209 </span> <span class="PreProc">break-if-=</span>
<span id="L210" class="LineNr">210 </span> rest <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *rest-ah
<span id="L211" class="LineNr">211 </span> <span class="PreProc">var</span> rest-nil?/eax: boolean <span class="Special">&lt;-</span> <a href='print.mu.html#L353'>nil?</a> rest
<span id="L210" class="LineNr">210 </span> rest <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *rest-ah
<span id="L211" class="LineNr">211 </span> <span class="PreProc">var</span> rest-nil?/eax: boolean <span class="Special">&lt;-</span> <a href='print.mu.html#L390'>nil?</a> rest
<span id="L212" class="LineNr">212 </span> compare rest-nil?, <span class="Constant">0</span>/false
<span id="L213" class="LineNr">213 </span> <span class="PreProc">break-if-!=</span> $transform-infix-2:pinch
<span id="L214" class="LineNr">214 </span> <span class="Delimiter">}</span>
@ -243,11 +243,11 @@ if ('onhashchange' in window) {
<span id="L218" class="LineNr">218 </span> <span class="PreProc">var</span> saved-rest-h: (handle <a href='cell.mu.html#L1'>cell</a>)
<span id="L219" class="LineNr">219 </span> <span class="PreProc">var</span> saved-rest-ah/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> address saved-rest-h
<span id="L220" class="LineNr">220 </span> copy-object rest-ah, saved-rest-ah
<span id="L221" class="LineNr">221 </span> <a href='cell.mu.html#L121'>nil</a> rest-ah
<span id="L221" class="LineNr">221 </span> <a href='cell.mu.html#L147'>nil</a> rest-ah
<span id="L222" class="LineNr">222 </span> <span class="muComment"># create new-node out of first..third and rest</span>
<span id="L223" class="LineNr">223 </span> <span class="PreProc">var</span> result-h: (handle <a href='cell.mu.html#L1'>cell</a>)
<span id="L224" class="LineNr">224 </span> <span class="PreProc">var</span> result-ah/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> address result-h
<span id="L225" class="LineNr">225 </span> <a href='cell.mu.html#L116'>new-pair</a> result-ah, *x-ah, saved-rest-h
<span id="L225" class="LineNr">225 </span> <a href='cell.mu.html#L142'>new-pair</a> result-ah, *x-ah, saved-rest-h
<span id="L226" class="LineNr">226 </span> <span class="muComment"># save</span>
<span id="L227" class="LineNr">227 </span> copy-object result-ah, x-ah
<span id="L228" class="LineNr">228 </span> <span class="muComment"># there was a mutation; rerun</span>
@ -269,7 +269,7 @@ if ('onhashchange' in window) {
<span id="L244" class="LineNr">244 </span> <span class="PreProc">break-if-=</span>
<span id="L245" class="LineNr">245 </span> <span class="muComment"># if left is a quote or unquote, cdr is still head of list</span>
<span id="L246" class="LineNr">246 </span> <span class="Delimiter">{</span>
<span id="L247" class="LineNr">247 </span> <span class="PreProc">var</span> left-is-quote-or-unquote?/eax: boolean <span class="Special">&lt;-</span> <a href='infix.mu.html#L543'>quote-or-unquote?</a> left-ah
<span id="L247" class="LineNr">247 </span> <span class="PreProc">var</span> left-is-quote-or-unquote?/eax: boolean <span class="Special">&lt;-</span> <a href='infix.mu.html#L545'>quote-or-unquote?</a> left-ah
<span id="L248" class="LineNr">248 </span> compare left-is-quote-or-unquote?, <span class="Constant">0</span>/false
<span id="L249" class="LineNr">249 </span> <span class="Delimiter">}</span>
<span id="L250" class="LineNr">250 </span> <span class="PreProc">break-if-!=</span>
@ -278,7 +278,7 @@ if ('onhashchange' in window) {
<span id="L253" class="LineNr">253 </span> <a href='infix.mu.html#L14'>transform-infix-2</a> right-ah, trace, right-at-head-of-list?
<span id="L254" class="LineNr">254 </span><span class="CommentedCode">#? draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, &quot;z&quot;, 1/fg 0/bg</span>
<span id="L255" class="LineNr">255 </span> <a href='trace.mu.html#L250'>trace-higher</a> trace
<span id="L256" class="Folded">256 </span><span class="Folded">+-- 15 lines: # trace &quot;=&gt; &quot; x-ah -------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L256" class="Folded">256 </span><span class="Folded">+-- 15 lines: # trace &quot;=&gt; &quot; x-ah --------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span id="L271" class="LineNr">271 </span><span class="Delimiter">}</span>
<span id="L272" class="LineNr">272 </span>
<span id="L273" class="LineNr">273 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='infix.mu.html#L273'>not-null-not-nil-pair?</a></span> _x: (addr <a href='cell.mu.html#L1'>cell</a>)<span class="PreProc"> -&gt; </span>_/eax: boolean <span class="Delimiter">{</span>
@ -294,8 +294,8 @@ if ('onhashchange' in window) {
<span id="L283" class="LineNr">283 </span> <span class="PreProc">break-if-=</span>
<span id="L284" class="LineNr">284 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false
<span id="L285" class="LineNr">285 </span> <span class="Delimiter">}</span>
<span id="L286" class="LineNr">286 </span> <span class="PreProc">var</span> <a href='print.mu.html#L353'>nil?</a>/eax: boolean <span class="Special">&lt;-</span> <a href='print.mu.html#L353'>nil?</a> x
<span id="L287" class="LineNr">287 </span> compare <a href='print.mu.html#L353'>nil?</a>, <span class="Constant">0</span>/false
<span id="L286" class="LineNr">286 </span> <span class="PreProc">var</span> <a href='print.mu.html#L390'>nil?</a>/eax: boolean <span class="Special">&lt;-</span> <a href='print.mu.html#L390'>nil?</a> x
<span id="L287" class="LineNr">287 </span> compare <a href='print.mu.html#L390'>nil?</a>, <span class="Constant">0</span>/false
<span id="L288" class="LineNr">288 </span> <span class="Delimiter">{</span>
<span id="L289" class="LineNr">289 </span> <span class="PreProc">break-if-=</span>
<span id="L290" class="LineNr">290 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false
@ -313,18 +313,18 @@ if ('onhashchange' in window) {
<span id="L302" class="LineNr">302 </span>
<span id="L303" class="LineNr">303 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='infix.mu.html#L303'>tokenize-infix</a></span> _sym-ah: (addr handle <a href='cell.mu.html#L1'>cell</a>), trace: (addr trace) <span class="Delimiter">{</span>
<span id="L304" class="LineNr">304 </span> <span class="PreProc">var</span> sym-ah/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _sym-ah
<span id="L305" class="LineNr">305 </span> <span class="PreProc">var</span> sym/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *sym-ah
<span id="L305" class="LineNr">305 </span> <span class="PreProc">var</span> sym/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *sym-ah
<span id="L306" class="LineNr">306 </span> <span class="PreProc">var</span> sym-data-ah/eax: (addr handle stream byte) <span class="Special">&lt;-</span> get sym, text-data
<span id="L307" class="LineNr">307 </span> <span class="PreProc">var</span> _sym-data/eax: (addr stream byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *sym-data-ah
<span id="L307" class="LineNr">307 </span> <span class="PreProc">var</span> _sym-data/eax: (addr stream byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *sym-data-ah
<span id="L308" class="LineNr">308 </span> <span class="PreProc">var</span> sym-data/<span class="muRegEsi">esi</span>: (addr stream byte) <span class="Special">&lt;-</span> copy _sym-data
<span id="L309" class="LineNr">309 </span> <a href='../106stream.subx.html#L59'>rewind-stream</a> sym-data
<span id="L310" class="LineNr">310 </span> <span class="muComment"># read sym into a gap buffer and insert spaces in a few places</span>
<span id="L311" class="LineNr">311 </span> <span class="PreProc">var</span> buffer-storage: <a href='gap-buffer.mu.html#L3'>gap-buffer</a>
<span id="L312" class="LineNr">312 </span> <span class="PreProc">var</span> buffer/<span class="muRegEdi">edi</span>: (addr <a href='gap-buffer.mu.html#L3'>gap-buffer</a>) <span class="Special">&lt;-</span> address buffer-storage
<span id="L313" class="LineNr">313 </span> <a href='gap-buffer.mu.html#L11'>initialize-gap-buffer</a> buffer, <span class="Constant">0x40</span>/max-symbol-size
<span id="L311" class="LineNr">311 </span> <span class="PreProc">var</span> buffer-storage: <a href='../514gap-buffer.mu.html#L3'>gap-buffer</a>
<span id="L312" class="LineNr">312 </span> <span class="PreProc">var</span> buffer/<span class="muRegEdi">edi</span>: (addr <a href='../514gap-buffer.mu.html#L3'>gap-buffer</a>) <span class="Special">&lt;-</span> address buffer-storage
<span id="L313" class="LineNr">313 </span> <a href='../514gap-buffer.mu.html#L11'>initialize-gap-buffer</a> buffer, <span class="Constant">0x40</span>/max-symbol-size
<span id="L314" class="LineNr">314 </span> <span class="muComment"># scan for first non-$</span>
<span id="L315" class="LineNr">315 </span> <span class="PreProc">var</span> g/eax: grapheme <span class="Special">&lt;-</span> <a href='../403unicode.mu.html#L92'>read-grapheme</a> sym-data
<span id="L316" class="LineNr">316 </span> <a href='gap-buffer.mu.html#L441'>add-grapheme-at-gap</a> buffer, g
<span id="L316" class="LineNr">316 </span> <a href='../514gap-buffer.mu.html#L441'>add-grapheme-at-gap</a> buffer, g
<span id="L317" class="LineNr">317 </span> <span class="Delimiter">{</span>
<span id="L318" class="LineNr">318 </span> compare g, <span class="Constant">0x24</span>/dollar
<span id="L319" class="LineNr">319 </span> <span class="PreProc">break-if-!=</span>
@ -335,11 +335,11 @@ if ('onhashchange' in window) {
<span id="L324" class="LineNr">324 </span> <span class="PreProc">return</span> <span class="muComment"># symbol is all '$'s; do nothing</span>
<span id="L325" class="LineNr">325 </span> <span class="Delimiter">}</span>
<span id="L326" class="LineNr">326 </span> g <span class="Special">&lt;-</span> <a href='../403unicode.mu.html#L92'>read-grapheme</a> sym-data
<span id="L327" class="LineNr">327 </span> <a href='gap-buffer.mu.html#L441'>add-grapheme-at-gap</a> buffer, g
<span id="L327" class="LineNr">327 </span> <a href='../514gap-buffer.mu.html#L441'>add-grapheme-at-gap</a> buffer, g
<span id="L328" class="LineNr">328 </span> <span class="PreProc">loop</span>
<span id="L329" class="LineNr">329 </span> <span class="Delimiter">}</span>
<span id="L330" class="LineNr">330 </span> <span class="PreProc">var</span> tokenization-needed?: boolean
<span id="L331" class="LineNr">331 </span> <span class="PreProc">var</span> _operator-so-far?/eax: boolean <span class="Special">&lt;-</span> <a href='infix.mu.html#L456'>operator-grapheme?</a> g
<span id="L331" class="LineNr">331 </span> <span class="PreProc">var</span> _operator-so-far?/eax: boolean <span class="Special">&lt;-</span> <a href='infix.mu.html#L458'>operator-grapheme?</a> g
<span id="L332" class="LineNr">332 </span> <span class="PreProc">var</span> operator-so-far?/<span class="muRegEcx">ecx</span>: boolean <span class="Special">&lt;-</span> copy _operator-so-far?
<span id="L333" class="LineNr">333 </span> <span class="Delimiter">{</span>
<span id="L334" class="LineNr">334 </span> <span class="PreProc">var</span> done?/eax: boolean <span class="Special">&lt;-</span> <a href='../309stream.subx.html#L6'>stream-empty?</a> sym-data
@ -347,15 +347,15 @@ if ('onhashchange' in window) {
<span id="L336" class="LineNr">336 </span> <span class="PreProc">break-if-!=</span>
<span id="L337" class="LineNr">337 </span> <span class="PreProc">var</span> g/eax: grapheme <span class="Special">&lt;-</span> <a href='../403unicode.mu.html#L92'>read-grapheme</a> sym-data
<span id="L338" class="LineNr">338 </span> <span class="Delimiter">{</span>
<span id="L339" class="LineNr">339 </span> <span class="PreProc">var</span> curr-operator?/eax: boolean <span class="Special">&lt;-</span> <a href='infix.mu.html#L456'>operator-grapheme?</a> g
<span id="L339" class="LineNr">339 </span> <span class="PreProc">var</span> curr-operator?/eax: boolean <span class="Special">&lt;-</span> <a href='infix.mu.html#L458'>operator-grapheme?</a> g
<span id="L340" class="LineNr">340 </span> compare curr-operator?, operator-so-far?
<span id="L341" class="LineNr">341 </span> <span class="PreProc">break-if-=</span>
<span id="L342" class="LineNr">342 </span> <span class="muComment"># state change; insert a space</span>
<span id="L343" class="LineNr">343 </span> <a href='gap-buffer.mu.html#L441'>add-grapheme-at-gap</a> buffer, <span class="Constant">0x20</span>/space
<span id="L343" class="LineNr">343 </span> <a href='../514gap-buffer.mu.html#L441'>add-grapheme-at-gap</a> buffer, <span class="Constant">0x20</span>/space
<span id="L344" class="LineNr">344 </span> operator-so-far? <span class="Special">&lt;-</span> copy curr-operator?
<span id="L345" class="LineNr">345 </span> copy-to tokenization-needed?, <span class="Constant">1</span>/true
<span id="L346" class="LineNr">346 </span> <span class="Delimiter">}</span>
<span id="L347" class="LineNr">347 </span> <a href='gap-buffer.mu.html#L441'>add-grapheme-at-gap</a> buffer, g
<span id="L347" class="LineNr">347 </span> <a href='../514gap-buffer.mu.html#L441'>add-grapheme-at-gap</a> buffer, g
<span id="L348" class="LineNr">348 </span> <span class="PreProc">loop</span>
<span id="L349" class="LineNr">349 </span> <span class="Delimiter">}</span>
<span id="L350" class="LineNr">350 </span> compare tokenization-needed?, <span class="Constant">0</span>/false
@ -374,269 +374,271 @@ if ('onhashchange' in window) {
<span id="L363" class="LineNr">363 </span><span class="Delimiter">}</span>
<span id="L364" class="LineNr">364 </span>
<span id="L365" class="LineNr">365 </span><span class="PreProc">fn</span> <span class="muTest"><a href='infix.mu.html#L365'>test-infix</a></span> <span class="Delimiter">{</span>
<span id="L366" class="LineNr">366 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;abc&quot;</span>, <span class="Constant">&quot;abc&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/regular-symbol&quot;</span>
<span id="L367" class="LineNr">367 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;-3&quot;</span>, <span class="Constant">&quot;-3&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/negative-integer-literal&quot;</span>
<span id="L368" class="LineNr">368 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;[a b+c]&quot;</span>, <span class="Constant">&quot;[a b+c]&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/string-literal&quot;</span>
<span id="L369" class="LineNr">369 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;$&quot;</span>, <span class="Constant">&quot;$&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/dollar-sym&quot;</span>
<span id="L370" class="LineNr">370 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;$$&quot;</span>, <span class="Constant">&quot;$$&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/dollar-sym-2&quot;</span>
<span id="L371" class="LineNr">371 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;$a&quot;</span>, <span class="Constant">&quot;$a&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/dollar-var&quot;</span>
<span id="L372" class="LineNr">372 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;$+&quot;</span>, <span class="Constant">&quot;$+&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/dollar-operator&quot;</span>
<span id="L373" class="LineNr">373 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;(+)&quot;</span>, <span class="Constant">&quot;+&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/operator-without-args&quot;</span>
<span id="L374" class="LineNr">374 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;(= (+) 3)&quot;</span>, <span class="Constant">&quot;(= + 3)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/operator-without-args-2&quot;</span>
<span id="L375" class="LineNr">375 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;($+)&quot;</span>, <span class="Constant">&quot;$+&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/dollar-operator-without-args&quot;</span>
<span id="L376" class="LineNr">376 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;',(a + b)&quot;</span>, <span class="Constant">&quot;',(+ a b)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/nested-quotes&quot;</span>
<span id="L377" class="LineNr">377 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;',(+)&quot;</span>, <span class="Constant">&quot;',+&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/nested-quotes-2&quot;</span>
<span id="L378" class="LineNr">378 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;(a + b)&quot;</span>, <span class="Constant">&quot;(+ a b)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/simple-list&quot;</span>
<span id="L379" class="LineNr">379 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;(a (+) b)&quot;</span>, <span class="Constant">&quot;(a + b)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/wrapped-operator&quot;</span>
<span id="L380" class="LineNr">380 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;(+ a b)&quot;</span>, <span class="Constant">&quot;(+ a b)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/prefix-operator&quot;</span>
<span id="L381" class="LineNr">381 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;(a . b)&quot;</span>, <span class="Constant">&quot;(a . b)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/dot-operator&quot;</span>
<span id="L382" class="LineNr">382 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;(a b . c)&quot;</span>, <span class="Constant">&quot;(a b . c)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/dotted-list&quot;</span>
<span id="L383" class="LineNr">383 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;(+ . b)&quot;</span>, <span class="Constant">&quot;(+ . b)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/dotted-list-with-operator&quot;</span>
<span id="L384" class="LineNr">384 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;(+ a)&quot;</span>, <span class="Constant">&quot;(+ a)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/unary-operator&quot;</span>
<span id="L385" class="LineNr">385 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;((a + b))&quot;</span>, <span class="Constant">&quot;((+ a b))&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/nested-list&quot;</span>
<span id="L386" class="LineNr">386 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;(do (a + b))&quot;</span>, <span class="Constant">&quot;(do (+ a b))&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/nested-list-2&quot;</span>
<span id="L387" class="LineNr">387 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;(a = (a + 1))&quot;</span>, <span class="Constant">&quot;(= a (+ a 1))&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/nested-list-3&quot;</span>
<span id="L388" class="LineNr">388 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;(a + b + c)&quot;</span>, <span class="Constant">&quot;(+ (+ a b) c)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/left-associative&quot;</span>
<span id="L389" class="LineNr">389 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;(f a + b)&quot;</span>, <span class="Constant">&quot;(f (+ a b))&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/higher-precedence-than-call&quot;</span>
<span id="L390" class="LineNr">390 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;(f a + b c + d)&quot;</span>, <span class="Constant">&quot;(f (+ a b) (+ c d))&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/multiple&quot;</span>
<span id="L391" class="LineNr">391 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;+a&quot;</span>, <span class="Constant">&quot;(+ a)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/unary-operator-2&quot;</span>
<span id="L392" class="LineNr">392 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;(+a)&quot;</span>, <span class="Constant">&quot;((+ a))&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/unary-operator-3&quot;</span>
<span id="L393" class="LineNr">393 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;-a&quot;</span>, <span class="Constant">&quot;(- a)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/unary-operator-4&quot;</span>
<span id="L394" class="LineNr">394 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;a+b&quot;</span>, <span class="Constant">&quot;(+ a b)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/no-spaces&quot;</span>
<span id="L395" class="LineNr">395 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;3+1&quot;</span>, <span class="Constant">&quot;(+ 3 1)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/no-spaces-starting-with-digit&quot;</span>
<span id="L396" class="LineNr">396 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;',a+b&quot;</span>, <span class="Constant">&quot;',(+ a b)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/no-spaces-with-nested-quotes&quot;</span>
<span id="L397" class="LineNr">397 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;$a+b&quot;</span>, <span class="Constant">&quot;(+ $a b)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/no-spaces-2&quot;</span>
<span id="L398" class="LineNr">398 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;-a+b&quot;</span>, <span class="Constant">&quot;(+ (- a) b)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/unary-over-binary&quot;</span>
<span id="L399" class="LineNr">399 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;~a+b&quot;</span>, <span class="Constant">&quot;(+ (~ a) b)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/unary-complement&quot;</span>
<span id="L400" class="LineNr">400 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;(n * n-1)&quot;</span>, <span class="Constant">&quot;(* n (- n 1))&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/no-spaces-over-spaces&quot;</span>
<span id="L401" class="LineNr">401 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;`(a + b)&quot;</span>, <span class="Constant">&quot;`(+ a b)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/backquote&quot;</span>
<span id="L402" class="LineNr">402 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;`(+ a b)&quot;</span>, <span class="Constant">&quot;`(+ a b)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/backquote-2&quot;</span>
<span id="L403" class="LineNr">403 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;,@a+b&quot;</span>, <span class="Constant">&quot;,@(+ a b)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/unquote-splice&quot;</span>
<span id="L404" class="LineNr">404 </span> <a href='infix.mu.html#L575'>check-infix</a> <span class="Constant">&quot;,@(a + b)&quot;</span>, <span class="Constant">&quot;,@(+ a b)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/unquote-splice-2&quot;</span>
<span id="L366" class="LineNr">366 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;abc&quot;</span>, <span class="Constant">&quot;abc&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/regular-symbol&quot;</span>
<span id="L367" class="LineNr">367 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;-3&quot;</span>, <span class="Constant">&quot;-3&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/negative-integer-literal&quot;</span>
<span id="L368" class="LineNr">368 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;[a b+c]&quot;</span>, <span class="Constant">&quot;[a b+c]&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/string-literal&quot;</span>
<span id="L369" class="LineNr">369 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;$&quot;</span>, <span class="Constant">&quot;$&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/dollar-sym&quot;</span>
<span id="L370" class="LineNr">370 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;$$&quot;</span>, <span class="Constant">&quot;$$&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/dollar-sym-2&quot;</span>
<span id="L371" class="LineNr">371 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;$a&quot;</span>, <span class="Constant">&quot;$a&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/dollar-var&quot;</span>
<span id="L372" class="LineNr">372 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;$+&quot;</span>, <span class="Constant">&quot;$+&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/dollar-operator&quot;</span>
<span id="L373" class="LineNr">373 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;(+)&quot;</span>, <span class="Constant">&quot;+&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/operator-without-args&quot;</span>
<span id="L374" class="LineNr">374 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;(= (+) 3)&quot;</span>, <span class="Constant">&quot;(= + 3)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/operator-without-args-2&quot;</span>
<span id="L375" class="LineNr">375 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;($+)&quot;</span>, <span class="Constant">&quot;$+&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/dollar-operator-without-args&quot;</span>
<span id="L376" class="LineNr">376 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;',(a + b)&quot;</span>, <span class="Constant">&quot;',(+ a b)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/nested-quotes&quot;</span>
<span id="L377" class="LineNr">377 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;',(+)&quot;</span>, <span class="Constant">&quot;',+&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/nested-quotes-2&quot;</span>
<span id="L378" class="LineNr">378 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;(a + b)&quot;</span>, <span class="Constant">&quot;(+ a b)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/simple-list&quot;</span>
<span id="L379" class="LineNr">379 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;(a (+) b)&quot;</span>, <span class="Constant">&quot;(a + b)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/wrapped-operator&quot;</span>
<span id="L380" class="LineNr">380 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;(+ a b)&quot;</span>, <span class="Constant">&quot;(+ a b)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/prefix-operator&quot;</span>
<span id="L381" class="LineNr">381 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;(a . b)&quot;</span>, <span class="Constant">&quot;(a . b)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/dot-operator&quot;</span>
<span id="L382" class="LineNr">382 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;(a b . c)&quot;</span>, <span class="Constant">&quot;(a b . c)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/dotted-list&quot;</span>
<span id="L383" class="LineNr">383 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;(+ . b)&quot;</span>, <span class="Constant">&quot;(+ . b)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/dotted-list-with-operator&quot;</span>
<span id="L384" class="LineNr">384 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;(+ a)&quot;</span>, <span class="Constant">&quot;(+ a)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/unary-operator&quot;</span>
<span id="L385" class="LineNr">385 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;((a + b))&quot;</span>, <span class="Constant">&quot;((+ a b))&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/nested-list&quot;</span>
<span id="L386" class="LineNr">386 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;(do (a + b))&quot;</span>, <span class="Constant">&quot;(do (+ a b))&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/nested-list-2&quot;</span>
<span id="L387" class="LineNr">387 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;(a = (a + 1))&quot;</span>, <span class="Constant">&quot;(= a (+ a 1))&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/nested-list-3&quot;</span>
<span id="L388" class="LineNr">388 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;(a + b + c)&quot;</span>, <span class="Constant">&quot;(+ (+ a b) c)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/left-associative&quot;</span>
<span id="L389" class="LineNr">389 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;(f a + b)&quot;</span>, <span class="Constant">&quot;(f (+ a b))&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/higher-precedence-than-call&quot;</span>
<span id="L390" class="LineNr">390 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;(f a + b c + d)&quot;</span>, <span class="Constant">&quot;(f (+ a b) (+ c d))&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/multiple&quot;</span>
<span id="L391" class="LineNr">391 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;+a&quot;</span>, <span class="Constant">&quot;(+ a)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/unary-operator-2&quot;</span>
<span id="L392" class="LineNr">392 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;(+a)&quot;</span>, <span class="Constant">&quot;((+ a))&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/unary-operator-3&quot;</span>
<span id="L393" class="LineNr">393 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;-a&quot;</span>, <span class="Constant">&quot;(- a)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/unary-operator-4&quot;</span>
<span id="L394" class="LineNr">394 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;a+b&quot;</span>, <span class="Constant">&quot;(+ a b)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/no-spaces&quot;</span>
<span id="L395" class="LineNr">395 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;3+1&quot;</span>, <span class="Constant">&quot;(+ 3 1)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/no-spaces-starting-with-digit&quot;</span>
<span id="L396" class="LineNr">396 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;',a+b&quot;</span>, <span class="Constant">&quot;',(+ a b)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/no-spaces-with-nested-quotes&quot;</span>
<span id="L397" class="LineNr">397 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;$a+b&quot;</span>, <span class="Constant">&quot;(+ $a b)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/no-spaces-2&quot;</span>
<span id="L398" class="LineNr">398 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;-a+b&quot;</span>, <span class="Constant">&quot;(+ (- a) b)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/unary-over-binary&quot;</span>
<span id="L399" class="LineNr">399 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;~a+b&quot;</span>, <span class="Constant">&quot;(+ (~ a) b)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/unary-complement&quot;</span>
<span id="L400" class="LineNr">400 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;(n * n-1)&quot;</span>, <span class="Constant">&quot;(* n (- n 1))&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/no-spaces-over-spaces&quot;</span>
<span id="L401" class="LineNr">401 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;`(a + b)&quot;</span>, <span class="Constant">&quot;`(+ a b)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/backquote&quot;</span>
<span id="L402" class="LineNr">402 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;`(+ a b)&quot;</span>, <span class="Constant">&quot;`(+ a b)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/backquote-2&quot;</span>
<span id="L403" class="LineNr">403 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;,@a+b&quot;</span>, <span class="Constant">&quot;,@(+ a b)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/unquote-splice&quot;</span>
<span id="L404" class="LineNr">404 </span> <a href='infix.mu.html#L577'>check-infix</a> <span class="Constant">&quot;,@(a + b)&quot;</span>, <span class="Constant">&quot;,@(+ a b)&quot;</span>, <span class="Constant">&quot;F - <a href='infix.mu.html#L365'>test-infix</a>/unquote-splice-2&quot;</span>
<span id="L405" class="LineNr">405 </span><span class="Delimiter">}</span>
<span id="L406" class="LineNr">406 </span>
<span id="L407" class="LineNr">407 </span><span class="muComment"># helpers</span>
<span id="L408" class="LineNr">408 </span>
<span id="L409" class="LineNr">409 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='infix.mu.html#L409'>operator-symbol?</a></span> _x: (addr <a href='cell.mu.html#L1'>cell</a>)<span class="PreProc"> -&gt; </span>_/eax: boolean <span class="Delimiter">{</span>
<span id="L410" class="LineNr">410 </span> <span class="PreProc">var</span> x/<span class="muRegEsi">esi</span>: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _x
<span id="L411" class="LineNr">411 </span> <span class="Delimiter">{</span>
<span id="L412" class="LineNr">412 </span> <span class="PreProc">var</span> x-type/eax: (addr int) <span class="Special">&lt;-</span> get x, <span class="PreProc">type</span>
<span id="L413" class="LineNr">413 </span> compare *x-type, <span class="Constant">2</span>/symbol
<span id="L414" class="LineNr">414 </span> <span class="PreProc">break-if-=</span>
<span id="L415" class="LineNr">415 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false
<span id="L416" class="LineNr">416 </span> <span class="Delimiter">}</span>
<span id="L417" class="LineNr">417 </span> <span class="PreProc">var</span> x-data-ah/eax: (addr handle stream byte) <span class="Special">&lt;-</span> get x, text-data
<span id="L418" class="LineNr">418 </span> <span class="PreProc">var</span> _x-data/eax: (addr stream byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *x-data-ah
<span id="L419" class="LineNr">419 </span> <span class="PreProc">var</span> x-data/<span class="muRegEsi">esi</span>: (addr stream byte) <span class="Special">&lt;-</span> copy _x-data
<span id="L420" class="LineNr">420 </span> <a href='../106stream.subx.html#L59'>rewind-stream</a> x-data
<span id="L421" class="LineNr">421 </span> <span class="PreProc">var</span> g/eax: grapheme <span class="Special">&lt;-</span> <a href='../403unicode.mu.html#L92'>read-grapheme</a> x-data
<span id="L422" class="LineNr">422 </span> <span class="muComment"># special case: '$' is reserved for gensyms, and can work with either</span>
<span id="L423" class="LineNr">423 </span> <span class="muComment"># operator or non-operator symbols.</span>
<span id="L424" class="LineNr">424 </span> <span class="Delimiter">{</span>
<span id="L425" class="LineNr">425 </span> compare g, <span class="Constant">0x24</span>/dollar
<span id="L426" class="LineNr">426 </span> <span class="PreProc">break-if-!=</span>
<span id="L427" class="LineNr">427 </span> <span class="Delimiter">{</span>
<span id="L428" class="LineNr">428 </span> <span class="PreProc">var</span> all-dollars?/eax: boolean <span class="Special">&lt;-</span> <a href='../309stream.subx.html#L6'>stream-empty?</a> x-data
<span id="L429" class="LineNr">429 </span> compare all-dollars?, <span class="Constant">0</span>/false
<span id="L430" class="LineNr">430 </span> <span class="PreProc">break-if-=</span>
<span id="L431" class="LineNr">431 </span> <span class="muComment"># '$', '$$', '$$$', etc. are regular symbols</span>
<span id="L432" class="LineNr">432 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false
<span id="L433" class="LineNr">433 </span> <span class="Delimiter">}</span>
<span id="L434" class="LineNr">434 </span> g <span class="Special">&lt;-</span> <a href='../403unicode.mu.html#L92'>read-grapheme</a> x-data
<span id="L435" class="LineNr">435 </span> <span class="PreProc">loop</span>
<span id="L436" class="LineNr">436 </span> <span class="Delimiter">}</span>
<span id="L437" class="LineNr">437 </span> <span class="Delimiter">{</span>
<span id="L438" class="LineNr">438 </span> <span class="Delimiter">{</span>
<span id="L439" class="LineNr">439 </span> <span class="PreProc">var</span> result/eax: boolean <span class="Special">&lt;-</span> <a href='infix.mu.html#L456'>operator-grapheme?</a> g
<span id="L440" class="LineNr">440 </span> compare result, <span class="Constant">0</span>/false
<span id="L441" class="LineNr">441 </span> <span class="PreProc">break-if-!=</span>
<span id="L442" class="LineNr">442 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false
<span id="L443" class="LineNr">443 </span> <span class="Delimiter">}</span>
<span id="L444" class="LineNr">444 </span> <span class="Delimiter">{</span>
<span id="L445" class="LineNr">445 </span> <span class="PreProc">var</span> done?/eax: boolean <span class="Special">&lt;-</span> <a href='../309stream.subx.html#L6'>stream-empty?</a> x-data
<span id="L446" class="LineNr">446 </span> compare done?, <span class="Constant">0</span>/false
<span id="L447" class="LineNr">447 </span> <span class="Delimiter">}</span>
<span id="L448" class="LineNr">448 </span> <span class="PreProc">break-if-!=</span>
<span id="L449" class="LineNr">449 </span> g <span class="Special">&lt;-</span> <a href='../403unicode.mu.html#L92'>read-grapheme</a> x-data
<span id="L450" class="LineNr">450 </span> <span class="PreProc">loop</span>
<span id="L451" class="LineNr">451 </span> <span class="Delimiter">}</span>
<span id="L452" class="LineNr">452 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L453" class="LineNr">453 </span><span class="Delimiter">}</span>
<span id="L454" class="LineNr">454 </span>
<span id="L455" class="LineNr">455 </span><span class="muComment"># just a short list of operator graphemes for now</span>
<span id="L456" class="LineNr">456 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='infix.mu.html#L456'>operator-grapheme?</a></span> g: grapheme<span class="PreProc"> -&gt; </span>_/eax: boolean <span class="Delimiter">{</span>
<span id="L457" class="LineNr">457 </span> <span class="muComment"># '$' is special and can be in either a symbol or operator; here we treat it as a symbol</span>
<span id="L458" class="LineNr">458 </span> compare g, <span class="Constant">0x25</span>/percent
<span id="L459" class="LineNr">459 </span> <span class="Delimiter">{</span>
<span id="L460" class="LineNr">460 </span> <span class="PreProc">break-if-!=</span>
<span id="L461" class="LineNr">461 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L462" class="LineNr">462 </span> <span class="Delimiter">}</span>
<span id="L463" class="LineNr">463 </span> compare g, <span class="Constant">0x26</span>/ampersand
<span id="L464" class="LineNr">464 </span> <span class="Delimiter">{</span>
<span id="L465" class="LineNr">465 </span> <span class="PreProc">break-if-!=</span>
<span id="L466" class="LineNr">466 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L467" class="LineNr">467 </span> <span class="Delimiter">}</span>
<span id="L468" class="LineNr">468 </span> compare g, <span class="Constant">0x2a</span>/asterisk
<span id="L469" class="LineNr">469 </span> <span class="Delimiter">{</span>
<span id="L470" class="LineNr">470 </span> <span class="PreProc">break-if-!=</span>
<span id="L471" class="LineNr">471 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L472" class="LineNr">472 </span> <span class="Delimiter">}</span>
<span id="L473" class="LineNr">473 </span> compare g, <span class="Constant">0x2b</span>/plus
<span id="L474" class="LineNr">474 </span> <span class="Delimiter">{</span>
<span id="L475" class="LineNr">475 </span> <span class="PreProc">break-if-!=</span>
<span id="L476" class="LineNr">476 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L477" class="LineNr">477 </span> <span class="Delimiter">}</span>
<span id="L478" class="LineNr">478 </span> compare g, <span class="Constant">0x2d</span>/dash <span class="muComment"># '-' not allowed in symbols</span>
<span id="L479" class="LineNr">479 </span> <span class="Delimiter">{</span>
<span id="L480" class="LineNr">480 </span> <span class="PreProc">break-if-!=</span>
<span id="L481" class="LineNr">481 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L482" class="LineNr">482 </span> <span class="Delimiter">}</span>
<span id="L483" class="LineNr">483 </span> compare g, <span class="Constant">0x2e</span>/period
<span id="L484" class="LineNr">484 </span> <span class="Delimiter">{</span>
<span id="L485" class="LineNr">485 </span> <span class="PreProc">break-if-!=</span>
<span id="L486" class="LineNr">486 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L487" class="LineNr">487 </span> <span class="Delimiter">}</span>
<span id="L488" class="LineNr">488 </span> compare g, <span class="Constant">0x2f</span>/slash
<span id="L489" class="LineNr">489 </span> <span class="Delimiter">{</span>
<span id="L490" class="LineNr">490 </span> <span class="PreProc">break-if-!=</span>
<span id="L491" class="LineNr">491 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L492" class="LineNr">492 </span> <span class="Delimiter">}</span>
<span id="L493" class="LineNr">493 </span> compare g, <span class="Constant">0x3a</span>/colon
<span id="L494" class="LineNr">494 </span> <span class="Delimiter">{</span>
<span id="L495" class="LineNr">495 </span> <span class="PreProc">break-if-!=</span>
<span id="L496" class="LineNr">496 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L497" class="LineNr">497 </span> <span class="Delimiter">}</span>
<span id="L498" class="LineNr">498 </span> compare g, <span class="Constant">0x3b</span>/semi-colon
<span id="L499" class="LineNr">499 </span> <span class="Delimiter">{</span>
<span id="L500" class="LineNr">500 </span> <span class="PreProc">break-if-!=</span>
<span id="L501" class="LineNr">501 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L502" class="LineNr">502 </span> <span class="Delimiter">}</span>
<span id="L503" class="LineNr">503 </span> compare g, <span class="Constant">0x3c</span>/less-than
<span id="L504" class="LineNr">504 </span> <span class="Delimiter">{</span>
<span id="L505" class="LineNr">505 </span> <span class="PreProc">break-if-!=</span>
<span id="L506" class="LineNr">506 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L507" class="LineNr">507 </span> <span class="Delimiter">}</span>
<span id="L508" class="LineNr">508 </span> compare g, <span class="Constant">0x3d</span>/equal
<span id="L509" class="LineNr">509 </span> <span class="Delimiter">{</span>
<span id="L510" class="LineNr">510 </span> <span class="PreProc">break-if-!=</span>
<span id="L511" class="LineNr">511 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L512" class="LineNr">512 </span> <span class="Delimiter">}</span>
<span id="L513" class="LineNr">513 </span> compare g, <span class="Constant">0x3e</span>/greater-than
<span id="L514" class="LineNr">514 </span> <span class="Delimiter">{</span>
<span id="L515" class="LineNr">515 </span> <span class="PreProc">break-if-!=</span>
<span id="L516" class="LineNr">516 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L517" class="LineNr">517 </span> <span class="Delimiter">}</span>
<span id="L518" class="LineNr">518 </span> <span class="muComment"># '?' is a symbol char</span>
<span id="L519" class="LineNr">519 </span> compare g, <span class="Constant">0x5c</span>/backslash
<span id="L520" class="LineNr">520 </span> <span class="Delimiter">{</span>
<span id="L521" class="LineNr">521 </span> <span class="PreProc">break-if-!=</span>
<span id="L522" class="LineNr">522 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L523" class="LineNr">523 </span> <span class="Delimiter">}</span>
<span id="L524" class="LineNr">524 </span> compare g, <span class="Constant">0x5e</span>/caret
<span id="L525" class="LineNr">525 </span> <span class="Delimiter">{</span>
<span id="L526" class="LineNr">526 </span> <span class="PreProc">break-if-!=</span>
<span id="L527" class="LineNr">527 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L528" class="LineNr">528 </span> <span class="Delimiter">}</span>
<span id="L529" class="LineNr">529 </span> <span class="muComment"># '_' is a symbol char</span>
<span id="L530" class="LineNr">530 </span> compare g, <span class="Constant">0x7c</span>/vertical-line
<span id="L531" class="LineNr">531 </span> <span class="Delimiter">{</span>
<span id="L532" class="LineNr">532 </span> <span class="PreProc">break-if-!=</span>
<span id="L533" class="LineNr">533 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L534" class="LineNr">534 </span> <span class="Delimiter">}</span>
<span id="L535" class="LineNr">535 </span> compare g, <span class="Constant">0x7e</span>/tilde
<span id="L536" class="LineNr">536 </span> <span class="Delimiter">{</span>
<span id="L537" class="LineNr">537 </span> <span class="PreProc">break-if-!=</span>
<span id="L538" class="LineNr">538 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L539" class="LineNr">539 </span> <span class="Delimiter">}</span>
<span id="L540" class="LineNr">540 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false
<span id="L541" class="LineNr">541 </span><span class="Delimiter">}</span>
<span id="L542" class="LineNr">542 </span>
<span id="L543" class="LineNr">543 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='infix.mu.html#L543'>quote-or-unquote?</a></span> _x-ah: (addr handle <a href='cell.mu.html#L1'>cell</a>)<span class="PreProc"> -&gt; </span>_/eax: boolean <span class="Delimiter">{</span>
<span id="L544" class="LineNr">544 </span> <span class="PreProc">var</span> x-ah/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _x-ah
<span id="L545" class="LineNr">545 </span> <span class="PreProc">var</span> x/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *x-ah
<span id="L546" class="LineNr">546 </span> <span class="Delimiter">{</span>
<span id="L547" class="LineNr">547 </span> <span class="PreProc">var</span> quote?/eax: boolean <span class="Special">&lt;-</span> <a href='cell.mu.html#L44'>symbol-equal?</a> x, <span class="Constant">&quot;'&quot;</span>
<span id="L548" class="LineNr">548 </span> compare quote?, <span class="Constant">0</span>/false
<span id="L549" class="LineNr">549 </span> <span class="PreProc">break-if-=</span>
<span id="L550" class="LineNr">550 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L551" class="LineNr">551 </span> <span class="Delimiter">}</span>
<span id="L552" class="LineNr">552 </span> <span class="Delimiter">{</span>
<span id="L553" class="LineNr">553 </span> <span class="PreProc">var</span> backquote?/eax: boolean <span class="Special">&lt;-</span> <a href='cell.mu.html#L44'>symbol-equal?</a> x, <span class="Constant">&quot;`&quot;</span>
<span id="L554" class="LineNr">554 </span> compare backquote?, <span class="Constant">0</span>/false
<span id="L555" class="LineNr">555 </span> <span class="PreProc">break-if-=</span>
<span id="L556" class="LineNr">556 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L557" class="LineNr">557 </span> <span class="Delimiter">}</span>
<span id="L558" class="LineNr">558 </span> <span class="Delimiter">{</span>
<span id="L559" class="LineNr">559 </span> <span class="PreProc">var</span> unquote?/eax: boolean <span class="Special">&lt;-</span> <a href='cell.mu.html#L44'>symbol-equal?</a> x, <span class="Constant">&quot;,&quot;</span>
<span id="L560" class="LineNr">560 </span> compare unquote?, <span class="Constant">0</span>/false
<span id="L561" class="LineNr">561 </span> <span class="PreProc">break-if-=</span>
<span id="L562" class="LineNr">562 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L563" class="LineNr">563 </span> <span class="Delimiter">}</span>
<span id="L564" class="LineNr">564 </span> <span class="Delimiter">{</span>
<span id="L565" class="LineNr">565 </span> <span class="PreProc">var</span> unquote-splice?/eax: boolean <span class="Special">&lt;-</span> <a href='cell.mu.html#L44'>symbol-equal?</a> x, <span class="Constant">&quot;,@&quot;</span>
<span id="L566" class="LineNr">566 </span> compare unquote-splice?, <span class="Constant">0</span>/false
<span id="L567" class="LineNr">567 </span> <span class="PreProc">break-if-=</span>
<span id="L568" class="LineNr">568 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L569" class="LineNr">569 </span> <span class="Delimiter">}</span>
<span id="L570" class="LineNr">570 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false
<span id="L571" class="LineNr">571 </span><span class="Delimiter">}</span>
<span id="L572" class="LineNr">572 </span>
<span id="L573" class="LineNr">573 </span><span class="muComment"># helpers for tests</span>
<span id="L409" class="LineNr">409 </span><span class="muComment"># return true if x is composed entirely of operator graphemes, optionally prefixed with some '$'s</span>
<span id="L410" class="LineNr">410 </span><span class="muComment"># some operator, some non-operator =&gt; pre-tokenized symbol; return false</span>
<span id="L411" class="LineNr">411 </span><span class="muComment"># all '$'s =&gt; return false</span>
<span id="L412" class="LineNr">412 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='infix.mu.html#L412'>operator-symbol?</a></span> _x: (addr <a href='cell.mu.html#L1'>cell</a>)<span class="PreProc"> -&gt; </span>_/eax: boolean <span class="Delimiter">{</span>
<span id="L413" class="LineNr">413 </span> <span class="PreProc">var</span> x/<span class="muRegEsi">esi</span>: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _x
<span id="L414" class="LineNr">414 </span> <span class="Delimiter">{</span>
<span id="L415" class="LineNr">415 </span> <span class="PreProc">var</span> x-type/eax: (addr int) <span class="Special">&lt;-</span> get x, <span class="PreProc">type</span>
<span id="L416" class="LineNr">416 </span> compare *x-type, <span class="Constant">2</span>/symbol
<span id="L417" class="LineNr">417 </span> <span class="PreProc">break-if-=</span>
<span id="L418" class="LineNr">418 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false
<span id="L419" class="LineNr">419 </span> <span class="Delimiter">}</span>
<span id="L420" class="LineNr">420 </span> <span class="PreProc">var</span> x-data-ah/eax: (addr handle stream byte) <span class="Special">&lt;-</span> get x, text-data
<span id="L421" class="LineNr">421 </span> <span class="PreProc">var</span> _x-data/eax: (addr stream byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *x-data-ah
<span id="L422" class="LineNr">422 </span> <span class="PreProc">var</span> x-data/<span class="muRegEsi">esi</span>: (addr stream byte) <span class="Special">&lt;-</span> copy _x-data
<span id="L423" class="LineNr">423 </span> <a href='../106stream.subx.html#L59'>rewind-stream</a> x-data
<span id="L424" class="LineNr">424 </span> <span class="PreProc">var</span> g/eax: grapheme <span class="Special">&lt;-</span> <a href='../403unicode.mu.html#L92'>read-grapheme</a> x-data
<span id="L425" class="LineNr">425 </span> <span class="muComment"># special case: '$' is reserved for gensyms, and can work with either</span>
<span id="L426" class="LineNr">426 </span> <span class="muComment"># operator or non-operator symbols.</span>
<span id="L427" class="LineNr">427 </span> <span class="Delimiter">{</span>
<span id="L428" class="LineNr">428 </span> compare g, <span class="Constant">0x24</span>/dollar
<span id="L429" class="LineNr">429 </span> <span class="PreProc">break-if-!=</span>
<span id="L430" class="LineNr">430 </span> <span class="Delimiter">{</span>
<span id="L431" class="LineNr">431 </span> <span class="PreProc">var</span> all-dollars?/eax: boolean <span class="Special">&lt;-</span> <a href='../309stream.subx.html#L6'>stream-empty?</a> x-data
<span id="L432" class="LineNr">432 </span> compare all-dollars?, <span class="Constant">0</span>/false
<span id="L433" class="LineNr">433 </span> <span class="PreProc">break-if-=</span>
<span id="L434" class="LineNr">434 </span> <span class="muComment"># '$', '$$', '$$$', etc. are regular symbols</span>
<span id="L435" class="LineNr">435 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false
<span id="L436" class="LineNr">436 </span> <span class="Delimiter">}</span>
<span id="L437" class="LineNr">437 </span> g <span class="Special">&lt;-</span> <a href='../403unicode.mu.html#L92'>read-grapheme</a> x-data
<span id="L438" class="LineNr">438 </span> <span class="PreProc">loop</span>
<span id="L439" class="LineNr">439 </span> <span class="Delimiter">}</span>
<span id="L440" class="LineNr">440 </span> <span class="Delimiter">{</span>
<span id="L441" class="LineNr">441 </span> <span class="Delimiter">{</span>
<span id="L442" class="LineNr">442 </span> <span class="PreProc">var</span> result/eax: boolean <span class="Special">&lt;-</span> <a href='infix.mu.html#L458'>operator-grapheme?</a> g
<span id="L443" class="LineNr">443 </span> compare result, <span class="Constant">0</span>/false
<span id="L444" class="LineNr">444 </span> <span class="PreProc">break-if-!=</span>
<span id="L445" class="LineNr">445 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false
<span id="L446" class="LineNr">446 </span> <span class="Delimiter">}</span>
<span id="L447" class="LineNr">447 </span> <span class="Delimiter">{</span>
<span id="L448" class="LineNr">448 </span> <span class="PreProc">var</span> done?/eax: boolean <span class="Special">&lt;-</span> <a href='../309stream.subx.html#L6'>stream-empty?</a> x-data
<span id="L449" class="LineNr">449 </span> compare done?, <span class="Constant">0</span>/false
<span id="L450" class="LineNr">450 </span> <span class="Delimiter">}</span>
<span id="L451" class="LineNr">451 </span> <span class="PreProc">break-if-!=</span>
<span id="L452" class="LineNr">452 </span> g <span class="Special">&lt;-</span> <a href='../403unicode.mu.html#L92'>read-grapheme</a> x-data
<span id="L453" class="LineNr">453 </span> <span class="PreProc">loop</span>
<span id="L454" class="LineNr">454 </span> <span class="Delimiter">}</span>
<span id="L455" class="LineNr">455 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L456" class="LineNr">456 </span><span class="Delimiter">}</span>
<span id="L457" class="LineNr">457 </span>
<span id="L458" class="LineNr">458 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='infix.mu.html#L458'>operator-grapheme?</a></span> g: grapheme<span class="PreProc"> -&gt; </span>_/eax: boolean <span class="Delimiter">{</span>
<span id="L459" class="LineNr">459 </span> <span class="muComment"># '$' is special and can be in either a symbol or operator; here we treat it as a symbol</span>
<span id="L460" class="LineNr">460 </span> compare g, <span class="Constant">0x25</span>/percent
<span id="L461" class="LineNr">461 </span> <span class="Delimiter">{</span>
<span id="L462" class="LineNr">462 </span> <span class="PreProc">break-if-!=</span>
<span id="L463" class="LineNr">463 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L464" class="LineNr">464 </span> <span class="Delimiter">}</span>
<span id="L465" class="LineNr">465 </span> compare g, <span class="Constant">0x26</span>/ampersand
<span id="L466" class="LineNr">466 </span> <span class="Delimiter">{</span>
<span id="L467" class="LineNr">467 </span> <span class="PreProc">break-if-!=</span>
<span id="L468" class="LineNr">468 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L469" class="LineNr">469 </span> <span class="Delimiter">}</span>
<span id="L470" class="LineNr">470 </span> compare g, <span class="Constant">0x2a</span>/asterisk
<span id="L471" class="LineNr">471 </span> <span class="Delimiter">{</span>
<span id="L472" class="LineNr">472 </span> <span class="PreProc">break-if-!=</span>
<span id="L473" class="LineNr">473 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L474" class="LineNr">474 </span> <span class="Delimiter">}</span>
<span id="L475" class="LineNr">475 </span> compare g, <span class="Constant">0x2b</span>/plus
<span id="L476" class="LineNr">476 </span> <span class="Delimiter">{</span>
<span id="L477" class="LineNr">477 </span> <span class="PreProc">break-if-!=</span>
<span id="L478" class="LineNr">478 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L479" class="LineNr">479 </span> <span class="Delimiter">}</span>
<span id="L480" class="LineNr">480 </span> compare g, <span class="Constant">0x2d</span>/dash <span class="muComment"># '-' not allowed in symbols</span>
<span id="L481" class="LineNr">481 </span> <span class="Delimiter">{</span>
<span id="L482" class="LineNr">482 </span> <span class="PreProc">break-if-!=</span>
<span id="L483" class="LineNr">483 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L484" class="LineNr">484 </span> <span class="Delimiter">}</span>
<span id="L485" class="LineNr">485 </span> compare g, <span class="Constant">0x2e</span>/period
<span id="L486" class="LineNr">486 </span> <span class="Delimiter">{</span>
<span id="L487" class="LineNr">487 </span> <span class="PreProc">break-if-!=</span>
<span id="L488" class="LineNr">488 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L489" class="LineNr">489 </span> <span class="Delimiter">}</span>
<span id="L490" class="LineNr">490 </span> compare g, <span class="Constant">0x2f</span>/slash
<span id="L491" class="LineNr">491 </span> <span class="Delimiter">{</span>
<span id="L492" class="LineNr">492 </span> <span class="PreProc">break-if-!=</span>
<span id="L493" class="LineNr">493 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L494" class="LineNr">494 </span> <span class="Delimiter">}</span>
<span id="L495" class="LineNr">495 </span> compare g, <span class="Constant">0x3a</span>/colon
<span id="L496" class="LineNr">496 </span> <span class="Delimiter">{</span>
<span id="L497" class="LineNr">497 </span> <span class="PreProc">break-if-!=</span>
<span id="L498" class="LineNr">498 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L499" class="LineNr">499 </span> <span class="Delimiter">}</span>
<span id="L500" class="LineNr">500 </span> compare g, <span class="Constant">0x3b</span>/semi-colon
<span id="L501" class="LineNr">501 </span> <span class="Delimiter">{</span>
<span id="L502" class="LineNr">502 </span> <span class="PreProc">break-if-!=</span>
<span id="L503" class="LineNr">503 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L504" class="LineNr">504 </span> <span class="Delimiter">}</span>
<span id="L505" class="LineNr">505 </span> compare g, <span class="Constant">0x3c</span>/less-than
<span id="L506" class="LineNr">506 </span> <span class="Delimiter">{</span>
<span id="L507" class="LineNr">507 </span> <span class="PreProc">break-if-!=</span>
<span id="L508" class="LineNr">508 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L509" class="LineNr">509 </span> <span class="Delimiter">}</span>
<span id="L510" class="LineNr">510 </span> compare g, <span class="Constant">0x3d</span>/equal
<span id="L511" class="LineNr">511 </span> <span class="Delimiter">{</span>
<span id="L512" class="LineNr">512 </span> <span class="PreProc">break-if-!=</span>
<span id="L513" class="LineNr">513 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L514" class="LineNr">514 </span> <span class="Delimiter">}</span>
<span id="L515" class="LineNr">515 </span> compare g, <span class="Constant">0x3e</span>/greater-than
<span id="L516" class="LineNr">516 </span> <span class="Delimiter">{</span>
<span id="L517" class="LineNr">517 </span> <span class="PreProc">break-if-!=</span>
<span id="L518" class="LineNr">518 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L519" class="LineNr">519 </span> <span class="Delimiter">}</span>
<span id="L520" class="LineNr">520 </span> <span class="muComment"># '?' is a symbol char</span>
<span id="L521" class="LineNr">521 </span> compare g, <span class="Constant">0x5c</span>/backslash
<span id="L522" class="LineNr">522 </span> <span class="Delimiter">{</span>
<span id="L523" class="LineNr">523 </span> <span class="PreProc">break-if-!=</span>
<span id="L524" class="LineNr">524 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L525" class="LineNr">525 </span> <span class="Delimiter">}</span>
<span id="L526" class="LineNr">526 </span> compare g, <span class="Constant">0x5e</span>/caret
<span id="L527" class="LineNr">527 </span> <span class="Delimiter">{</span>
<span id="L528" class="LineNr">528 </span> <span class="PreProc">break-if-!=</span>
<span id="L529" class="LineNr">529 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L530" class="LineNr">530 </span> <span class="Delimiter">}</span>
<span id="L531" class="LineNr">531 </span> <span class="muComment"># '_' is a symbol char</span>
<span id="L532" class="LineNr">532 </span> compare g, <span class="Constant">0x7c</span>/vertical-line
<span id="L533" class="LineNr">533 </span> <span class="Delimiter">{</span>
<span id="L534" class="LineNr">534 </span> <span class="PreProc">break-if-!=</span>
<span id="L535" class="LineNr">535 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L536" class="LineNr">536 </span> <span class="Delimiter">}</span>
<span id="L537" class="LineNr">537 </span> compare g, <span class="Constant">0x7e</span>/tilde
<span id="L538" class="LineNr">538 </span> <span class="Delimiter">{</span>
<span id="L539" class="LineNr">539 </span> <span class="PreProc">break-if-!=</span>
<span id="L540" class="LineNr">540 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L541" class="LineNr">541 </span> <span class="Delimiter">}</span>
<span id="L542" class="LineNr">542 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false
<span id="L543" class="LineNr">543 </span><span class="Delimiter">}</span>
<span id="L544" class="LineNr">544 </span>
<span id="L545" class="LineNr">545 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='infix.mu.html#L545'>quote-or-unquote?</a></span> _x-ah: (addr handle <a href='cell.mu.html#L1'>cell</a>)<span class="PreProc"> -&gt; </span>_/eax: boolean <span class="Delimiter">{</span>
<span id="L546" class="LineNr">546 </span> <span class="PreProc">var</span> x-ah/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _x-ah
<span id="L547" class="LineNr">547 </span> <span class="PreProc">var</span> x/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *x-ah
<span id="L548" class="LineNr">548 </span> <span class="Delimiter">{</span>
<span id="L549" class="LineNr">549 </span> <span class="PreProc">var</span> quote?/eax: boolean <span class="Special">&lt;-</span> <a href='cell.mu.html#L59'>symbol-equal?</a> x, <span class="Constant">&quot;'&quot;</span>
<span id="L550" class="LineNr">550 </span> compare quote?, <span class="Constant">0</span>/false
<span id="L551" class="LineNr">551 </span> <span class="PreProc">break-if-=</span>
<span id="L552" class="LineNr">552 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L553" class="LineNr">553 </span> <span class="Delimiter">}</span>
<span id="L554" class="LineNr">554 </span> <span class="Delimiter">{</span>
<span id="L555" class="LineNr">555 </span> <span class="PreProc">var</span> backquote?/eax: boolean <span class="Special">&lt;-</span> <a href='cell.mu.html#L59'>symbol-equal?</a> x, <span class="Constant">&quot;`&quot;</span>
<span id="L556" class="LineNr">556 </span> compare backquote?, <span class="Constant">0</span>/false
<span id="L557" class="LineNr">557 </span> <span class="PreProc">break-if-=</span>
<span id="L558" class="LineNr">558 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L559" class="LineNr">559 </span> <span class="Delimiter">}</span>
<span id="L560" class="LineNr">560 </span> <span class="Delimiter">{</span>
<span id="L561" class="LineNr">561 </span> <span class="PreProc">var</span> unquote?/eax: boolean <span class="Special">&lt;-</span> <a href='cell.mu.html#L59'>symbol-equal?</a> x, <span class="Constant">&quot;,&quot;</span>
<span id="L562" class="LineNr">562 </span> compare unquote?, <span class="Constant">0</span>/false
<span id="L563" class="LineNr">563 </span> <span class="PreProc">break-if-=</span>
<span id="L564" class="LineNr">564 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L565" class="LineNr">565 </span> <span class="Delimiter">}</span>
<span id="L566" class="LineNr">566 </span> <span class="Delimiter">{</span>
<span id="L567" class="LineNr">567 </span> <span class="PreProc">var</span> unquote-splice?/eax: boolean <span class="Special">&lt;-</span> <a href='cell.mu.html#L59'>symbol-equal?</a> x, <span class="Constant">&quot;,@&quot;</span>
<span id="L568" class="LineNr">568 </span> compare unquote-splice?, <span class="Constant">0</span>/false
<span id="L569" class="LineNr">569 </span> <span class="PreProc">break-if-=</span>
<span id="L570" class="LineNr">570 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
<span id="L571" class="LineNr">571 </span> <span class="Delimiter">}</span>
<span id="L572" class="LineNr">572 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false
<span id="L573" class="LineNr">573 </span><span class="Delimiter">}</span>
<span id="L574" class="LineNr">574 </span>
<span id="L575" class="LineNr">575 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='infix.mu.html#L575'>check-infix</a></span> actual: (addr array byte), expected: (addr array byte), message: (addr array byte) <span class="Delimiter">{</span>
<span id="L576" class="LineNr">576 </span> <span class="PreProc">var</span> trace-storage: trace
<span id="L577" class="LineNr">577 </span> <span class="PreProc">var</span> trace/<span class="muRegEdx">edx</span>: (addr trace) <span class="Special">&lt;-</span> address trace-storage
<span id="L578" class="LineNr">578 </span><span class="CommentedCode">#? initialize-trace trace, 1/only-errors, 0x10/capacity, 0/visible</span>
<span id="L579" class="LineNr">579 </span> <a href='trace.mu.html#L61'>initialize-trace</a> trace, <span class="Constant">0x10</span>/levels, <span class="Constant">0x1000</span>/capacity, <span class="Constant">0</span>/visible
<span id="L580" class="LineNr">580 </span> <span class="muComment">#</span>
<span id="L581" class="LineNr">581 </span> <span class="PreProc">var</span> actual-buffer-storage: <a href='gap-buffer.mu.html#L3'>gap-buffer</a>
<span id="L582" class="LineNr">582 </span> <span class="PreProc">var</span> actual-buffer/eax: (addr <a href='gap-buffer.mu.html#L3'>gap-buffer</a>) <span class="Special">&lt;-</span> address actual-buffer-storage
<span id="L583" class="LineNr">583 </span> <a href='gap-buffer.mu.html#L53'>initialize-gap-buffer-with</a> actual-buffer, actual
<span id="L584" class="LineNr">584 </span> <span class="PreProc">var</span> actual-tree-h: (handle <a href='cell.mu.html#L1'>cell</a>)
<span id="L585" class="LineNr">585 </span> <span class="PreProc">var</span> actual-tree-ah/<span class="muRegEsi">esi</span>: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> address actual-tree-h
<span id="L586" class="LineNr">586 </span> <a href='read.mu.html#L1'>read-cell</a> actual-buffer, actual-tree-ah, trace
<span id="L587" class="LineNr">587 </span><span class="CommentedCode">#? dump-trace-with-label trace, &quot;infix&quot;</span>
<span id="L588" class="LineNr">588 </span><span class="CommentedCode">#? dump-cell-from-cursor-over-full-screen actual-tree-ah, 7/fg 0/bg</span>
<span id="L589" class="LineNr">589 </span> <span class="PreProc">var</span> _actual-tree/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *actual-tree-ah
<span id="L590" class="LineNr">590 </span> <span class="PreProc">var</span> actual-tree/<span class="muRegEsi">esi</span>: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _actual-tree
<span id="L591" class="LineNr">591 </span> <span class="muComment">#</span>
<span id="L592" class="LineNr">592 </span> <span class="PreProc">var</span> expected-buffer-storage: <a href='gap-buffer.mu.html#L3'>gap-buffer</a>
<span id="L593" class="LineNr">593 </span> <span class="PreProc">var</span> expected-buffer/eax: (addr <a href='gap-buffer.mu.html#L3'>gap-buffer</a>) <span class="Special">&lt;-</span> address expected-buffer-storage
<span id="L594" class="LineNr">594 </span> <a href='gap-buffer.mu.html#L53'>initialize-gap-buffer-with</a> expected-buffer, expected
<span id="L595" class="LineNr">595 </span> <span class="PreProc">var</span> expected-tree-h: (handle <a href='cell.mu.html#L1'>cell</a>)
<span id="L596" class="LineNr">596 </span> <span class="PreProc">var</span> expected-tree-ah/<span class="muRegEdi">edi</span>: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> address expected-tree-h
<span id="L597" class="LineNr">597 </span> <a href='infix.mu.html#L604'>read-without-infix</a> expected-buffer, expected-tree-ah, trace
<span id="L598" class="LineNr">598 </span> <span class="PreProc">var</span> expected-tree/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *expected-tree-ah
<span id="L599" class="LineNr">599 </span> <span class="muComment">#</span>
<span id="L600" class="LineNr">600 </span> <span class="PreProc">var</span> match?/eax: boolean <span class="Special">&lt;-</span> <a href='evaluate.mu.html#L1245'>cell-isomorphic?</a> actual-tree, expected-tree, trace
<span id="L601" class="LineNr">601 </span> <a href='../502test.mu.html#L19'>check</a> match?, message
<span id="L602" class="LineNr">602 </span><span class="Delimiter">}</span>
<span id="L603" class="LineNr">603 </span>
<span id="L604" class="LineNr">604 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='infix.mu.html#L604'>read-without-infix</a></span> in: (addr <a href='gap-buffer.mu.html#L3'>gap-buffer</a>), out: (addr handle <a href='cell.mu.html#L1'>cell</a>), trace: (addr trace) <span class="Delimiter">{</span>
<span id="L605" class="LineNr">605 </span> <span class="muComment"># eagerly tokenize everything so that the phases are easier to see in the trace</span>
<span id="L606" class="LineNr">606 </span> <span class="PreProc">var</span> tokens-storage: (stream <a href='tokenize.mu.html#L3'>token</a> <span class="Constant">0x400</span>)
<span id="L607" class="LineNr">607 </span> <span class="PreProc">var</span> tokens/<span class="muRegEdx">edx</span>: (addr stream <a href='tokenize.mu.html#L3'>token</a>) <span class="Special">&lt;-</span> address tokens-storage
<span id="L608" class="LineNr">608 </span> <a href='tokenize.mu.html#L13'>tokenize</a> in, tokens, trace
<span id="L609" class="LineNr">609 </span> <span class="PreProc">var</span> error?/eax: boolean <span class="Special">&lt;-</span> <a href='trace.mu.html#L94'>has-errors?</a> trace
<span id="L610" class="LineNr">610 </span> compare error?, <span class="Constant">0</span>/false
<span id="L611" class="LineNr">611 </span> <span class="Delimiter">{</span>
<span id="L612" class="LineNr">612 </span> <span class="PreProc">break-if-=</span>
<span id="L613" class="LineNr">613 </span> <a href='trace.mu.html#L379'>dump-trace</a> trace
<span id="L614" class="LineNr">614 </span> <span class="PreProc">return</span>
<span id="L615" class="LineNr">615 </span> <span class="Delimiter">}</span>
<span id="L616" class="LineNr">616 </span> <span class="muComment"># insert more parens based on indentation</span>
<span id="L617" class="LineNr">617 </span> <span class="PreProc">var</span> parenthesized-tokens-storage: (stream <a href='tokenize.mu.html#L3'>token</a> <span class="Constant">0x400</span>)
<span id="L618" class="LineNr">618 </span> <span class="PreProc">var</span> parenthesized-tokens/<span class="muRegEcx">ecx</span>: (addr stream <a href='tokenize.mu.html#L3'>token</a>) <span class="Special">&lt;-</span> address parenthesized-tokens-storage
<span id="L619" class="LineNr">619 </span> <a href='parenthesize.mu.html#L15'>parenthesize</a> tokens, parenthesized-tokens, trace
<span id="L620" class="LineNr">620 </span> <span class="PreProc">var</span> error?/eax: boolean <span class="Special">&lt;-</span> <a href='trace.mu.html#L94'>has-errors?</a> trace
<span id="L621" class="LineNr">621 </span> compare error?, <span class="Constant">0</span>/false
<span id="L622" class="LineNr">622 </span> <span class="Delimiter">{</span>
<span id="L623" class="LineNr">623 </span> <span class="PreProc">break-if-=</span>
<span id="L624" class="LineNr">624 </span> <a href='trace.mu.html#L379'>dump-trace</a> trace
<span id="L625" class="LineNr">625 </span> <span class="PreProc">return</span>
<span id="L626" class="LineNr">626 </span> <span class="Delimiter">}</span>
<span id="L627" class="LineNr">627 </span> <a href='parse.mu.html#L1'>parse-input</a> parenthesized-tokens, out, trace
<span id="L628" class="LineNr">628 </span><span class="Delimiter">}</span>
<span id="L575" class="LineNr">575 </span><span class="muComment"># helpers for tests</span>
<span id="L576" class="LineNr">576 </span>
<span id="L577" class="LineNr">577 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='infix.mu.html#L577'>check-infix</a></span> actual: (addr array byte), expected: (addr array byte), message: (addr array byte) <span class="Delimiter">{</span>
<span id="L578" class="LineNr">578 </span> <span class="PreProc">var</span> trace-storage: trace
<span id="L579" class="LineNr">579 </span> <span class="PreProc">var</span> trace/<span class="muRegEdx">edx</span>: (addr trace) <span class="Special">&lt;-</span> address trace-storage
<span id="L580" class="LineNr">580 </span><span class="CommentedCode">#? initialize-trace trace, 1/only-errors, 0x10/capacity, 0/visible</span>
<span id="L581" class="LineNr">581 </span> <a href='trace.mu.html#L61'>initialize-trace</a> trace, <span class="Constant">0x10</span>/levels, <span class="Constant">0x1000</span>/capacity, <span class="Constant">0</span>/visible
<span id="L582" class="LineNr">582 </span> <span class="muComment">#</span>
<span id="L583" class="LineNr">583 </span> <span class="PreProc">var</span> actual-buffer-storage: <a href='../514gap-buffer.mu.html#L3'>gap-buffer</a>
<span id="L584" class="LineNr">584 </span> <span class="PreProc">var</span> actual-buffer/eax: (addr <a href='../514gap-buffer.mu.html#L3'>gap-buffer</a>) <span class="Special">&lt;-</span> address actual-buffer-storage
<span id="L585" class="LineNr">585 </span> <a href='../514gap-buffer.mu.html#L53'>initialize-gap-buffer-with</a> actual-buffer, actual
<span id="L586" class="LineNr">586 </span> <span class="PreProc">var</span> actual-tree-h: (handle <a href='cell.mu.html#L1'>cell</a>)
<span id="L587" class="LineNr">587 </span> <span class="PreProc">var</span> actual-tree-ah/<span class="muRegEsi">esi</span>: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> address actual-tree-h
<span id="L588" class="LineNr">588 </span> <a href='read.mu.html#L1'>read-cell</a> actual-buffer, actual-tree-ah, trace
<span id="L589" class="LineNr">589 </span><span class="CommentedCode">#? dump-trace-with-label trace, &quot;infix&quot;</span>
<span id="L590" class="LineNr">590 </span><span class="CommentedCode">#? dump-cell-from-cursor-over-full-screen actual-tree-ah, 7/fg 0/bg</span>
<span id="L591" class="LineNr">591 </span> <span class="PreProc">var</span> _actual-tree/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *actual-tree-ah
<span id="L592" class="LineNr">592 </span> <span class="PreProc">var</span> actual-tree/<span class="muRegEsi">esi</span>: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _actual-tree
<span id="L593" class="LineNr">593 </span> <span class="muComment">#</span>
<span id="L594" class="LineNr">594 </span> <span class="PreProc">var</span> expected-buffer-storage: <a href='../514gap-buffer.mu.html#L3'>gap-buffer</a>
<span id="L595" class="LineNr">595 </span> <span class="PreProc">var</span> expected-buffer/eax: (addr <a href='../514gap-buffer.mu.html#L3'>gap-buffer</a>) <span class="Special">&lt;-</span> address expected-buffer-storage
<span id="L596" class="LineNr">596 </span> <a href='../514gap-buffer.mu.html#L53'>initialize-gap-buffer-with</a> expected-buffer, expected
<span id="L597" class="LineNr">597 </span> <span class="PreProc">var</span> expected-tree-h: (handle <a href='cell.mu.html#L1'>cell</a>)
<span id="L598" class="LineNr">598 </span> <span class="PreProc">var</span> expected-tree-ah/<span class="muRegEdi">edi</span>: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> address expected-tree-h
<span id="L599" class="LineNr">599 </span> <a href='infix.mu.html#L606'>read-without-infix</a> expected-buffer, expected-tree-ah, trace
<span id="L600" class="LineNr">600 </span> <span class="PreProc">var</span> expected-tree/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *expected-tree-ah
<span id="L601" class="LineNr">601 </span> <span class="muComment">#</span>
<span id="L602" class="LineNr">602 </span> <span class="PreProc">var</span> match?/eax: boolean <span class="Special">&lt;-</span> <a href='evaluate.mu.html#L1293'>cell-isomorphic?</a> actual-tree, expected-tree, trace
<span id="L603" class="LineNr">603 </span> <a href='../502test.mu.html#L19'>check</a> match?, message
<span id="L604" class="LineNr">604 </span><span class="Delimiter">}</span>
<span id="L605" class="LineNr">605 </span>
<span id="L606" class="LineNr">606 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='infix.mu.html#L606'>read-without-infix</a></span> in: (addr <a href='../514gap-buffer.mu.html#L3'>gap-buffer</a>), out: (addr handle <a href='cell.mu.html#L1'>cell</a>), trace: (addr trace) <span class="Delimiter">{</span>
<span id="L607" class="LineNr">607 </span> <span class="muComment"># eagerly tokenize everything so that the phases are easier to see in the trace</span>
<span id="L608" class="LineNr">608 </span> <span class="PreProc">var</span> tokens-storage: (stream <a href='tokenize.mu.html#L3'>token</a> <span class="Constant">0x400</span>)
<span id="L609" class="LineNr">609 </span> <span class="PreProc">var</span> tokens/<span class="muRegEdx">edx</span>: (addr stream <a href='tokenize.mu.html#L3'>token</a>) <span class="Special">&lt;-</span> address tokens-storage
<span id="L610" class="LineNr">610 </span> <a href='tokenize.mu.html#L13'>tokenize</a> in, tokens, trace
<span id="L611" class="LineNr">611 </span> <span class="PreProc">var</span> error?/eax: boolean <span class="Special">&lt;-</span> <a href='trace.mu.html#L94'>has-errors?</a> trace
<span id="L612" class="LineNr">612 </span> compare error?, <span class="Constant">0</span>/false
<span id="L613" class="LineNr">613 </span> <span class="Delimiter">{</span>
<span id="L614" class="LineNr">614 </span> <span class="PreProc">break-if-=</span>
<span id="L615" class="LineNr">615 </span> <a href='trace.mu.html#L379'>dump-trace</a> trace
<span id="L616" class="LineNr">616 </span> <span class="PreProc">return</span>
<span id="L617" class="LineNr">617 </span> <span class="Delimiter">}</span>
<span id="L618" class="LineNr">618 </span> <span class="muComment"># insert more parens based on indentation</span>
<span id="L619" class="LineNr">619 </span> <span class="PreProc">var</span> parenthesized-tokens-storage: (stream <a href='tokenize.mu.html#L3'>token</a> <span class="Constant">0x400</span>)
<span id="L620" class="LineNr">620 </span> <span class="PreProc">var</span> parenthesized-tokens/<span class="muRegEcx">ecx</span>: (addr stream <a href='tokenize.mu.html#L3'>token</a>) <span class="Special">&lt;-</span> address parenthesized-tokens-storage
<span id="L621" class="LineNr">621 </span> <a href='parenthesize.mu.html#L15'>parenthesize</a> tokens, parenthesized-tokens, trace
<span id="L622" class="LineNr">622 </span> <span class="PreProc">var</span> error?/eax: boolean <span class="Special">&lt;-</span> <a href='trace.mu.html#L94'>has-errors?</a> trace
<span id="L623" class="LineNr">623 </span> compare error?, <span class="Constant">0</span>/false
<span id="L624" class="LineNr">624 </span> <span class="Delimiter">{</span>
<span id="L625" class="LineNr">625 </span> <span class="PreProc">break-if-=</span>
<span id="L626" class="LineNr">626 </span> <a href='trace.mu.html#L379'>dump-trace</a> trace
<span id="L627" class="LineNr">627 </span> <span class="PreProc">return</span>
<span id="L628" class="LineNr">628 </span> <span class="Delimiter">}</span>
<span id="L629" class="LineNr">629 </span> <a href='parse.mu.html#L1'>parse-input</a> parenthesized-tokens, out, trace
<span id="L630" class="LineNr">630 </span><span class="Delimiter">}</span>
</pre>
</body>
</html>

View File

@ -1,33 +1,33 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - shell/int-stack.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.muRegEcx { color: #870000; }
.muRegEdx { color: #af5f00; }
.LineNr { }
.Constant { color: #008787; }
.muRegEsi { color: #005faf; }
.muRegEdi { color: #00af00; }
.Constant { color: #008787; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muRegEcx { color: #870000; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.Special { color: #ff6060; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -76,7 +76,7 @@ if ('onhashchange' in window) {
<span id="L15" class="LineNr">15 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr <a href='int-stack.mu.html#L1'>int-stack</a>) <span class="Special">&lt;-</span> copy _self
<span id="L16" class="LineNr">16 </span> <span class="PreProc">var</span> top-addr/<span class="muRegEcx">ecx</span>: (addr int) <span class="Special">&lt;-</span> get self, top
<span id="L17" class="LineNr">17 </span> <span class="PreProc">var</span> data-ah/<span class="muRegEdx">edx</span>: (addr handle array int) <span class="Special">&lt;-</span> get self, data
<span id="L18" class="LineNr">18 </span> <span class="PreProc">var</span> data/eax: (addr array int) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *data-ah
<span id="L18" class="LineNr">18 </span> <span class="PreProc">var</span> data/eax: (addr array int) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *data-ah
<span id="L19" class="LineNr">19 </span> <span class="PreProc">var</span> top/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy *top-addr
<span id="L20" class="LineNr">20 </span> <span class="PreProc">var</span> dest-addr/<span class="muRegEdx">edx</span>: (addr int) <span class="Special">&lt;-</span> index data, top
<span id="L21" class="LineNr">21 </span> <span class="PreProc">var</span> val/eax: int <span class="Special">&lt;-</span> copy _val
@ -94,7 +94,7 @@ if ('onhashchange' in window) {
<span id="L33" class="LineNr">33 </span> <span class="Delimiter">}</span>
<span id="L34" class="LineNr">34 </span> subtract-from *top-addr, <span class="Constant">1</span>
<span id="L35" class="LineNr">35 </span> <span class="PreProc">var</span> data-ah/<span class="muRegEdx">edx</span>: (addr handle array int) <span class="Special">&lt;-</span> get self, data
<span id="L36" class="LineNr">36 </span> <span class="PreProc">var</span> data/eax: (addr array int) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *data-ah
<span id="L36" class="LineNr">36 </span> <span class="PreProc">var</span> data/eax: (addr array int) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *data-ah
<span id="L37" class="LineNr">37 </span> <span class="PreProc">var</span> top/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy *top-addr
<span id="L38" class="LineNr">38 </span> <span class="PreProc">var</span> result-addr/eax: (addr int) <span class="Special">&lt;-</span> index data, top
<span id="L39" class="LineNr">39 </span> <span class="PreProc">var</span> val/eax: int <span class="Special">&lt;-</span> copy *result-addr
@ -123,7 +123,7 @@ if ('onhashchange' in window) {
<span id="L62" class="LineNr">62 </span> <span class="Delimiter">}</span>
<span id="L63" class="LineNr">63 </span> top <span class="Special">&lt;-</span> decrement
<span id="L64" class="LineNr">64 </span> <span class="PreProc">var</span> data-ah/<span class="muRegEdx">edx</span>: (addr handle array int) <span class="Special">&lt;-</span> get self, data
<span id="L65" class="LineNr">65 </span> <span class="PreProc">var</span> data/eax: (addr array int) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *data-ah
<span id="L65" class="LineNr">65 </span> <span class="PreProc">var</span> data/eax: (addr array int) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *data-ah
<span id="L66" class="LineNr">66 </span> <span class="PreProc">var</span> result-addr/eax: (addr int) <span class="Special">&lt;-</span> index data, top
<span id="L67" class="LineNr">67 </span> <span class="PreProc">var</span> val/eax: int <span class="Special">&lt;-</span> copy *result-addr
<span id="L68" class="LineNr">68 </span> <span class="PreProc">return</span> val

File diff suppressed because it is too large Load Diff

View File

@ -1,31 +1,31 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - shell/main.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.LineNr { }
.muRegEsi { color: #005faf; }
.Constant { color: #008787; }
.muFunction { color: #af5f00; text-decoration: underline; }
.Delimiter { color: #c000c0; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
.LineNr { }
.Constant { color: #008787; }
.muRegEsi { color: #005faf; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muComment { color: #005faf; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -64,7 +64,7 @@ if ('onhashchange' in window) {
<span id="L5" class="LineNr"> 5 </span> <span class="PreProc">var</span> env-storage: <a href='environment.mu.html#L8'>environment</a>
<span id="L6" class="LineNr"> 6 </span> <span class="PreProc">var</span> env/<span class="muRegEsi">esi</span>: (addr <a href='environment.mu.html#L8'>environment</a>) <span class="Special">&lt;-</span> address env-storage
<span id="L7" class="LineNr"> 7 </span> <a href='environment.mu.html#L103'>initialize-environment</a> env, <span class="Constant">0x20</span>/fake-screen-width, <span class="Constant">8</span>/fake-screen-height
<span id="L8" class="LineNr"> 8 </span> <a href='environment.mu.html#L935'>load-state</a> env, data-disk
<span id="L8" class="LineNr"> 8 </span> <a href='environment.mu.html#L950'>load-state</a> env, data-disk
<span id="L9" class="LineNr"> 9 </span> $main:<span class="PreProc">loop</span>: <span class="Delimiter">{</span>
<span id="L10" class="LineNr">10 </span> <a href='environment.mu.html#L115'>render-environment</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, env
<span id="L11" class="LineNr">11 </span> <span class="muComment"># no way to quit right now; just reboot</span>

View File

@ -1,14 +1,14 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - shell/parenthesize.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
@ -16,8 +16,7 @@ a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.LineNr { }
.Delimiter { color: #c000c0; }
.muRegEcx { color: #870000; }
.muRegEdx { color: #af5f00; }
.CommentedCode { color: #8a8a8a; }
.muRegEbx { color: #5f00ff; }
.muRegEsi { color: #005faf; }
.muRegEdi { color: #00af00; }
@ -28,11 +27,12 @@ a { color:inherit; }
.muTest { color: #5f8700; }
.muComment { color: #005faf; }
.muS1Comment { color: #0000af; }
.CommentedCode { color: #8a8a8a; }
.muRegEcx { color: #870000; }
.muRegEdx { color: #af5f00; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -103,7 +103,7 @@ if ('onhashchange' in window) {
<span id="L37" class="LineNr"> 37 </span><span class="CommentedCode">#? dump-token-from-cursor curr-token</span>
<span id="L38" class="LineNr"> 38 </span> <span class="muComment"># update state</span>
<span id="L39" class="LineNr"> 39 </span> <span class="Delimiter">{</span>
<span id="L40" class="LineNr"> 40 </span> <span class="PreProc">var</span> is-indent?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L1011'>indent-token?</a> curr-token
<span id="L40" class="LineNr"> 40 </span> <span class="PreProc">var</span> is-indent?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L1132'>indent-token?</a> curr-token
<span id="L41" class="LineNr"> 41 </span> compare is-indent?, <span class="Constant">0</span>/false
<span id="L42" class="LineNr"> 42 </span> <span class="PreProc">break-if-=</span>
<span id="L43" class="LineNr"> 43 </span> copy-to num-words-in-line, <span class="Constant">0</span>
@ -120,7 +120,7 @@ if ('onhashchange' in window) {
<span id="L54" class="LineNr"> 54 </span> <span class="Delimiter">{</span>
<span id="L55" class="LineNr"> 55 </span> compare num-words-in-line, <span class="Constant">0</span>
<span id="L56" class="LineNr"> 56 </span> <span class="PreProc">break-if-!=</span>
<span id="L57" class="LineNr"> 57 </span> <span class="PreProc">var</span> is-open?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L931'>open-paren-token?</a> curr-token
<span id="L57" class="LineNr"> 57 </span> <span class="PreProc">var</span> is-open?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L1052'>open-paren-token?</a> curr-token
<span id="L58" class="LineNr"> 58 </span> compare is-open?, <span class="Constant">0</span>/false
<span id="L59" class="LineNr"> 59 </span> <span class="PreProc">break-if-=</span>
<span id="L60" class="LineNr"> 60 </span> copy-to paren-at-start-of-line?, <span class="Constant">1</span>/true
@ -135,7 +135,7 @@ if ('onhashchange' in window) {
<span id="L69" class="LineNr"> 69 </span> <span class="PreProc">break</span> $parenthesize:<a href='parenthesize.mu.html#L196'>emit</a>
<span id="L70" class="LineNr"> 70 </span> <span class="Delimiter">}</span>
<span id="L71" class="LineNr"> 71 </span> <span class="Delimiter">{</span>
<span id="L72" class="LineNr"> 72 </span> <span class="PreProc">var</span> is-indent?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L1011'>indent-token?</a> curr-token
<span id="L72" class="LineNr"> 72 </span> <span class="PreProc">var</span> is-indent?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L1132'>indent-token?</a> curr-token
<span id="L73" class="LineNr"> 73 </span> compare is-indent?, <span class="Constant">0</span>/false
<span id="L74" class="LineNr"> 74 </span> <span class="PreProc">break-if-=</span>
<span id="L75" class="LineNr"> 75 </span><span class="CommentedCode">#? draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen &quot;B&quot;, 7/fg 0/bg</span>
@ -160,14 +160,14 @@ if ('onhashchange' in window) {
<span id="L94" class="LineNr"> 94 </span><span class="CommentedCode">#? draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen &quot;(\n&quot;, 7/fg 0/bg</span>
<span id="L95" class="LineNr"> 95 </span> <span class="PreProc">var</span> paren-storage: <a href='tokenize.mu.html#L3'>token</a>
<span id="L96" class="LineNr"> 96 </span> <span class="PreProc">var</span> paren-token/eax: (addr <a href='tokenize.mu.html#L3'>token</a>) <span class="Special">&lt;-</span> address paren-storage
<span id="L97" class="LineNr"> 97 </span> <a href='tokenize.mu.html#L1030'>initialize-token</a> paren-token, <span class="Constant">&quot;(&quot;</span>
<span id="L97" class="LineNr"> 97 </span> <a href='tokenize.mu.html#L1151'>initialize-token</a> paren-token, <span class="Constant">&quot;(&quot;</span>
<span id="L98" class="LineNr"> 98 </span> <a href='../309stream.subx.html#L54'>write-to-stream</a> out, paren-token
<span id="L99" class="LineNr"> 99 </span> <a href='int-stack.mu.html#L14'>push-int-stack</a> implicit-open-parens, curr-line-indent
<span id="L100" class="LineNr">100 </span> <span class="Delimiter">}</span>
<span id="L101" class="LineNr">101 </span> <a href='parenthesize.mu.html#L176'>emit-all</a> buffer, curr-token, out, explicit-open-parens
<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="PreProc">var</span> is-indent?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L1011'>indent-token?</a> curr-token
<span id="L104" class="LineNr">104 </span> <span class="PreProc">var</span> is-indent?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L1132'>indent-token?</a> curr-token
<span id="L105" class="LineNr">105 </span> compare is-indent?, <span class="Constant">0</span>/false
<span id="L106" class="LineNr">106 </span> <span class="PreProc">break-if-=</span>
<span id="L107" class="LineNr">107 </span> <span class="Delimiter">{</span>
@ -181,7 +181,7 @@ if ('onhashchange' in window) {
<span id="L115" class="LineNr">115 </span> <span class="muS1Comment"># . loop body</span>
<span id="L116" class="LineNr">116 </span> <span class="PreProc">var</span> paren-storage: <a href='tokenize.mu.html#L3'>token</a>
<span id="L117" class="LineNr">117 </span> <span class="PreProc">var</span> paren-token/eax: (addr <a href='tokenize.mu.html#L3'>token</a>) <span class="Special">&lt;-</span> address paren-storage
<span id="L118" class="LineNr">118 </span> <a href='tokenize.mu.html#L1030'>initialize-token</a> paren-token, <span class="Constant">&quot;)&quot;</span>
<span id="L118" class="LineNr">118 </span> <a href='tokenize.mu.html#L1151'>initialize-token</a> paren-token, <span class="Constant">&quot;)&quot;</span>
<span id="L119" class="LineNr">119 </span> <a href='../309stream.subx.html#L54'>write-to-stream</a> out, paren-token
<span id="L120" class="LineNr">120 </span> <span class="muS1Comment"># . update</span>
<span id="L121" class="LineNr">121 </span> <span class="PreProc">var</span> dummy/eax: int <span class="Special">&lt;-</span> <a href='int-stack.mu.html#L26'>pop-int-stack</a> implicit-open-parens
@ -199,7 +199,7 @@ if ('onhashchange' in window) {
<span id="L133" class="LineNr">133 </span> <span class="muS1Comment"># . loop body</span>
<span id="L134" class="LineNr">134 </span> <span class="PreProc">var</span> paren-storage: <a href='tokenize.mu.html#L3'>token</a>
<span id="L135" class="LineNr">135 </span> <span class="PreProc">var</span> paren-token/eax: (addr <a href='tokenize.mu.html#L3'>token</a>) <span class="Special">&lt;-</span> address paren-storage
<span id="L136" class="LineNr">136 </span> <a href='tokenize.mu.html#L1030'>initialize-token</a> paren-token, <span class="Constant">&quot;)&quot;</span>
<span id="L136" class="LineNr">136 </span> <a href='tokenize.mu.html#L1151'>initialize-token</a> paren-token, <span class="Constant">&quot;)&quot;</span>
<span id="L137" class="LineNr">137 </span> <a href='../309stream.subx.html#L54'>write-to-stream</a> out, paren-token
<span id="L138" class="LineNr">138 </span> <span class="muS1Comment"># . update</span>
<span id="L139" class="LineNr">139 </span> <span class="PreProc">var</span> dummy/eax: int <span class="Special">&lt;-</span> <a href='int-stack.mu.html#L26'>pop-int-stack</a> implicit-open-parens
@ -216,22 +216,22 @@ if ('onhashchange' in window) {
<span id="L150" class="LineNr">150 </span>
<span id="L151" class="LineNr">151 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='parenthesize.mu.html#L151'>word-token?</a></span> in: (addr <a href='tokenize.mu.html#L3'>token</a>)<span class="PreProc"> -&gt; </span>_/eax: boolean <span class="Delimiter">{</span>
<span id="L152" class="LineNr">152 </span> <span class="Delimiter">{</span>
<span id="L153" class="LineNr">153 </span> <span class="PreProc">var</span> is-indent?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L1011'>indent-token?</a> in
<span id="L153" class="LineNr">153 </span> <span class="PreProc">var</span> is-indent?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L1132'>indent-token?</a> in
<span id="L154" class="LineNr">154 </span> compare is-indent?, <span class="Constant">0</span>/false
<span id="L155" class="LineNr">155 </span> <span class="PreProc">break-if-!=</span>
<span id="L156" class="LineNr">156 </span> <span class="PreProc">var</span> is-bracket?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L878'>bracket-token?</a> in <span class="muComment"># overzealously checks for [], but shouldn't ever encounter it</span>
<span id="L156" class="LineNr">156 </span> <span class="PreProc">var</span> is-bracket?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L999'>bracket-token?</a> in <span class="muComment"># overzealously checks for [], but shouldn't ever encounter it</span>
<span id="L157" class="LineNr">157 </span> compare is-bracket?, <span class="Constant">0</span>/false
<span id="L158" class="LineNr">158 </span> <span class="PreProc">break-if-!=</span>
<span id="L159" class="LineNr">159 </span> <span class="PreProc">var</span> is-quote?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L895'>quote-token?</a> in
<span id="L159" class="LineNr">159 </span> <span class="PreProc">var</span> is-quote?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L1016'>quote-token?</a> in
<span id="L160" class="LineNr">160 </span> compare is-quote?, <span class="Constant">0</span>/false
<span id="L161" class="LineNr">161 </span> <span class="PreProc">break-if-!=</span>
<span id="L162" class="LineNr">162 </span> <span class="PreProc">var</span> is-backquote?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L904'>backquote-token?</a> in
<span id="L162" class="LineNr">162 </span> <span class="PreProc">var</span> is-backquote?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L1025'>backquote-token?</a> in
<span id="L163" class="LineNr">163 </span> compare is-backquote?, <span class="Constant">0</span>/false
<span id="L164" class="LineNr">164 </span> <span class="PreProc">break-if-!=</span>
<span id="L165" class="LineNr">165 </span> <span class="PreProc">var</span> is-unquote?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L913'>unquote-token?</a> in
<span id="L165" class="LineNr">165 </span> <span class="PreProc">var</span> is-unquote?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L1034'>unquote-token?</a> in
<span id="L166" class="LineNr">166 </span> compare is-unquote?, <span class="Constant">0</span>/false
<span id="L167" class="LineNr">167 </span> <span class="PreProc">break-if-!=</span>
<span id="L168" class="LineNr">168 </span> <span class="PreProc">var</span> is-unquote-splice?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L922'>unquote-splice-token?</a> in
<span id="L168" class="LineNr">168 </span> <span class="PreProc">var</span> is-unquote-splice?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L1043'>unquote-splice-token?</a> in
<span id="L169" class="LineNr">169 </span> compare is-unquote-splice?, <span class="Constant">0</span>/false
<span id="L170" class="LineNr">170 </span> <span class="PreProc">break-if-!=</span>
<span id="L171" class="LineNr">171 </span> <span class="PreProc">return</span> <span class="Constant">1</span>/true
@ -261,7 +261,7 @@ if ('onhashchange' in window) {
<span id="L195" class="LineNr">195 </span>
<span id="L196" class="LineNr">196 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='parenthesize.mu.html#L196'>emit</a></span> t: (addr <a href='tokenize.mu.html#L3'>token</a>), out: (addr stream <a href='tokenize.mu.html#L3'>token</a>), explicit-open-parens: (addr int) <span class="Delimiter">{</span>
<span id="L197" class="LineNr">197 </span> <span class="Delimiter">{</span>
<span id="L198" class="LineNr">198 </span> <span class="PreProc">var</span> is-indent?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L1011'>indent-token?</a> t
<span id="L198" class="LineNr">198 </span> <span class="PreProc">var</span> is-indent?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L1132'>indent-token?</a> t
<span id="L199" class="LineNr">199 </span> compare is-indent?, <span class="Constant">0</span>/false
<span id="L200" class="LineNr">200 </span> <span class="PreProc">break-if-=</span>
<span id="L201" class="LineNr">201 </span> <span class="PreProc">return</span>
@ -269,13 +269,13 @@ if ('onhashchange' in window) {
<span id="L203" class="LineNr">203 </span> <a href='../309stream.subx.html#L54'>write-to-stream</a> out, t
<span id="L204" class="LineNr">204 </span> <span class="PreProc">var</span> explicit-open-parens/<span class="muRegEdi">edi</span>: (addr int) <span class="Special">&lt;-</span> copy explicit-open-parens
<span id="L205" class="LineNr">205 </span> <span class="Delimiter">{</span>
<span id="L206" class="LineNr">206 </span> <span class="PreProc">var</span> is-open?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L931'>open-paren-token?</a> t
<span id="L206" class="LineNr">206 </span> <span class="PreProc">var</span> is-open?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L1052'>open-paren-token?</a> t
<span id="L207" class="LineNr">207 </span> compare is-open?, <span class="Constant">0</span>/false
<span id="L208" class="LineNr">208 </span> <span class="PreProc">break-if-=</span>
<span id="L209" class="LineNr">209 </span> increment *explicit-open-parens
<span id="L210" class="LineNr">210 </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="PreProc">var</span> is-close?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L947'>close-paren-token?</a> t
<span id="L212" class="LineNr">212 </span> <span class="PreProc">var</span> is-close?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L1068'>close-paren-token?</a> t
<span id="L213" class="LineNr">213 </span> compare is-close?, <span class="Constant">0</span>/false
<span id="L214" class="LineNr">214 </span> <span class="PreProc">break-if-=</span>
<span id="L215" class="LineNr">215 </span> decrement *explicit-open-parens
@ -296,11 +296,11 @@ if ('onhashchange' in window) {
<span id="L230" class="LineNr">230 </span> <span class="PreProc">var</span> <a href='tokenize.mu.html#L3'>token</a>/<span class="muRegEdx">edx</span>: (addr <a href='tokenize.mu.html#L3'>token</a>) <span class="Special">&lt;-</span> address token-storage
<span id="L231" class="LineNr">231 </span> <a href='../309stream.subx.html#L104'>read-from-stream</a> in, <a href='tokenize.mu.html#L3'>token</a>
<span id="L232" class="LineNr">232 </span> <span class="muComment"># skip tokens should be skipped</span>
<span id="L233" class="LineNr">233 </span> <span class="PreProc">var</span> is-skip?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L1000'>skip-token?</a> <a href='tokenize.mu.html#L3'>token</a>
<span id="L233" class="LineNr">233 </span> <span class="PreProc">var</span> is-skip?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L1121'>skip-token?</a> <a href='tokenize.mu.html#L3'>token</a>
<span id="L234" class="LineNr">234 </span> compare is-skip?, <span class="Constant">0</span>/false
<span id="L235" class="LineNr">235 </span> <span class="PreProc">loop-if-!=</span>
<span id="L236" class="LineNr">236 </span> <span class="muComment"># indent tokens should be skipped</span>
<span id="L237" class="LineNr">237 </span> <span class="PreProc">var</span> is-indent?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L1011'>indent-token?</a> <a href='tokenize.mu.html#L3'>token</a>
<span id="L237" class="LineNr">237 </span> <span class="PreProc">var</span> is-indent?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L1132'>indent-token?</a> <a href='tokenize.mu.html#L3'>token</a>
<span id="L238" class="LineNr">238 </span> compare is-indent?, <span class="Constant">0</span>/false
<span id="L239" class="LineNr">239 </span> <span class="PreProc">loop-if-!=</span>
<span id="L240" class="LineNr">240 </span> <span class="muComment">#</span>
@ -375,16 +375,16 @@ if ('onhashchange' in window) {
<span id="L309" class="LineNr">309 </span> <span class="PreProc">var</span> trace/<span class="muRegEdx">edx</span>: (addr trace) <span class="Special">&lt;-</span> address trace-storage
<span id="L310" class="LineNr">310 </span> <a href='trace.mu.html#L61'>initialize-trace</a> trace, <span class="Constant">1</span>/only-errors, <span class="Constant">0x10</span>/capacity, <span class="Constant">0</span>/visible
<span id="L311" class="LineNr">311 </span> <span class="muComment">#</span>
<span id="L312" class="LineNr">312 </span> <span class="PreProc">var</span> actual-buffer-storage: <a href='gap-buffer.mu.html#L3'>gap-buffer</a>
<span id="L313" class="LineNr">313 </span> <span class="PreProc">var</span> actual-buffer/eax: (addr <a href='gap-buffer.mu.html#L3'>gap-buffer</a>) <span class="Special">&lt;-</span> address actual-buffer-storage
<span id="L314" class="LineNr">314 </span> <a href='gap-buffer.mu.html#L53'>initialize-gap-buffer-with</a> actual-buffer, actual
<span id="L312" class="LineNr">312 </span> <span class="PreProc">var</span> actual-buffer-storage: <a href='../514gap-buffer.mu.html#L3'>gap-buffer</a>
<span id="L313" class="LineNr">313 </span> <span class="PreProc">var</span> actual-buffer/eax: (addr <a href='../514gap-buffer.mu.html#L3'>gap-buffer</a>) <span class="Special">&lt;-</span> address actual-buffer-storage
<span id="L314" class="LineNr">314 </span> <a href='../514gap-buffer.mu.html#L53'>initialize-gap-buffer-with</a> actual-buffer, actual
<span id="L315" class="LineNr">315 </span> <span class="PreProc">var</span> actual-tokens-storage: (stream <a href='tokenize.mu.html#L3'>token</a> <span class="Constant">0x40</span>)
<span id="L316" class="LineNr">316 </span> <span class="PreProc">var</span> actual-tokens/<span class="muRegEsi">esi</span>: (addr stream <a href='tokenize.mu.html#L3'>token</a>) <span class="Special">&lt;-</span> address actual-tokens-storage
<span id="L317" class="LineNr">317 </span> <a href='parenthesize.mu.html#L383'>tokenize-and-parenthesize</a> actual-buffer, actual-tokens, trace
<span id="L318" class="LineNr">318 </span> <span class="muComment">#</span>
<span id="L319" class="LineNr">319 </span> <span class="PreProc">var</span> expected-buffer-storage: <a href='gap-buffer.mu.html#L3'>gap-buffer</a>
<span id="L320" class="LineNr">320 </span> <span class="PreProc">var</span> expected-buffer/eax: (addr <a href='gap-buffer.mu.html#L3'>gap-buffer</a>) <span class="Special">&lt;-</span> address expected-buffer-storage
<span id="L321" class="LineNr">321 </span> <a href='gap-buffer.mu.html#L53'>initialize-gap-buffer-with</a> expected-buffer, expected
<span id="L319" class="LineNr">319 </span> <span class="PreProc">var</span> expected-buffer-storage: <a href='../514gap-buffer.mu.html#L3'>gap-buffer</a>
<span id="L320" class="LineNr">320 </span> <span class="PreProc">var</span> expected-buffer/eax: (addr <a href='../514gap-buffer.mu.html#L3'>gap-buffer</a>) <span class="Special">&lt;-</span> address expected-buffer-storage
<span id="L321" class="LineNr">321 </span> <a href='../514gap-buffer.mu.html#L53'>initialize-gap-buffer-with</a> expected-buffer, expected
<span id="L322" class="LineNr">322 </span> <span class="PreProc">var</span> expected-tokens-storage: (stream <a href='tokenize.mu.html#L3'>token</a> <span class="Constant">0x40</span>)
<span id="L323" class="LineNr">323 </span> <span class="PreProc">var</span> expected-tokens/<span class="muRegEdi">edi</span>: (addr stream <a href='tokenize.mu.html#L3'>token</a>) <span class="Special">&lt;-</span> address expected-tokens-storage
<span id="L324" class="LineNr">324 </span> <a href='parenthesize.mu.html#L396'>tokenize-salient</a> expected-buffer, expected-tokens, trace
@ -407,12 +407,12 @@ if ('onhashchange' in window) {
<span id="L341" class="LineNr">341 </span> <span class="Delimiter">{</span>
<span id="L342" class="LineNr">342 </span> <span class="PreProc">break-if-!=</span>
<span id="L343" class="LineNr">343 </span> <span class="muComment"># actual empty, but expected not empty</span>
<span id="L344" class="LineNr">344 </span> <a href='../501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, message, <span class="Constant">3</span>/fg=cyan <span class="Constant">0</span>/bg
<span id="L345" class="LineNr">345 </span> <a href='../501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;: too short\n&quot;</span>, <span class="Constant">3</span>/fg=cyan <span class="Constant">0</span>/bg
<span id="L344" class="LineNr">344 </span> <a href='../501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, message, <span class="Constant">3</span>/fg=cyan <span class="Constant">0</span>/bg
<span id="L345" class="LineNr">345 </span> <a href='../501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;: too short\n&quot;</span>, <span class="Constant">3</span>/fg=cyan <span class="Constant">0</span>/bg
<span id="L346" class="LineNr">346 </span> <a href='../104test.subx.html#L5'>count-test-failure</a>
<span id="L347" class="LineNr">347 </span> <span class="PreProc">return</span>
<span id="L348" class="LineNr">348 </span> <span class="Delimiter">}</span>
<span id="L349" class="LineNr">349 </span> <a href='../501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;.&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L349" class="LineNr">349 </span> <a href='../501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;.&quot;</span>, <span class="Constant">3</span>/fg/cyan, <span class="Constant">0</span>/bg
<span id="L350" class="LineNr">350 </span> <span class="PreProc">return</span>
<span id="L351" class="LineNr">351 </span> <span class="Delimiter">}</span>
<span id="L352" class="LineNr">352 </span> <span class="PreProc">var</span> expected-done?/eax: boolean <span class="Special">&lt;-</span> <a href='../309stream.subx.html#L6'>stream-empty?</a> expected
@ -420,8 +420,8 @@ if ('onhashchange' in window) {
<span id="L354" class="LineNr">354 </span> <span class="Delimiter">{</span>
<span id="L355" class="LineNr">355 </span> <span class="PreProc">break-if-=</span>
<span id="L356" class="LineNr">356 </span> <span class="muComment"># actual not empty, but expected empty</span>
<span id="L357" class="LineNr">357 </span> <a href='../501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, message, <span class="Constant">3</span>/fg=cyan <span class="Constant">0</span>/bg
<span id="L358" class="LineNr">358 </span> <a href='../501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;: too long\n&quot;</span>, <span class="Constant">3</span>/fg=cyan <span class="Constant">0</span>/bg
<span id="L357" class="LineNr">357 </span> <a href='../501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, message, <span class="Constant">3</span>/fg=cyan <span class="Constant">0</span>/bg
<span id="L358" class="LineNr">358 </span> <a href='../501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, <span class="Constant">&quot;: too long\n&quot;</span>, <span class="Constant">3</span>/fg=cyan <span class="Constant">0</span>/bg
<span id="L359" class="LineNr">359 </span> <a href='../104test.subx.html#L5'>count-test-failure</a>
<span id="L360" class="LineNr">360 </span> <span class="PreProc">return</span>
<span id="L361" class="LineNr">361 </span> <span class="Delimiter">}</span>
@ -434,11 +434,11 @@ if ('onhashchange' in window) {
<span id="L368" class="LineNr">368 </span> <span class="PreProc">var</span> expected-token/<span class="muRegEdx">edx</span>: (addr <a href='tokenize.mu.html#L3'>token</a>) <span class="Special">&lt;-</span> address expected-token-storage
<span id="L369" class="LineNr">369 </span> <a href='../309stream.subx.html#L104'>read-from-stream</a> expected, expected-token
<span id="L370" class="LineNr">370 </span><span class="CommentedCode">#? dump-token-from-cursor expected-token</span>
<span id="L371" class="LineNr">371 </span> <span class="PreProc">var</span> match?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L1052'>tokens-equal?</a> curr-token, expected-token
<span id="L371" class="LineNr">371 </span> <span class="PreProc">var</span> match?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L1173'>tokens-equal?</a> curr-token, expected-token
<span id="L372" class="LineNr">372 </span> compare match?, <span class="Constant">0</span>/false
<span id="L373" class="LineNr">373 </span> <span class="Delimiter">{</span>
<span id="L374" class="LineNr">374 </span> <span class="PreProc">break-if-!=</span>
<span id="L375" class="LineNr">375 </span> <a href='../501draw-text.mu.html#L279'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, message, <span class="Constant">3</span>/fg=cyan <span class="Constant">0</span>/bg
<span id="L375" class="LineNr">375 </span> <a href='../501draw-text.mu.html#L276'>draw-text-wrapping-right-then-down-from-cursor-over-full-screen</a> <span class="Constant">0</span>/screen, message, <span class="Constant">3</span>/fg=cyan <span class="Constant">0</span>/bg
<span id="L376" class="LineNr">376 </span> <a href='../104test.subx.html#L5'>count-test-failure</a>
<span id="L377" class="LineNr">377 </span> <span class="PreProc">return</span>
<span id="L378" class="LineNr">378 </span> <span class="Delimiter">}</span>
@ -446,7 +446,7 @@ if ('onhashchange' in window) {
<span id="L380" class="LineNr">380 </span> <span class="Delimiter">}</span>
<span id="L381" class="LineNr">381 </span><span class="Delimiter">}</span>
<span id="L382" class="LineNr">382 </span>
<span id="L383" class="LineNr">383 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='parenthesize.mu.html#L383'>tokenize-and-parenthesize</a></span> in: (addr <a href='gap-buffer.mu.html#L3'>gap-buffer</a>), out: (addr stream <a href='tokenize.mu.html#L3'>token</a>), trace: (addr trace) <span class="Delimiter">{</span>
<span id="L383" class="LineNr">383 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='parenthesize.mu.html#L383'>tokenize-and-parenthesize</a></span> in: (addr <a href='../514gap-buffer.mu.html#L3'>gap-buffer</a>), out: (addr stream <a href='tokenize.mu.html#L3'>token</a>), trace: (addr trace) <span class="Delimiter">{</span>
<span id="L384" class="LineNr">384 </span> <span class="PreProc">var</span> tokens-storage: (stream <a href='tokenize.mu.html#L3'>token</a> <span class="Constant">0x400</span>)
<span id="L385" class="LineNr">385 </span> <span class="PreProc">var</span> tokens/<span class="muRegEdx">edx</span>: (addr stream <a href='tokenize.mu.html#L3'>token</a>) <span class="Special">&lt;-</span> address tokens-storage
<span id="L386" class="LineNr">386 </span> <a href='tokenize.mu.html#L13'>tokenize</a> in, tokens, trace
@ -459,7 +459,7 @@ if ('onhashchange' in window) {
<span id="L393" class="LineNr">393 </span> <a href='parenthesize.mu.html#L15'>parenthesize</a> tokens, out, trace
<span id="L394" class="LineNr">394 </span><span class="Delimiter">}</span>
<span id="L395" class="LineNr">395 </span>
<span id="L396" class="LineNr">396 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='parenthesize.mu.html#L396'>tokenize-salient</a></span> in: (addr <a href='gap-buffer.mu.html#L3'>gap-buffer</a>), out: (addr stream <a href='tokenize.mu.html#L3'>token</a>), trace: (addr trace) <span class="Delimiter">{</span>
<span id="L396" class="LineNr">396 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='parenthesize.mu.html#L396'>tokenize-salient</a></span> in: (addr <a href='../514gap-buffer.mu.html#L3'>gap-buffer</a>), out: (addr stream <a href='tokenize.mu.html#L3'>token</a>), trace: (addr trace) <span class="Delimiter">{</span>
<span id="L397" class="LineNr">397 </span> <span class="PreProc">var</span> tokens-storage: (stream <a href='tokenize.mu.html#L3'>token</a> <span class="Constant">0x400</span>)
<span id="L398" class="LineNr">398 </span> <span class="PreProc">var</span> tokens/<span class="muRegEdx">edx</span>: (addr stream <a href='tokenize.mu.html#L3'>token</a>) <span class="Special">&lt;-</span> address tokens-storage
<span id="L399" class="LineNr">399 </span> <a href='tokenize.mu.html#L13'>tokenize</a> in, tokens, trace

116
html/shell/parse.mu.html generated
View File

@ -1,34 +1,34 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - shell/parse.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.muRegEcx { color: #870000; }
.muRegEdx { color: #af5f00; }
.LineNr { }
.muRegEsi { color: #005faf; }
.muRegEdi { color: #00af00; }
.Constant { color: #008787; }
.muFunction { color: #af5f00; text-decoration: underline; }
.Delimiter { color: #c000c0; }
.Special { color: #ff6060; }
.muComment { color: #005faf; }
.Constant { color: #008787; }
.muRegEdi { color: #00af00; }
.muRegEcx { color: #870000; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.Special { color: #ff6060; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -111,15 +111,15 @@ if ('onhashchange' in window) {
<span id="L49" class="LineNr"> 49 </span> <a href='../309stream.subx.html#L104'>read-from-stream</a> tokens, curr-token
<span id="L50" class="LineNr"> 50 </span> $parse-sexpression:type-check: <span class="Delimiter">{</span>
<span id="L51" class="LineNr"> 51 </span> <span class="muComment"># single quote -&gt; parse as list with a special car</span>
<span id="L52" class="LineNr"> 52 </span> <span class="PreProc">var</span> <a href='tokenize.mu.html#L895'>quote-token?</a>/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L895'>quote-token?</a> curr-token
<span id="L53" class="LineNr"> 53 </span> compare <a href='tokenize.mu.html#L895'>quote-token?</a>, <span class="Constant">0</span>/false
<span id="L52" class="LineNr"> 52 </span> <span class="PreProc">var</span> <a href='tokenize.mu.html#L1016'>quote-token?</a>/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L1016'>quote-token?</a> curr-token
<span id="L53" class="LineNr"> 53 </span> compare <a href='tokenize.mu.html#L1016'>quote-token?</a>, <span class="Constant">0</span>/false
<span id="L54" class="LineNr"> 54 </span> <span class="Delimiter">{</span>
<span id="L55" class="LineNr"> 55 </span> <span class="PreProc">break-if-=</span>
<span id="L56" class="LineNr"> 56 </span> <span class="PreProc">var</span> out/<span class="muRegEdi">edi</span>: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out
<span id="L57" class="LineNr"> 57 </span> <a href='cell.mu.html#L102'>allocate-pair</a> out
<span id="L58" class="LineNr"> 58 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *out
<span id="L57" class="LineNr"> 57 </span> <a href='cell.mu.html#L128'>allocate-pair</a> out
<span id="L58" class="LineNr"> 58 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *out
<span id="L59" class="LineNr"> 59 </span> <span class="PreProc">var</span> left-ah/<span class="muRegEdx">edx</span>: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> get out-addr, left
<span id="L60" class="LineNr"> 60 </span> <a href='cell.mu.html#L39'>new-symbol</a> left-ah, <span class="Constant">&quot;'&quot;</span>
<span id="L60" class="LineNr"> 60 </span> <a href='cell.mu.html#L43'>new-symbol</a> left-ah, <span class="Constant">&quot;'&quot;</span>
<span id="L61" class="LineNr"> 61 </span> <span class="PreProc">var</span> right-ah/<span class="muRegEdx">edx</span>: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> get out-addr, right
<span id="L62" class="LineNr"> 62 </span> <span class="PreProc">var</span> close-paren?/eax: boolean <span class="Special">&lt;-</span> copy <span class="Constant">0</span>/false
<span id="L63" class="LineNr"> 63 </span> <span class="PreProc">var</span> dot?/<span class="muRegEcx">ecx</span>: boolean <span class="Special">&lt;-</span> copy <span class="Constant">0</span>/false
@ -128,15 +128,15 @@ if ('onhashchange' in window) {
<span id="L66" class="LineNr"> 66 </span> <span class="PreProc">return</span> close-paren?, dot?
<span id="L67" class="LineNr"> 67 </span> <span class="Delimiter">}</span>
<span id="L68" class="LineNr"> 68 </span> <span class="muComment"># backquote quote -&gt; parse as list with a special car</span>
<span id="L69" class="LineNr"> 69 </span> <span class="PreProc">var</span> <a href='tokenize.mu.html#L904'>backquote-token?</a>/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L904'>backquote-token?</a> curr-token
<span id="L70" class="LineNr"> 70 </span> compare <a href='tokenize.mu.html#L904'>backquote-token?</a>, <span class="Constant">0</span>/false
<span id="L69" class="LineNr"> 69 </span> <span class="PreProc">var</span> <a href='tokenize.mu.html#L1025'>backquote-token?</a>/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L1025'>backquote-token?</a> curr-token
<span id="L70" class="LineNr"> 70 </span> compare <a href='tokenize.mu.html#L1025'>backquote-token?</a>, <span class="Constant">0</span>/false
<span id="L71" class="LineNr"> 71 </span> <span class="Delimiter">{</span>
<span id="L72" class="LineNr"> 72 </span> <span class="PreProc">break-if-=</span>
<span id="L73" class="LineNr"> 73 </span> <span class="PreProc">var</span> out/<span class="muRegEdi">edi</span>: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out
<span id="L74" class="LineNr"> 74 </span> <a href='cell.mu.html#L102'>allocate-pair</a> out
<span id="L75" class="LineNr"> 75 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *out
<span id="L74" class="LineNr"> 74 </span> <a href='cell.mu.html#L128'>allocate-pair</a> out
<span id="L75" class="LineNr"> 75 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *out
<span id="L76" class="LineNr"> 76 </span> <span class="PreProc">var</span> left-ah/<span class="muRegEdx">edx</span>: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> get out-addr, left
<span id="L77" class="LineNr"> 77 </span> <a href='cell.mu.html#L39'>new-symbol</a> left-ah, <span class="Constant">&quot;`&quot;</span>
<span id="L77" class="LineNr"> 77 </span> <a href='cell.mu.html#L43'>new-symbol</a> left-ah, <span class="Constant">&quot;`&quot;</span>
<span id="L78" class="LineNr"> 78 </span> <span class="PreProc">var</span> right-ah/<span class="muRegEdx">edx</span>: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> get out-addr, right
<span id="L79" class="LineNr"> 79 </span> <span class="PreProc">var</span> close-paren?/eax: boolean <span class="Special">&lt;-</span> copy <span class="Constant">0</span>/false
<span id="L80" class="LineNr"> 80 </span> <span class="PreProc">var</span> dot?/<span class="muRegEcx">ecx</span>: boolean <span class="Special">&lt;-</span> copy <span class="Constant">0</span>/false
@ -145,15 +145,15 @@ if ('onhashchange' in window) {
<span id="L83" class="LineNr"> 83 </span> <span class="PreProc">return</span> close-paren?, dot?
<span id="L84" class="LineNr"> 84 </span> <span class="Delimiter">}</span>
<span id="L85" class="LineNr"> 85 </span> <span class="muComment"># unquote -&gt; parse as list with a special car</span>
<span id="L86" class="LineNr"> 86 </span> <span class="PreProc">var</span> <a href='tokenize.mu.html#L913'>unquote-token?</a>/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L913'>unquote-token?</a> curr-token
<span id="L87" class="LineNr"> 87 </span> compare <a href='tokenize.mu.html#L913'>unquote-token?</a>, <span class="Constant">0</span>/false
<span id="L86" class="LineNr"> 86 </span> <span class="PreProc">var</span> <a href='tokenize.mu.html#L1034'>unquote-token?</a>/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L1034'>unquote-token?</a> curr-token
<span id="L87" class="LineNr"> 87 </span> compare <a href='tokenize.mu.html#L1034'>unquote-token?</a>, <span class="Constant">0</span>/false
<span id="L88" class="LineNr"> 88 </span> <span class="Delimiter">{</span>
<span id="L89" class="LineNr"> 89 </span> <span class="PreProc">break-if-=</span>
<span id="L90" class="LineNr"> 90 </span> <span class="PreProc">var</span> out/<span class="muRegEdi">edi</span>: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out
<span id="L91" class="LineNr"> 91 </span> <a href='cell.mu.html#L102'>allocate-pair</a> out
<span id="L92" class="LineNr"> 92 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *out
<span id="L91" class="LineNr"> 91 </span> <a href='cell.mu.html#L128'>allocate-pair</a> out
<span id="L92" class="LineNr"> 92 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *out
<span id="L93" class="LineNr"> 93 </span> <span class="PreProc">var</span> left-ah/<span class="muRegEdx">edx</span>: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> get out-addr, left
<span id="L94" class="LineNr"> 94 </span> <a href='cell.mu.html#L39'>new-symbol</a> left-ah, <span class="Constant">&quot;,&quot;</span>
<span id="L94" class="LineNr"> 94 </span> <a href='cell.mu.html#L43'>new-symbol</a> left-ah, <span class="Constant">&quot;,&quot;</span>
<span id="L95" class="LineNr"> 95 </span> <span class="PreProc">var</span> right-ah/<span class="muRegEdx">edx</span>: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> get out-addr, right
<span id="L96" class="LineNr"> 96 </span> <span class="PreProc">var</span> close-paren?/eax: boolean <span class="Special">&lt;-</span> copy <span class="Constant">0</span>/false
<span id="L97" class="LineNr"> 97 </span> <span class="PreProc">var</span> dot?/<span class="muRegEcx">ecx</span>: boolean <span class="Special">&lt;-</span> copy <span class="Constant">0</span>/false
@ -162,15 +162,15 @@ if ('onhashchange' in window) {
<span id="L100" class="LineNr">100 </span> <span class="PreProc">return</span> close-paren?, dot?
<span id="L101" class="LineNr">101 </span> <span class="Delimiter">}</span>
<span id="L102" class="LineNr">102 </span> <span class="muComment"># unquote-splice -&gt; parse as list with a special car</span>
<span id="L103" class="LineNr">103 </span> <span class="PreProc">var</span> <a href='tokenize.mu.html#L922'>unquote-splice-token?</a>/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L922'>unquote-splice-token?</a> curr-token
<span id="L104" class="LineNr">104 </span> compare <a href='tokenize.mu.html#L922'>unquote-splice-token?</a>, <span class="Constant">0</span>/false
<span id="L103" class="LineNr">103 </span> <span class="PreProc">var</span> <a href='tokenize.mu.html#L1043'>unquote-splice-token?</a>/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L1043'>unquote-splice-token?</a> curr-token
<span id="L104" class="LineNr">104 </span> compare <a href='tokenize.mu.html#L1043'>unquote-splice-token?</a>, <span class="Constant">0</span>/false
<span id="L105" class="LineNr">105 </span> <span class="Delimiter">{</span>
<span id="L106" class="LineNr">106 </span> <span class="PreProc">break-if-=</span>
<span id="L107" class="LineNr">107 </span> <span class="PreProc">var</span> out/<span class="muRegEdi">edi</span>: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out
<span id="L108" class="LineNr">108 </span> <a href='cell.mu.html#L102'>allocate-pair</a> out
<span id="L109" class="LineNr">109 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *out
<span id="L108" class="LineNr">108 </span> <a href='cell.mu.html#L128'>allocate-pair</a> out
<span id="L109" class="LineNr">109 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *out
<span id="L110" class="LineNr">110 </span> <span class="PreProc">var</span> left-ah/<span class="muRegEdx">edx</span>: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> get out-addr, left
<span id="L111" class="LineNr">111 </span> <a href='cell.mu.html#L39'>new-symbol</a> left-ah, <span class="Constant">&quot;,@&quot;</span>
<span id="L111" class="LineNr">111 </span> <a href='cell.mu.html#L43'>new-symbol</a> left-ah, <span class="Constant">&quot;,@&quot;</span>
<span id="L112" class="LineNr">112 </span> <span class="PreProc">var</span> right-ah/<span class="muRegEdx">edx</span>: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> get out-addr, right
<span id="L113" class="LineNr">113 </span> <span class="PreProc">var</span> close-paren?/eax: boolean <span class="Special">&lt;-</span> copy <span class="Constant">0</span>/false
<span id="L114" class="LineNr">114 </span> <span class="PreProc">var</span> dot?/<span class="muRegEcx">ecx</span>: boolean <span class="Special">&lt;-</span> copy <span class="Constant">0</span>/false
@ -179,7 +179,7 @@ if ('onhashchange' in window) {
<span id="L117" class="LineNr">117 </span> <span class="PreProc">return</span> close-paren?, dot?
<span id="L118" class="LineNr">118 </span> <span class="Delimiter">}</span>
<span id="L119" class="LineNr">119 </span> <span class="muComment"># dot -&gt; return</span>
<span id="L120" class="LineNr">120 </span> <span class="PreProc">var</span> dot?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L963'>dot-token?</a> curr-token
<span id="L120" class="LineNr">120 </span> <span class="PreProc">var</span> dot?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L1084'>dot-token?</a> curr-token
<span id="L121" class="LineNr">121 </span> compare dot?, <span class="Constant">0</span>/false
<span id="L122" class="LineNr">122 </span> <span class="Delimiter">{</span>
<span id="L123" class="LineNr">123 </span> <span class="PreProc">break-if-=</span>
@ -187,21 +187,21 @@ if ('onhashchange' in window) {
<span id="L125" class="LineNr">125 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false, <span class="Constant">1</span>/true
<span id="L126" class="LineNr">126 </span> <span class="Delimiter">}</span>
<span id="L127" class="LineNr">127 </span> <span class="muComment"># not bracket -&gt; parse atom</span>
<span id="L128" class="LineNr">128 </span> <span class="PreProc">var</span> <a href='tokenize.mu.html#L878'>bracket-token?</a>/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L878'>bracket-token?</a> curr-token
<span id="L129" class="LineNr">129 </span> compare <a href='tokenize.mu.html#L878'>bracket-token?</a>, <span class="Constant">0</span>/false
<span id="L128" class="LineNr">128 </span> <span class="PreProc">var</span> <a href='tokenize.mu.html#L999'>bracket-token?</a>/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L999'>bracket-token?</a> curr-token
<span id="L129" class="LineNr">129 </span> compare <a href='tokenize.mu.html#L999'>bracket-token?</a>, <span class="Constant">0</span>/false
<span id="L130" class="LineNr">130 </span> <span class="Delimiter">{</span>
<span id="L131" class="LineNr">131 </span> <span class="PreProc">break-if-!=</span>
<span id="L132" class="LineNr">132 </span> <a href='parse.mu.html#L207'>parse-atom</a> curr-token, _out, trace
<span id="L133" class="LineNr">133 </span> <span class="PreProc">break</span> $parse-sexpression:type-check
<span id="L134" class="LineNr">134 </span> <span class="Delimiter">}</span>
<span id="L135" class="LineNr">135 </span> <span class="muComment"># open paren -&gt; parse list</span>
<span id="L136" class="LineNr">136 </span> <span class="PreProc">var</span> open-paren?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L931'>open-paren-token?</a> curr-token
<span id="L136" class="LineNr">136 </span> <span class="PreProc">var</span> open-paren?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L1052'>open-paren-token?</a> curr-token
<span id="L137" class="LineNr">137 </span> compare open-paren?, <span class="Constant">0</span>/false
<span id="L138" class="LineNr">138 </span> <span class="Delimiter">{</span>
<span id="L139" class="LineNr">139 </span> <span class="PreProc">break-if-=</span>
<span id="L140" class="LineNr">140 </span> <span class="PreProc">var</span> curr/<span class="muRegEsi">esi</span>: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out
<span id="L141" class="LineNr">141 </span> <a href='cell.mu.html#L102'>allocate-pair</a> curr
<span id="L142" class="LineNr">142 </span> <span class="PreProc">var</span> curr-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *curr
<span id="L141" class="LineNr">141 </span> <a href='cell.mu.html#L128'>allocate-pair</a> curr
<span id="L142" class="LineNr">142 </span> <span class="PreProc">var</span> curr-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *curr
<span id="L143" class="LineNr">143 </span> <span class="PreProc">var</span> left/<span class="muRegEdx">edx</span>: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> get curr-addr, left
<span id="L144" class="LineNr">144 </span> <span class="Delimiter">{</span>
<span id="L145" class="LineNr">145 </span> <span class="PreProc">var</span> close-paren?/eax: boolean <span class="Special">&lt;-</span> copy <span class="Constant">0</span>/false
@ -215,7 +215,7 @@ if ('onhashchange' in window) {
<span id="L153" class="LineNr">153 </span> <span class="Delimiter">}</span>
<span id="L154" class="LineNr">154 </span> compare close-paren?, <span class="Constant">0</span>/false
<span id="L155" class="LineNr">155 </span> <span class="PreProc">break-if-!=</span>
<span id="L156" class="LineNr">156 </span> <span class="PreProc">var</span> curr-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *curr
<span id="L156" class="LineNr">156 </span> <span class="PreProc">var</span> curr-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *curr
<span id="L157" class="LineNr">157 </span> curr <span class="Special">&lt;-</span> get curr-addr, right
<span id="L158" class="LineNr">158 </span> <span class="PreProc">var</span> tmp-storage: (handle <a href='cell.mu.html#L1'>cell</a>)
<span id="L159" class="LineNr">159 </span> <span class="PreProc">var</span> tmp/<span class="muRegEdx">edx</span>: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> address tmp-storage
@ -230,11 +230,11 @@ if ('onhashchange' in window) {
<span id="L168" class="LineNr">168 </span> <a href='parse.mu.html#L281'>parse-dot-tail</a> tokens, curr, trace
<span id="L169" class="LineNr">169 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false, <span class="Constant">0</span>/false
<span id="L170" class="LineNr">170 </span> <span class="Delimiter">}</span>
<span id="L171" class="LineNr">171 </span> <a href='cell.mu.html#L102'>allocate-pair</a> curr
<span id="L171" class="LineNr">171 </span> <a href='cell.mu.html#L128'>allocate-pair</a> curr
<span id="L172" class="LineNr">172 </span> <span class="muComment"># ')' -&gt; return</span>
<span id="L173" class="LineNr">173 </span> compare close-paren?, <span class="Constant">0</span>/false
<span id="L174" class="LineNr">174 </span> <span class="PreProc">break-if-!=</span>
<span id="L175" class="LineNr">175 </span> <span class="PreProc">var</span> curr-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *curr
<span id="L175" class="LineNr">175 </span> <span class="PreProc">var</span> curr-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *curr
<span id="L176" class="LineNr">176 </span> <span class="PreProc">var</span> left/<span class="muRegEcx">ecx</span>: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> get curr-addr, left
<span id="L177" class="LineNr">177 </span> copy-object tmp, left
<span id="L178" class="LineNr">178 </span> <span class="muComment">#</span>
@ -245,7 +245,7 @@ if ('onhashchange' in window) {
<span id="L183" class="LineNr">183 </span> <span class="PreProc">break</span> $parse-sexpression:type-check
<span id="L184" class="LineNr">184 </span> <span class="Delimiter">}</span>
<span id="L185" class="LineNr">185 </span> <span class="muComment"># close paren -&gt; return</span>
<span id="L186" class="LineNr">186 </span> <span class="PreProc">var</span> close-paren?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L947'>close-paren-token?</a> curr-token
<span id="L186" class="LineNr">186 </span> <span class="PreProc">var</span> close-paren?/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L1068'>close-paren-token?</a> curr-token
<span id="L187" class="LineNr">187 </span> compare close-paren?, <span class="Constant">0</span>/false
<span id="L188" class="LineNr">188 </span> <span class="Delimiter">{</span>
<span id="L189" class="LineNr">189 </span> <span class="PreProc">break-if-=</span>
@ -257,7 +257,7 @@ if ('onhashchange' in window) {
<span id="L195" class="LineNr">195 </span> <span class="PreProc">var</span> stream/<span class="muRegEdx">edx</span>: (addr stream byte) <span class="Special">&lt;-</span> address stream-storage
<span id="L196" class="LineNr">196 </span> <a href='../108write.subx.html#L11'>write</a> stream, <span class="Constant">&quot;unexpected <a href='tokenize.mu.html#L3'>token</a> &quot;</span>
<span id="L197" class="LineNr">197 </span> <span class="PreProc">var</span> curr-token-data-ah/eax: (addr handle stream byte) <span class="Special">&lt;-</span> get curr-token, text-data
<span id="L198" class="LineNr">198 </span> <span class="PreProc">var</span> curr-token-data/eax: (addr stream byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *curr-token-data-ah
<span id="L198" class="LineNr">198 </span> <span class="PreProc">var</span> curr-token-data/eax: (addr stream byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *curr-token-data-ah
<span id="L199" class="LineNr">199 </span> <a href='../106stream.subx.html#L59'>rewind-stream</a> curr-token-data
<span id="L200" class="LineNr">200 </span> <a href='../113write-stream.subx.html#L8'>write-stream</a> stream, curr-token-data
<span id="L201" class="LineNr">201 </span> <span class="Special"><a href='trace.mu.html#L211'>error-stream</a></span> trace, stream
@ -270,21 +270,21 @@ if ('onhashchange' in window) {
<span id="L208" class="LineNr">208 </span> <a href='trace.mu.html#L185'>trace-text</a> trace, <span class="Constant">&quot;parse&quot;</span>, <span class="Constant">&quot;parse atom&quot;</span>
<span id="L209" class="LineNr">209 </span> <span class="PreProc">var</span> curr-token/<span class="muRegEcx">ecx</span>: (addr <a href='tokenize.mu.html#L3'>token</a>) <span class="Special">&lt;-</span> copy _curr-token
<span id="L210" class="LineNr">210 </span> <span class="PreProc">var</span> curr-token-data-ah/eax: (addr handle stream byte) <span class="Special">&lt;-</span> get curr-token, text-data
<span id="L211" class="LineNr">211 </span> <span class="PreProc">var</span> _curr-token-data/eax: (addr stream byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *curr-token-data-ah
<span id="L211" class="LineNr">211 </span> <span class="PreProc">var</span> _curr-token-data/eax: (addr stream byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *curr-token-data-ah
<span id="L212" class="LineNr">212 </span> <span class="PreProc">var</span> curr-token-data/<span class="muRegEsi">esi</span>: (addr stream byte) <span class="Special">&lt;-</span> copy _curr-token-data
<span id="L213" class="LineNr">213 </span> trace trace, <span class="Constant">&quot;parse&quot;</span>, curr-token-data
<span id="L214" class="LineNr">214 </span> <span class="muComment"># number</span>
<span id="L215" class="LineNr">215 </span> <span class="PreProc">var</span> <a href='tokenize.mu.html#L847'>number-token?</a>/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L847'>number-token?</a> curr-token
<span id="L216" class="LineNr">216 </span> compare <a href='tokenize.mu.html#L847'>number-token?</a>, <span class="Constant">0</span>/false
<span id="L215" class="LineNr">215 </span> <span class="PreProc">var</span> <a href='tokenize.mu.html#L968'>number-token?</a>/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L968'>number-token?</a> curr-token
<span id="L216" class="LineNr">216 </span> compare <a href='tokenize.mu.html#L968'>number-token?</a>, <span class="Constant">0</span>/false
<span id="L217" class="LineNr">217 </span> <span class="Delimiter">{</span>
<span id="L218" class="LineNr">218 </span> <span class="PreProc">break-if-=</span>
<span id="L219" class="LineNr">219 </span> <a href='../106stream.subx.html#L59'>rewind-stream</a> curr-token-data
<span id="L220" class="LineNr">220 </span> <span class="PreProc">var</span> _val/eax: int <span class="Special">&lt;-</span> <a href='../311decimal-int.subx.html#L48'>parse-decimal-int-from-stream</a> curr-token-data
<span id="L221" class="LineNr">221 </span> <span class="PreProc">var</span> val/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy _val
<span id="L222" class="LineNr">222 </span> <span class="PreProc">var</span> val-float/<span class="Constant">xmm0</span>: float <span class="Special">&lt;-</span> convert val
<span id="L223" class="LineNr">223 </span> <a href='cell.mu.html#L68'>allocate-number</a> _out
<span id="L223" class="LineNr">223 </span> <a href='cell.mu.html#L83'>allocate-number</a> _out
<span id="L224" class="LineNr">224 </span> <span class="PreProc">var</span> out/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out
<span id="L225" class="LineNr">225 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *out
<span id="L225" class="LineNr">225 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *out
<span id="L226" class="LineNr">226 </span> <span class="PreProc">var</span> dest/<span class="muRegEdi">edi</span>: (addr float) <span class="Special">&lt;-</span> get out-addr, number-data
<span id="L227" class="LineNr">227 </span> copy-to *dest, val-float
<span id="L228" class="LineNr">228 </span> <span class="Delimiter">{</span>
@ -299,27 +299,27 @@ if ('onhashchange' in window) {
<span id="L237" class="LineNr">237 </span> <span class="PreProc">var</span> nested-trace-storage: trace
<span id="L238" class="LineNr">238 </span> <span class="PreProc">var</span> nested-trace/<span class="muRegEdi">edi</span>: (addr trace) <span class="Special">&lt;-</span> address nested-trace-storage
<span id="L239" class="LineNr">239 </span> <a href='trace.mu.html#L61'>initialize-trace</a> nested-trace, <span class="Constant">1</span>/only-errors, <span class="Constant">0x10</span>/capacity, <span class="Constant">0</span>/visible
<span id="L240" class="LineNr">240 </span> <a href='print.mu.html#L208'>print-number</a> out-addr, stream, nested-trace
<span id="L240" class="LineNr">240 </span> <a href='print.mu.html#L245'>print-number</a> out-addr, stream, nested-trace
<span id="L241" class="LineNr">241 </span> trace trace, <span class="Constant">&quot;parse&quot;</span>, stream
<span id="L242" class="LineNr">242 </span> <span class="Delimiter">}</span>
<span id="L243" class="LineNr">243 </span> <span class="PreProc">return</span>
<span id="L244" class="LineNr">244 </span> <span class="Delimiter">}</span>
<span id="L245" class="LineNr">245 </span> <span class="muComment"># default: copy either to a symbol or a stream</span>
<span id="L246" class="LineNr">246 </span> <span class="muComment"># stream token -&gt; literal</span>
<span id="L247" class="LineNr">247 </span> <span class="PreProc">var</span> <a href='tokenize.mu.html#L989'>stream-token?</a>/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L989'>stream-token?</a> curr-token
<span id="L248" class="LineNr">248 </span> compare <a href='tokenize.mu.html#L989'>stream-token?</a>, <span class="Constant">0</span>/false
<span id="L247" class="LineNr">247 </span> <span class="PreProc">var</span> <a href='tokenize.mu.html#L1110'>stream-token?</a>/eax: boolean <span class="Special">&lt;-</span> <a href='tokenize.mu.html#L1110'>stream-token?</a> curr-token
<span id="L248" class="LineNr">248 </span> compare <a href='tokenize.mu.html#L1110'>stream-token?</a>, <span class="Constant">0</span>/false
<span id="L249" class="LineNr">249 </span> <span class="Delimiter">{</span>
<span id="L250" class="LineNr">250 </span> <span class="PreProc">break-if-=</span>
<span id="L251" class="LineNr">251 </span> <a href='cell.mu.html#L58'>allocate-stream</a> _out
<span id="L251" class="LineNr">251 </span> <a href='cell.mu.html#L73'>allocate-stream</a> _out
<span id="L252" class="LineNr">252 </span> <span class="Delimiter">}</span>
<span id="L253" class="LineNr">253 </span> compare <a href='tokenize.mu.html#L989'>stream-token?</a>, <span class="Constant">0</span>/false
<span id="L253" class="LineNr">253 </span> compare <a href='tokenize.mu.html#L1110'>stream-token?</a>, <span class="Constant">0</span>/false
<span id="L254" class="LineNr">254 </span> <span class="Delimiter">{</span>
<span id="L255" class="LineNr">255 </span> <span class="PreProc">break-if-!=</span>
<span id="L256" class="LineNr">256 </span> <a href='cell.mu.html#L21'>allocate-symbol</a> _out
<span id="L256" class="LineNr">256 </span> <a href='cell.mu.html#L25'>allocate-symbol</a> _out
<span id="L257" class="LineNr">257 </span> <span class="Delimiter">}</span>
<span id="L258" class="LineNr">258 </span> <span class="muComment"># copy token data</span>
<span id="L259" class="LineNr">259 </span> <span class="PreProc">var</span> out/eax: (addr handle <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> copy _out
<span id="L260" class="LineNr">260 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *out
<span id="L260" class="LineNr">260 </span> <span class="PreProc">var</span> out-addr/eax: (addr <a href='cell.mu.html#L1'>cell</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *out
<span id="L261" class="LineNr">261 </span> <span class="PreProc">var</span> curr-token-data-ah/<span class="muRegEcx">ecx</span>: (addr handle stream byte) <span class="Special">&lt;-</span> get curr-token, text-data
<span id="L262" class="LineNr">262 </span> <span class="PreProc">var</span> dest-ah/<span class="muRegEdx">edx</span>: (addr handle stream byte) <span class="Special">&lt;-</span> get out-addr, text-data
<span id="L263" class="LineNr">263 </span> copy-object curr-token-data-ah, dest-ah
@ -329,13 +329,13 @@ if ('onhashchange' in window) {
<span id="L267" class="LineNr">267 </span> compare <a href='trace.mu.html#L123'>should-trace?</a>, <span class="Constant">0</span>/false
<span id="L268" class="LineNr">268 </span> <span class="Delimiter">}</span>
<span id="L269" class="LineNr">269 </span> <span class="PreProc">break-if-=</span>
<span id="L270" class="LineNr">270 </span> <span class="PreProc">var</span> stream-storage: (stream byte <span class="Constant">0x400</span>)
<span id="L270" class="LineNr">270 </span> <span class="PreProc">var</span> stream-storage: (stream byte <span class="Constant">0x40000</span>)
<span id="L271" class="LineNr">271 </span> <span class="PreProc">var</span> stream/<span class="muRegEcx">ecx</span>: (addr stream byte) <span class="Special">&lt;-</span> address stream-storage
<span id="L272" class="LineNr">272 </span> <a href='../108write.subx.html#L11'>write</a> stream, <span class="Constant">&quot;=&gt; symbol &quot;</span>
<span id="L273" class="LineNr">273 </span> <span class="PreProc">var</span> nested-trace-storage: trace
<span id="L274" class="LineNr">274 </span> <span class="PreProc">var</span> nested-trace/<span class="muRegEdi">edi</span>: (addr trace) <span class="Special">&lt;-</span> address nested-trace-storage
<span id="L275" class="LineNr">275 </span> <a href='trace.mu.html#L61'>initialize-trace</a> nested-trace, <span class="Constant">1</span>/only-errors, <span class="Constant">0x10</span>/capacity, <span class="Constant">0</span>/visible
<span id="L276" class="LineNr">276 </span> <a href='print.mu.html#L146'>print-symbol</a> out-addr, stream, nested-trace
<span id="L276" class="LineNr">276 </span> <a href='print.mu.html#L183'>print-symbol</a> out-addr, stream, nested-trace
<span id="L277" class="LineNr">277 </span> trace trace, <span class="Constant">&quot;parse&quot;</span>, stream
<span id="L278" class="LineNr">278 </span> <span class="Delimiter">}</span>
<span id="L279" class="LineNr">279 </span><span class="Delimiter">}</span>

File diff suppressed because it is too large Load Diff

1041
html/shell/print.mu.html generated

File diff suppressed because it is too large Load Diff

View File

@ -1,32 +1,32 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - shell/read.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.PreProc { color: #c000c0; }
.muRegEcx { color: #870000; }
.muRegEdx { color: #af5f00; }
.Special { color: #ff6060; }
.LineNr { }
.Constant { color: #008787; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muRegEcx { color: #870000; }
.Delimiter { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muComment { color: #005faf; }
.Special { color: #ff6060; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -58,9 +58,9 @@ if ('onhashchange' in window) {
<body onload='JumpToLine();'>
<a href='https://github.com/akkartik/mu/blob/main/shell/read.mu'>https://github.com/akkartik/mu/blob/main/shell/read.mu</a>
<pre id='vimCodeElement'>
<span id="L1" class="LineNr"> 1 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='read.mu.html#L1'>read-cell</a></span> in: (addr <a href='gap-buffer.mu.html#L3'>gap-buffer</a>), out: (addr handle <a href='cell.mu.html#L1'>cell</a>), trace: (addr trace) <span class="Delimiter">{</span>
<span id="L1" class="LineNr"> 1 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='read.mu.html#L1'>read-cell</a></span> in: (addr <a href='../514gap-buffer.mu.html#L3'>gap-buffer</a>), out: (addr handle <a href='cell.mu.html#L1'>cell</a>), trace: (addr trace) <span class="Delimiter">{</span>
<span id="L2" class="LineNr"> 2 </span> <span class="muComment"># eagerly tokenize everything so that the phases are easier to see in the trace</span>
<span id="L3" class="LineNr"> 3 </span> <span class="PreProc">var</span> tokens-storage: (stream <a href='tokenize.mu.html#L3'>token</a> <span class="Constant">0x400</span>)
<span id="L3" class="LineNr"> 3 </span> <span class="PreProc">var</span> tokens-storage: (stream <a href='tokenize.mu.html#L3'>token</a> <span class="Constant">0x10000</span>)
<span id="L4" class="LineNr"> 4 </span> <span class="PreProc">var</span> tokens/<span class="muRegEdx">edx</span>: (addr stream <a href='tokenize.mu.html#L3'>token</a>) <span class="Special">&lt;-</span> address tokens-storage
<span id="L5" class="LineNr"> 5 </span> <a href='tokenize.mu.html#L13'>tokenize</a> in, tokens, trace
<span id="L6" class="LineNr"> 6 </span> <span class="PreProc">var</span> error?/eax: boolean <span class="Special">&lt;-</span> <a href='trace.mu.html#L94'>has-errors?</a> trace
@ -70,7 +70,7 @@ if ('onhashchange' in window) {
<span id="L10" class="LineNr">10 </span> <span class="PreProc">return</span>
<span id="L11" class="LineNr">11 </span> <span class="Delimiter">}</span>
<span id="L12" class="LineNr">12 </span> <span class="muComment"># insert more parens based on indentation</span>
<span id="L13" class="LineNr">13 </span> <span class="PreProc">var</span> parenthesized-tokens-storage: (stream <a href='tokenize.mu.html#L3'>token</a> <span class="Constant">0x400</span>)
<span id="L13" class="LineNr">13 </span> <span class="PreProc">var</span> parenthesized-tokens-storage: (stream <a href='tokenize.mu.html#L3'>token</a> <span class="Constant">0x10000</span>)
<span id="L14" class="LineNr">14 </span> <span class="PreProc">var</span> parenthesized-tokens/<span class="muRegEcx">ecx</span>: (addr stream <a href='tokenize.mu.html#L3'>token</a>) <span class="Special">&lt;-</span> address parenthesized-tokens-storage
<span id="L15" class="LineNr">15 </span> <a href='parenthesize.mu.html#L15'>parenthesize</a> tokens, parenthesized-tokens, trace
<span id="L16" class="LineNr">16 </span> <span class="PreProc">var</span> error?/eax: boolean <span class="Special">&lt;-</span> <a href='trace.mu.html#L94'>has-errors?</a> trace

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,14 +1,14 @@
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - shell/trace.mu</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="Generator" content="Vim/8.1">
<meta name="plugin-version" content="vim8.1_v1">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
<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>
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffd7; }
body { font-size:12pt; font-family: monospace; color: #000000; background-color: #ffffd7; }
@ -16,22 +16,22 @@ a { color:inherit; }
* { font-size:12pt; font-size: 1em; }
.LineNr { }
.Delimiter { color: #c000c0; }
.muRegEcx { color: #870000; }
.muRegEdx { color: #af5f00; }
.muFunction { color: #af5f00; text-decoration: underline; }
.muRegEbx { color: #5f00ff; }
.muRegEsi { color: #005faf; }
.muRegEdi { color: #00af00; }
.Constant { color: #008787; }
.Special { color: #ff6060; }
.PreProc { color: #c000c0; }
.muFunction { color: #af5f00; text-decoration: underline; }
.CommentedCode { color: #8a8a8a; }
.muTest { color: #5f8700; }
.muComment { color: #005faf; }
.CommentedCode { color: #8a8a8a; }
.muRegEcx { color: #870000; }
.muRegEdx { color: #af5f00; }
-->
</style>
<script>
<script type='text/javascript'>
<!--
/* function to open any folds containing a jumped-to line before jumping to it */
@ -165,7 +165,7 @@ if ('onhashchange' in window) {
<span id="L100" class="LineNr"> 100 </span> <span class="Delimiter">}</span>
<span id="L101" class="LineNr"> 101 </span> <span class="PreProc">var</span> max/<span class="muRegEdx">edx</span>: (addr int) <span class="Special">&lt;-</span> get self, first-free
<span id="L102" class="LineNr"> 102 </span> <span class="PreProc">var</span> trace-ah/eax: (addr handle array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> get self, data
<span id="L103" class="LineNr"> 103 </span> <span class="PreProc">var</span> _trace/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *trace-ah
<span id="L103" class="LineNr"> 103 </span> <span class="PreProc">var</span> _trace/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *trace-ah
<span id="L104" class="LineNr"> 104 </span> <span class="PreProc">var</span> trace/<span class="muRegEsi">esi</span>: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> copy _trace
<span id="L105" class="LineNr"> 105 </span> <span class="PreProc">var</span> i/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L106" class="LineNr"> 106 </span> <span class="Delimiter">{</span>
@ -217,7 +217,7 @@ if ('onhashchange' in window) {
<span id="L152" class="LineNr"> 152 </span> <span class="PreProc">return</span>
<span id="L153" class="LineNr"> 153 </span> <span class="Delimiter">}</span>
<span id="L154" class="LineNr"> 154 </span> <span class="PreProc">var</span> data-ah/eax: (addr handle array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> get self, data
<span id="L155" class="LineNr"> 155 </span> <span class="PreProc">var</span> data/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *data-ah
<span id="L155" class="LineNr"> 155 </span> <span class="PreProc">var</span> data/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *data-ah
<span id="L156" class="LineNr"> 156 </span> <span class="PreProc">var</span> index-addr/<span class="muRegEdi">edi</span>: (addr int) <span class="Special">&lt;-</span> get self, first-free
<span id="L157" class="LineNr"> 157 </span> <span class="Delimiter">{</span>
<span id="L158" class="LineNr"> 158 </span> compare *index-addr, <span class="Constant">0x8000</span>/lines
@ -377,7 +377,7 @@ if ('onhashchange' in window) {
<span id="L312" class="LineNr"> 312 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='trace.mu.html#L312'>trace-contains?</a></span> _self: (addr trace), label: (addr array byte), data: (addr array byte), start: int<span class="PreProc"> -&gt; </span>_/eax: boolean <span class="Delimiter">{</span>
<span id="L313" class="LineNr"> 313 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr trace) <span class="Special">&lt;-</span> copy _self
<span id="L314" class="LineNr"> 314 </span> <span class="PreProc">var</span> candidates-ah/eax: (addr handle array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> get self, data
<span id="L315" class="LineNr"> 315 </span> <span class="PreProc">var</span> candidates/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *candidates-ah
<span id="L315" class="LineNr"> 315 </span> <span class="PreProc">var</span> candidates/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *candidates-ah
<span id="L316" class="LineNr"> 316 </span> <span class="PreProc">var</span> i/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy start
<span id="L317" class="LineNr"> 317 </span> <span class="PreProc">var</span> max/<span class="muRegEdx">edx</span>: (addr int) <span class="Special">&lt;-</span> get self, first-free
<span id="L318" class="LineNr"> 318 </span> <span class="Delimiter">{</span>
@ -392,13 +392,13 @@ if ('onhashchange' in window) {
<span id="L327" class="LineNr"> 327 </span> <span class="PreProc">var</span> curr/<span class="muRegEcx">ecx</span>: (addr <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> index candidates, curr-offset
<span id="L328" class="LineNr"> 328 </span> <span class="muComment"># if curr-&gt;label does not match, return false</span>
<span id="L329" class="LineNr"> 329 </span> <span class="PreProc">var</span> curr-label-ah/eax: (addr handle array byte) <span class="Special">&lt;-</span> get curr, label
<span id="L330" class="LineNr"> 330 </span> <span class="PreProc">var</span> curr-label/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *curr-label-ah
<span id="L330" class="LineNr"> 330 </span> <span class="PreProc">var</span> curr-label/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *curr-label-ah
<span id="L331" class="LineNr"> 331 </span> <span class="PreProc">var</span> match?/eax: boolean <span class="Special">&lt;-</span> <a href='../105string-equal.subx.html#L8'>string-equal?</a> curr-label, label
<span id="L332" class="LineNr"> 332 </span> compare match?, <span class="Constant">0</span>/false
<span id="L333" class="LineNr"> 333 </span> <span class="PreProc">break-if-=</span>
<span id="L334" class="LineNr"> 334 </span> <span class="muComment"># if curr-&gt;data does not match, return false</span>
<span id="L335" class="LineNr"> 335 </span> <span class="PreProc">var</span> curr-data-ah/eax: (addr handle array byte) <span class="Special">&lt;-</span> get curr, data
<span id="L336" class="LineNr"> 336 </span> <span class="PreProc">var</span> curr-data/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *curr-data-ah
<span id="L336" class="LineNr"> 336 </span> <span class="PreProc">var</span> curr-data/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *curr-data-ah
<span id="L337" class="LineNr"> 337 </span> <span class="PreProc">var</span> match?/eax: boolean <span class="Special">&lt;-</span> <a href='../105string-equal.subx.html#L8'>string-equal?</a> curr-data, data
<span id="L338" class="LineNr"> 338 </span> compare match?, <span class="Constant">0</span>/false
<span id="L339" class="LineNr"> 339 </span> <span class="PreProc">break-if-=</span>
@ -422,10 +422,10 @@ if ('onhashchange' in window) {
<span id="L357" class="LineNr"> 357 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false
<span id="L358" class="LineNr"> 358 </span> <span class="Delimiter">}</span>
<span id="L359" class="LineNr"> 359 </span> <span class="PreProc">var</span> a-label-ah/eax: (addr handle array byte) <span class="Special">&lt;-</span> get a, label
<span id="L360" class="LineNr"> 360 </span> <span class="PreProc">var</span> _a-label/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *a-label-ah
<span id="L360" class="LineNr"> 360 </span> <span class="PreProc">var</span> _a-label/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *a-label-ah
<span id="L361" class="LineNr"> 361 </span> <span class="PreProc">var</span> a-label/<span class="muRegEcx">ecx</span>: (addr array byte) <span class="Special">&lt;-</span> copy _a-label
<span id="L362" class="LineNr"> 362 </span> <span class="PreProc">var</span> b-label-ah/<span class="muRegEbx">ebx</span>: (addr handle array byte) <span class="Special">&lt;-</span> get b, label
<span id="L363" class="LineNr"> 363 </span> <span class="PreProc">var</span> b-label/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *b-label-ah
<span id="L363" class="LineNr"> 363 </span> <span class="PreProc">var</span> b-label/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *b-label-ah
<span id="L364" class="LineNr"> 364 </span> <span class="PreProc">var</span> label-match?/eax: boolean <span class="Special">&lt;-</span> <a href='../105string-equal.subx.html#L8'>string-equal?</a> a-label, b-label
<span id="L365" class="LineNr"> 365 </span> <span class="Delimiter">{</span>
<span id="L366" class="LineNr"> 366 </span> compare label-match?, <span class="Constant">0</span>/false
@ -433,10 +433,10 @@ if ('onhashchange' in window) {
<span id="L368" class="LineNr"> 368 </span> <span class="PreProc">return</span> <span class="Constant">0</span>/false
<span id="L369" class="LineNr"> 369 </span> <span class="Delimiter">}</span>
<span id="L370" class="LineNr"> 370 </span> <span class="PreProc">var</span> a-data-ah/eax: (addr handle array byte) <span class="Special">&lt;-</span> get a, data
<span id="L371" class="LineNr"> 371 </span> <span class="PreProc">var</span> _a-data/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *a-data-ah
<span id="L371" class="LineNr"> 371 </span> <span class="PreProc">var</span> _a-data/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *a-data-ah
<span id="L372" class="LineNr"> 372 </span> <span class="PreProc">var</span> a-data/<span class="muRegEcx">ecx</span>: (addr array byte) <span class="Special">&lt;-</span> copy _a-data
<span id="L373" class="LineNr"> 373 </span> <span class="PreProc">var</span> b-data-ah/<span class="muRegEbx">ebx</span>: (addr handle array byte) <span class="Special">&lt;-</span> get b, data
<span id="L374" class="LineNr"> 374 </span> <span class="PreProc">var</span> b-data/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *b-data-ah
<span id="L374" class="LineNr"> 374 </span> <span class="PreProc">var</span> b-data/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *b-data-ah
<span id="L375" class="LineNr"> 375 </span> <span class="PreProc">var</span> data-match?/eax: boolean <span class="Special">&lt;-</span> <a href='../105string-equal.subx.html#L8'>string-equal?</a> a-data, b-data
<span id="L376" class="LineNr"> 376 </span> <span class="PreProc">return</span> data-match?
<span id="L377" class="LineNr"> 377 </span><span class="Delimiter">}</span>
@ -450,7 +450,7 @@ if ('onhashchange' in window) {
<span id="L385" class="LineNr"> 385 </span> <a href='../317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;null trace&quot;</span>
<span id="L386" class="LineNr"> 386 </span> <span class="Delimiter">}</span>
<span id="L387" class="LineNr"> 387 </span> <span class="PreProc">var</span> trace-ah/eax: (addr handle array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> get self, data
<span id="L388" class="LineNr"> 388 </span> <span class="PreProc">var</span> _trace/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *trace-ah
<span id="L388" class="LineNr"> 388 </span> <span class="PreProc">var</span> _trace/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *trace-ah
<span id="L389" class="LineNr"> 389 </span> <span class="PreProc">var</span> trace/<span class="muRegEdi">edi</span>: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> copy _trace
<span id="L390" class="LineNr"> 390 </span> <span class="PreProc">var</span> i/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L391" class="LineNr"> 391 </span> <span class="PreProc">var</span> max-addr/<span class="muRegEbx">ebx</span>: (addr int) <span class="Special">&lt;-</span> get self, first-free
@ -477,7 +477,7 @@ if ('onhashchange' in window) {
<span id="L412" class="LineNr"> 412 </span> <a href='../317abort.subx.html#L5'>abort</a> <span class="Constant">&quot;null trace&quot;</span>
<span id="L413" class="LineNr"> 413 </span> <span class="Delimiter">}</span>
<span id="L414" class="LineNr"> 414 </span> <span class="PreProc">var</span> trace-ah/eax: (addr handle array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> get self, data
<span id="L415" class="LineNr"> 415 </span> <span class="PreProc">var</span> _trace/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *trace-ah
<span id="L415" class="LineNr"> 415 </span> <span class="PreProc">var</span> _trace/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *trace-ah
<span id="L416" class="LineNr"> 416 </span> <span class="PreProc">var</span> trace/<span class="muRegEdi">edi</span>: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> copy _trace
<span id="L417" class="LineNr"> 417 </span> <span class="PreProc">var</span> i/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L418" class="LineNr"> 418 </span> <span class="PreProc">var</span> max-addr/<span class="muRegEbx">ebx</span>: (addr int) <span class="Special">&lt;-</span> get self, first-free
@ -489,7 +489,7 @@ if ('onhashchange' in window) {
<span id="L424" class="LineNr"> 424 </span> <span class="PreProc">var</span> offset/<span class="muRegEbx">ebx</span>: (offset <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> compute-offset trace, i
<span id="L425" class="LineNr"> 425 </span> <span class="PreProc">var</span> curr/<span class="muRegEbx">ebx</span>: (addr <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> index trace, offset
<span id="L426" class="LineNr"> 426 </span> <span class="PreProc">var</span> curr-label-ah/eax: (addr handle array byte) <span class="Special">&lt;-</span> get curr, label
<span id="L427" class="LineNr"> 427 </span> <span class="PreProc">var</span> curr-label/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *curr-label-ah
<span id="L427" class="LineNr"> 427 </span> <span class="PreProc">var</span> curr-label/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *curr-label-ah
<span id="L428" class="LineNr"> 428 </span> <span class="PreProc">var</span> show?/eax: boolean <span class="Special">&lt;-</span> <a href='../105string-equal.subx.html#L8'>string-equal?</a> curr-label, label
<span id="L429" class="LineNr"> 429 </span> compare show?, <span class="Constant">0</span>/false
<span id="L430" class="LineNr"> 430 </span> <span class="PreProc">break-if-=</span>
@ -541,7 +541,7 @@ if ('onhashchange' in window) {
<span id="L476" class="LineNr"> 476 </span> <span class="Delimiter">}</span>
<span id="L477" class="LineNr"> 477 </span> <a href='trace.mu.html#L672'>clamp-cursor-to-top</a> self, y
<span id="L478" class="LineNr"> 478 </span> <span class="PreProc">var</span> trace-ah/eax: (addr handle array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> get self, data
<span id="L479" class="LineNr"> 479 </span> <span class="PreProc">var</span> _trace/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *trace-ah
<span id="L479" class="LineNr"> 479 </span> <span class="PreProc">var</span> _trace/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *trace-ah
<span id="L480" class="LineNr"> 480 </span> <span class="PreProc">var</span> trace/<span class="muRegEdi">edi</span>: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> copy _trace
<span id="L481" class="LineNr"> 481 </span> <span class="PreProc">var</span> max-addr/<span class="muRegEbx">ebx</span>: (addr int) <span class="Special">&lt;-</span> get self, first-free
<span id="L482" class="LineNr"> 482 </span> <span class="PreProc">var</span> max/<span class="muRegEbx">ebx</span>: int <span class="Special">&lt;-</span> copy *max-addr
@ -559,7 +559,7 @@ if ('onhashchange' in window) {
<span id="L494" class="LineNr"> 494 </span> <span class="Delimiter">}</span>
<span id="L495" class="LineNr"> 495 </span> <a href='../500fake-screen.mu.html#L190'>set-cursor-position</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">0x70</span>/x, y
<span id="L496" class="LineNr"> 496 </span> <a href='../501draw-text.mu.html#L141'>draw-text-rightward-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot;trace depth: &quot;</span>, <span class="Constant">0x17</span>/fg, <span class="Constant">0xc5</span>/bg=blue-bg
<span id="L497" class="LineNr"> 497 </span> <a href='../501draw-text.mu.html#L387'>draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, *max-depth, <span class="Constant">0x7</span>/fg, <span class="Constant">0xc5</span>/bg=blue-bg
<span id="L497" class="LineNr"> 497 </span> <a href='../501draw-text.mu.html#L384'>draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, *max-depth, <span class="Constant">0x7</span>/fg, <span class="Constant">0xc5</span>/bg=blue-bg
<span id="L498" class="LineNr"> 498 </span> <span class="Delimiter">}</span>
<span id="L499" class="LineNr"> 499 </span> <span class="PreProc">var</span> top-line-addr/<span class="muRegEdx">edx</span>: (addr int) <span class="Special">&lt;-</span> get self, top-line-index
<span id="L500" class="LineNr"> 500 </span> <span class="PreProc">var</span> i/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> copy *top-line-addr
@ -572,7 +572,7 @@ if ('onhashchange' in window) {
<span id="L507" class="LineNr"> 507 </span> <span class="PreProc">var</span> offset/<span class="muRegEbx">ebx</span>: (offset <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> compute-offset trace, i
<span id="L508" class="LineNr"> 508 </span> <span class="PreProc">var</span> curr/<span class="muRegEbx">ebx</span>: (addr <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> index trace, offset
<span id="L509" class="LineNr"> 509 </span> <span class="PreProc">var</span> curr-label-ah/eax: (addr handle array byte) <span class="Special">&lt;-</span> get curr, label
<span id="L510" class="LineNr"> 510 </span> <span class="PreProc">var</span> curr-label/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *curr-label-ah
<span id="L510" class="LineNr"> 510 </span> <span class="PreProc">var</span> curr-label/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *curr-label-ah
<span id="L511" class="LineNr"> 511 </span> <span class="PreProc">var</span> bg: int
<span id="L512" class="LineNr"> 512 </span> copy-to bg, <span class="Constant">0xc5</span>/bg=blue-bg
<span id="L513" class="LineNr"> 513 </span> <span class="PreProc">var</span> fg: int
@ -655,14 +655,14 @@ if ('onhashchange' in window) {
<span id="L590" class="LineNr"> 590 </span> <span class="PreProc">break-if-=</span>
<span id="L591" class="LineNr"> 591 </span> <span class="PreProc">var</span> x/eax: int <span class="Special">&lt;-</span> copy xsave
<span id="L592" class="LineNr"> 592 </span> <span class="Delimiter">{</span>
<span id="L593" class="LineNr"> 593 </span> x, y <span class="Special">&lt;-</span> <a href='../501draw-text.mu.html#L340'>draw-int32-decimal-wrapping-right-then-down</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, *depth-a, xmin, ymin, xmax, ymax, x, y, fg, bg
<span id="L593" class="LineNr"> 593 </span> x, y <span class="Special">&lt;-</span> <a href='../501draw-text.mu.html#L337'>draw-int32-decimal-wrapping-right-then-down</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, *depth-a, xmin, ymin, xmax, ymax, x, y, fg, bg
<span id="L594" class="LineNr"> 594 </span> x, y <span class="Special">&lt;-</span> <a href='../501draw-text.mu.html#L174'>draw-text-wrapping-right-then-down</a> <a href='../500fake-screen.mu.html#L14'>screen</a>, <span class="Constant">&quot; &quot;</span>, xmin, ymin, xmax, ymax, x, y, fg, bg
<span id="L595" class="LineNr"> 595 </span> <span class="muComment"># don't show label in UI; it's just for tests</span>
<span id="L596" class="LineNr"> 596 </span> <span class="Delimiter">}</span>
<span id="L597" class="LineNr"> 597 </span> xsave <span class="Special">&lt;-</span> copy x
<span id="L598" class="LineNr"> 598 </span> <span class="Delimiter">}</span>
<span id="L599" class="LineNr"> 599 </span> <span class="PreProc">var</span> data-ah/eax: (addr handle array byte) <span class="Special">&lt;-</span> get self, data
<span id="L600" class="LineNr"> 600 </span> <span class="PreProc">var</span> _data/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *data-ah
<span id="L600" class="LineNr"> 600 </span> <span class="PreProc">var</span> _data/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *data-ah
<span id="L601" class="LineNr"> 601 </span> <span class="PreProc">var</span> data/<span class="muRegEbx">ebx</span>: (addr array byte) <span class="Special">&lt;-</span> copy _data
<span id="L602" class="LineNr"> 602 </span> <span class="PreProc">var</span> x/eax: int <span class="Special">&lt;-</span> copy xsave
<span id="L603" class="LineNr"> 603 </span> compare unclip?, <span class="Constant">0</span>/false
@ -691,7 +691,7 @@ if ('onhashchange' in window) {
<span id="L626" class="LineNr"> 626 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr trace) <span class="Special">&lt;-</span> copy _self
<span id="L627" class="LineNr"> 627 </span> <span class="PreProc">var</span> max-addr/<span class="muRegEdx">edx</span>: (addr int) <span class="Special">&lt;-</span> get self, first-free
<span id="L628" class="LineNr"> 628 </span> <span class="PreProc">var</span> trace-ah/eax: (addr handle array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> get self, data
<span id="L629" class="LineNr"> 629 </span> <span class="PreProc">var</span> _trace/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *trace-ah
<span id="L629" class="LineNr"> 629 </span> <span class="PreProc">var</span> _trace/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *trace-ah
<span id="L630" class="LineNr"> 630 </span> <span class="PreProc">var</span> trace/<span class="muRegEsi">esi</span>: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> copy _trace
<span id="L631" class="LineNr"> 631 </span> <span class="PreProc">var</span> i/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L632" class="LineNr"> 632 </span> <span class="Delimiter">{</span>
@ -709,7 +709,7 @@ if ('onhashchange' in window) {
<span id="L644" class="LineNr"> 644 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr trace) <span class="Special">&lt;-</span> copy _self
<span id="L645" class="LineNr"> 645 </span> <span class="muComment"># recompute</span>
<span id="L646" class="LineNr"> 646 </span> <span class="PreProc">var</span> candidates-ah/eax: (addr handle array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> get self, visible
<span id="L647" class="LineNr"> 647 </span> <span class="PreProc">var</span> candidates/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *candidates-ah
<span id="L647" class="LineNr"> 647 </span> <span class="PreProc">var</span> candidates/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *candidates-ah
<span id="L648" class="LineNr"> 648 </span> <span class="PreProc">var</span> i/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L649" class="LineNr"> 649 </span> <span class="PreProc">var</span> len/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> length candidates
<span id="L650" class="LineNr"> 650 </span> <span class="Delimiter">{</span>
@ -760,7 +760,7 @@ if ('onhashchange' in window) {
<span id="L695" class="LineNr"> 695 </span> copy-to *cursor-y, y
<span id="L696" class="LineNr"> 696 </span> <span class="muComment"># redraw cursor-line</span>
<span id="L697" class="LineNr"> 697 </span> <span class="PreProc">var</span> trace-ah/eax: (addr handle array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> get self, data
<span id="L698" class="LineNr"> 698 </span> <span class="PreProc">var</span> trace/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *trace-ah
<span id="L698" class="LineNr"> 698 </span> <span class="PreProc">var</span> trace/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *trace-ah
<span id="L699" class="LineNr"> 699 </span> <span class="PreProc">var</span> cursor-line-index-addr/<span class="muRegEcx">ecx</span>: (addr int) <span class="Special">&lt;-</span> get self, cursor-line-index
<span id="L700" class="LineNr"> 700 </span> <span class="PreProc">var</span> cursor-line-index/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy *cursor-line-index-addr
<span id="L701" class="LineNr"> 701 </span> <span class="PreProc">var</span> first-free/<span class="muRegEdx">edx</span>: (addr int) <span class="Special">&lt;-</span> get self, first-free
@ -1050,7 +1050,7 @@ if ('onhashchange' in window) {
<span id="L985" class="LineNr"> 985 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='trace.mu.html#L985'>expand</a></span> _self: (addr trace) <span class="Delimiter">{</span>
<span id="L986" class="LineNr"> 986 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr trace) <span class="Special">&lt;-</span> copy _self
<span id="L987" class="LineNr"> 987 </span> <span class="PreProc">var</span> trace-ah/eax: (addr handle array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> get self, data
<span id="L988" class="LineNr"> 988 </span> <span class="PreProc">var</span> _trace/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *trace-ah
<span id="L988" class="LineNr"> 988 </span> <span class="PreProc">var</span> _trace/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *trace-ah
<span id="L989" class="LineNr"> 989 </span> <span class="PreProc">var</span> trace/<span class="muRegEdi">edi</span>: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> copy _trace
<span id="L990" class="LineNr"> 990 </span> <span class="PreProc">var</span> cursor-line-index-addr/<span class="muRegEcx">ecx</span>: (addr int) <span class="Special">&lt;-</span> get self, cursor-line-index
<span id="L991" class="LineNr"> 991 </span> <span class="PreProc">var</span> cursor-line-index/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy *cursor-line-index-addr
@ -1091,7 +1091,7 @@ if ('onhashchange' in window) {
<span id="L1026" class="LineNr">1026 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='trace.mu.html#L1026'>collapse</a></span> _self: (addr trace) <span class="Delimiter">{</span>
<span id="L1027" class="LineNr">1027 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr trace) <span class="Special">&lt;-</span> copy _self
<span id="L1028" class="LineNr">1028 </span> <span class="PreProc">var</span> trace-ah/eax: (addr handle array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> get self, data
<span id="L1029" class="LineNr">1029 </span> <span class="PreProc">var</span> _trace/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *trace-ah
<span id="L1029" class="LineNr">1029 </span> <span class="PreProc">var</span> _trace/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *trace-ah
<span id="L1030" class="LineNr">1030 </span> <span class="PreProc">var</span> trace/<span class="muRegEdi">edi</span>: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> copy _trace
<span id="L1031" class="LineNr">1031 </span> <span class="PreProc">var</span> cursor-line-index-addr/<span class="muRegEcx">ecx</span>: (addr int) <span class="Special">&lt;-</span> get self, cursor-line-index
<span id="L1032" class="LineNr">1032 </span> <span class="PreProc">var</span> cursor-line-index/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy *cursor-line-index-addr
@ -1157,7 +1157,7 @@ if ('onhashchange' in window) {
<span id="L1092" class="LineNr">1092 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='trace.mu.html#L1092'>reveal-trace-line</a></span> _self: (addr trace), line: (addr <a href='trace.mu.html#L41'>trace-line</a>) <span class="Delimiter">{</span>
<span id="L1093" class="LineNr">1093 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr trace) <span class="Special">&lt;-</span> copy _self
<span id="L1094" class="LineNr">1094 </span> <span class="PreProc">var</span> visible-ah/eax: (addr handle array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> get self, visible
<span id="L1095" class="LineNr">1095 </span> <span class="PreProc">var</span> visible/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *visible-ah
<span id="L1095" class="LineNr">1095 </span> <span class="PreProc">var</span> visible/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *visible-ah
<span id="L1096" class="LineNr">1096 </span> <span class="PreProc">var</span> i/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L1097" class="LineNr">1097 </span> <span class="PreProc">var</span> len/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> length visible
<span id="L1098" class="LineNr">1098 </span> <span class="Delimiter">{</span>
@ -1182,7 +1182,7 @@ if ('onhashchange' in window) {
<span id="L1117" class="LineNr">1117 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='trace.mu.html#L1117'>hide-trace-line</a></span> _self: (addr trace), line: (addr <a href='trace.mu.html#L41'>trace-line</a>) <span class="Delimiter">{</span>
<span id="L1118" class="LineNr">1118 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr trace) <span class="Special">&lt;-</span> copy _self
<span id="L1119" class="LineNr">1119 </span> <span class="PreProc">var</span> visible-ah/eax: (addr handle array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> get self, visible
<span id="L1120" class="LineNr">1120 </span> <span class="PreProc">var</span> visible/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *visible-ah
<span id="L1120" class="LineNr">1120 </span> <span class="PreProc">var</span> visible/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *visible-ah
<span id="L1121" class="LineNr">1121 </span> <span class="PreProc">var</span> i/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L1122" class="LineNr">1122 </span> <span class="PreProc">var</span> len/<span class="muRegEdx">edx</span>: int <span class="Special">&lt;-</span> length visible
<span id="L1123" class="LineNr">1123 </span> <span class="Delimiter">{</span>
@ -1204,7 +1204,7 @@ if ('onhashchange' in window) {
<span id="L1139" class="LineNr">1139 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='trace.mu.html#L1139'>cursor-too-deep?</a></span> _self: (addr trace)<span class="PreProc"> -&gt; </span>_/eax: boolean <span class="Delimiter">{</span>
<span id="L1140" class="LineNr">1140 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr trace) <span class="Special">&lt;-</span> copy _self
<span id="L1141" class="LineNr">1141 </span> <span class="PreProc">var</span> trace-ah/eax: (addr handle array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> get self, data
<span id="L1142" class="LineNr">1142 </span> <span class="PreProc">var</span> _trace/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *trace-ah
<span id="L1142" class="LineNr">1142 </span> <span class="PreProc">var</span> _trace/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *trace-ah
<span id="L1143" class="LineNr">1143 </span> <span class="PreProc">var</span> trace/<span class="muRegEdi">edi</span>: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> copy _trace
<span id="L1144" class="LineNr">1144 </span> <span class="PreProc">var</span> cursor-line-index-addr/<span class="muRegEcx">ecx</span>: (addr int) <span class="Special">&lt;-</span> get self, cursor-line-index
<span id="L1145" class="LineNr">1145 </span> <span class="PreProc">var</span> cursor-line-index/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy *cursor-line-index-addr
@ -2008,7 +2008,7 @@ if ('onhashchange' in window) {
<span id="L1943" class="LineNr">1943 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='trace.mu.html#L1943'>count-line?</a></span> _self: (addr trace), index: int, _already-hiding-lines?: (addr boolean)<span class="PreProc"> -&gt; </span>_/eax: boolean <span class="Delimiter">{</span>
<span id="L1944" class="LineNr">1944 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr trace) <span class="Special">&lt;-</span> copy _self
<span id="L1945" class="LineNr">1945 </span> <span class="PreProc">var</span> trace-ah/eax: (addr handle array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> get self, data
<span id="L1946" class="LineNr">1946 </span> <span class="PreProc">var</span> trace/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *trace-ah
<span id="L1946" class="LineNr">1946 </span> <span class="PreProc">var</span> trace/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *trace-ah
<span id="L1947" class="LineNr">1947 </span> <span class="PreProc">var</span> offset/<span class="muRegEcx">ecx</span>: (offset <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> compute-offset trace, index
<span id="L1948" class="LineNr">1948 </span> <span class="PreProc">var</span> curr/eax: (addr <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> index trace, offset
<span id="L1949" class="LineNr">1949 </span> <span class="PreProc">var</span> already-hiding-lines?/<span class="muRegEcx">ecx</span>: (addr boolean) <span class="Special">&lt;-</span> copy _already-hiding-lines?
@ -2164,7 +2164,7 @@ if ('onhashchange' in window) {
<span id="L2099" class="LineNr">2099 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr trace) <span class="Special">&lt;-</span> copy _self
<span id="L2100" class="LineNr">2100 </span> <span class="PreProc">var</span> out/<span class="muRegEdi">edi</span>: (addr <a href='trace.mu.html#L50'>trace-index-stash</a>) <span class="Special">&lt;-</span> copy _out
<span id="L2101" class="LineNr">2101 </span> <span class="PreProc">var</span> data-ah/eax: (addr handle array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> get self, data
<span id="L2102" class="LineNr">2102 </span> <span class="PreProc">var</span> _data/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *data-ah
<span id="L2102" class="LineNr">2102 </span> <span class="PreProc">var</span> _data/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *data-ah
<span id="L2103" class="LineNr">2103 </span> <span class="PreProc">var</span> data/<span class="muRegEbx">ebx</span>: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> copy _data
<span id="L2104" class="LineNr">2104 </span> <span class="muComment"># cursor</span>
<span id="L2105" class="LineNr">2105 </span> <span class="PreProc">var</span> cursor-line-index-addr/eax: (addr int) <span class="Special">&lt;-</span> get self, cursor-line-index
@ -2210,25 +2210,25 @@ if ('onhashchange' in window) {
<span id="L2145" class="LineNr">2145 </span> <span class="PreProc">var</span> self/<span class="muRegEdi">edi</span>: (addr trace) <span class="Special">&lt;-</span> copy _self
<span id="L2146" class="LineNr">2146 </span> <span class="PreProc">var</span> in/<span class="muRegEsi">esi</span>: (addr <a href='trace.mu.html#L50'>trace-index-stash</a>) <span class="Special">&lt;-</span> copy _in
<span id="L2147" class="LineNr">2147 </span> <span class="PreProc">var</span> data-ah/eax: (addr handle array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> get self, data
<span id="L2148" class="LineNr">2148 </span> <span class="PreProc">var</span> _data/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *data-ah
<span id="L2148" class="LineNr">2148 </span> <span class="PreProc">var</span> _data/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *data-ah
<span id="L2149" class="LineNr">2149 </span> <span class="PreProc">var</span> data/<span class="muRegEbx">ebx</span>: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> copy _data
<span id="L2150" class="LineNr">2150 </span> <span class="muComment"># cursor</span>
<span id="L2151" class="LineNr">2151 </span> <span class="PreProc">var</span> cursor-depth/<span class="muRegEdx">edx</span>: (addr int) <span class="Special">&lt;-</span> get in, cursor-line-depth
<span id="L2152" class="LineNr">2152 </span> <span class="PreProc">var</span> cursor-line-label-ah/eax: (addr handle array byte) <span class="Special">&lt;-</span> get in, cursor-line-label
<span id="L2153" class="LineNr">2153 </span> <span class="PreProc">var</span> _cursor-line-label/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *cursor-line-label-ah
<span id="L2153" class="LineNr">2153 </span> <span class="PreProc">var</span> _cursor-line-label/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *cursor-line-label-ah
<span id="L2154" class="LineNr">2154 </span> <span class="PreProc">var</span> cursor-line-label/<span class="muRegEcx">ecx</span>: (addr array byte) <span class="Special">&lt;-</span> copy _cursor-line-label
<span id="L2155" class="LineNr">2155 </span> <span class="PreProc">var</span> cursor-line-data-ah/eax: (addr handle array byte) <span class="Special">&lt;-</span> get in, cursor-line-data
<span id="L2156" class="LineNr">2156 </span> <span class="PreProc">var</span> cursor-line-data/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *cursor-line-data-ah
<span id="L2156" class="LineNr">2156 </span> <span class="PreProc">var</span> cursor-line-data/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *cursor-line-data-ah
<span id="L2157" class="LineNr">2157 </span> <span class="PreProc">var</span> new-cursor-line-index/eax: int <span class="Special">&lt;-</span> <a href='trace.mu.html#L2174'>find-in-trace</a> self, *cursor-depth, cursor-line-label, cursor-line-data
<span id="L2158" class="LineNr">2158 </span> <span class="PreProc">var</span> dest/<span class="muRegEdx">edx</span>: (addr int) <span class="Special">&lt;-</span> get self, cursor-line-index
<span id="L2159" class="LineNr">2159 </span> copy-to *dest, new-cursor-line-index
<span id="L2160" class="LineNr">2160 </span> <span class="muComment"># top of screen</span>
<span id="L2161" class="LineNr">2161 </span> <span class="PreProc">var</span> top-depth/<span class="muRegEdx">edx</span>: (addr int) <span class="Special">&lt;-</span> get in, top-line-depth
<span id="L2162" class="LineNr">2162 </span> <span class="PreProc">var</span> top-line-label-ah/eax: (addr handle array byte) <span class="Special">&lt;-</span> get in, top-line-label
<span id="L2163" class="LineNr">2163 </span> <span class="PreProc">var</span> _top-line-label/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *top-line-label-ah
<span id="L2163" class="LineNr">2163 </span> <span class="PreProc">var</span> _top-line-label/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *top-line-label-ah
<span id="L2164" class="LineNr">2164 </span> <span class="PreProc">var</span> top-line-label/<span class="muRegEcx">ecx</span>: (addr array byte) <span class="Special">&lt;-</span> copy _top-line-label
<span id="L2165" class="LineNr">2165 </span> <span class="PreProc">var</span> top-line-data-ah/eax: (addr handle array byte) <span class="Special">&lt;-</span> get in, top-line-data
<span id="L2166" class="LineNr">2166 </span> <span class="PreProc">var</span> top-line-data/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *top-line-data-ah
<span id="L2166" class="LineNr">2166 </span> <span class="PreProc">var</span> top-line-data/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *top-line-data-ah
<span id="L2167" class="LineNr">2167 </span> <span class="PreProc">var</span> new-top-line-index/eax: int <span class="Special">&lt;-</span> <a href='trace.mu.html#L2174'>find-in-trace</a> self, *top-depth, top-line-label, top-line-data
<span id="L2168" class="LineNr">2168 </span> <span class="PreProc">var</span> dest/<span class="muRegEdx">edx</span>: (addr int) <span class="Special">&lt;-</span> get self, top-line-index
<span id="L2169" class="LineNr">2169 </span> copy-to *dest, new-top-line-index
@ -2239,7 +2239,7 @@ if ('onhashchange' in window) {
<span id="L2174" class="LineNr">2174 </span><span class="PreProc">fn</span> <span class="muFunction"><a href='trace.mu.html#L2174'>find-in-trace</a></span> _self: (addr trace), depth: int, label: (addr array byte), data: (addr array byte)<span class="PreProc"> -&gt; </span>_/eax: int <span class="Delimiter">{</span>
<span id="L2175" class="LineNr">2175 </span> <span class="PreProc">var</span> self/<span class="muRegEsi">esi</span>: (addr trace) <span class="Special">&lt;-</span> copy _self
<span id="L2176" class="LineNr">2176 </span> <span class="PreProc">var</span> candidates-ah/eax: (addr handle array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> get self, data
<span id="L2177" class="LineNr">2177 </span> <span class="PreProc">var</span> candidates/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *candidates-ah
<span id="L2177" class="LineNr">2177 </span> <span class="PreProc">var</span> candidates/eax: (addr array <a href='trace.mu.html#L41'>trace-line</a>) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *candidates-ah
<span id="L2178" class="LineNr">2178 </span> <span class="PreProc">var</span> i/<span class="muRegEcx">ecx</span>: int <span class="Special">&lt;-</span> copy <span class="Constant">0</span>
<span id="L2179" class="LineNr">2179 </span> <span class="PreProc">var</span> max/<span class="muRegEdx">edx</span>: (addr int) <span class="Special">&lt;-</span> get self, first-free
<span id="L2180" class="LineNr">2180 </span> <span class="Delimiter">{</span>
@ -2255,13 +2255,13 @@ if ('onhashchange' in window) {
<span id="L2190" class="LineNr">2190 </span> <span class="PreProc">break-if-!=</span>
<span id="L2191" class="LineNr">2191 </span> <span class="muComment"># if curr-&gt;label does not match, continue</span>
<span id="L2192" class="LineNr">2192 </span> <span class="PreProc">var</span> curr-label-ah/eax: (addr handle array byte) <span class="Special">&lt;-</span> get curr, label
<span id="L2193" class="LineNr">2193 </span> <span class="PreProc">var</span> curr-label/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *curr-label-ah
<span id="L2193" class="LineNr">2193 </span> <span class="PreProc">var</span> curr-label/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *curr-label-ah
<span id="L2194" class="LineNr">2194 </span> <span class="PreProc">var</span> match?/eax: boolean <span class="Special">&lt;-</span> <a href='../105string-equal.subx.html#L8'>string-equal?</a> curr-label, label
<span id="L2195" class="LineNr">2195 </span> compare match?, <span class="Constant">0</span>/false
<span id="L2196" class="LineNr">2196 </span> <span class="PreProc">break-if-=</span>
<span id="L2197" class="LineNr">2197 </span> <span class="muComment"># if curr-&gt;data does not match, continue</span>
<span id="L2198" class="LineNr">2198 </span> <span class="PreProc">var</span> curr-data-ah/eax: (addr handle array byte) <span class="Special">&lt;-</span> get curr, data
<span id="L2199" class="LineNr">2199 </span> <span class="PreProc">var</span> curr-data/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L223'>lookup</a> *curr-data-ah
<span id="L2199" class="LineNr">2199 </span> <span class="PreProc">var</span> curr-data/eax: (addr array byte) <span class="Special">&lt;-</span> <a href='../120allocate.subx.html#L235'>lookup</a> *curr-data-ah
<span id="L2200" class="LineNr">2200 </span> <span class="Delimiter">{</span>
<span id="L2201" class="LineNr">2201 </span> <span class="PreProc">var</span> match?/eax: boolean <span class="Special">&lt;-</span> <a href='../105string-equal.subx.html#L8'>string-equal?</a> curr-data, data
<span id="L2202" class="LineNr">2202 </span> compare match?, <span class="Constant">0</span>/false