1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-01 06:24:58 +03:00

Added stylist and glk_implementation to C

This commit is contained in:
Graham Nelson 2021-11-08 23:27:21 +00:00
parent 0bd08a362a
commit d7db94a1e4
28 changed files with 2837 additions and 2324 deletions

View file

@ -454,7 +454,7 @@ uncertainty range all of this becomes more explicable, but still.
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.c.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="5-cas.html">&#10094;</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresschapter"><a href="2-cg.html">2</a></li><li class="progresschapter"><a href="3-fti.html">3</a></li><li class="progresschapter"><a href="4-fi6.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-fnc.html">fnc</a></li><li class="progresssection"><a href="5-cnm.html">cnm</a></li><li class="progresssection"><a href="5-crf.html">crf</a></li><li class="progresssection"><a href="5-cgv.html">cgv</a></li><li class="progresssection"><a href="5-cmm.html">cmm</a></li><li class="progresssection"><a href="5-cas.html">cas</a></li><li class="progresscurrent">car</li><li class="progresssection"><a href="5-cpc.html">cpc</a></li><li class="progresssection"><a href="5-ccn.html">ccn</a></li><li class="progresssection"><a href="5-clt.html">clt</a></li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progresssection"><a href="5-cfm.html">cfm</a></li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progresssection"><a href="5-cuf.html">cuf</a></li><li class="progressnext"><a href="5-cpc.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="5-cas.html">&#10094;</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresschapter"><a href="2-cg.html">2</a></li><li class="progresschapter"><a href="3-fti.html">3</a></li><li class="progresschapter"><a href="4-fi6.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-fnc.html">fnc</a></li><li class="progresssection"><a href="5-cnm.html">cnm</a></li><li class="progresssection"><a href="5-crf.html">crf</a></li><li class="progresssection"><a href="5-cgv.html">cgv</a></li><li class="progresssection"><a href="5-cmm.html">cmm</a></li><li class="progresssection"><a href="5-cas.html">cas</a></li><li class="progresscurrent">car</li><li class="progresssection"><a href="5-cpc.html">cpc</a></li><li class="progresssection"><a href="5-ccn.html">ccn</a></li><li class="progresssection"><a href="5-clt.html">clt</a></li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progresssection"><a href="5-cfm.html">cfm</a></li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progresssection"><a href="5-cmn.html">cmn</a></li><li class="progresssection"><a href="5-cuf.html">cuf</a></li><li class="progressnext"><a href="5-cpc.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -947,7 +947,7 @@ or not the interpreter can perform certain tasks.
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.c.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="5-cmm.html">&#10094;</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresschapter"><a href="2-cg.html">2</a></li><li class="progresschapter"><a href="3-fti.html">3</a></li><li class="progresschapter"><a href="4-fi6.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-fnc.html">fnc</a></li><li class="progresssection"><a href="5-cnm.html">cnm</a></li><li class="progresssection"><a href="5-crf.html">crf</a></li><li class="progresssection"><a href="5-cgv.html">cgv</a></li><li class="progresssection"><a href="5-cmm.html">cmm</a></li><li class="progresscurrent">cas</li><li class="progresssection"><a href="5-car.html">car</a></li><li class="progresssection"><a href="5-cpc.html">cpc</a></li><li class="progresssection"><a href="5-ccn.html">ccn</a></li><li class="progresssection"><a href="5-clt.html">clt</a></li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progresssection"><a href="5-cfm.html">cfm</a></li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progresssection"><a href="5-cuf.html">cuf</a></li><li class="progressnext"><a href="5-car.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="5-cmm.html">&#10094;</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresschapter"><a href="2-cg.html">2</a></li><li class="progresschapter"><a href="3-fti.html">3</a></li><li class="progresschapter"><a href="4-fi6.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-fnc.html">fnc</a></li><li class="progresssection"><a href="5-cnm.html">cnm</a></li><li class="progresssection"><a href="5-crf.html">crf</a></li><li class="progresssection"><a href="5-cgv.html">cgv</a></li><li class="progresssection"><a href="5-cmm.html">cmm</a></li><li class="progresscurrent">cas</li><li class="progresssection"><a href="5-car.html">car</a></li><li class="progresssection"><a href="5-cpc.html">cpc</a></li><li class="progresssection"><a href="5-ccn.html">ccn</a></li><li class="progresssection"><a href="5-clt.html">clt</a></li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progresssection"><a href="5-cfm.html">cfm</a></li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progresssection"><a href="5-cmn.html">cmn</a></li><li class="progresssection"><a href="5-cuf.html">cuf</a></li><li class="progressnext"><a href="5-car.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -227,7 +227,7 @@ the latter would be universally true, which is useless.
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-ccn.html#SP2">&#167;2</a> (three times).</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="5-cpc.html">&#10094;</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresschapter"><a href="2-cg.html">2</a></li><li class="progresschapter"><a href="3-fti.html">3</a></li><li class="progresschapter"><a href="4-fi6.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-fnc.html">fnc</a></li><li class="progresssection"><a href="5-cnm.html">cnm</a></li><li class="progresssection"><a href="5-crf.html">crf</a></li><li class="progresssection"><a href="5-cgv.html">cgv</a></li><li class="progresssection"><a href="5-cmm.html">cmm</a></li><li class="progresssection"><a href="5-cas.html">cas</a></li><li class="progresssection"><a href="5-car.html">car</a></li><li class="progresssection"><a href="5-cpc.html">cpc</a></li><li class="progresscurrent">ccn</li><li class="progresssection"><a href="5-clt.html">clt</a></li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progresssection"><a href="5-cfm.html">cfm</a></li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progresssection"><a href="5-cuf.html">cuf</a></li><li class="progressnext"><a href="5-clt.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="5-cpc.html">&#10094;</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresschapter"><a href="2-cg.html">2</a></li><li class="progresschapter"><a href="3-fti.html">3</a></li><li class="progresschapter"><a href="4-fi6.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-fnc.html">fnc</a></li><li class="progresssection"><a href="5-cnm.html">cnm</a></li><li class="progresssection"><a href="5-crf.html">crf</a></li><li class="progresssection"><a href="5-cgv.html">cgv</a></li><li class="progresssection"><a href="5-cmm.html">cmm</a></li><li class="progresssection"><a href="5-cas.html">cas</a></li><li class="progresssection"><a href="5-car.html">car</a></li><li class="progresssection"><a href="5-cpc.html">cpc</a></li><li class="progresscurrent">ccn</li><li class="progresssection"><a href="5-clt.html">clt</a></li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progresssection"><a href="5-cfm.html">cfm</a></li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progresssection"><a href="5-cmn.html">cmn</a></li><li class="progresssection"><a href="5-cuf.html">cuf</a></li><li class="progressnext"><a href="5-clt.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -848,7 +848,7 @@ actual work.
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.c.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="5-com.html">&#10094;</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresschapter"><a href="2-cg.html">2</a></li><li class="progresschapter"><a href="3-fti.html">3</a></li><li class="progresschapter"><a href="4-fi6.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-fnc.html">fnc</a></li><li class="progresssection"><a href="5-cnm.html">cnm</a></li><li class="progresssection"><a href="5-crf.html">crf</a></li><li class="progresssection"><a href="5-cgv.html">cgv</a></li><li class="progresssection"><a href="5-cmm.html">cmm</a></li><li class="progresssection"><a href="5-cas.html">cas</a></li><li class="progresssection"><a href="5-car.html">car</a></li><li class="progresssection"><a href="5-cpc.html">cpc</a></li><li class="progresssection"><a href="5-ccn.html">ccn</a></li><li class="progresssection"><a href="5-clt.html">clt</a></li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progresscurrent">cfm</li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progresssection"><a href="5-cuf.html">cuf</a></li><li class="progressnext"><a href="5-cim.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="5-com.html">&#10094;</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresschapter"><a href="2-cg.html">2</a></li><li class="progresschapter"><a href="3-fti.html">3</a></li><li class="progresschapter"><a href="4-fi6.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-fnc.html">fnc</a></li><li class="progresssection"><a href="5-cnm.html">cnm</a></li><li class="progresssection"><a href="5-crf.html">crf</a></li><li class="progresssection"><a href="5-cgv.html">cgv</a></li><li class="progresssection"><a href="5-cmm.html">cmm</a></li><li class="progresssection"><a href="5-cas.html">cas</a></li><li class="progresssection"><a href="5-car.html">car</a></li><li class="progresssection"><a href="5-cpc.html">cpc</a></li><li class="progresssection"><a href="5-ccn.html">ccn</a></li><li class="progresssection"><a href="5-clt.html">clt</a></li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progresscurrent">cfm</li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progresssection"><a href="5-cmn.html">cmn</a></li><li class="progresssection"><a href="5-cuf.html">cuf</a></li><li class="progressnext"><a href="5-cim.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -253,7 +253,7 @@ newly-starting process.
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.c.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="5-crf.html">&#10094;</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresschapter"><a href="2-cg.html">2</a></li><li class="progresschapter"><a href="3-fti.html">3</a></li><li class="progresschapter"><a href="4-fi6.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-fnc.html">fnc</a></li><li class="progresssection"><a href="5-cnm.html">cnm</a></li><li class="progresssection"><a href="5-crf.html">crf</a></li><li class="progresscurrent">cgv</li><li class="progresssection"><a href="5-cmm.html">cmm</a></li><li class="progresssection"><a href="5-cas.html">cas</a></li><li class="progresssection"><a href="5-car.html">car</a></li><li class="progresssection"><a href="5-cpc.html">cpc</a></li><li class="progresssection"><a href="5-ccn.html">ccn</a></li><li class="progresssection"><a href="5-clt.html">clt</a></li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progresssection"><a href="5-cfm.html">cfm</a></li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progresssection"><a href="5-cuf.html">cuf</a></li><li class="progressnext"><a href="5-cmm.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="5-crf.html">&#10094;</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresschapter"><a href="2-cg.html">2</a></li><li class="progresschapter"><a href="3-fti.html">3</a></li><li class="progresschapter"><a href="4-fi6.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-fnc.html">fnc</a></li><li class="progresssection"><a href="5-cnm.html">cnm</a></li><li class="progresssection"><a href="5-crf.html">crf</a></li><li class="progresscurrent">cgv</li><li class="progresssection"><a href="5-cmm.html">cmm</a></li><li class="progresssection"><a href="5-cas.html">cas</a></li><li class="progresssection"><a href="5-car.html">car</a></li><li class="progresssection"><a href="5-cpc.html">cpc</a></li><li class="progresssection"><a href="5-ccn.html">ccn</a></li><li class="progresssection"><a href="5-clt.html">clt</a></li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progresssection"><a href="5-cfm.html">cfm</a></li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progresssection"><a href="5-cmn.html">cmn</a></li><li class="progresssection"><a href="5-cuf.html">cuf</a></li><li class="progressnext"><a href="5-cmm.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -91,469 +91,61 @@ function togglePopup(material_id) {
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CInputOutputModel::end</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">CInputOutputModel::end</span></span>:<br/>Final C - <a href="5-fnc.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">) {</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b></p>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>By input/output, we mean printing text, receiving textual commands, or reading
or writing files. Inter can do this in one of two ways: either
</p>
<ul class="items"><li>(a) With one of the following primitives, or
</li><li>(b) With an assembly-language opcode, and in particular <span class="extract"><span class="extract-syntax">@glk</span></span>.
</li></ul>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CInputOutputModel::invoke_primitive</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">CInputOutputModel::invoke_primitive</span></span>:<br/>C Program Control - <a href="5-cpc.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">code_generation</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">bip</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_tree_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax"> = </span><a href="2-cg.html#SP12" class="function-link"><span class="function-syntax">CodeGen::current</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bip</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">SPACES_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"for (int j = "</span><span class="plain-syntax">); </span><span class="constant-syntax">VNODE_1C</span><span class="plain-syntax">; </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"; j &gt; 0; j--) i7_print_char(proc, 32);"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">FONT_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_font(proc, "</span><span class="plain-syntax">); </span><span class="constant-syntax">VNODE_1C</span><span class="plain-syntax">; </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">")"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">STYLE_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_style(proc, "</span><span class="plain-syntax">); </span><span class="constant-syntax">VNODE_1C</span><span class="plain-syntax">; </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">")"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PRINT_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_C_string(proc, "</span><span class="plain-syntax">); </span><a href="2-cg.html#SP5" class="function-link"><span class="function-syntax">CodeGen::lt_mode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="constant-syntax">PRINTING_LTM</span><span class="plain-syntax">); </span><span class="constant-syntax">VNODE_1C</span><span class="plain-syntax">; </span><a href="2-cg.html#SP5" class="function-link"><span class="function-syntax">CodeGen::lt_mode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="constant-syntax">REGULAR_LTM</span><span class="plain-syntax">); </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">")"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PRINTCHAR_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_char(proc, "</span><span class="plain-syntax">); </span><span class="constant-syntax">VNODE_1C</span><span class="plain-syntax">; </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">")"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PRINTNL_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_char(proc, '\\n')"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PRINTOBJ_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_object(proc, "</span><span class="plain-syntax">); </span><span class="constant-syntax">VNODE_1C</span><span class="plain-syntax">; </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">")"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PRINTNUMBER_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_decimal(proc, "</span><span class="plain-syntax">); </span><span class="constant-syntax">VNODE_1C</span><span class="plain-syntax">; </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">")"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PRINTSTRING_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_C_string(proc, i7_text_to_C_string("</span><span class="plain-syntax">); </span><span class="constant-syntax">VNODE_1C</span><span class="plain-syntax">; </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"))"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PRINTDWORD_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_dword(proc, "</span><span class="plain-syntax">); </span><span class="constant-syntax">VNODE_1C</span><span class="plain-syntax">; </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">")"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">BOX_BIP:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_box(proc, "</span><span class="plain-syntax">); </span><a href="2-cg.html#SP5" class="function-link"><span class="function-syntax">CodeGen::lt_mode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="constant-syntax">BOX_LTM</span><span class="plain-syntax">); </span><span class="constant-syntax">VNODE_1C</span><span class="plain-syntax">; </span><a href="2-cg.html#SP5" class="function-link"><span class="function-syntax">CodeGen::lt_mode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="constant-syntax">REGULAR_LTM</span><span class="plain-syntax">); </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">")"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">default:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NOT_APPLICABLE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">SPACES_BIP:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"for (int j = "</span><span class="plain-syntax">); </span><span class="constant-syntax">VNODE_1C</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"; j &gt; 0; j--) i7_print_char(proc, 32);"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">FONT_BIP:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_styling(proc, 1, "</span><span class="plain-syntax">); </span><span class="constant-syntax">VNODE_1C</span><span class="plain-syntax">; </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">")"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">STYLE_BIP:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_styling(proc, 2, "</span><span class="plain-syntax">); </span><span class="constant-syntax">VNODE_1C</span><span class="plain-syntax">; </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">")"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PRINT_BIP:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_C_string(proc, "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-cg.html#SP5" class="function-link"><span class="function-syntax">CodeGen::lt_mode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="constant-syntax">PRINTING_LTM</span><span class="plain-syntax">); </span><span class="constant-syntax">VNODE_1C</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="2-cg.html#SP5" class="function-link"><span class="function-syntax">CodeGen::lt_mode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="constant-syntax">REGULAR_LTM</span><span class="plain-syntax">); </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">")"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PRINTCHAR_BIP:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_char(proc, "</span><span class="plain-syntax">); </span><span class="constant-syntax">VNODE_1C</span><span class="plain-syntax">; </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">")"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PRINTNL_BIP:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_char(proc, '\\n')"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PRINTOBJ_BIP:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_object(proc, "</span><span class="plain-syntax">); </span><span class="constant-syntax">VNODE_1C</span><span class="plain-syntax">; </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">")"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PRINTNUMBER_BIP:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_decimal(proc, "</span><span class="plain-syntax">); </span><span class="constant-syntax">VNODE_1C</span><span class="plain-syntax">; </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">")"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PRINTSTRING_BIP:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_C_string(proc, i7_text_to_C_string("</span><span class="plain-syntax">); </span><span class="constant-syntax">VNODE_1C</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"))"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PRINTDWORD_BIP:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_dword(proc, "</span><span class="plain-syntax">); </span><span class="constant-syntax">VNODE_1C</span><span class="plain-syntax">; </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">")"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">BOX_BIP:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"i7_print_box(proc, "</span><span class="plain-syntax">); </span><a href="2-cg.html#SP5" class="function-link"><span class="function-syntax">CodeGen::lt_mode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="constant-syntax">BOX_LTM</span><span class="plain-syntax">); </span><span class="constant-syntax">VNODE_1C</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="2-cg.html#SP5" class="function-link"><span class="function-syntax">CodeGen::lt_mode</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gen</span><span class="plain-syntax">, </span><span class="constant-syntax">REGULAR_LTM</span><span class="plain-syntax">); </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">")"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">default:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NOT_APPLICABLE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b></p>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>See <a href="5-clt.html" class="internal">C Literals</a> for the implementation of <span class="extract"><span class="extract-syntax">i7_print_dword</span></span>: it funnels
through to <span class="extract"><span class="extract-syntax">i7_print_char</span></span>, and so do all of these:
</p>
<pre class="Extracts-displayed-code all-displayed-code code-font">
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">I7_BODY_TEXT_ID</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">201</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">I7_STATUS_TEXT_ID</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">202</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">I7_BOX_TEXT_ID</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">203</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_style</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">what</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_font</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">what</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fileusage_Data</span><span class="Extracts-plain-syntax"> (0</span><span class="Extracts-identifier-syntax">x00</span><span class="Extracts-plain-syntax">)</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fileusage_SavedGame</span><span class="Extracts-plain-syntax"> (0</span><span class="Extracts-identifier-syntax">x01</span><span class="Extracts-plain-syntax">)</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fileusage_Transcript</span><span class="Extracts-plain-syntax"> (0</span><span class="Extracts-identifier-syntax">x02</span><span class="Extracts-plain-syntax">)</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fileusage_InputRecord</span><span class="Extracts-plain-syntax"> (0</span><span class="Extracts-identifier-syntax">x03</span><span class="Extracts-plain-syntax">)</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fileusage_TypeMask</span><span class="Extracts-plain-syntax"> (0</span><span class="Extracts-identifier-syntax">x0f</span><span class="Extracts-plain-syntax">)</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fileusage_TextMode</span><span class="Extracts-plain-syntax"> (0</span><span class="Extracts-identifier-syntax">x100</span><span class="Extracts-plain-syntax">)</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fileusage_BinaryMode</span><span class="Extracts-plain-syntax"> (0</span><span class="Extracts-identifier-syntax">x000</span><span class="Extracts-plain-syntax">)</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">filemode_Write</span><span class="Extracts-plain-syntax"> (0</span><span class="Extracts-identifier-syntax">x01</span><span class="Extracts-plain-syntax">)</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">filemode_Read</span><span class="Extracts-plain-syntax"> (0</span><span class="Extracts-identifier-syntax">x02</span><span class="Extracts-plain-syntax">)</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">filemode_ReadWrite</span><span class="Extracts-plain-syntax"> (0</span><span class="Extracts-identifier-syntax">x03</span><span class="Extracts-plain-syntax">)</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">filemode_WriteAppend</span><span class="Extracts-plain-syntax"> (0</span><span class="Extracts-identifier-syntax">x05</span><span class="Extracts-plain-syntax">)</span>
<span class="Extracts-identifier-syntax">typedef</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">struct</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fileref</span><span class="Extracts-plain-syntax"> {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">usage</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">name</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">char</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">leafname</span><span class="Extracts-plain-syntax">[128];</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">FILE</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">handle</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">} </span><span class="Extracts-identifier-syntax">i7_fileref</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_fileref_create_by_name</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">usage</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">name</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fseek</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">pos</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">origin</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_ftell</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fopen</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">mode</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fclose</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_fileref_does_file_exist</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fputc</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fgetc</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">typedef</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">struct</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_stream</span><span class="Extracts-plain-syntax"> {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">FILE</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">to_file</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">to_file_id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">wchar_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">to_memory</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">size_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">memory_used</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">size_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">memory_capacity</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">previous_id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">write_here_on_closure</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">size_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">write_limit</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">active</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">encode_UTF8</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">char_size</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">chars_read</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">read_position</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">end_position</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">owned_by_window_id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fixed_pitch</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">char</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">style</span><span class="Extracts-plain-syntax">[128];</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">char</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">composite_style</span><span class="Extracts-plain-syntax">[300];</span>
<span class="Extracts-plain-syntax">} </span><span class="Extracts-identifier-syntax">i7_stream</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_stream_get_current</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7_stream</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_new_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">FILE</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">F</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">win_id</span><span class="Extracts-plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.h.</li></ul>
<pre class="Extracts-displayed-code all-displayed-code code-font">
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">I7_MAX_STREAMS</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">128</span>
<span class="Extracts-identifier-syntax">i7_stream</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">I7_MAX_STREAMS</span><span class="Extracts-plain-syntax">];</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fn_i7_mgl_TEXT_TY_CharacterLength</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_txt</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_ch</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_i</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_dsize</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_p</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_cp</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_r</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fn_i7_mgl_BlkValueRead</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_from</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_pos</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_do_not_indirect</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_long_block</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_chunk_size_in_bytes</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_header_size_in_bytes</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_flags</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_entry_size_in_bytes</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_seek_byte_position</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_style</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">what_v</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_stream</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax"> = &amp;(</span><span class="Extracts-identifier-syntax">i7_memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">state</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">current_output_stream_ID</span><span class="Extracts-plain-syntax">]);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">style</span><span class="Extracts-plain-syntax">[0] = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">switch</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">what_v</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">sprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">style</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">bold</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">2</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">sprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">style</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">italic</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">3</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">sprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">style</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">reverse</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">default</span><span class="Extracts-plain-syntax">: {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">L</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">fn_i7_mgl_TEXT_TY_CharacterLength</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">what_v</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">L</span><span class="Extracts-plain-syntax"> &gt; </span><span class="Extracts-constant-syntax">127</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">L</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">127</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">for</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">=0; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">&lt;</span><span class="Extracts-identifier-syntax">L</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">++) </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">style</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">] = </span><span class="Extracts-identifier-syntax">fn_i7_mgl_BlkValueRead</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">what_v</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">style</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">L</span><span class="Extracts-plain-syntax">] = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">sprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">composite_style</span><span class="Extracts-plain-syntax">, "%</span><span class="Extracts-identifier-syntax">s</span><span class="Extracts-plain-syntax">", </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">style</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">fixed_pitch</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">strlen</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">style</span><span class="Extracts-plain-syntax">) &gt; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">sprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">composite_style</span><span class="Extracts-plain-syntax"> + </span><span class="Extracts-identifier-syntax">strlen</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">composite_style</span><span class="Extracts-plain-syntax">), ",");</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">sprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">composite_style</span><span class="Extracts-plain-syntax"> + </span><span class="Extracts-identifier-syntax">strlen</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">composite_style</span><span class="Extracts-plain-syntax">), "</span><span class="Extracts-identifier-syntax">fixedpitch</span><span class="Extracts-plain-syntax">");</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_font</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">what</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_stream</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax"> = &amp;(</span><span class="Extracts-identifier-syntax">i7_memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">state</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">current_output_stream_ID</span><span class="Extracts-plain-syntax">]);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">fixed_pitch</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">what</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">sprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">composite_style</span><span class="Extracts-plain-syntax">, "%</span><span class="Extracts-identifier-syntax">s</span><span class="Extracts-plain-syntax">", </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">style</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">fixed_pitch</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">strlen</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">style</span><span class="Extracts-plain-syntax">) &gt; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">sprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">composite_style</span><span class="Extracts-plain-syntax"> + </span><span class="Extracts-identifier-syntax">strlen</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">composite_style</span><span class="Extracts-plain-syntax">), ",");</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">sprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">composite_style</span><span class="Extracts-plain-syntax"> + </span><span class="Extracts-identifier-syntax">strlen</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">composite_style</span><span class="Extracts-plain-syntax">), "</span><span class="Extracts-identifier-syntax">fixedpitch</span><span class="Extracts-plain-syntax">");</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">i7_fileref</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">filerefs</span><span class="Extracts-plain-syntax">[128 + </span><span class="Extracts-constant-syntax">32</span><span class="Extracts-plain-syntax">];</span>
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_no_filerefs</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_fileref_create_by_name</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">usage</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">name</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i7_no_filerefs</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">128</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Out</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">of</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">streams</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_no_filerefs</span><span class="Extracts-plain-syntax">++;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">filerefs</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">usage</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">usage</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">filerefs</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">name</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">name</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">filerefs</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">filerefs</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">handle</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">for</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">=0; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">&lt;128; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">++) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7byte_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_read_byte</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">name</span><span class="Extracts-plain-syntax">+1+</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">filerefs</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">leafname</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">] = </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">filerefs</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">leafname</span><span class="Extracts-plain-syntax">[127] = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">sprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">filerefs</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">leafname</span><span class="Extracts-plain-syntax"> + </span><span class="Extracts-identifier-syntax">strlen</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">filerefs</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">leafname</span><span class="Extracts-plain-syntax">), ".</span><span class="Extracts-identifier-syntax">glkdata</span><span class="Extracts-plain-syntax">");</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fseek</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">pos</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">origin</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">128</span><span class="Extracts-plain-syntax">)) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Too</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">many</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">filerefs</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">handle</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">File</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">not</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">open</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fseek</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">filerefs</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">handle</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">pos</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">origin</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_ftell</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">128</span><span class="Extracts-plain-syntax">)) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Too</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">many</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">filerefs</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">handle</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">File</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">not</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">open</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">t</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">ftell</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">filerefs</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">handle</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">t</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fopen</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">mode</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">128</span><span class="Extracts-plain-syntax">)) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Too</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">many</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">filerefs</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">handle</span><span class="Extracts-plain-syntax">) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">File</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">already</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">open</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">char</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">c_mode</span><span class="Extracts-plain-syntax"> = "</span><span class="Extracts-identifier-syntax">r</span><span class="Extracts-plain-syntax">";</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">switch</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">mode</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">filemode_Write</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">c_mode</span><span class="Extracts-plain-syntax"> = "</span><span class="Extracts-identifier-syntax">w</span><span class="Extracts-plain-syntax">"; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">filemode_Read</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">c_mode</span><span class="Extracts-plain-syntax"> = "</span><span class="Extracts-identifier-syntax">r</span><span class="Extracts-plain-syntax">"; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">filemode_ReadWrite</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">c_mode</span><span class="Extracts-plain-syntax"> = "</span><span class="Extracts-identifier-syntax">r</span><span class="Extracts-plain-syntax">+"; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">filemode_WriteAppend</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">c_mode</span><span class="Extracts-plain-syntax"> = "</span><span class="Extracts-identifier-syntax">r</span><span class="Extracts-plain-syntax">+"; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">FILE</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">h</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">fopen</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">filerefs</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">leafname</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">c_mode</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">h</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">filerefs</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">handle</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">h</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">mode</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">filemode_WriteAppend</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">i7_fseek</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">SEEK_END</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fclose</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">128</span><span class="Extracts-plain-syntax">)) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Too</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">many</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">filerefs</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">handle</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">File</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">not</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">open</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fclose</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">filerefs</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">handle</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">filerefs</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">handle</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_fileref_does_file_exist</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">128</span><span class="Extracts-plain-syntax">)) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Too</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">many</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">filerefs</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">handle</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i7_fopen</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">filemode_Read</span><span class="Extracts-plain-syntax">)) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fclose</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">); </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fputc</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">128</span><span class="Extracts-plain-syntax">)) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Too</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">many</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">filerefs</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">handle</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">File</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">not</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">open</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fputc</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">filerefs</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">handle</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fgetc</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">128</span><span class="Extracts-plain-syntax">)) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Too</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">many</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">filerefs</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">handle</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">File</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">not</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">open</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">fgetc</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">filerefs</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">handle</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_stdout_id</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7_stderr_id</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_stream_get_current</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">state</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">current_output_stream_ID</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_stream_set_current</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-identifier-syntax">I7_MAX_STREAMS</span><span class="Extracts-plain-syntax">)) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Stream</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ID</span><span class="Extracts-plain-syntax"> %</span><span class="Extracts-identifier-syntax">d</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">out</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">of</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">range</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">", </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">state</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">current_output_stream_ID</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">i7_stream</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_new_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">FILE</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">F</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">win_id</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_stream</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">to_file</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">F</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">to_file_id</span><span class="Extracts-plain-syntax"> = -1;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">to_memory</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">memory_used</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">memory_capacity</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">write_here_on_closure</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">write_limit</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">previous_id</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">active</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">encode_UTF8</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">char_size</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">4</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">chars_read</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">read_position</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">end_position</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">owned_by_window_id</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">win_id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">style</span><span class="Extracts-plain-syntax">[0] = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">fixed_pitch</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">composite_style</span><span class="Extracts-plain-syntax">[0] = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.c.</li></ul>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b></p>
<pre class="Extracts-displayed-code all-displayed-code code-font">
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_initialise_streams</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_open_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">FILE</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">F</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">win_id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_stream_open_memory</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">buffer</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">len</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fmode</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_stream_open_memory_uni</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">buffer</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">len</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fmode</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_stream_open_file</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fileref</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">usage</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">seekmode_Start</span><span class="Extracts-plain-syntax"> (0)</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">seekmode_Current</span><span class="Extracts-plain-syntax"> (1)</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">seekmode_End</span><span class="Extracts-plain-syntax"> (2)</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_stream_set_position</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">pos</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">seekmode</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_stream_get_position</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_stream_close</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">typedef</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">struct</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_winref</span><span class="Extracts-plain-syntax"> {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">type</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">stream_id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">} </span><span class="Extracts-identifier-syntax">i7_winref</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_window_open</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">split</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">method</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">size</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">wintype</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_stream_of_window</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_rock_of_window</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_to_receiver</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">wchar_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_put_char_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">stream_id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_get_char_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">stream_id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_char</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_C_string</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">char</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">c_string</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_decimal</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_object</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_box</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.h.</li></ul>
<pre class="Extracts-displayed-code all-displayed-code code-font">
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_initialise_streams</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">for</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">=0; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">&lt;</span><span class="Extracts-identifier-syntax">I7_MAX_STREAMS</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">++) </span><span class="Extracts-identifier-syntax">i7_memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">] = </span><span class="Extracts-identifier-syntax">i7_new_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i7_stdout_id</span><span class="Extracts-plain-syntax">] = </span><span class="Extracts-identifier-syntax">i7_new_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">stdout</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i7_stdout_id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">active</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i7_stdout_id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">encode_UTF8</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i7_stderr_id</span><span class="Extracts-plain-syntax">] = </span><span class="Extracts-identifier-syntax">i7_new_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i7_stderr_id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">active</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i7_stderr_id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">encode_UTF8</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_stream_set_current</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7_stdout_id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_open_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">FILE</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">F</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">win_id</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">for</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">=0; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">&lt;</span><span class="Extracts-identifier-syntax">I7_MAX_STREAMS</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">++)</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i7_memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">active</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">] = </span><span class="Extracts-identifier-syntax">i7_new_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">F</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">win_id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">active</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">previous_id</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">state</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">current_output_stream_ID</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Out</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">of</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">streams</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_stream_open_memory</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">buffer</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">len</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fmode</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">fmode</span><span class="Extracts-plain-syntax"> != </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Only</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">file</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">mode</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">supported</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">not</span><span class="Extracts-plain-syntax"> %</span><span class="Extracts-identifier-syntax">d</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">", </span><span class="Extracts-identifier-syntax">fmode</span><span class="Extracts-plain-syntax">); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_open_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">write_here_on_closure</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">buffer</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">write_limit</span><span class="Extracts-plain-syntax"> = (</span><span class="Extracts-identifier-syntax">size_t</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">len</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">char_size</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">state</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">current_output_stream_ID</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_stream_open_memory_uni</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">buffer</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">len</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fmode</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">fmode</span><span class="Extracts-plain-syntax"> != </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Only</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">file</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">mode</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">supported</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">not</span><span class="Extracts-plain-syntax"> %</span><span class="Extracts-identifier-syntax">d</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">", </span><span class="Extracts-identifier-syntax">fmode</span><span class="Extracts-plain-syntax">); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_open_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">write_here_on_closure</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">buffer</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">write_limit</span><span class="Extracts-plain-syntax"> = (</span><span class="Extracts-identifier-syntax">size_t</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">len</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">char_size</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">4</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">state</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">current_output_stream_ID</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_stream_open_file</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fileref</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">usage</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_open_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">to_file_id</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">fileref</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i7_fopen</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">fileref</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">usage</span><span class="Extracts-plain-syntax">) == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_stream_set_position</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">pos</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">seekmode</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-identifier-syntax">I7_MAX_STREAMS</span><span class="Extracts-plain-syntax">)) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Stream</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ID</span><span class="Extracts-plain-syntax"> %</span><span class="Extracts-identifier-syntax">d</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">out</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">of</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">range</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">", </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_stream</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax"> = &amp;(</span><span class="Extracts-identifier-syntax">i7_memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">]);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_file_id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">origin</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">switch</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">seekmode</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">seekmode_Start</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">origin</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">SEEK_SET</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">seekmode_Current</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">origin</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">SEEK_CUR</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">seekmode_End</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">origin</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">SEEK_END</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">default</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Unknown</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">seekmode</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fseek</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_file_id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">pos</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">origin</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">glk_stream_set_position</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">supported</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">only</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">for</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">file</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">streams</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_stream_get_position</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-identifier-syntax">I7_MAX_STREAMS</span><span class="Extracts-plain-syntax">)) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Stream</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ID</span><span class="Extracts-plain-syntax"> %</span><span class="Extracts-identifier-syntax">d</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">out</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">of</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">range</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">", </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_stream</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax"> = &amp;(</span><span class="Extracts-identifier-syntax">i7_memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">]);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_file_id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">i7_ftell</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_file_id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_used</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_stream_close</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-identifier-syntax">I7_MAX_STREAMS</span><span class="Extracts-plain-syntax">)) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Stream</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ID</span><span class="Extracts-plain-syntax"> %</span><span class="Extracts-identifier-syntax">d</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">out</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">of</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">range</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">", </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Cannot</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">close</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">stdout</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Cannot</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">close</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_stream</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax"> = &amp;(</span><span class="Extracts-identifier-syntax">i7_memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">]);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">active</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Stream</span><span class="Extracts-plain-syntax"> %</span><span class="Extracts-identifier-syntax">d</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">already</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">closed</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">", </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">state</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">current_output_stream_ID</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">state</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">current_output_stream_ID</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">previous_id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">write_here_on_closure</span><span class="Extracts-plain-syntax"> != </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">char_size</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">4</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">for</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">size_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">write_limit</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">++)</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_used</span><span class="Extracts-plain-syntax">)</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_write_word</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">write_here_on_closure</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_memory</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">]);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">else</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_write_word</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">write_here_on_closure</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">for</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">size_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">write_limit</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">++)</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_used</span><span class="Extracts-plain-syntax">)</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_write_byte</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">write_here_on_closure</span><span class="Extracts-plain-syntax"> + </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_memory</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">]);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">else</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_write_byte</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">write_here_on_closure</span><span class="Extracts-plain-syntax"> + </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax"> == -1) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_push</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">chars_read</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_push</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_used</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax"> != </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_write_word</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">chars_read</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_write_word</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_used</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_file_id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">i7_fclose</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_file_id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">active</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_used</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">i7_winref</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">winrefs</span><span class="Extracts-plain-syntax">[128];</span>
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_no_winrefs</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_window_open</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">split</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">method</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">size</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">wintype</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i7_no_winrefs</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">128</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Out</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">of</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">windows</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_no_winrefs</span><span class="Extracts-plain-syntax">++;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">winrefs</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">type</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">wintype</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">winrefs</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">stream_id</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_open_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">stdout</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">winrefs</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_stream_of_window</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-identifier-syntax">i7_no_winrefs</span><span class="Extracts-plain-syntax">)) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Window</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ID</span><span class="Extracts-plain-syntax"> %</span><span class="Extracts-identifier-syntax">d</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">out</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">of</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">range</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">", </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">winrefs</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">stream_id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_rock_of_window</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-identifier-syntax">i7_no_winrefs</span><span class="Extracts-plain-syntax">)) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Window</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ID</span><span class="Extracts-plain-syntax"> %</span><span class="Extracts-identifier-syntax">d</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">out</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">of</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">range</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">", </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">winrefs</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_to_receiver</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">wchar_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_stream</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax"> = &amp;(</span><span class="Extracts-identifier-syntax">i7_memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">state</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">current_output_stream_ID</span><span class="Extracts-plain-syntax">]);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">receiver</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">fputc</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">stdout</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">receiver</span><span class="Extracts-plain-syntax">)(</span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">composite_style</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_put_char_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">stream_id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_stream</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax"> = &amp;(</span><span class="Extracts-identifier-syntax">i7_memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">stream_id</span><span class="Extracts-plain-syntax">]);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_file</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">win_id</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">owned_by_window_id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax"> = -1;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">win_id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_rock_of_window</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">win_id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">unsigned</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax"> = (</span><span class="Extracts-identifier-syntax">unsigned</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">use_UTF8</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x800</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_to_receiver</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">xE0</span><span class="Extracts-plain-syntax"> + (</span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax"> &gt;&gt; </span><span class="Extracts-constant-syntax">12</span><span class="Extracts-plain-syntax">));</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_to_receiver</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x80</span><span class="Extracts-plain-syntax"> + ((</span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax"> &gt;&gt; </span><span class="Extracts-constant-syntax">6</span><span class="Extracts-plain-syntax">) &amp; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x3f</span><span class="Extracts-plain-syntax">));</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_to_receiver</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x80</span><span class="Extracts-plain-syntax"> + (</span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax"> &amp; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x3f</span><span class="Extracts-plain-syntax">));</span>
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x80</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_to_receiver</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">xC0</span><span class="Extracts-plain-syntax"> + (</span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax"> &gt;&gt; </span><span class="Extracts-constant-syntax">6</span><span class="Extracts-plain-syntax">));</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_to_receiver</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x80</span><span class="Extracts-plain-syntax"> + (</span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax"> &amp; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x3f</span><span class="Extracts-plain-syntax">));</span>
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_to_receiver</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">, (</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_to_receiver</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">, (</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_file_id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fputc</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, (</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_file_id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">end_position</span><span class="Extracts-plain-syntax">++;</span>
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_used</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_capacity</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">size_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">needed</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">4</span><span class="Extracts-plain-syntax">*</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_capacity</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">needed</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">needed</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">1024</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">wchar_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">new_data</span><span class="Extracts-plain-syntax"> = (</span><span class="Extracts-identifier-syntax">wchar_t</span><span class="Extracts-plain-syntax"> *) </span><span class="Extracts-identifier-syntax">calloc</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">needed</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">sizeof</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">wchar_t</span><span class="Extracts-plain-syntax">));</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">new_data</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Out</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">of</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">memory</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">for</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">size_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">=0; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">&lt;</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_used</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">++) </span><span class="Extracts-identifier-syntax">new_data</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">] = </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_memory</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">];</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">free</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_memory</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_memory</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">new_data</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_memory</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_used</span><span class="Extracts-plain-syntax">++] = (</span><span class="Extracts-identifier-syntax">wchar_t</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_get_char_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">stream_id</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_stream</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax"> = &amp;(</span><span class="Extracts-identifier-syntax">i7_memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">stream_id</span><span class="Extracts-plain-syntax">]);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_file_id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">chars_read</span><span class="Extracts-plain-syntax">++;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fgetc</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_file_id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_char</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">13</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">10</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_put_char_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">state</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">current_output_stream_ID</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_C_string</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">char</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">c_string</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">c_string</span><span class="Extracts-plain-syntax">)</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">for</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">=0; </span><span class="Extracts-identifier-syntax">c_string</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">]; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">++)</span>
@ -565,30 +157,72 @@ function togglePopup(material_id) {
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">sprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">room</span><span class="Extracts-plain-syntax">, "%</span><span class="Extracts-identifier-syntax">d</span><span class="Extracts-plain-syntax">", (</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_C_string</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">room</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_object</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_decimal</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_box</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">i7_print_box</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.c.</li></ul>
<pre class="Extracts-displayed-code all-displayed-code code-font">
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">evtype_None</span><span class="Extracts-plain-syntax"> (0)</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">evtype_Timer</span><span class="Extracts-plain-syntax"> (1)</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">evtype_CharInput</span><span class="Extracts-plain-syntax"> (2)</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">evtype_LineInput</span><span class="Extracts-plain-syntax"> (3)</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">evtype_MouseInput</span><span class="Extracts-plain-syntax"> (4)</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">evtype_Arrange</span><span class="Extracts-plain-syntax"> (5)</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">evtype_Redraw</span><span class="Extracts-plain-syntax"> (6)</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">evtype_SoundNotify</span><span class="Extracts-plain-syntax"> (7)</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">evtype_Hyperlink</span><span class="Extracts-plain-syntax"> (8)</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">evtype_VolumeNotify</span><span class="Extracts-plain-syntax"> (9)</span>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>Which in turn uses the <span class="extract"><span class="Extracts-extract-syntax">@glk</span></span> opcode:
</p>
<span class="Extracts-identifier-syntax">typedef</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">struct</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_event</span><span class="Extracts-plain-syntax"> {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">type</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">win_id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">val1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">val2</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">} </span><span class="Extracts-identifier-syntax">i7_glk_event</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-identifier-syntax">i7_glk_event</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">i7_next_event</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_make_event</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7_glk_event</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_select</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">structure</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_request_line_event</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">window_id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">buffer</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">max_len</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">init_len</span><span class="Extracts-plain-syntax">);</span>
<pre class="Extracts-displayed-code all-displayed-code code-font">
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_char</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.h.</li></ul>
<pre class="Extracts-displayed-code all-displayed-code code-font">
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_char</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">13</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">10</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_push</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">current</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_opcode_glk</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7_glk_stream_get_current</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, &amp;</span><span class="Extracts-identifier-syntax">current</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_push</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">current</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_opcode_glk</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7_glk_put_char_stream</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">2</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.c.</li></ul>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>At this point, then, all of our I/O needs will be handled if we can just
define two functions: <span class="extract"><span class="Extracts-extract-syntax">i7_styling</span></span>, for setting the font style, and <span class="extract"><span class="Extracts-extract-syntax">i7_opcode_glk</span></span>.
So we're nearly done, right? Right?
</p>
<p class="commentary">But in fact we route both of these functions through hooks which the user can
provide, so that the user can change the entire I/O model (if she is willing to
code up an alternative):
</p>
<pre class="Extracts-displayed-code all-displayed-code code-font">
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_styling</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">which</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">what</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_default_stylist</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">which</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">what</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_opcode_glk</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glk_api_selector</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">varargc</span><span class="Extracts-plain-syntax">,</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_default_glk</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glk_api_selector</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">varargc</span><span class="Extracts-plain-syntax">,</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.h.</li></ul>
<pre class="Extracts-displayed-code all-displayed-code code-font">
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_styling</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">which</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">what</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">stylist</span><span class="Extracts-plain-syntax">)(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">which</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">what</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_opcode_glk</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glk_api_selector</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">varargc</span><span class="Extracts-plain-syntax">,</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">glk_implementation</span><span class="Extracts-plain-syntax">)(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">glk_api_selector</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">varargc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.c.</li></ul>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>What makes this more burdensome is that <span class="extract"><span class="Extracts-extract-syntax">@glk</span></span> is not so much a single opcode
as an entire instruction set: it is an compendium of over 120 disparate operations.
Indeed, the <span class="extract"><span class="Extracts-extract-syntax">glk_api_selector</span></span> argument to <span class="extract"><span class="Extracts-extract-syntax">i7_opcode_glk</span></span> chooses which one is
being used. For convenience, we define a set of names for them all &mdash; which does
not imply any commitment to implement them all.
</p>
<pre class="Extracts-displayed-code all-displayed-code code-font">
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_exit</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x0001</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_set_interrupt_handler</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x0002</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_tick</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x0003</span>
@ -712,187 +346,68 @@ function togglePopup(material_id) {
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_date_to_time_local</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x016D</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_date_to_simple_time_utc</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x016E</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_date_to_simple_time_local</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x016F</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_opcode_glk</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glk_api_selector</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">varargc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fn_i7_mgl_IndefArt</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_obj</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_i</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fn_i7_mgl_DefArt</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_obj</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_i</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fn_i7_mgl_CIndefArt</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_obj</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_i</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fn_i7_mgl_CDefArt</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_obj</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_i</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fn_i7_mgl_PrintShortName</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_obj</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_i</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_name</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_object</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_box</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_read</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.h.</li></ul>
<p class="commentary">A few other constants will also be useful. These are the window IDs for the
three Glk windows used by the standard Inform 7 kits: <span class="extract"><span class="Extracts-extract-syntax">I7_BODY_TEXT_ID</span></span> is
where text is regularly printed; <span class="extract"><span class="Extracts-extract-syntax">I7_STATUS_TEXT_ID</span></span> is for the "status line"
at the top of a traditional interactive fiction display, but can simply be
ignored for non-IF purposes; and <span class="extract"><span class="Extracts-extract-syntax">I7_BOX_TEXT_ID</span></span> is where box quotations
would be displayed over the top of text, though C projects probably should
not use this, and the default Glk implementation here ignores it.
</p>
<pre class="Extracts-displayed-code all-displayed-code code-font">
<span class="Extracts-identifier-syntax">i7_glk_event</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_events_ring_buffer</span><span class="Extracts-plain-syntax">[32];</span>
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_rb_back</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7_rb_front</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-identifier-syntax">i7_glk_event</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">i7_next_event</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i7_rb_front</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">i7_rb_back</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_event</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax"> = &amp;(</span><span class="Extracts-identifier-syntax">i7_events_ring_buffer</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i7_rb_back</span><span class="Extracts-plain-syntax">]);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_rb_back</span><span class="Extracts-plain-syntax">++; </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i7_rb_back</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">32</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">i7_rb_back</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_make_event</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7_glk_event</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_events_ring_buffer</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i7_rb_front</span><span class="Extracts-plain-syntax">] = </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_rb_front</span><span class="Extracts-plain-syntax">++; </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i7_rb_front</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">32</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">i7_rb_front</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_select</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">structure</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_event</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_next_event</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">No</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">events</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">available</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">to</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">select</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">structure</span><span class="Extracts-plain-syntax"> == -1) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_push</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">type</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_push</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">win_id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_push</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">val1</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_push</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">val2</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">structure</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_write_word</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">structure</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">type</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_write_word</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">structure</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">win_id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_write_word</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">structure</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">2</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">val1</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_write_word</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">structure</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">3</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">val2</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_no_lr</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_request_line_event</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">window_id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">buffer</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">max_len</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">init_len</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_event</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">type</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">evtype_LineInput</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">win_id</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">window_id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">val1</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">val2</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">wchar_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">pos</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">init_len</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">sender</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">i7_benign_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">char</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">s</span><span class="Extracts-plain-syntax"> = (</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">sender</span><span class="Extracts-plain-syntax">)(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">send_count</span><span class="Extracts-plain-syntax">++);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">while</span><span class="Extracts-plain-syntax"> (1) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">s</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">++];</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">EOF</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax"> == '\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">') || (</span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax"> == '\</span><span class="Extracts-identifier-syntax">r</span><span class="Extracts-plain-syntax">')) </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">pos</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-identifier-syntax">max_len</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">i7_write_byte</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">buffer</span><span class="Extracts-plain-syntax"> + </span><span class="Extracts-identifier-syntax">pos</span><span class="Extracts-plain-syntax">++, </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">pos</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-identifier-syntax">max_len</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">i7_write_byte</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">buffer</span><span class="Extracts-plain-syntax"> + </span><span class="Extracts-identifier-syntax">pos</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">); </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_write_byte</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">buffer</span><span class="Extracts-plain-syntax"> + </span><span class="Extracts-identifier-syntax">max_len</span><span class="Extracts-plain-syntax">-1, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">val1</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">pos</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_make_event</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i7_no_lr</span><span class="Extracts-plain-syntax">++ == </span><span class="Extracts-constant-syntax">1000</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stdout</span><span class="Extracts-plain-syntax">, "[</span><span class="Extracts-identifier-syntax">Too</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">many</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">line</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">events</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">terminating</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">to</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">prevent</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">hang</span><span class="Extracts-plain-syntax">]\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">exit</span><span class="Extracts-plain-syntax">(0);</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_opcode_glk</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glk_api_selector</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">varargc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_debug_stack</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">i7_opcode_glk</span><span class="Extracts-plain-syntax">");</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[5] = { </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax"> }, </span><span class="Extracts-identifier-syntax">argc</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">while</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">varargc</span><span class="Extracts-plain-syntax"> &gt; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">v</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_pull</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">argc</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-constant-syntax">5</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">argc</span><span class="Extracts-plain-syntax">++] = </span><span class="Extracts-identifier-syntax">v</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">varargc</span><span class="Extracts-plain-syntax">--;</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">switch</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">glk_api_selector</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_gestalt</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_window_iterate</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_window_open</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_do_glk_window_open</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[1], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[2], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[3], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[4]); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_set_window</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_stream_set_current</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7_stream_of_window</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0])); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_stream_iterate</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_fileref_iterate</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_stylehint_set</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_schannel_iterate</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_schannel_create</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_set_style</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_window_move_cursor</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_stream_get_position</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_do_glk_stream_get_position</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0]); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_window_get_size</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0]) </span><span class="Extracts-identifier-syntax">i7_write_word</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0], </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">80</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[1]) </span><span class="Extracts-identifier-syntax">i7_write_word</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[1], </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">8</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_request_line_event</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_do_glk_request_line_event</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[1], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[2], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[3]); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_select</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_do_glk_select</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0]); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_stream_close</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_stream_close</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[1]); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_stream_set_current</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_stream_set_current</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0]); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_stream_get_current</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_do_glk_stream_get_current</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_stream_open_memory</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_do_glk_stream_open_memory</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[1], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[2], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[3]); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_stream_open_memory_uni</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_do_glk_stream_open_memory_uni</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[1], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[2], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[3]); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_fileref_create_by_name</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_do_glk_fileref_create_by_name</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[1], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[2]); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_fileref_does_file_exist</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_do_glk_fileref_does_file_exist</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0]); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_stream_open_file</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_do_glk_stream_open_file</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[1], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[2]); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_fileref_destroy</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_char_to_lower</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0];</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (((</span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x41</span><span class="Extracts-plain-syntax">) &amp;&amp; (</span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> &lt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x5A</span><span class="Extracts-plain-syntax">)) ||</span>
<span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">xC0</span><span class="Extracts-plain-syntax">) &amp;&amp; (</span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> &lt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">xD6</span><span class="Extracts-plain-syntax">)) ||</span>
<span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">xD8</span><span class="Extracts-plain-syntax">) &amp;&amp; (</span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> &lt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">xDE</span><span class="Extracts-plain-syntax">))) </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> += </span><span class="Extracts-constant-syntax">32</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_char_to_upper</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0];</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (((</span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x61</span><span class="Extracts-plain-syntax">) &amp;&amp; (</span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> &lt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x7A</span><span class="Extracts-plain-syntax">)) ||</span>
<span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">xE0</span><span class="Extracts-plain-syntax">) &amp;&amp; (</span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> &lt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">xF6</span><span class="Extracts-plain-syntax">)) ||</span>
<span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">xF8</span><span class="Extracts-plain-syntax">) &amp;&amp; (</span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> &lt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">xFE</span><span class="Extracts-plain-syntax">))) </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> -= </span><span class="Extracts-constant-syntax">32</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_stream_set_position</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_stream_set_position</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[1], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[2]); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_put_char_stream</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_do_glk_put_char_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[1]); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_get_char_stream</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_do_glk_get_char_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0]); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">default</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">i7_opcode_glk</span><span class="Extracts-plain-syntax"> %</span><span class="Extracts-identifier-syntax">d</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">", </span><span class="Extracts-identifier-syntax">glk_api_selector</span><span class="Extracts-plain-syntax">); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_name</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fn_i7_mgl_PrintShortName</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_object</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_decimal</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_box</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">i7_print_box</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fn_i7_mgl_pending_boxed_quotation</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">I7_BODY_TEXT_ID</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">201</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">I7_STATUS_TEXT_ID</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">202</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">I7_BOX_TEXT_ID</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">203</span>
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.c.</li></ul>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.h.</li></ul>
<p class="commentary">These are needed for different forms of file I/O:
</p>
<pre class="Extracts-displayed-code all-displayed-code code-font">
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fileusage_Data</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x00</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fileusage_SavedGame</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x01</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fileusage_Transcript</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x02</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fileusage_InputRecord</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x03</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fileusage_TypeMask</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x0f</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fileusage_TextMode</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x100</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fileusage_BinaryMode</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x000</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_filemode_Write</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x01</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_filemode_Read</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x02</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_filemode_ReadWrite</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x03</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_filemode_WriteAppend</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x05</span>
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.h.</li></ul>
<p class="commentary">And these are modes for seeking a position in a file:
</p>
<pre class="Extracts-displayed-code all-displayed-code code-font">
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">seekmode_Start</span><span class="Extracts-plain-syntax"> (0)</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">seekmode_Current</span><span class="Extracts-plain-syntax"> (1)</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">seekmode_End</span><span class="Extracts-plain-syntax"> (2)</span>
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.h.</li></ul>
<p class="commentary">And these are "event types":
</p>
<pre class="Extracts-displayed-code all-displayed-code code-font">
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_evtype_None</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_evtype_Timer</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">1</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_evtype_CharInput</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">2</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_evtype_LineInput</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">3</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_evtype_MouseInput</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">4</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_evtype_Arrange</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">5</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_evtype_Redraw</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">6</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_evtype_SoundNotify</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">7</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_evtype_Hyperlink</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">8</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_evtype_VolumeNotify</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">9</span>
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.h.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="5-cfm.html">&#10094;</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresschapter"><a href="2-cg.html">2</a></li><li class="progresschapter"><a href="3-fti.html">3</a></li><li class="progresschapter"><a href="4-fi6.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-fnc.html">fnc</a></li><li class="progresssection"><a href="5-cnm.html">cnm</a></li><li class="progresssection"><a href="5-crf.html">crf</a></li><li class="progresssection"><a href="5-cgv.html">cgv</a></li><li class="progresssection"><a href="5-cmm.html">cmm</a></li><li class="progresssection"><a href="5-cas.html">cas</a></li><li class="progresssection"><a href="5-car.html">car</a></li><li class="progresssection"><a href="5-cpc.html">cpc</a></li><li class="progresssection"><a href="5-ccn.html">ccn</a></li><li class="progresssection"><a href="5-clt.html">clt</a></li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progresssection"><a href="5-cfm.html">cfm</a></li><li class="progresscurrent">cim</li><li class="progresssection"><a href="5-cuf.html">cuf</a></li><li class="progressnext"><a href="5-cuf.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="5-cfm.html">&#10094;</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresschapter"><a href="2-cg.html">2</a></li><li class="progresschapter"><a href="3-fti.html">3</a></li><li class="progresschapter"><a href="4-fi6.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-fnc.html">fnc</a></li><li class="progresssection"><a href="5-cnm.html">cnm</a></li><li class="progresssection"><a href="5-crf.html">crf</a></li><li class="progresssection"><a href="5-cgv.html">cgv</a></li><li class="progresssection"><a href="5-cmm.html">cmm</a></li><li class="progresssection"><a href="5-cas.html">cas</a></li><li class="progresssection"><a href="5-car.html">car</a></li><li class="progresssection"><a href="5-cpc.html">cpc</a></li><li class="progresssection"><a href="5-ccn.html">ccn</a></li><li class="progresssection"><a href="5-clt.html">clt</a></li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progresssection"><a href="5-cfm.html">cfm</a></li><li class="progresscurrent">cim</li><li class="progresssection"><a href="5-cmn.html">cmn</a></li><li class="progresssection"><a href="5-cuf.html">cuf</a></li><li class="progressnext"><a href="5-cmn.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -387,7 +387,7 @@ so there is very little to do:
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="5-ccn.html">&#10094;</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresschapter"><a href="2-cg.html">2</a></li><li class="progresschapter"><a href="3-fti.html">3</a></li><li class="progresschapter"><a href="4-fi6.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-fnc.html">fnc</a></li><li class="progresssection"><a href="5-cnm.html">cnm</a></li><li class="progresssection"><a href="5-crf.html">crf</a></li><li class="progresssection"><a href="5-cgv.html">cgv</a></li><li class="progresssection"><a href="5-cmm.html">cmm</a></li><li class="progresssection"><a href="5-cas.html">cas</a></li><li class="progresssection"><a href="5-car.html">car</a></li><li class="progresssection"><a href="5-cpc.html">cpc</a></li><li class="progresssection"><a href="5-ccn.html">ccn</a></li><li class="progresscurrent">clt</li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progresssection"><a href="5-cfm.html">cfm</a></li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progresssection"><a href="5-cuf.html">cuf</a></li><li class="progressnext"><a href="5-com.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="5-ccn.html">&#10094;</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresschapter"><a href="2-cg.html">2</a></li><li class="progresschapter"><a href="3-fti.html">3</a></li><li class="progresschapter"><a href="4-fi6.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-fnc.html">fnc</a></li><li class="progresssection"><a href="5-cnm.html">cnm</a></li><li class="progresssection"><a href="5-crf.html">crf</a></li><li class="progresssection"><a href="5-cgv.html">cgv</a></li><li class="progresssection"><a href="5-cmm.html">cmm</a></li><li class="progresssection"><a href="5-cas.html">cas</a></li><li class="progresssection"><a href="5-car.html">car</a></li><li class="progresssection"><a href="5-cpc.html">cpc</a></li><li class="progresssection"><a href="5-ccn.html">ccn</a></li><li class="progresscurrent">clt</li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progresssection"><a href="5-cfm.html">cfm</a></li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progresssection"><a href="5-cmn.html">cmn</a></li><li class="progresssection"><a href="5-cuf.html">cuf</a></li><li class="progressnext"><a href="5-com.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -724,7 +724,7 @@ then possible to restore again to go back another step, and so on:
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.c.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="5-cgv.html">&#10094;</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresschapter"><a href="2-cg.html">2</a></li><li class="progresschapter"><a href="3-fti.html">3</a></li><li class="progresschapter"><a href="4-fi6.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-fnc.html">fnc</a></li><li class="progresssection"><a href="5-cnm.html">cnm</a></li><li class="progresssection"><a href="5-crf.html">crf</a></li><li class="progresssection"><a href="5-cgv.html">cgv</a></li><li class="progresscurrent">cmm</li><li class="progresssection"><a href="5-cas.html">cas</a></li><li class="progresssection"><a href="5-car.html">car</a></li><li class="progresssection"><a href="5-cpc.html">cpc</a></li><li class="progresssection"><a href="5-ccn.html">ccn</a></li><li class="progresssection"><a href="5-clt.html">clt</a></li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progresssection"><a href="5-cfm.html">cfm</a></li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progresssection"><a href="5-cuf.html">cuf</a></li><li class="progressnext"><a href="5-cas.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="5-cgv.html">&#10094;</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresschapter"><a href="2-cg.html">2</a></li><li class="progresschapter"><a href="3-fti.html">3</a></li><li class="progresschapter"><a href="4-fi6.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-fnc.html">fnc</a></li><li class="progresssection"><a href="5-cnm.html">cnm</a></li><li class="progresssection"><a href="5-crf.html">crf</a></li><li class="progresssection"><a href="5-cgv.html">cgv</a></li><li class="progresscurrent">cmm</li><li class="progresssection"><a href="5-cas.html">cas</a></li><li class="progresssection"><a href="5-car.html">car</a></li><li class="progresssection"><a href="5-cpc.html">cpc</a></li><li class="progresssection"><a href="5-ccn.html">ccn</a></li><li class="progresssection"><a href="5-clt.html">clt</a></li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progresssection"><a href="5-cfm.html">cfm</a></li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progresssection"><a href="5-cmn.html">cmn</a></li><li class="progresssection"><a href="5-cuf.html">cuf</a></li><li class="progressnext"><a href="5-cas.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -0,0 +1,724 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>C Miniglk</title>
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
<meta name="viewport" content="width=device-width initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Extracts-Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body class="commentary-font">
<nav role="navigation">
<h1><a href="../index.html">
<img src="../docs-assets/Inform.png" height=72">
</a></h1>
<ul><li><a href="../compiler.html">compiler tools</a></li>
<li><a href="../other.html">other tools</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
<li><a href="../units.html">unit test tools</a></li>
</ul><h2>Compiler Webs</h2><ul>
<li><a href="../inbuild/index.html">inbuild</a></li>
<li><a href="../inform7/index.html">inform7</a></li>
<li><a href="../inter/index.html">inter</a></li>
</ul><h2>Inbuild Modules</h2><ul>
<li><a href="../supervisor-module/index.html">supervisor</a></li>
</ul><h2>Inform7 Modules</h2><ul>
<li><a href="../core-module/index.html">core</a></li>
<li><a href="../assertions-module/index.html">assertions</a></li>
<li><a href="../values-module/index.html">values</a></li>
<li><a href="../knowledge-module/index.html">knowledge</a></li>
<li><a href="../imperative-module/index.html">imperative</a></li>
<li><a href="../runtime-module/index.html">runtime</a></li>
<li><a href="../if-module/index.html">if</a></li>
<li><a href="../multimedia-module/index.html">multimedia</a></li>
<li><a href="../index-module/index.html">index</a></li>
</ul><h2>Inter Modules</h2><ul>
<li><a href="../bytecode-module/index.html">bytecode</a></li>
<li><a href="../building-module/index.html">building</a></li>
<li><a href="../pipeline-module/index.html">pipeline</a></li>
<li><a href="index.html"><span class="selectedlink">final</span></a></li>
</ul><h2>Services</h2><ul>
<li><a href="../arch-module/index.html">arch</a></li>
<li><a href="../calculus-module/index.html">calculus</a></li>
<li><a href="../html-module/index.html">html</a></li>
<li><a href="../inflections-module/index.html">inflections</a></li>
<li><a href="../kinds-module/index.html">kinds</a></li>
<li><a href="../linguistics-module/index.html">linguistics</a></li>
<li><a href="../problems-module/index.html">problems</a></li>
<li><a href="../syntax-module/index.html">syntax</a></li>
<li><a href="../words-module/index.html">words</a></li>
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
</ul>
</nav>
<main role="main">
<!--Weave of 'C Miniglk' generated by Inweb-->
<div class="breadcrumbs">
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inter Modules</a></li><li><a href="index.html">final</a></li><li><a href="index.html#5">Chapter 5: C</a></li><li><b>C Miniglk</b></li></ul></div>
<p class="purpose">Just enough of the Glk input/output interface to allow simple console text in and out, and no more.</p>
<ul class="toc"><li><a href="5-cmn.html#SP1">&#167;1. Glk - an apology</a></li><li><a href="5-cmn.html#SP2">&#167;2. Miniglk</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Glk - an apology. </b>The code below is in no way a proper implementation of the Glk input/output
system, which was developed as an interactive fiction standard by Andrew Plotkin,
and which has served us well and will continue to do so. It is not even a full
implementation of basic console I/O via Glk, for which see the <span class="extract"><span class="extract-syntax">cheapglk</span></span>
C library.
</p>
<p class="commentary">Instead, our aim is to do the absolute minimum possible in simple self-contained
C code, and to impose as few restrictions as possible beyond that. The flip side
of Glk's gilt-edged engineering quality is that it can be a gilded cage: for some
imaginable uses of Inform 7-via-C, say based on Unity or in an iOS app, strict
use of Glk would be constraining.
</p>
<p class="commentary">In an attempt to have the best of both worlds, the code below is only the
default Glk implementation for an Inform 7-via-C project, and the user can
duck out of it by providing an implementation of her own. (Indeed, this could
even be <span class="extract"><span class="extract-syntax">cheapglk</span></span>, as mentioned above.)
</p>
<p class="commentary">This section of code therefore defines just two functions, <span class="extract"><span class="extract-syntax">i7_default_stylist</span></span>
and <span class="extract"><span class="extract-syntax">i7_default_glk</span></span>, plus their supporting code &mdash; which turns out to be quite
a lot, but there are only those two points of entry.
</p>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. Miniglk. </b>Each process needs to keep track of its own files, streams, windows and events,
which are wrapped up in a <span class="extract"><span class="extract-syntax">miniglk_data</span></span> structure as follows:
</p>
<pre class="Extracts-displayed-code all-displayed-code code-font">
<span class="Extracts-identifier-syntax">typedef</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">struct</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mg_file_t</span><span class="Extracts-plain-syntax"> {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">usage</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">name</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">char</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">leafname</span><span class="Extracts-plain-syntax">[128];</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">FILE</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">handle</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">} </span><span class="Extracts-identifier-syntax">i7_mg_file_t</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-identifier-syntax">typedef</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">struct</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mg_stream_t</span><span class="Extracts-plain-syntax"> {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">FILE</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">to_file</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">to_file_id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">wchar_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">to_memory</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">size_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">memory_used</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">size_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">memory_capacity</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">previous_id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">write_here_on_closure</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">size_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">write_limit</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">active</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">encode_UTF8</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">char_size</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">chars_read</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">read_position</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">end_position</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">owned_by_window_id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fixed_pitch</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">char</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">style</span><span class="Extracts-plain-syntax">[128];</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">char</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">composite_style</span><span class="Extracts-plain-syntax">[300];</span>
<span class="Extracts-plain-syntax">} </span><span class="Extracts-identifier-syntax">i7_mg_stream_t</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-identifier-syntax">typedef</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">struct</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mg_window_t</span><span class="Extracts-plain-syntax"> {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">type</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">stream_id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">} </span><span class="Extracts-identifier-syntax">i7_mg_window_t</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-identifier-syntax">typedef</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">struct</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mg_event_t</span><span class="Extracts-plain-syntax"> {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">type</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">win_id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">val1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">val2</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">} </span><span class="Extracts-identifier-syntax">i7_mg_event_t</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">I7_MINIGLK_MAX_STREAMS</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">128</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">I7_MINIGLK_MAX_WINDOWS</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">128</span>
<span class="Extracts-plain-syntax">#</span><span class="Extracts-identifier-syntax">define</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">I7_MINIGLK_RING_BUFFER_SIZE</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">32</span>
<span class="Extracts-identifier-syntax">typedef</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">struct</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">miniglk_data</span><span class="Extracts-plain-syntax"> {</span>
<span class="Extracts-plain-syntax"> /* </span><span class="Extracts-identifier-syntax">streams</span><span class="Extracts-plain-syntax"> */</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mg_stream_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">I7_MINIGLK_MAX_STREAMS</span><span class="Extracts-plain-syntax">];</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">stdout_stream_id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">stderr_stream_id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> /* </span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax"> */</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mg_file_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">[128 + </span><span class="Extracts-constant-syntax">32</span><span class="Extracts-plain-syntax">];</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">no_files</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> /* </span><span class="Extracts-identifier-syntax">windows</span><span class="Extracts-plain-syntax"> */</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mg_window_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">windows</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">I7_MINIGLK_MAX_WINDOWS</span><span class="Extracts-plain-syntax">];</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">no_windows</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> /* </span><span class="Extracts-identifier-syntax">events</span><span class="Extracts-plain-syntax"> */</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mg_event_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">events_ring_buffer</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">I7_MINIGLK_RING_BUFFER_SIZE</span><span class="Extracts-plain-syntax">];</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rb_back</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">rb_front</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">no_lr</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">} </span><span class="Extracts-identifier-syntax">miniglk_data</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_initialise_miniglk_data</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.h.</li></ul>
<pre class="Extracts-displayed-code all-displayed-code code-font">
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_initialise_miniglk_data</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">malloc</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">sizeof</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">miniglk_data</span><span class="Extracts-plain-syntax">));</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Memory</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">allocation</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">failed</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">");</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">exit</span><span class="Extracts-plain-syntax">(1);</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">no_files</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">stdout_stream_id</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">stderr_stream_id</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">no_windows</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">rb_back</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">rb_front</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">no_lr</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.c.</li></ul>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b></p>
<pre class="Extracts-displayed-code all-displayed-code code-font">
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_fileref_create_by_name</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">usage</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">name</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fseek</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">pos</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">origin</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_ftell</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fopen</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">mode</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fclose</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_fileref_does_file_exist</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fputc</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fgetc</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_stream_get_current</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7_mg_stream_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_new_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">FILE</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">F</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">win_id</span><span class="Extracts-plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.h.</li></ul>
<pre class="Extracts-displayed-code all-displayed-code code-font">
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fn_i7_mgl_TEXT_TY_CharacterLength</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_txt</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_ch</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_i</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_dsize</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_p</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_cp</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_r</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fn_i7_mgl_BlkValueRead</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_from</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_pos</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_do_not_indirect</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_long_block</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_chunk_size_in_bytes</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_header_size_in_bytes</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_flags</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_entry_size_in_bytes</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_seek_byte_position</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_default_stylist</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">which</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">what</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">which</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mg_stream_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax"> = &amp;(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">state</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">current_output_stream_ID</span><span class="Extracts-plain-syntax">]);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">fixed_pitch</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">what</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">sprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">composite_style</span><span class="Extracts-plain-syntax">, "%</span><span class="Extracts-identifier-syntax">s</span><span class="Extracts-plain-syntax">", </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">style</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">fixed_pitch</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">strlen</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">style</span><span class="Extracts-plain-syntax">) &gt; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">sprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">composite_style</span><span class="Extracts-plain-syntax"> + </span><span class="Extracts-identifier-syntax">strlen</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">composite_style</span><span class="Extracts-plain-syntax">), ",");</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">sprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">composite_style</span><span class="Extracts-plain-syntax"> + </span><span class="Extracts-identifier-syntax">strlen</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">composite_style</span><span class="Extracts-plain-syntax">), "</span><span class="Extracts-identifier-syntax">fixedpitch</span><span class="Extracts-plain-syntax">");</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mg_stream_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax"> = &amp;(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">state</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">current_output_stream_ID</span><span class="Extracts-plain-syntax">]);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">style</span><span class="Extracts-plain-syntax">[0] = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">switch</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">what</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">sprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">style</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">bold</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">2</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">sprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">style</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">italic</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">3</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">sprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">style</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">reverse</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">default</span><span class="Extracts-plain-syntax">: {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">L</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">fn_i7_mgl_TEXT_TY_CharacterLength</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">what</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">L</span><span class="Extracts-plain-syntax"> &gt; </span><span class="Extracts-constant-syntax">127</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">L</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">127</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">for</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">=0; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">&lt;</span><span class="Extracts-identifier-syntax">L</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">++) </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">style</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">] = </span><span class="Extracts-identifier-syntax">fn_i7_mgl_BlkValueRead</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">what</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">style</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">L</span><span class="Extracts-plain-syntax">] = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">sprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">composite_style</span><span class="Extracts-plain-syntax">, "%</span><span class="Extracts-identifier-syntax">s</span><span class="Extracts-plain-syntax">", </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">style</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">fixed_pitch</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">strlen</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">style</span><span class="Extracts-plain-syntax">) &gt; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">sprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">composite_style</span><span class="Extracts-plain-syntax"> + </span><span class="Extracts-identifier-syntax">strlen</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">composite_style</span><span class="Extracts-plain-syntax">), ",");</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">sprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">composite_style</span><span class="Extracts-plain-syntax"> + </span><span class="Extracts-identifier-syntax">strlen</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">composite_style</span><span class="Extracts-plain-syntax">), "</span><span class="Extracts-identifier-syntax">fixedpitch</span><span class="Extracts-plain-syntax">");</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_fileref_create_by_name</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">usage</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">name</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">no_files</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">128</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Out</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">of</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">streams</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">no_files</span><span class="Extracts-plain-syntax">++;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">usage</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">usage</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">name</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">name</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">handle</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">for</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">=0; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">&lt;128; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">++) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7byte_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_read_byte</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">name</span><span class="Extracts-plain-syntax">+1+</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">leafname</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">] = </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">leafname</span><span class="Extracts-plain-syntax">[127] = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">sprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">leafname</span><span class="Extracts-plain-syntax"> + </span><span class="Extracts-identifier-syntax">strlen</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">leafname</span><span class="Extracts-plain-syntax">), ".</span><span class="Extracts-identifier-syntax">glkdata</span><span class="Extracts-plain-syntax">");</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fseek</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">pos</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">origin</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">128</span><span class="Extracts-plain-syntax">)) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Too</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">many</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">handle</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">File</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">not</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">open</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fseek</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">handle</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">pos</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">origin</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_ftell</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">128</span><span class="Extracts-plain-syntax">)) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Too</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">many</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">handle</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">File</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">not</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">open</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">t</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">ftell</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">handle</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">t</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fopen</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">mode</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">128</span><span class="Extracts-plain-syntax">)) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Too</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">many</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">handle</span><span class="Extracts-plain-syntax">) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">File</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">already</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">open</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">char</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">c_mode</span><span class="Extracts-plain-syntax"> = "</span><span class="Extracts-identifier-syntax">r</span><span class="Extracts-plain-syntax">";</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">switch</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">mode</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_filemode_Write</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">c_mode</span><span class="Extracts-plain-syntax"> = "</span><span class="Extracts-identifier-syntax">w</span><span class="Extracts-plain-syntax">"; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_filemode_Read</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">c_mode</span><span class="Extracts-plain-syntax"> = "</span><span class="Extracts-identifier-syntax">r</span><span class="Extracts-plain-syntax">"; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_filemode_ReadWrite</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">c_mode</span><span class="Extracts-plain-syntax"> = "</span><span class="Extracts-identifier-syntax">r</span><span class="Extracts-plain-syntax">+"; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_filemode_WriteAppend</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">c_mode</span><span class="Extracts-plain-syntax"> = "</span><span class="Extracts-identifier-syntax">r</span><span class="Extracts-plain-syntax">+"; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">FILE</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">h</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">fopen</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">leafname</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">c_mode</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">h</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">handle</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">h</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">mode</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">i7_filemode_WriteAppend</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">i7_fseek</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">SEEK_END</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fclose</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">128</span><span class="Extracts-plain-syntax">)) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Too</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">many</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">handle</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">File</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">not</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">open</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fclose</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">handle</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">handle</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_fileref_does_file_exist</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">128</span><span class="Extracts-plain-syntax">)) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Too</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">many</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">handle</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i7_fopen</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7_filemode_Read</span><span class="Extracts-plain-syntax">)) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fclose</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">); </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fputc</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">128</span><span class="Extracts-plain-syntax">)) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Too</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">many</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">handle</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">File</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">not</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">open</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fputc</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">handle</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fgetc</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">128</span><span class="Extracts-plain-syntax">)) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Too</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">many</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">handle</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">File</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">not</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">open</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">fgetc</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">files</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">handle</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_stream_get_current</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">state</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">current_output_stream_ID</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_stream_set_current</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-identifier-syntax">I7_MINIGLK_MAX_STREAMS</span><span class="Extracts-plain-syntax">)) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Stream</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ID</span><span class="Extracts-plain-syntax"> %</span><span class="Extracts-identifier-syntax">d</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">out</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">of</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">range</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">", </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">state</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">current_output_stream_ID</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">i7_mg_stream_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_new_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">FILE</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">F</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">win_id</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mg_stream_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">to_file</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">F</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">to_file_id</span><span class="Extracts-plain-syntax"> = -1;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">to_memory</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">memory_used</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">memory_capacity</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">write_here_on_closure</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">write_limit</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">previous_id</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">active</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">encode_UTF8</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">char_size</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">4</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">chars_read</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">read_position</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">end_position</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">owned_by_window_id</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">win_id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">style</span><span class="Extracts-plain-syntax">[0] = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">fixed_pitch</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">composite_style</span><span class="Extracts-plain-syntax">[0] = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.c.</li></ul>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b></p>
<pre class="Extracts-displayed-code all-displayed-code code-font">
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_initialise_streams</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_open_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">FILE</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">F</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">win_id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_stream_open_memory</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">buffer</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">len</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fmode</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_stream_open_memory_uni</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">buffer</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">len</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fmode</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_stream_open_file</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fileref</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">usage</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_stream_set_position</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">pos</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">seekmode</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_stream_get_position</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_stream_close</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_window_open</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">split</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">method</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">size</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">wintype</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_stream_of_window</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_rock_of_window</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_to_receiver</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">wchar_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_put_char_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">stream_id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_get_char_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">stream_id</span><span class="Extracts-plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.h.</li></ul>
<pre class="Extracts-displayed-code all-displayed-code code-font">
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_initialise_streams</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">for</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">=0; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">&lt;</span><span class="Extracts-identifier-syntax">I7_MINIGLK_MAX_STREAMS</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">++) </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">] = </span><span class="Extracts-identifier-syntax">i7_new_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">stdout_stream_id</span><span class="Extracts-plain-syntax">] = </span><span class="Extracts-identifier-syntax">i7_new_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">stdout</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">stdout_stream_id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">active</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">stdout_stream_id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">encode_UTF8</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">stderr_stream_id</span><span class="Extracts-plain-syntax">] = </span><span class="Extracts-identifier-syntax">i7_new_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">stderr_stream_id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">active</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">stderr_stream_id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">encode_UTF8</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_stream_set_current</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">stdout_stream_id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_open_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">FILE</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">F</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">win_id</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">for</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">=0; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">&lt;</span><span class="Extracts-identifier-syntax">I7_MINIGLK_MAX_STREAMS</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">++)</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">active</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">] = </span><span class="Extracts-identifier-syntax">i7_new_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">F</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">win_id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">active</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">previous_id</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">state</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">current_output_stream_ID</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Out</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">of</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">streams</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_stream_open_memory</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">buffer</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">len</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fmode</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">fmode</span><span class="Extracts-plain-syntax"> != </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Only</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">file</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">mode</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">supported</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">not</span><span class="Extracts-plain-syntax"> %</span><span class="Extracts-identifier-syntax">d</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">", </span><span class="Extracts-identifier-syntax">fmode</span><span class="Extracts-plain-syntax">); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_open_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">write_here_on_closure</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">buffer</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">write_limit</span><span class="Extracts-plain-syntax"> = (</span><span class="Extracts-identifier-syntax">size_t</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">len</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">char_size</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">state</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">current_output_stream_ID</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_stream_open_memory_uni</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">buffer</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">len</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fmode</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">fmode</span><span class="Extracts-plain-syntax"> != </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Only</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">file</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">mode</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">supported</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">not</span><span class="Extracts-plain-syntax"> %</span><span class="Extracts-identifier-syntax">d</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">", </span><span class="Extracts-identifier-syntax">fmode</span><span class="Extracts-plain-syntax">); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_open_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">write_here_on_closure</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">buffer</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">write_limit</span><span class="Extracts-plain-syntax"> = (</span><span class="Extracts-identifier-syntax">size_t</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">len</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">char_size</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">4</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">state</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">current_output_stream_ID</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_stream_open_file</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fileref</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">usage</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_open_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">to_file_id</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">fileref</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i7_fopen</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">fileref</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">usage</span><span class="Extracts-plain-syntax">) == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_stream_set_position</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">pos</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">seekmode</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-identifier-syntax">I7_MINIGLK_MAX_STREAMS</span><span class="Extracts-plain-syntax">)) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Stream</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ID</span><span class="Extracts-plain-syntax"> %</span><span class="Extracts-identifier-syntax">d</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">out</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">of</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">range</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">", </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mg_stream_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax"> = &amp;(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">]);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_file_id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">origin</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">switch</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">seekmode</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">seekmode_Start</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">origin</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">SEEK_SET</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">seekmode_Current</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">origin</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">SEEK_CUR</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">seekmode_End</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">origin</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">SEEK_END</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">default</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Unknown</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">seekmode</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fseek</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_file_id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">pos</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">origin</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">glk_stream_set_position</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">supported</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">only</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">for</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">file</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">streams</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_stream_get_position</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-identifier-syntax">I7_MINIGLK_MAX_STREAMS</span><span class="Extracts-plain-syntax">)) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Stream</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ID</span><span class="Extracts-plain-syntax"> %</span><span class="Extracts-identifier-syntax">d</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">out</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">of</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">range</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">", </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mg_stream_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax"> = &amp;(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">]);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_file_id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">i7_ftell</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_file_id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_used</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_stream_close</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-identifier-syntax">I7_MINIGLK_MAX_STREAMS</span><span class="Extracts-plain-syntax">)) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Stream</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ID</span><span class="Extracts-plain-syntax"> %</span><span class="Extracts-identifier-syntax">d</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">out</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">of</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">range</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">", </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Cannot</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">close</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">stdout</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Cannot</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">close</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mg_stream_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax"> = &amp;(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">]);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">active</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Stream</span><span class="Extracts-plain-syntax"> %</span><span class="Extracts-identifier-syntax">d</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">already</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">closed</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">", </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">state</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">current_output_stream_ID</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">state</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">current_output_stream_ID</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">previous_id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">write_here_on_closure</span><span class="Extracts-plain-syntax"> != </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">char_size</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">4</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">for</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">size_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">write_limit</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">++)</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_used</span><span class="Extracts-plain-syntax">)</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_write_word</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">write_here_on_closure</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_memory</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">]);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">else</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_write_word</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">write_here_on_closure</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">for</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">size_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">write_limit</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">++)</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_used</span><span class="Extracts-plain-syntax">)</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_write_byte</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">write_here_on_closure</span><span class="Extracts-plain-syntax"> + </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_memory</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">]);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">else</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_write_byte</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">write_here_on_closure</span><span class="Extracts-plain-syntax"> + </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax"> == -1) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_push</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">chars_read</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_push</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_used</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax"> != </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_write_word</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">chars_read</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_write_word</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">result</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_used</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_file_id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">i7_fclose</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_file_id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">active</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_used</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_window_open</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">split</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">method</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">size</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">wintype</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">no_windows</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">128</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Out</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">of</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">windows</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">no_windows</span><span class="Extracts-plain-syntax">++;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">windows</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">type</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">wintype</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">windows</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">stream_id</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_open_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">stdout</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">windows</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_stream_of_window</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">no_windows</span><span class="Extracts-plain-syntax">)) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Window</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ID</span><span class="Extracts-plain-syntax"> %</span><span class="Extracts-identifier-syntax">d</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">out</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">of</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">range</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">", </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">windows</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">stream_id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_rock_of_window</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">no_windows</span><span class="Extracts-plain-syntax">)) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Window</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">ID</span><span class="Extracts-plain-syntax"> %</span><span class="Extracts-identifier-syntax">d</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">out</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">of</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">range</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">", </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">windows</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">].</span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_to_receiver</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">wchar_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mg_stream_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax"> = &amp;(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">state</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">current_output_stream_ID</span><span class="Extracts-plain-syntax">]);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">receiver</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">fputc</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">stdout</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">receiver</span><span class="Extracts-plain-syntax">)(</span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">composite_style</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_put_char_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">stream_id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mg_stream_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax"> = &amp;(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">stream_id</span><span class="Extracts-plain-syntax">]);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_file</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">win_id</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">owned_by_window_id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax"> = -1;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">win_id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_rock_of_window</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">win_id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">unsigned</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax"> = (</span><span class="Extracts-identifier-syntax">unsigned</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">use_UTF8</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x800</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_to_receiver</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">xE0</span><span class="Extracts-plain-syntax"> + (</span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax"> &gt;&gt; </span><span class="Extracts-constant-syntax">12</span><span class="Extracts-plain-syntax">));</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_to_receiver</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x80</span><span class="Extracts-plain-syntax"> + ((</span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax"> &gt;&gt; </span><span class="Extracts-constant-syntax">6</span><span class="Extracts-plain-syntax">) &amp; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x3f</span><span class="Extracts-plain-syntax">));</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_to_receiver</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x80</span><span class="Extracts-plain-syntax"> + (</span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax"> &amp; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x3f</span><span class="Extracts-plain-syntax">));</span>
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x80</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_to_receiver</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">xC0</span><span class="Extracts-plain-syntax"> + (</span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax"> &gt;&gt; </span><span class="Extracts-constant-syntax">6</span><span class="Extracts-plain-syntax">));</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_to_receiver</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x80</span><span class="Extracts-plain-syntax"> + (</span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax"> &amp; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x3f</span><span class="Extracts-plain-syntax">));</span>
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_to_receiver</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">, (</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_to_receiver</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">rock</span><span class="Extracts-plain-syntax">, (</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_file_id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fputc</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, (</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_file_id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">end_position</span><span class="Extracts-plain-syntax">++;</span>
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_used</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_capacity</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">size_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">needed</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">4</span><span class="Extracts-plain-syntax">*</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_capacity</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">needed</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">needed</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">1024</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">wchar_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">new_data</span><span class="Extracts-plain-syntax"> = (</span><span class="Extracts-identifier-syntax">wchar_t</span><span class="Extracts-plain-syntax"> *) </span><span class="Extracts-identifier-syntax">calloc</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">needed</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">sizeof</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">wchar_t</span><span class="Extracts-plain-syntax">));</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">new_data</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">) { </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">Out</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">of</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">memory</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">for</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">size_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">=0; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">&lt;</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_used</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">++) </span><span class="Extracts-identifier-syntax">new_data</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">] = </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_memory</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">];</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">free</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_memory</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_memory</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">new_data</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_memory</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_used</span><span class="Extracts-plain-syntax">++] = (</span><span class="Extracts-identifier-syntax">wchar_t</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_get_char_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">stream_id</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mg_stream_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax"> = &amp;(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">memory_streams</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">stream_id</span><span class="Extracts-plain-syntax">]);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_file_id</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">chars_read</span><span class="Extracts-plain-syntax">++;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_fgetc</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">S</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">to_file_id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.c.</li></ul>
<pre class="Extracts-displayed-code all-displayed-code code-font">
<span class="Extracts-identifier-syntax">i7_mg_event_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">i7_next_event</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_make_event</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7_mg_event_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_select</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">structure</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_request_line_event</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">window_id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">buffer</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">max_len</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">init_len</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fn_i7_mgl_IndefArt</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_obj</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_i</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fn_i7_mgl_DefArt</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_obj</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_i</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fn_i7_mgl_CIndefArt</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_obj</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_i</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fn_i7_mgl_CDefArt</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_obj</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_i</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fn_i7_mgl_PrintShortName</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_obj</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mgl_local_i</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_name</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_read</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.h.</li></ul>
<pre class="Extracts-displayed-code all-displayed-code code-font">
<span class="Extracts-identifier-syntax">i7_mg_event_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">i7_next_event</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">rb_front</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">rb_back</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mg_event_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax"> = &amp;(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">events_ring_buffer</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">rb_back</span><span class="Extracts-plain-syntax">]);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">rb_back</span><span class="Extracts-plain-syntax">++; </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">rb_back</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">I7_MINIGLK_RING_BUFFER_SIZE</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">rb_back</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_make_event</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7_mg_event_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">events_ring_buffer</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">rb_front</span><span class="Extracts-plain-syntax">] = </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">rb_front</span><span class="Extracts-plain-syntax">++; </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">rb_front</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">I7_MINIGLK_RING_BUFFER_SIZE</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">rb_front</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_select</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">structure</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mg_event_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_next_event</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stderr</span><span class="Extracts-plain-syntax">, "</span><span class="Extracts-identifier-syntax">No</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">events</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">available</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">to</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">select</span><span class="Extracts-plain-syntax">\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">structure</span><span class="Extracts-plain-syntax"> == -1) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_push</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">type</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_push</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">win_id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_push</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">val1</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_push</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">val2</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> } </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">structure</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_write_word</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">structure</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">type</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_write_word</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">structure</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">win_id</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_write_word</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">structure</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">2</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">val1</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_write_word</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">structure</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">3</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">val2</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_request_line_event</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">window_id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">buffer</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">max_len</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">init_len</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_mg_event_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">type</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_evtype_LineInput</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">win_id</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">window_id</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">val1</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">val2</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">wchar_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">pos</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">init_len</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">sender</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">NULL</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">i7_benign_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">char</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">s</span><span class="Extracts-plain-syntax"> = (</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">sender</span><span class="Extracts-plain-syntax">)(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">send_count</span><span class="Extracts-plain-syntax">++);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">while</span><span class="Extracts-plain-syntax"> (1) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">s</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">i</span><span class="Extracts-plain-syntax">++];</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-identifier-syntax">EOF</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax"> == </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) || (</span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax"> == '\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">') || (</span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax"> == '\</span><span class="Extracts-identifier-syntax">r</span><span class="Extracts-plain-syntax">')) </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">pos</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-identifier-syntax">max_len</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">i7_write_byte</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">buffer</span><span class="Extracts-plain-syntax"> + </span><span class="Extracts-identifier-syntax">pos</span><span class="Extracts-plain-syntax">++, </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">pos</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-identifier-syntax">max_len</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">i7_write_byte</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">buffer</span><span class="Extracts-plain-syntax"> + </span><span class="Extracts-identifier-syntax">pos</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">); </span><span class="Extracts-identifier-syntax">else</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_write_byte</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">buffer</span><span class="Extracts-plain-syntax"> + </span><span class="Extracts-identifier-syntax">max_len</span><span class="Extracts-plain-syntax">-1, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">val1</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">pos</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_make_event</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">e</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">no_lr</span><span class="Extracts-plain-syntax">++ == </span><span class="Extracts-constant-syntax">1000</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fprintf</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">stdout</span><span class="Extracts-plain-syntax">, "[</span><span class="Extracts-identifier-syntax">Too</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">many</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">line</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">events</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">terminating</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">to</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">prevent</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">hang</span><span class="Extracts-plain-syntax">]\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">"); </span><span class="Extracts-identifier-syntax">exit</span><span class="Extracts-plain-syntax">(0);</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_default_glk</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glk_api_selector</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">varargc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_debug_stack</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">i7_opcode_glk</span><span class="Extracts-plain-syntax">");</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[5] = { </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax"> }, </span><span class="Extracts-identifier-syntax">argc</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">while</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">varargc</span><span class="Extracts-plain-syntax"> &gt; </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">v</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_pull</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">argc</span><span class="Extracts-plain-syntax"> &lt; </span><span class="Extracts-constant-syntax">5</span><span class="Extracts-plain-syntax">) </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[</span><span class="Extracts-identifier-syntax">argc</span><span class="Extracts-plain-syntax">++] = </span><span class="Extracts-identifier-syntax">v</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">varargc</span><span class="Extracts-plain-syntax">--;</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">switch</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">glk_api_selector</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_gestalt</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_window_iterate</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_window_open</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_miniglk_window_open</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[1], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[2], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[3], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[4]); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_set_window</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_stream_set_current</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7_stream_of_window</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0])); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_stream_iterate</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_fileref_iterate</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_stylehint_set</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_schannel_iterate</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_schannel_create</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_set_style</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_window_move_cursor</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_stream_get_position</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_miniglk_stream_get_position</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0]); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_window_get_size</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0]) </span><span class="Extracts-identifier-syntax">i7_write_word</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0], </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">80</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[1]) </span><span class="Extracts-identifier-syntax">i7_write_word</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[1], </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">8</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_request_line_event</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_miniglk_request_line_event</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[1], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[2], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[3]); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_select</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_miniglk_select</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0]); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_stream_close</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_stream_close</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[1]); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_stream_set_current</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_stream_set_current</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0]); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_stream_get_current</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_miniglk_stream_get_current</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_stream_open_memory</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_miniglk_stream_open_memory</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[1], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[2], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[3]); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_stream_open_memory_uni</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_miniglk_stream_open_memory_uni</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[1], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[2], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[3]); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_fileref_create_by_name</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_miniglk_fileref_create_by_name</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[1], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[2]); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_fileref_does_file_exist</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_miniglk_fileref_does_file_exist</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0]); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_stream_open_file</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_miniglk_stream_open_file</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[1], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[2]); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_fileref_destroy</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">; </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_char_to_lower</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0];</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (((</span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x41</span><span class="Extracts-plain-syntax">) &amp;&amp; (</span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> &lt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x5A</span><span class="Extracts-plain-syntax">)) ||</span>
<span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">xC0</span><span class="Extracts-plain-syntax">) &amp;&amp; (</span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> &lt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">xD6</span><span class="Extracts-plain-syntax">)) ||</span>
<span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">xD8</span><span class="Extracts-plain-syntax">) &amp;&amp; (</span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> &lt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">xDE</span><span class="Extracts-plain-syntax">))) </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> += </span><span class="Extracts-constant-syntax">32</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_char_to_upper</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0];</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (((</span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x61</span><span class="Extracts-plain-syntax">) &amp;&amp; (</span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> &lt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">x7A</span><span class="Extracts-plain-syntax">)) ||</span>
<span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">xE0</span><span class="Extracts-plain-syntax">) &amp;&amp; (</span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> &lt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">xF6</span><span class="Extracts-plain-syntax">)) ||</span>
<span class="Extracts-plain-syntax"> ((</span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> &gt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">xF8</span><span class="Extracts-plain-syntax">) &amp;&amp; (</span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> &lt;= </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-identifier-syntax">xFE</span><span class="Extracts-plain-syntax">))) </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> -= </span><span class="Extracts-constant-syntax">32</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_stream_set_position</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_stream_set_position</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[1], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[2]); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_put_char_stream</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_miniglk_put_char_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0], </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[1]); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">case</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_glk_get_char_stream</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_miniglk_get_char_stream</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">[0]); </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">default</span><span class="Extracts-plain-syntax">:</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">printf</span><span class="Extracts-plain-syntax">("</span><span class="Extracts-identifier-syntax">Unimplemented</span><span class="Extracts-plain-syntax">: </span><span class="Extracts-identifier-syntax">i7_opcode_glk</span><span class="Extracts-plain-syntax"> %</span><span class="Extracts-identifier-syntax">d</span><span class="Extracts-plain-syntax">.\</span><span class="Extracts-identifier-syntax">n</span><span class="Extracts-plain-syntax">", </span><span class="Extracts-identifier-syntax">glk_api_selector</span><span class="Extracts-plain-syntax">); </span><span class="Extracts-identifier-syntax">i7_fatal_exit</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">break</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> }</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">if</span><span class="Extracts-plain-syntax"> (</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">) *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">rv</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_print_name</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fn_i7_mgl_PrintShortName</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">x</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">fn_i7_mgl_pending_boxed_quotation</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.c.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="5-cim.html">&#10094;</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresschapter"><a href="2-cg.html">2</a></li><li class="progresschapter"><a href="3-fti.html">3</a></li><li class="progresschapter"><a href="4-fi6.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-fnc.html">fnc</a></li><li class="progresssection"><a href="5-cnm.html">cnm</a></li><li class="progresssection"><a href="5-crf.html">crf</a></li><li class="progresssection"><a href="5-cgv.html">cgv</a></li><li class="progresssection"><a href="5-cmm.html">cmm</a></li><li class="progresssection"><a href="5-cas.html">cas</a></li><li class="progresssection"><a href="5-car.html">car</a></li><li class="progresssection"><a href="5-cpc.html">cpc</a></li><li class="progresssection"><a href="5-ccn.html">ccn</a></li><li class="progresssection"><a href="5-clt.html">clt</a></li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progresssection"><a href="5-cfm.html">cfm</a></li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progresscurrent">cmn</li><li class="progresssection"><a href="5-cuf.html">cuf</a></li><li class="progressnext"><a href="5-cuf.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>
</body>
</html>

View file

@ -233,7 +233,7 @@ but with their names of course mangled.
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="5-fnc.html">&#10094;</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresschapter"><a href="2-cg.html">2</a></li><li class="progresschapter"><a href="3-fti.html">3</a></li><li class="progresschapter"><a href="4-fi6.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-fnc.html">fnc</a></li><li class="progresscurrent">cnm</li><li class="progresssection"><a href="5-crf.html">crf</a></li><li class="progresssection"><a href="5-cgv.html">cgv</a></li><li class="progresssection"><a href="5-cmm.html">cmm</a></li><li class="progresssection"><a href="5-cas.html">cas</a></li><li class="progresssection"><a href="5-car.html">car</a></li><li class="progresssection"><a href="5-cpc.html">cpc</a></li><li class="progresssection"><a href="5-ccn.html">ccn</a></li><li class="progresssection"><a href="5-clt.html">clt</a></li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progresssection"><a href="5-cfm.html">cfm</a></li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progresssection"><a href="5-cuf.html">cuf</a></li><li class="progressnext"><a href="5-crf.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="5-fnc.html">&#10094;</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresschapter"><a href="2-cg.html">2</a></li><li class="progresschapter"><a href="3-fti.html">3</a></li><li class="progresschapter"><a href="4-fi6.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-fnc.html">fnc</a></li><li class="progresscurrent">cnm</li><li class="progresssection"><a href="5-crf.html">crf</a></li><li class="progresssection"><a href="5-cgv.html">cgv</a></li><li class="progresssection"><a href="5-cmm.html">cmm</a></li><li class="progresssection"><a href="5-cas.html">cas</a></li><li class="progresssection"><a href="5-car.html">car</a></li><li class="progresssection"><a href="5-cpc.html">cpc</a></li><li class="progresssection"><a href="5-ccn.html">ccn</a></li><li class="progresssection"><a href="5-clt.html">clt</a></li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progresssection"><a href="5-cfm.html">cfm</a></li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progresssection"><a href="5-cmn.html">cmn</a></li><li class="progresssection"><a href="5-cuf.html">cuf</a></li><li class="progressnext"><a href="5-crf.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -1277,7 +1277,7 @@ to the user, who should call only these:
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.c.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="5-clt.html">&#10094;</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresschapter"><a href="2-cg.html">2</a></li><li class="progresschapter"><a href="3-fti.html">3</a></li><li class="progresschapter"><a href="4-fi6.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-fnc.html">fnc</a></li><li class="progresssection"><a href="5-cnm.html">cnm</a></li><li class="progresssection"><a href="5-crf.html">crf</a></li><li class="progresssection"><a href="5-cgv.html">cgv</a></li><li class="progresssection"><a href="5-cmm.html">cmm</a></li><li class="progresssection"><a href="5-cas.html">cas</a></li><li class="progresssection"><a href="5-car.html">car</a></li><li class="progresssection"><a href="5-cpc.html">cpc</a></li><li class="progresssection"><a href="5-ccn.html">ccn</a></li><li class="progresssection"><a href="5-clt.html">clt</a></li><li class="progresscurrent">com</li><li class="progresssection"><a href="5-cfm.html">cfm</a></li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progresssection"><a href="5-cuf.html">cuf</a></li><li class="progressnext"><a href="5-cfm.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="5-clt.html">&#10094;</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresschapter"><a href="2-cg.html">2</a></li><li class="progresschapter"><a href="3-fti.html">3</a></li><li class="progresschapter"><a href="4-fi6.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-fnc.html">fnc</a></li><li class="progresssection"><a href="5-cnm.html">cnm</a></li><li class="progresssection"><a href="5-crf.html">crf</a></li><li class="progresssection"><a href="5-cgv.html">cgv</a></li><li class="progresssection"><a href="5-cmm.html">cmm</a></li><li class="progresssection"><a href="5-cas.html">cas</a></li><li class="progresssection"><a href="5-car.html">car</a></li><li class="progresssection"><a href="5-cpc.html">cpc</a></li><li class="progresssection"><a href="5-ccn.html">ccn</a></li><li class="progresssection"><a href="5-clt.html">clt</a></li><li class="progresscurrent">com</li><li class="progresssection"><a href="5-cfm.html">cfm</a></li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progresssection"><a href="5-cmn.html">cmn</a></li><li class="progresssection"><a href="5-cuf.html">cuf</a></li><li class="progressnext"><a href="5-cfm.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -320,7 +320,7 @@ have to recurse downwards through the possibilities and preface each one by
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-cpc.html#SP2">&#167;2</a>.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="5-car.html">&#10094;</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresschapter"><a href="2-cg.html">2</a></li><li class="progresschapter"><a href="3-fti.html">3</a></li><li class="progresschapter"><a href="4-fi6.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-fnc.html">fnc</a></li><li class="progresssection"><a href="5-cnm.html">cnm</a></li><li class="progresssection"><a href="5-crf.html">crf</a></li><li class="progresssection"><a href="5-cgv.html">cgv</a></li><li class="progresssection"><a href="5-cmm.html">cmm</a></li><li class="progresssection"><a href="5-cas.html">cas</a></li><li class="progresssection"><a href="5-car.html">car</a></li><li class="progresscurrent">cpc</li><li class="progresssection"><a href="5-ccn.html">ccn</a></li><li class="progresssection"><a href="5-clt.html">clt</a></li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progresssection"><a href="5-cfm.html">cfm</a></li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progresssection"><a href="5-cuf.html">cuf</a></li><li class="progressnext"><a href="5-ccn.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="5-car.html">&#10094;</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresschapter"><a href="2-cg.html">2</a></li><li class="progresschapter"><a href="3-fti.html">3</a></li><li class="progresschapter"><a href="4-fi6.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-fnc.html">fnc</a></li><li class="progresssection"><a href="5-cnm.html">cnm</a></li><li class="progresssection"><a href="5-crf.html">crf</a></li><li class="progresssection"><a href="5-cgv.html">cgv</a></li><li class="progresssection"><a href="5-cmm.html">cmm</a></li><li class="progresssection"><a href="5-cas.html">cas</a></li><li class="progresssection"><a href="5-car.html">car</a></li><li class="progresscurrent">cpc</li><li class="progresssection"><a href="5-ccn.html">ccn</a></li><li class="progresssection"><a href="5-clt.html">clt</a></li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progresssection"><a href="5-cfm.html">cfm</a></li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progresssection"><a href="5-cmn.html">cmn</a></li><li class="progresssection"><a href="5-cuf.html">cuf</a></li><li class="progressnext"><a href="5-ccn.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -222,7 +222,7 @@ calling functions.
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-crf.html#SP2_1">&#167;2.1</a>.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="5-cnm.html">&#10094;</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresschapter"><a href="2-cg.html">2</a></li><li class="progresschapter"><a href="3-fti.html">3</a></li><li class="progresschapter"><a href="4-fi6.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-fnc.html">fnc</a></li><li class="progresssection"><a href="5-cnm.html">cnm</a></li><li class="progresscurrent">crf</li><li class="progresssection"><a href="5-cgv.html">cgv</a></li><li class="progresssection"><a href="5-cmm.html">cmm</a></li><li class="progresssection"><a href="5-cas.html">cas</a></li><li class="progresssection"><a href="5-car.html">car</a></li><li class="progresssection"><a href="5-cpc.html">cpc</a></li><li class="progresssection"><a href="5-ccn.html">ccn</a></li><li class="progresssection"><a href="5-clt.html">clt</a></li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progresssection"><a href="5-cfm.html">cfm</a></li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progresssection"><a href="5-cuf.html">cuf</a></li><li class="progressnext"><a href="5-cgv.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="5-cnm.html">&#10094;</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresschapter"><a href="2-cg.html">2</a></li><li class="progresschapter"><a href="3-fti.html">3</a></li><li class="progresschapter"><a href="4-fi6.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-fnc.html">fnc</a></li><li class="progresssection"><a href="5-cnm.html">cnm</a></li><li class="progresscurrent">crf</li><li class="progresssection"><a href="5-cgv.html">cgv</a></li><li class="progresssection"><a href="5-cmm.html">cmm</a></li><li class="progresssection"><a href="5-cas.html">cas</a></li><li class="progresssection"><a href="5-car.html">car</a></li><li class="progresssection"><a href="5-cpc.html">cpc</a></li><li class="progresssection"><a href="5-ccn.html">ccn</a></li><li class="progresssection"><a href="5-clt.html">clt</a></li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progresssection"><a href="5-cfm.html">cfm</a></li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progresssection"><a href="5-cmn.html">cmn</a></li><li class="progresssection"><a href="5-cuf.html">cuf</a></li><li class="progressnext"><a href="5-cgv.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -193,7 +193,7 @@ or vice versa. The following functions must be perfect inverses of each other.
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.c.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="5-cim.html">&#10094;</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresschapter"><a href="2-cg.html">2</a></li><li class="progresschapter"><a href="3-fti.html">3</a></li><li class="progresschapter"><a href="4-fi6.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-fnc.html">fnc</a></li><li class="progresssection"><a href="5-cnm.html">cnm</a></li><li class="progresssection"><a href="5-crf.html">crf</a></li><li class="progresssection"><a href="5-cgv.html">cgv</a></li><li class="progresssection"><a href="5-cmm.html">cmm</a></li><li class="progresssection"><a href="5-cas.html">cas</a></li><li class="progresssection"><a href="5-car.html">car</a></li><li class="progresssection"><a href="5-cpc.html">cpc</a></li><li class="progresssection"><a href="5-ccn.html">ccn</a></li><li class="progresssection"><a href="5-clt.html">clt</a></li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progresssection"><a href="5-cfm.html">cfm</a></li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progresscurrent">cuf</li><li class="progressnextoff">&#10095;</li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="5-cmn.html">&#10094;</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresschapter"><a href="2-cg.html">2</a></li><li class="progresschapter"><a href="3-fti.html">3</a></li><li class="progresschapter"><a href="4-fi6.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-fnc.html">fnc</a></li><li class="progresssection"><a href="5-cnm.html">cnm</a></li><li class="progresssection"><a href="5-crf.html">crf</a></li><li class="progresssection"><a href="5-cgv.html">cgv</a></li><li class="progresssection"><a href="5-cmm.html">cmm</a></li><li class="progresssection"><a href="5-cas.html">cas</a></li><li class="progresssection"><a href="5-car.html">car</a></li><li class="progresssection"><a href="5-cpc.html">cpc</a></li><li class="progresssection"><a href="5-ccn.html">ccn</a></li><li class="progresssection"><a href="5-clt.html">clt</a></li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progresssection"><a href="5-cfm.html">cfm</a></li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progresssection"><a href="5-cmn.html">cmn</a></li><li class="progresscurrent">cuf</li><li class="progressnextoff">&#10095;</li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -531,7 +531,10 @@ was at one time part of a snapshot.
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> (*</span><span class="Extracts-identifier-syntax">receiver</span><span class="Extracts-plain-syntax">)(</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">wchar_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">char</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">style</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">send_count</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">char</span><span class="Extracts-plain-syntax"> *(*</span><span class="Extracts-identifier-syntax">sender</span><span class="Extracts-plain-syntax">)(</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">count</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> (*</span><span class="Extracts-identifier-syntax">communicator</span><span class="Extracts-plain-syntax">)(</span><span class="Extracts-identifier-syntax">struct</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">char</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">argc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> (*</span><span class="Extracts-identifier-syntax">stylist</span><span class="Extracts-plain-syntax">)(</span><span class="Extracts-identifier-syntax">struct</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">which</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">what</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> (*</span><span class="Extracts-identifier-syntax">glk_implementation</span><span class="Extracts-plain-syntax">)(</span><span class="Extracts-identifier-syntax">struct</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glk_api_selector</span><span class="Extracts-plain-syntax">,</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">varargc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">struct</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">miniglk_data</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">miniglk</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">use_UTF8</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">} </span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax">;</span>
</pre>
@ -575,7 +578,10 @@ so it initially consumes very little memory.
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">receiver</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_default_receiver</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">send_count</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">0</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">sender</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_default_sender</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">stylist</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_default_stylist</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">glk_implementation</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">i7_default_glk</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">.</span><span class="Extracts-identifier-syntax">use_UTF8</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-constant-syntax">1</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_initialise_miniglk_data</span><span class="Extracts-plain-syntax">(&amp;</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">return</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
</pre>
@ -587,7 +593,6 @@ a new process, so we must define those:
<pre class="Extracts-displayed-code all-displayed-code code-font">
<span class="Extracts-identifier-syntax">char</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">i7_default_sender</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">count</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_default_receiver</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">wchar_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">c</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">char</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">style</span><span class="Extracts-plain-syntax">);</span>
<span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_default_communicator</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">char</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">id</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">int</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">argc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">args</span><span class="Extracts-plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.h.</li></ul>
<p class="commentary">The receiver and sender functions allow our textual I/O to be managed by external
@ -665,6 +670,30 @@ but may in between the two supply its own receiver or sender:
<span class="Extracts-plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.c.</li></ul>
<p class="commentary">Similarly, ambitious projects which want their own complete I/O systems can
set the following:
</p>
<pre class="Extracts-displayed-code all-displayed-code code-font">
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_set_process_stylist</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">,</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> (*</span><span class="Extracts-identifier-syntax">stylist</span><span class="Extracts-plain-syntax">)(</span><span class="Extracts-identifier-syntax">struct</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">which</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">what</span><span class="Extracts-plain-syntax">));</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_set_process_glk_implementation</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">,</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> (*</span><span class="Extracts-identifier-syntax">glk_implementation</span><span class="Extracts-plain-syntax">)(</span><span class="Extracts-identifier-syntax">struct</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glk_api_selector</span><span class="Extracts-plain-syntax">,</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">varargc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">));</span>
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.h.</li></ul>
<pre class="Extracts-displayed-code all-displayed-code code-font">
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_set_process_stylist</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">,</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> (*</span><span class="Extracts-identifier-syntax">stylist</span><span class="Extracts-plain-syntax">)(</span><span class="Extracts-identifier-syntax">struct</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">which</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">what</span><span class="Extracts-plain-syntax">)) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">stylist</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">stylist</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
<span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7_set_process_glk_implementation</span><span class="Extracts-plain-syntax">(</span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">,</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">void</span><span class="Extracts-plain-syntax"> (*</span><span class="Extracts-identifier-syntax">glk_implementation</span><span class="Extracts-plain-syntax">)(</span><span class="Extracts-identifier-syntax">struct</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7process_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">glk_api_selector</span><span class="Extracts-plain-syntax">,</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">varargc</span><span class="Extracts-plain-syntax">, </span><span class="Extracts-identifier-syntax">i7word_t</span><span class="Extracts-plain-syntax"> *</span><span class="Extracts-identifier-syntax">z</span><span class="Extracts-plain-syntax">)) {</span>
<span class="Extracts-plain-syntax"> </span><span class="Extracts-identifier-syntax">proc</span><span class="Extracts-plain-syntax">-&gt;</span><span class="Extracts-identifier-syntax">glk_implementation</span><span class="Extracts-plain-syntax"> = </span><span class="Extracts-identifier-syntax">glk_implementation</span><span class="Extracts-plain-syntax">;</span>
<span class="Extracts-plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.c.</li></ul>
<p class="commentary">In all cases, execution is kicked off when <span class="extract"><span class="Extracts-extract-syntax">i7_run_process</span></span> is called on a process.
Ordinarily, that will execute the entire Inform 7 program and then come back to us;
but we need to cope with a sudden halt during execution, either through a fatal
@ -722,7 +751,7 @@ like these other functions: see <a href="5-com.html" class="internal">C Object M
</pre>
<ul class="endnotetexts"><li>This is part of the extract file inform7_clib.c.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="4-i6c2.html">&#10094;</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresschapter"><a href="2-cg.html">2</a></li><li class="progresschapter"><a href="3-fti.html">3</a></li><li class="progresschapter"><a href="4-fi6.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresscurrent">fnc</li><li class="progresssection"><a href="5-cnm.html">cnm</a></li><li class="progresssection"><a href="5-crf.html">crf</a></li><li class="progresssection"><a href="5-cgv.html">cgv</a></li><li class="progresssection"><a href="5-cmm.html">cmm</a></li><li class="progresssection"><a href="5-cas.html">cas</a></li><li class="progresssection"><a href="5-car.html">car</a></li><li class="progresssection"><a href="5-cpc.html">cpc</a></li><li class="progresssection"><a href="5-ccn.html">ccn</a></li><li class="progresssection"><a href="5-clt.html">clt</a></li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progresssection"><a href="5-cfm.html">cfm</a></li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progresssection"><a href="5-cuf.html">cuf</a></li><li class="progressnext"><a href="5-cnm.html">&#10095;</a></li></ul></div>
<ul class="progressbar"><li class="progressprev"><a href="4-i6c2.html">&#10094;</a></li><li class="progresschapter"><a href="1-fm.html">1</a></li><li class="progresschapter"><a href="2-cg.html">2</a></li><li class="progresschapter"><a href="3-fti.html">3</a></li><li class="progresschapter"><a href="4-fi6.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresscurrent">fnc</li><li class="progresssection"><a href="5-cnm.html">cnm</a></li><li class="progresssection"><a href="5-crf.html">crf</a></li><li class="progresssection"><a href="5-cgv.html">cgv</a></li><li class="progresssection"><a href="5-cmm.html">cmm</a></li><li class="progresssection"><a href="5-cas.html">cas</a></li><li class="progresssection"><a href="5-car.html">car</a></li><li class="progresssection"><a href="5-cpc.html">cpc</a></li><li class="progresssection"><a href="5-ccn.html">ccn</a></li><li class="progresssection"><a href="5-clt.html">clt</a></li><li class="progresssection"><a href="5-com.html">com</a></li><li class="progresssection"><a href="5-cfm.html">cfm</a></li><li class="progresssection"><a href="5-cim.html">cim</a></li><li class="progresssection"><a href="5-cmn.html">cmn</a></li><li class="progresssection"><a href="5-cuf.html">cuf</a></li><li class="progressnext"><a href="5-cnm.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>

View file

@ -241,6 +241,11 @@
<spon class="sectiontitle">C Input-Output Model</span></a> -
<span class="sectionpurpose">How C programs print text out, really.</span></p>
</li>
<li>
<p class="sectionentry"><a href="5-cmn.html">
<spon class="sectiontitle">C Miniglk</span></a> -
<span class="sectionpurpose">Just enough of the Glk input/output interface to allow simple console text in and out, and no more.</span></p>
</li>
<li>
<p class="sectionentry"><a href="5-cuf.html">
<spon class="sectiontitle">C Utility Functions</span></a> -

View file

@ -426,8 +426,8 @@ in I6 the only legal uses of <span class="extract"><span class="extract-syntax">
legal way for <span class="extract"><span class="extract-syntax">style</span></span> to be followed by an arbitrary value, as it is here. But
Inform 6 will not be compiling this: Inform will convert <span class="extract"><span class="extract-syntax">style V;</span></span> directly to
the Inter statement <span class="extract"><span class="extract-syntax">!style V</span></span>, which will then be translated to C as the function
call <span class="extract"><span class="extract-syntax">i7_style(proc, V)</span></span> &mdash; and that function, in our library of C code supporting
Inform, can handle any textual value of <span class="extract"><span class="extract-syntax">V</span></span>.
call <span class="extract"><span class="extract-syntax">i7_styling(proc, 2, V)</span></span> &mdash; and that function, in our library of C code
supporting Inform, can handle any textual value of <span class="extract"><span class="extract-syntax">V</span></span>.
</p>
<p class="commentary">With that bit of fancy footwork out of the way, we can make a pair of text

View file

@ -84,30 +84,30 @@ which take more than 1/1000th of the total running time.
<pre class="undisplayed-code all-displayed-code code-font">
<span class="plain-syntax">100.0% in inform7 run</span>
<span class="plain-syntax"> 54.5% in compilation to Inter</span>
<span class="plain-syntax"> 39.3% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
<span class="plain-syntax"> 3.3% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pre_pass</a>
<span class="plain-syntax"> 2.5% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pass_1</a>
<span class="plain-syntax"> 1.9% in </span><a href="../runtime-module/6-pi.html#SP1" class="internal">RTPhrasebook::compile_entries</a>
<span class="plain-syntax"> 1.4% in </span><a href="../assertions-module/5-id.html#SP4" class="internal">ImperativeDefinitions::assess_all</a>
<span class="plain-syntax"> 54.8% in compilation to Inter</span>
<span class="plain-syntax"> 39.7% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
<span class="plain-syntax"> 3.5% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pre_pass</a>
<span class="plain-syntax"> 2.4% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pass_1</a>
<span class="plain-syntax"> 2.0% in </span><a href="../runtime-module/6-pi.html#SP1" class="internal">RTPhrasebook::compile_entries</a>
<span class="plain-syntax"> 1.3% in </span><a href="../assertions-module/5-id.html#SP4" class="internal">ImperativeDefinitions::assess_all</a>
<span class="plain-syntax"> 1.1% in </span><a href="../runtime-module/5-kc.html#SP10" class="internal">RTKindConstructors::compile</a>
<span class="plain-syntax"> 0.4% in </span><a href="../assertions-module/5-id.html#SP5" class="internal">ImperativeDefinitions::compile_first_block</a>
<span class="plain-syntax"> 0.4% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pass_2</a>
<span class="plain-syntax"> 0.4% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
<span class="plain-syntax"> 0.4% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
<span class="plain-syntax"> 0.4% in </span><a href="../knowledge-module/5-tmw.html#SP5" class="internal">World::stage_V</a>
<span class="plain-syntax"> 0.2% in </span><a href="../runtime-module/3-cm.html#SP1" class="internal">CompletionModule::compile</a>
<span class="plain-syntax"> 0.2% in </span><a href="../assertions-module/5-id.html#SP5" class="internal">ImperativeDefinitions::compile_first_block</a>
<span class="plain-syntax"> 0.2% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
<span class="plain-syntax"> 0.1% in </span><a href="../runtime-module/3-cm.html#SP1" class="internal">CompletionModule::compile</a>
<span class="plain-syntax"> 0.1% in </span><a href="../knowledge-module/4-is.html#SP27" class="internal">InferenceSubjects::emit_all</a>
<span class="plain-syntax"> 0.1% in </span><a href="../runtime-module/5-kc.html#SP10_7" class="internal">RTKindConstructors::compile_permissions</a>
<span class="plain-syntax"> 0.1% in </span><a href="../core-module/1-wtc.html#SP9" class="internal">Task::make_built_in_kind_constructors</a>
<span class="plain-syntax"> 0.1% in </span><a href="../knowledge-module/5-tmw.html#SP3" class="internal">World::stages_II_and_III</a>
<span class="plain-syntax"> 1.7% not specifically accounted for</span>
<span class="plain-syntax"> 43.4% in running Inter pipeline</span>
<span class="plain-syntax"> 12.4% in step preparation</span>
<span class="plain-syntax"> 9.4% in inter step 7/16: consolidate-text</span>
<span class="plain-syntax"> 7.7% in inter step 16/16: generate inform6 -&gt; auto.inf</span>
<span class="plain-syntax"> 7.7% in inter step 2/16: link</span>
<span class="plain-syntax"> 1.5% in inter step 11/16: make-identifiers-unique</span>
<span class="plain-syntax"> 1.9% not specifically accounted for</span>
<span class="plain-syntax"> 43.2% in running Inter pipeline</span>
<span class="plain-syntax"> 12.9% in step preparation</span>
<span class="plain-syntax"> 9.5% in inter step 7/16: consolidate-text</span>
<span class="plain-syntax"> 7.9% in inter step 2/16: link</span>
<span class="plain-syntax"> 6.7% in inter step 16/16: generate inform6 -&gt; auto.inf</span>
<span class="plain-syntax"> 1.4% in inter step 11/16: make-identifiers-unique</span>
<span class="plain-syntax"> 0.4% in inter step 12/16: reconcile-verbs</span>
<span class="plain-syntax"> 0.2% in inter step 14/16: eliminate-redundant-operations</span>
<span class="plain-syntax"> 0.2% in inter step 6/16: assimilate</span>
@ -117,7 +117,7 @@ which take more than 1/1000th of the total running time.
<span class="plain-syntax"> 0.1% in inter step 13/16: eliminate-redundant-labels</span>
<span class="plain-syntax"> 0.1% in inter step 4/16: parse-linked-matter</span>
<span class="plain-syntax"> 0.1% in inter step 5/16: resolve-conditional-compilation</span>
<span class="plain-syntax"> 2.2% not specifically accounted for</span>
<span class="plain-syntax"> 2.5% not specifically accounted for</span>
<span class="plain-syntax"> 1.6% in supervisor</span>
<span class="plain-syntax"> 0.3% not specifically accounted for</span>
</pre>
@ -128,50 +128,51 @@ represent less than 1/1000th of the total.
</p>
<pre class="undisplayed-code all-displayed-code code-font">
<span class="plain-syntax">Total memory consumption was 394747K = 385 MB</span>
<span class="plain-syntax">Total memory consumption was 399937K = 391 MB</span>
<span class="plain-syntax">60.7% was used for 1997368 objects, in 371210 frames in 300 x 800K = 240000K = 234 MB:</span>
<span class="plain-syntax">61.0% was used for 2018780 objects, in 379611 frames in 305 x 800K = 244000K = 238 MB:</span>
<span class="plain-syntax"> 10.3% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes</span>
<span class="plain-syntax"> 7.1% text_stream_array 5146 x 100 = 514600 objects, 28982272 bytes</span>
<span class="plain-syntax"> 4.2% linked_list 30852 objects, 17277120 bytes</span>
<span class="plain-syntax"> 3.9% inter_symbol_array 139 x 1024 = 142336 objects, 15946080 bytes</span>
<span class="plain-syntax"> 2.5% parse_node 129365 objects, 10349200 bytes</span>
<span class="plain-syntax"> 10.2% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes</span>
<span class="plain-syntax"> 7.2% text_stream_array 5254 x 100 = 525400 objects, 29590528 bytes</span>
<span class="plain-syntax"> 4.7% linked_list 34681 objects, 19421360 bytes</span>
<span class="plain-syntax"> 3.9% inter_symbol_array 140 x 1024 = 143360 objects, 16060800 bytes</span>
<span class="plain-syntax"> 2.5% parse_node 129462 objects, 10356960 bytes</span>
<span class="plain-syntax"> 1.8% verb_conjugation 160 objects, 7425280 bytes</span>
<span class="plain-syntax"> 1.3% parse_node_annotation_array 345 x 500 = 172500 objects, 5531040 bytes</span>
<span class="plain-syntax"> 0.8% pcalc_prop_array 25 x 1000 = 25000 objects, 3400800 bytes</span>
<span class="plain-syntax"> 0.8% inter_name_array 69 x 1000 = 69000 objects, 3314208 bytes</span>
<span class="plain-syntax"> 0.6% kind_array 68 x 1000 = 68000 objects, 2722176 bytes</span>
<span class="plain-syntax"> 0.5% inter_name_generator_array 53 x 1000 = 53000 objects, 2121696 bytes</span>
<span class="plain-syntax"> 0.4% inter_schema_token 13475 objects, 1940400 bytes</span>
<span class="plain-syntax"> 0.4% inter_package 26570 objects, 1913040 bytes</span>
<span class="plain-syntax"> 0.4% package_request 21136 objects, 1859968 bytes</span>
<span class="plain-syntax"> 0.4% inter_schema_token 13926 objects, 2005344 bytes</span>
<span class="plain-syntax"> 0.4% inter_package 26566 objects, 1912752 bytes</span>
<span class="plain-syntax"> 0.4% package_request 21139 objects, 1860232 bytes</span>
<span class="plain-syntax"> 0.4% vocabulary_entry_array 161 x 100 = 16100 objects, 1808352 bytes</span>
<span class="plain-syntax"> 0.4% inter_symbols_table 26570 objects, 1700480 bytes</span>
<span class="plain-syntax"> 0.3% dictionary 33267 objects, 1596816 bytes</span>
<span class="plain-syntax"> 0.4% inter_symbols_table 26566 objects, 1700224 bytes</span>
<span class="plain-syntax"> 0.3% dictionary 33302 objects, 1598496 bytes</span>
<span class="plain-syntax"> 0.3% match_trie_array 11 x 1000 = 11000 objects, 1496352 bytes</span>
<span class="plain-syntax"> 0.3% i6_schema_array 23 x 100 = 2300 objects, 1380736 bytes</span>
<span class="plain-syntax"> 0.3% dict_entry_array 393 x 100 = 39300 objects, 1270176 bytes</span>
<span class="plain-syntax"> 0.3% dict_entry_array 396 x 100 = 39600 objects, 1279872 bytes</span>
<span class="plain-syntax"> 0.2% map_data 670 objects, 1125600 bytes</span>
<span class="plain-syntax"> 0.2% id_body 940 objects, 1075360 bytes</span>
<span class="plain-syntax"> 0.2% id_body 941 objects, 1076504 bytes</span>
<span class="plain-syntax"> 0.2% adjective_meaning 202 objects, 1000304 bytes</span>
<span class="plain-syntax"> 0.2% excerpt_meaning 3099 objects, 966888 bytes</span>
<span class="plain-syntax"> 0.2% excerpt_meaning 3100 objects, 967200 bytes</span>
<span class="plain-syntax"> 0.2% production 3872 objects, 898304 bytes</span>
<span class="plain-syntax"> 0.2% ptoken 8382 objects, 871728 bytes</span>
<span class="plain-syntax"> 0.2% grammatical_usage 3611 objects, 866640 bytes</span>
<span class="plain-syntax"> 0.2% individual_form 2561 objects, 860496 bytes</span>
<span class="plain-syntax"> 0.2% inter_schema_node 8670 objects, 832320 bytes</span>
<span class="plain-syntax"> 0.2% inter_schema_node 8891 objects, 853536 bytes</span>
<span class="plain-syntax"> 0.1% unary_predicate_array 16 x 1000 = 16000 objects, 640512 bytes</span>
<span class="plain-syntax"> 0.1% local_variable_array 47 x 100 = 4700 objects, 452704 bytes</span>
<span class="plain-syntax"> ---- verb_usage 1128 objects, 388032 bytes</span>
<span class="plain-syntax"> ---- scan_directory 94 objects, 388032 bytes</span>
<span class="plain-syntax"> ---- verb_usage 1128 objects, 388032 bytes</span>
<span class="plain-syntax"> ---- rule 469 objects, 367696 bytes</span>
<span class="plain-syntax"> ---- verb_form 386 objects, 345856 bytes</span>
<span class="plain-syntax"> ---- noun 2380 objects, 285600 bytes</span>
<span class="plain-syntax"> ---- compilation_subtask 3346 objects, 267680 bytes</span>
<span class="plain-syntax"> ---- inference_subject 665 objects, 260680 bytes</span>
<span class="plain-syntax"> ---- vanilla_function 3678 objects, 235392 bytes</span>
<span class="plain-syntax"> ---- inter_annotation_array 1 x 8192 objects, 196640 bytes</span>
<span class="plain-syntax"> ---- hierarchy_location 1118 objects, 169936 bytes</span>
<span class="plain-syntax"> ---- hierarchy_location 1117 objects, 169784 bytes</span>
<span class="plain-syntax"> ---- binary_predicate 321 objects, 169488 bytes</span>
<span class="plain-syntax"> ---- linguistic_stock_item 3316 objects, 159168 bytes</span>
<span class="plain-syntax"> ---- rule_family_data 400 objects, 147200 bytes</span>
@ -179,8 +180,8 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- nascent_array 2124 objects, 135936 bytes</span>
<span class="plain-syntax"> ---- documentation_ref 1273 objects, 112024 bytes</span>
<span class="plain-syntax"> ---- inference 1703 objects, 108992 bytes</span>
<span class="plain-syntax"> ---- imperative_defn 1376 objects, 99072 bytes</span>
<span class="plain-syntax"> ---- inter_tree 6 objects, 98400 bytes</span>
<span class="plain-syntax"> ---- imperative_defn 1377 objects, 99144 bytes</span>
<span class="plain-syntax"> ---- inter_tree 6 objects, 98448 bytes</span>
<span class="plain-syntax"> ---- noun_usage 2402 objects, 96080 bytes</span>
<span class="plain-syntax"> ---- anl_entry_array 2 x 1000 = 2000 objects, 96064 bytes</span>
<span class="plain-syntax"> ---- preposition 273 objects, 87360 bytes</span>
@ -193,8 +194,8 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- spatial_data 670 objects, 64320 bytes</span>
<span class="plain-syntax"> ---- kind_macro_definition 9 objects, 62280 bytes</span>
<span class="plain-syntax"> ---- booking 860 objects, 61920 bytes</span>
<span class="plain-syntax"> ---- scenes_rcd_data 1880 objects, 60160 bytes</span>
<span class="plain-syntax"> ---- actions_rcd_data 1880 objects, 60160 bytes</span>
<span class="plain-syntax"> ---- actions_rcd_data 1882 objects, 60224 bytes</span>
<span class="plain-syntax"> ---- scenes_rcd_data 1882 objects, 60224 bytes</span>
<span class="plain-syntax"> ---- command_grammar 130 objects, 58240 bytes</span>
<span class="plain-syntax"> ---- kind_constructor 77 objects, 57904 bytes</span>
<span class="plain-syntax"> ---- table 7 objects, 56672 bytes</span>
@ -204,17 +205,18 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- property_inference_data 1315 objects, 52600 bytes</span>
<span class="plain-syntax"> ---- response_message 407 objects, 52096 bytes</span>
<span class="plain-syntax"> ---- ap_clause_array 2 x 400 = 800 objects, 51264 bytes</span>
<span class="plain-syntax"> ---- inter_node_list 767 objects, 42952 bytes</span>
<span class="plain-syntax"> ---- inter_node_list 768 objects, 43008 bytes</span>
<span class="plain-syntax"> ---- text_substitution 436 objects, 41856 bytes</span>
<span class="plain-syntax"> ---- activity_list_array 1 x 1000 objects, 40032 bytes</span>
<span class="plain-syntax"> ---- anl_clause_array 1 x 1000 objects, 40032 bytes</span>
<span class="plain-syntax"> ---- to_family_data 496 objects, 39680 bytes</span>
<span class="plain-syntax"> ---- to_family_data 497 objects, 39760 bytes</span>
<span class="plain-syntax"> ---- shared_variable_access_list_array 12 x 100 = 1200 objects, 38784 bytes</span>
<span class="plain-syntax"> ---- parsing_data 670 objects, 37520 bytes</span>
<span class="plain-syntax"> ---- heading 198 objects, 36432 bytes</span>
<span class="plain-syntax"> ---- production_list 617 objects, 34552 bytes</span>
<span class="plain-syntax"> ---- counting_data 670 objects, 32160 bytes</span>
<span class="plain-syntax"> ---- regions_data 670 objects, 32160 bytes</span>
<span class="plain-syntax"> ---- counting_data 670 objects, 32160 bytes</span>
<span class="plain-syntax"> ---- linked_list_item_array 2 x 1000 = 2000 objects, 32064 bytes</span>
<span class="plain-syntax"> ---- HTML_tag_array 1 x 1000 objects, 32032 bytes</span>
<span class="plain-syntax"> ---- property_permission 96 objects, 31488 bytes</span>
<span class="plain-syntax"> ---- stack_frame_box 304 objects, 29184 bytes</span>
@ -226,37 +228,37 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- nonlocal_variable 93 objects, 20088 bytes</span>
<span class="plain-syntax"> ---- property 146 objects, 19856 bytes</span>
<span class="plain-syntax"> ---- timed_rules_rfd_data 400 objects, 19200 bytes</span>
<span class="plain-syntax"> ---- method 395 objects, 18960 bytes</span>
<span class="plain-syntax"> ---- method 374 objects, 17952 bytes</span>
<span class="plain-syntax"> ---- pcalc_prop_deferral 86 objects, 17888 bytes</span>
<span class="plain-syntax"> ---- instance 167 objects, 17368 bytes</span>
<span class="plain-syntax"> ---- parse_node_tree 20 objects, 17280 bytes</span>
<span class="plain-syntax"> ---- understanding_reference_array 2 x 100 = 200 objects, 16064 bytes</span>
<span class="plain-syntax"> ---- to_phrase_request 59 objects, 16048 bytes</span>
<span class="plain-syntax"> ---- linked_list_item_array 1 x 1000 objects, 16032 bytes</span>
<span class="plain-syntax"> ---- action_name_list_array 1 x 1000 objects, 16032 bytes</span>
<span class="plain-syntax"> ---- match_avinue_array 1 x 1000 objects, 16032 bytes</span>
<span class="plain-syntax"> ---- adjective 137 objects, 15344 bytes</span>
<span class="plain-syntax"> ---- generated_segment 14 objects, 14784 bytes</span>
<span class="plain-syntax"> ---- booking_list 407 objects, 13024 bytes</span>
<span class="plain-syntax"> ---- adjective_iname_holder 320 objects, 12800 bytes</span>
<span class="plain-syntax"> ---- pathname 296 objects, 11840 bytes</span>
<span class="plain-syntax"> ---- uniqueness_count 456 objects, 10944 bytes</span>
<span class="plain-syntax"> ---- stopwatch_timer 114 objects, 9120 bytes</span>
<span class="plain-syntax"> ---- uniqueness_count 451 objects, 10824 bytes</span>
<span class="plain-syntax"> ---- stopwatch_timer 113 objects, 9040 bytes</span>
<span class="plain-syntax"> ---- filename 207 objects, 8280 bytes</span>
<span class="plain-syntax"> ---- equation_node 68 objects, 7616 bytes</span>
<span class="plain-syntax"> ---- hierarchy_attachment_point 77 objects, 7392 bytes</span>
<span class="plain-syntax"> ---- understanding_item_array 3 x 100 = 300 objects, 7296 bytes</span>
<span class="plain-syntax"> ---- shared_variable_array 1 x 100 objects, 7232 bytes</span>
<span class="plain-syntax"> ---- determiner 22 objects, 7216 bytes</span>
<span class="plain-syntax"> ---- text_literal_holder 161 objects, 6440 bytes</span>
<span class="plain-syntax"> ---- verb 108 objects, 6048 bytes</span>
<span class="plain-syntax"> ---- text_literal_holder 144 objects, 5760 bytes</span>
<span class="plain-syntax"> ---- heading_tree 20 objects, 5440 bytes</span>
<span class="plain-syntax"> ---- inbuild_work 77 objects, 4928 bytes</span>
<span class="plain-syntax"> ---- explicit_action_array 1 x 100 objects, 4832 bytes</span>
<span class="plain-syntax"> ---- value_property_data 84 objects, 4704 bytes</span>
<span class="plain-syntax"> ---- build_vertex 39 objects, 4680 bytes</span>
<span class="plain-syntax"> ---- parsing_pp_data 96 objects, 4608 bytes</span>
<span class="plain-syntax"> ---- activity 35 objects, 3920 bytes</span>
<span class="plain-syntax"> ---- command_line_switch 49 objects, 3920 bytes</span>
<span class="plain-syntax"> ---- activity 35 objects, 3920 bytes</span>
<span class="plain-syntax"> ---- inbuild_edition 53 objects, 3816 bytes</span>
<span class="plain-syntax"> ---- submodule_request 94 objects, 3760 bytes</span>
<span class="plain-syntax"> ---- parse_node_annotation_type 114 objects, 3648 bytes</span>
@ -269,14 +271,14 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- compatibility_specification 65 objects, 3120 bytes</span>
<span class="plain-syntax"> ---- either_or_property_data 62 objects, 2976 bytes</span>
<span class="plain-syntax"> ---- use_option 29 objects, 2552 bytes</span>
<span class="plain-syntax"> ---- part_of_inference_data 79 objects, 2528 bytes</span>
<span class="plain-syntax"> ---- parentage_inference_data 79 objects, 2528 bytes</span>
<span class="plain-syntax"> ---- part_of_inference_data 79 objects, 2528 bytes</span>
<span class="plain-syntax"> ---- kind_constructor_instance_array 1 x 100 objects, 2432 bytes</span>
<span class="plain-syntax"> ---- kind_constructor_casting_rule_array 1 x 100 objects, 2432 bytes</span>
<span class="plain-syntax"> ---- equation_symbol 30 objects, 2400 bytes</span>
<span class="plain-syntax"> ---- inter_construct 30 objects, 2400 bytes</span>
<span class="plain-syntax"> ---- equation_symbol 30 objects, 2400 bytes</span>
<span class="plain-syntax"> ---- pipeline_step 16 objects, 2304 bytes</span>
<span class="plain-syntax"> ---- semver_range 22 objects, 2288 bytes</span>
<span class="plain-syntax"> ---- pipeline_step 16 objects, 2176 bytes</span>
<span class="plain-syntax"> ---- scene 1 object, 2096 bytes</span>
<span class="plain-syntax"> ---- pronoun_usage 42 objects, 1680 bytes</span>
<span class="plain-syntax"> ---- table_contribution_array 1 x 100 objects, 1632 bytes</span>
@ -284,10 +286,10 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- cached_kind_declaration 38 objects, 1520 bytes</span>
<span class="plain-syntax"> ---- noun_filter_token 22 objects, 1408 bytes</span>
<span class="plain-syntax"> ---- inter_tree_location_list 34 objects, 1360 bytes</span>
<span class="plain-syntax"> ---- inter_annotation_form 34 objects, 1360 bytes</span>
<span class="plain-syntax"> ---- inter_annotation_form 33 objects, 1320 bytes</span>
<span class="plain-syntax"> ---- special_meaning_holder 33 objects, 1320 bytes</span>
<span class="plain-syntax"> ---- table_column 16 objects, 1280 bytes</span>
<span class="plain-syntax"> ---- constant_phrase 20 objects, 1280 bytes</span>
<span class="plain-syntax"> ---- table_column 16 objects, 1280 bytes</span>
<span class="plain-syntax"> ---- build_script 39 objects, 1248 bytes</span>
<span class="plain-syntax"> ---- invocation_options_array 1 x 100 objects, 1224 bytes</span>
<span class="plain-syntax"> ---- direction_inference_data 30 objects, 1200 bytes</span>
@ -296,11 +298,9 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- runtime_kind_structure 13 objects, 1040 bytes</span>
<span class="plain-syntax"> ---- quantifier 16 objects, 1024 bytes</span>
<span class="plain-syntax"> ---- pipeline_stage 21 objects, 1008 bytes</span>
<span class="plain-syntax"> ---- named_rulebook_outcome 15 objects, 960 bytes</span>
<span class="plain-syntax"> ---- submodule_identity 30 objects, 960 bytes</span>
<span class="plain-syntax"> ---- code_generation 1 object, 896 bytes</span>
<span class="plain-syntax"> ---- named_rulebook_outcome 15 objects, 960 bytes</span>
<span class="plain-syntax"> ---- inbuild_requirement 22 objects, 880 bytes</span>
<span class="plain-syntax"> ---- generated_segment 27 objects, 864 bytes</span>
<span class="plain-syntax"> ---- control_structure_phrase 12 objects, 864 bytes</span>
<span class="plain-syntax"> ---- cached_understanding 21 objects, 840 bytes</span>
<span class="plain-syntax"> ---- phrase_option_array 1 x 100 objects, 824 bytes</span>
@ -310,83 +310,83 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- I6T_intervention 8 objects, 640 bytes</span>
<span class="plain-syntax"> ---- relation_guard 5 objects, 640 bytes</span>
<span class="plain-syntax"> ---- inter_warehouse_room 10 objects, 640 bytes</span>
<span class="plain-syntax"> ---- code_generation 1 object, 616 bytes</span>
<span class="plain-syntax"> ---- inbuild_search_result 15 objects, 600 bytes</span>
<span class="plain-syntax"> ---- rulebook_outcome 17 objects, 544 bytes</span>
<span class="plain-syntax"> ---- small_word_set 11 objects, 528 bytes</span>
<span class="plain-syntax"> ---- implication 13 objects, 520 bytes</span>
<span class="plain-syntax"> ---- inform_kit 5 objects, 520 bytes</span>
<span class="plain-syntax"> ---- implication 13 objects, 520 bytes</span>
<span class="plain-syntax"> ---- equation 4 objects, 480 bytes</span>
<span class="plain-syntax"> ---- i6_memory_setting 14 objects, 448 bytes</span>
<span class="plain-syntax"> ---- inference_family 11 objects, 440 bytes</span>
<span class="plain-syntax"> ---- i6_memory_setting 13 objects, 416 bytes</span>
<span class="plain-syntax"> ---- module_package 10 objects, 400 bytes</span>
<span class="plain-syntax"> ---- bp_family 12 objects, 384 bytes</span>
<span class="plain-syntax"> ---- article_usage 8 objects, 384 bytes</span>
<span class="plain-syntax"> ---- source_file 5 objects, 360 bytes</span>
<span class="plain-syntax"> ---- inbuild_genre 7 objects, 336 bytes</span>
<span class="plain-syntax"> ---- grammatical_category 8 objects, 320 bytes</span>
<span class="plain-syntax"> ---- door_dir_notice 5 objects, 320 bytes</span>
<span class="plain-syntax"> ---- grammatical_category 8 objects, 320 bytes</span>
<span class="plain-syntax"> ---- pronoun 8 objects, 320 bytes</span>
<span class="plain-syntax"> ---- tree_inventory 1 object, 312 bytes</span>
<span class="plain-syntax"> ---- build_step 4 objects, 288 bytes</span>
<span class="plain-syntax"> ---- up_family 9 objects, 288 bytes</span>
<span class="plain-syntax"> ---- contents_entry 7 objects, 280 bytes</span>
<span class="plain-syntax"> ---- compilation_unit 5 objects, 280 bytes</span>
<span class="plain-syntax"> ---- explicit_bp_data 5 objects, 280 bytes</span>
<span class="plain-syntax"> ---- door_to_notice 5 objects, 280 bytes</span>
<span class="plain-syntax"> ---- contents_entry 7 objects, 280 bytes</span>
<span class="plain-syntax"> ---- explicit_bp_data 5 objects, 280 bytes</span>
<span class="plain-syntax"> ---- compilation_unit 5 objects, 280 bytes</span>
<span class="plain-syntax"> ---- verb_usage_tier 5 objects, 240 bytes</span>
<span class="plain-syntax"> ---- adjective_meaning_family 7 objects, 224 bytes</span>
<span class="plain-syntax"> ---- test_scenario 1 object, 216 bytes</span>
<span class="plain-syntax"> ---- release_instructions 1 object, 208 bytes</span>
<span class="plain-syntax"> ---- code_generation_target 5 objects, 200 bytes</span>
<span class="plain-syntax"> ---- build_skill 5 objects, 200 bytes</span>
<span class="plain-syntax"> ---- inform_project 1 object, 192 bytes</span>
<span class="plain-syntax"> ---- plural_dictionary_entry 4 objects, 192 bytes</span>
<span class="plain-syntax"> ---- kit_dependency 4 objects, 192 bytes</span>
<span class="plain-syntax"> ---- code_generator 5 objects, 200 bytes</span>
<span class="plain-syntax"> ---- inform_pipeline 3 objects, 192 bytes</span>
<span class="plain-syntax"> ---- kov_value_stick 3 objects, 168 bytes</span>
<span class="plain-syntax"> ---- plural_dictionary_entry 4 objects, 192 bytes</span>
<span class="plain-syntax"> ---- inform_project 1 object, 192 bytes</span>
<span class="plain-syntax"> ---- kit_dependency 4 objects, 192 bytes</span>
<span class="plain-syntax"> ---- link_instruction 4 objects, 160 bytes</span>
<span class="plain-syntax"> ---- inter_architecture 4 objects, 160 bytes</span>
<span class="plain-syntax"> ---- inference_subject_family 5 objects, 160 bytes</span>
<span class="plain-syntax"> ---- imperative_defn_family 4 objects, 160 bytes</span>
<span class="plain-syntax"> ---- inference_subject_family 5 objects, 160 bytes</span>
<span class="plain-syntax"> ---- codegen_pipeline 1 object, 128 bytes</span>
<span class="plain-syntax"> ---- element_activation 4 objects, 128 bytes</span>
<span class="plain-syntax"> ---- inbuild_nest 3 objects, 120 bytes</span>
<span class="plain-syntax"> ---- local_block_value 2 objects, 112 bytes</span>
<span class="plain-syntax"> ---- inform_kit_ittt 2 objects, 96 bytes</span>
<span class="plain-syntax"> ---- article 2 objects, 80 bytes</span>
<span class="plain-syntax"> ---- compile_task_data 1 object, 80 bytes</span>
<span class="plain-syntax"> ---- group_together_function 2 objects, 80 bytes</span>
<span class="plain-syntax"> ---- article 2 objects, 80 bytes</span>
<span class="plain-syntax"> ---- inter_warehouse 1 object, 56 bytes</span>
<span class="plain-syntax"> ---- figures_data 1 object, 56 bytes</span>
<span class="plain-syntax"> ---- build_methodology 1 object, 56 bytes</span>
<span class="plain-syntax"> ---- HTML_file_state 1 object, 48 bytes</span>
<span class="plain-syntax"> ---- star_invention 1 object, 48 bytes</span>
<span class="plain-syntax"> ---- by_function_bp_data 1 object, 40 bytes</span>
<span class="plain-syntax"> ---- kind_template_definition 1 object, 40 bytes</span>
<span class="plain-syntax"> ---- loop_over_scope 1 object, 40 bytes</span>
<span class="plain-syntax"> ---- I6_generation_data 1 object, 24 bytes</span>
<span class="plain-syntax"> ---- I6_generation_data 1 object, 40 bytes</span>
<span class="plain-syntax"> ---- kind_template_definition 1 object, 40 bytes</span>
<span class="plain-syntax">39.2% was used for memory not allocated for objects:</span>
<span class="plain-syntax">38.9% was used for memory not allocated for objects:</span>
<span class="plain-syntax"> 20.4% text stream storage 82587264 bytes in 532785 claims</span>
<span class="plain-syntax"> 4.4% dictionary storage 18176000 bytes in 33267 claims</span>
<span class="plain-syntax"> ---- sorting 744 bytes in 3 claims</span>
<span class="plain-syntax"> 20.4% text stream storage 83669748 bytes in 543391 claims</span>
<span class="plain-syntax"> 4.4% dictionary storage 18323456 bytes in 33302 claims</span>
<span class="plain-syntax"> ---- sorting 736 bytes in 3 claims</span>
<span class="plain-syntax"> 1.7% source text 7200000 bytes in 3 claims</span>
<span class="plain-syntax"> 2.6% source text details 10800000 bytes in 2 claims</span>
<span class="plain-syntax"> ---- documentation fragments 262144 bytes in 1 claim</span>
<span class="plain-syntax"> ---- linguistic stock array 81920 bytes in 2 claims</span>
<span class="plain-syntax"> ---- small word set array 105600 bytes in 22 claims</span>
<span class="plain-syntax"> 1.0% inter symbols storage 4175216 bytes in 27681 claims</span>
<span class="plain-syntax"> 4.1% inter bytecode storage 16802804 bytes in 14 claims</span>
<span class="plain-syntax"> 4.0% inter links storage 16174208 bytes in 266 claims</span>
<span class="plain-syntax"> 1.0% inter symbols storage 4171728 bytes in 27671 claims</span>
<span class="plain-syntax"> 4.1% inter bytecode storage 16802732 bytes in 14 claims</span>
<span class="plain-syntax"> 3.9% inter links storage 16174208 bytes in 266 claims</span>
<span class="plain-syntax"> ---- inter tree location list storage 191232 bytes in 32 claims</span>
<span class="plain-syntax"> 0.4% instance-of-kind counting 1695204 bytes in 1 claim</span>
<span class="plain-syntax"> ---- compilation workspace for objects 21856 bytes in 25 claims</span>
<span class="plain-syntax"> ---- lists for type-checking invocations 16000 bytes in 1 claim</span>
<span class="plain-syntax"> ---- code generation workspace for objects 9624 bytes in 9 claims</span>
<span class="plain-syntax"> ---- code generation workspace for objects 1336 bytes in 4 claims</span>
<span class="plain-syntax"> ---- emitter array storage 161792 bytes in 2062 claims</span>
<span class="plain-syntax">18.7% was overhead - 75829912 bytes = 74052K = 72 MB</span>
<span class="plain-syntax">18.7% was overhead - 76687488 bytes = 74890K = 73 MB</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. Preform grammar. </b>The full annotated description of the Preform grammar (see <a href="../words-module/4-ap.html" class="internal">About Preform (in words)</a>),
with optimisation details and hit/miss statistics added, is also long: it's
@ -395,7 +395,7 @@ sample, showing the nonterminal used to parse literals in Inform 7 source text:
</p>
<pre class="undisplayed-code all-displayed-code code-font">
<span class="plain-syntax">&lt;s-literal&gt; hits 2097/23838 nti 14 constraint (none) extremes [1, infinity)</span>
<span class="plain-syntax">&lt;s-literal&gt; hits 2097/23834 nti 14 constraint (none) extremes [1, infinity)</span>
<span class="plain-syntax"> English:</span>
<span class="plain-syntax"> (@1)&lt;cardinal-number&gt;=1 </span>
<span class="plain-syntax"> (hits 171/171) (matched: '100') constraint CS = {r0} extremes [1, 1]</span>
@ -409,17 +409,17 @@ sample, showing the nonterminal used to parse literals in Inform 7 source text:
<span class="plain-syntax"> room is mostly unable to sense, or interact with, anything in a different room.</span>
<span class="plain-syntax"> Rooms are arranged in a map.') constraint (none) extremes [1, 1]</span>
<span class="plain-syntax"> &lt;s-literal-real-number&gt;=1 </span>
<span class="plain-syntax"> (hits 11/9911) (matched: 'plus infinity') constraint (none) extremes [1, infinity)</span>
<span class="plain-syntax"> (hits 11/9909) (matched: 'plus infinity') constraint (none) extremes [1, infinity)</span>
<span class="plain-syntax"> (@1)&lt;s-literal-truth-state&gt;=1 </span>
<span class="plain-syntax"> (hits 78/196) (matched: 'false') constraint CS = {8} extremes [1, 1]</span>
<span class="plain-syntax"> &lt;s-literal-list&gt;=1 </span>
<span class="plain-syntax"> (hits 0/3281) constraint DS = {10} extremes [2, infinity)</span>
<span class="plain-syntax"> (hits 0/3275) constraint DS = {10} extremes [2, infinity)</span>
<span class="plain-syntax"> (@1)unicode &lt;s-unicode-character&gt;=1 </span>
<span class="plain-syntax"> (hits 0/4183) constraint DS = {14} extremes [2, infinity)</span>
<span class="plain-syntax"> (hits 0/4180) constraint DS = {14} extremes [2, infinity)</span>
<span class="plain-syntax"> &lt;s-literal-time&gt;=1 </span>
<span class="plain-syntax"> (hits 0/3738) constraint DW = {11, 12, 13} extremes [2, 5]</span>
<span class="plain-syntax"> (hits 0/3737) constraint DW = {11, 12, 13} extremes [2, 5]</span>
<span class="plain-syntax"> &lt;s-literal-unit-notation&gt;=1 </span>
<span class="plain-syntax"> (hits 0/9822) constraint (none) extremes [1, infinity)</span>
<span class="plain-syntax"> (hits 0/9820) constraint (none) extremes [1, infinity)</span>
</pre>
<p class="commentary">The unabridged grammar is here:
</p>
@ -429,7 +429,7 @@ sample, showing the nonterminal used to parse literals in Inform 7 source text:
<a href="preform-diagnostics.txt" download>
<button class="download-button">
<img src="../docs-assets/download.png" alt="download icon" height=16 width=16>
Download <b>preform-diagnostics.txt</b> (Preform diagnostics file, 391.1kB)
Download <b>preform-diagnostics.txt</b> (Preform diagnostics file, 391.2kB)
</button>
</a>
</p>
@ -474,8 +474,8 @@ that is, with the content of extensions excluded, and with the content of
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'asking for information'</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'out of world'</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out asking for information' {unit: 4} {imperative definition: 798}</span>
<span class="plain-syntax"> IMPERATIVE_NT'when play begins' {unit: 4} {imperative definition: 799}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out asking for information' {unit: 4} {imperative definition: 799}</span>
<span class="plain-syntax"> IMPERATIVE_NT'when play begins' {unit: 4} {imperative definition: 800}</span>
<span class="plain-syntax"> HEADING_NT'section 1 - errands' {heading 5} {under: H5'section 1 - errands'} {unit: 4}</span>
<span class="plain-syntax"> SENTENCE_NT'the current actor is a person which varies' {unit: 4} {classified}</span>
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}</span>
@ -485,8 +485,8 @@ that is, with the content of extensions excluded, and with the content of
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'current owner' {definite 'the' n/m/f s/p nom/acc} {refined} {eval: NONLOCAL_VARIABLE_NT'current owner' {nonlocal: 'current owner'(var)person}} {created here}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'person which varies' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'values variable-pointer'-k} {creation: &lt;&lt; kind=people variable-pointer(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
<span class="plain-syntax"> IMPERATIVE_NT'every turn' {unit: 4} {imperative definition: 800}</span>
<span class="plain-syntax"> IMPERATIVE_NT'every turn' {unit: 4} {imperative definition: 801}</span>
<span class="plain-syntax"> IMPERATIVE_NT'every turn' {unit: 4} {imperative definition: 802}</span>
<span class="plain-syntax"> SENTENCE_NT'a person can be active or passive' {unit: 4} {classified}</span>
<span class="plain-syntax"> VERB_NT'can be' {verb 'be able to be' s/p 3p act IS_TENSE +ve} {special meaning: can-be}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'a person' {refined} {refers: infs'person'} {creation: &lt;&lt; kind=person(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
@ -502,34 +502,34 @@ that is, with the content of extensions excluded, and with the content of
<span class="plain-syntax"> VERB_NT'are' {verb 'be' 3p p act IS_TENSE +ve}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'character movement rules' {definite 'the' n/m/f s/p nom/acc} {refined} {eval: CONSTANT_NT {kind: rulebook} {rulebook: character movement}} {created here}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'rulebook' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'values based rulebook producing values'-k} {creation: &lt;&lt; kind=rulebook(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
<span class="plain-syntax"> IMPERATIVE_NT'the first character movement rule' {unit: 4} {imperative definition: 802}</span>
<span class="plain-syntax"> IMPERATIVE_NT'a character movement rule' {unit: 4} {imperative definition: 803}</span>
<span class="plain-syntax"> IMPERATIVE_NT'the first character movement rule' {unit: 4} {imperative definition: 803}</span>
<span class="plain-syntax"> IMPERATIVE_NT'a character movement rule' {unit: 4} {imperative definition: 804}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to decide whether movement has not yet occurred' {unit: 4} {imperative definition: 805}</span>
<span class="plain-syntax"> IMPERATIVE_NT'definition' {unit: 4} {imperative definition: 806}</span>
<span class="plain-syntax"> IMPERATIVE_NT'a character movement rule' {unit: 4} {imperative definition: 805}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to decide whether movement has not yet occurred' {unit: 4} {imperative definition: 806}</span>
<span class="plain-syntax"> IMPERATIVE_NT'definition' {unit: 4} {imperative definition: 807}</span>
<span class="plain-syntax"> IMPERATIVE_NT'definition' {unit: 4} {imperative definition: 808}</span>
<span class="plain-syntax"> SENTENCE_NT'the shopowner rules is a rulebook' {unit: 4} {classified} {clears pronouns}</span>
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'shopowner rules' {definite 'the' n/m/f s/p nom/acc} {refined} {eval: CONSTANT_NT {kind: rulebook} {rulebook: shopowner}} {created here}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'rulebook' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'values based rulebook producing values'-k} {creation: &lt;&lt; kind=rulebook(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
<span class="plain-syntax"> IMPERATIVE_NT'a shopowner rule' {unit: 4} {imperative definition: 808}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone closing a door when the person asked owns the' {unit: 4} {imperative definition: 809}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report vanessa closing the metal door when the metal door is' {unit: 4} {imperative definition: 810}</span>
<span class="plain-syntax"> IMPERATIVE_NT'a shopowner rule' {unit: 4} {imperative definition: 811}</span>
<span class="plain-syntax"> IMPERATIVE_NT'a shopowner rule' {unit: 4} {imperative definition: 809}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone closing a door when the person asked owns the' {unit: 4} {imperative definition: 810}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report vanessa closing the metal door when the metal door is' {unit: 4} {imperative definition: 811}</span>
<span class="plain-syntax"> IMPERATIVE_NT'a shopowner rule' {unit: 4} {imperative definition: 812}</span>
<span class="plain-syntax"> SENTENCE_NT'filing is an action applying to one thing' {unit: 4} {classified}</span>
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'filing'</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'applying to one thing'</span>
<span class="plain-syntax"> IMPERATIVE_NT'before someone filing something which is not carried by the ' {unit: 4} {imperative definition: 812}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out someone filing' {unit: 4} {imperative definition: 813}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone filing' {unit: 4} {imperative definition: 814}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before someone filing something which is not carried by the ' {unit: 4} {imperative definition: 813}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out someone filing' {unit: 4} {imperative definition: 814}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone filing' {unit: 4} {imperative definition: 815}</span>
<span class="plain-syntax"> SENTENCE_NT'the shopper rules is a rulebook' {unit: 4} {classified} {clears pronouns}</span>
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'shopper rules' {definite 'the' n/m/f s/p nom/acc} {refined} {eval: CONSTANT_NT {kind: rulebook} {rulebook: shopper}} {created here}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'rulebook' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'values based rulebook producing values'-k} {creation: &lt;&lt; kind=rulebook(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
<span class="plain-syntax"> IMPERATIVE_NT'a shopper rule' {unit: 4} {imperative definition: 815}</span>
<span class="plain-syntax"> IMPERATIVE_NT'a shopper rule' {unit: 4} {imperative definition: 816}</span>
<span class="plain-syntax"> IMPERATIVE_NT'definition' {unit: 4} {imperative definition: 817}</span>
<span class="plain-syntax"> IMPERATIVE_NT'a shopper rule' {unit: 4} {imperative definition: 817}</span>
<span class="plain-syntax"> IMPERATIVE_NT'definition' {unit: 4} {imperative definition: 818}</span>
<span class="plain-syntax"> DEFN_CONT_NT'a room is air-conditioned' {unit: 4}</span>
<span class="plain-syntax"> CODE_BLOCK_NT</span>
<span class="plain-syntax"> CODE_BLOCK_NT {control structure: IF}</span>
@ -587,8 +587,8 @@ that is, with the content of extensions excluded, and with the content of
<span class="plain-syntax"> COMMON_NOUN_NT'artwork' {indefinite 'an' n/m/f nom/acc s} {refined} {creation: &lt;&lt; kind=artwork(x) &gt;&gt;} {refers: infs'artwork'} {eval: TEST_VALUE_NT} {created here}</span>
<span class="plain-syntax"> KIND_NT'kind of thing' {refined} {refers: infs'thing'}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'thing' {refined} {refers: infs'thing'} {creation: &lt;&lt; kind=thing(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before printing the name of an artwork' {unit: 4} {imperative definition: 818}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after printing the name of an artwork' {unit: 4} {imperative definition: 819}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before printing the name of an artwork' {unit: 4} {imperative definition: 819}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after printing the name of an artwork' {unit: 4} {imperative definition: 820}</span>
<span class="plain-syntax"> SENTENCE_NT'an artwork can be submitted or reserved' {unit: 4} {classified}</span>
<span class="plain-syntax"> VERB_NT'can be' {verb 'be able to be' s/p 3p act IS_TENSE +ve} {special meaning: can-be}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'an artwork' {refined} {refers: infs'artwork'} {creation: &lt;&lt; kind=artwork(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
@ -601,49 +601,49 @@ that is, with the content of extensions excluded, and with the content of
<span class="plain-syntax"> COMMON_NOUN_NT'book' {indefinite 'a' n/m/f nom/acc s} {refined} {creation: &lt;&lt; kind=book(x) &gt;&gt;} {refers: infs'book'} {eval: TEST_VALUE_NT} {created here}</span>
<span class="plain-syntax"> KIND_NT'kind of artwork' {refined} {refers: infs'artwork'}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'artwork' {refined} {refers: infs'artwork'} {creation: &lt;&lt; kind=artwork(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before someone resolving a book when the person asked is not' {unit: 4} {imperative definition: 820}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out someone resolving a book' {unit: 4} {imperative definition: 821}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone resolving a book' {unit: 4} {imperative definition: 822}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before listing contents' {unit: 4} {imperative definition: 823}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before grouping together books' {unit: 4} {imperative definition: 824}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before someone resolving a book when the person asked is not' {unit: 4} {imperative definition: 821}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out someone resolving a book' {unit: 4} {imperative definition: 822}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone resolving a book' {unit: 4} {imperative definition: 823}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before listing contents' {unit: 4} {imperative definition: 824}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before grouping together books' {unit: 4} {imperative definition: 825}</span>
<span class="plain-syntax"> SENTENCE_NT'a stamped envelope is a kind of thing' {unit: 4} {classified} {interpretation of subject: infs'book'}</span>
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'stamped envelope' {indefinite 'a' n/m/f nom/acc s} {refined} {creation: &lt;&lt; kind=stamped envelope(x) &gt;&gt;} {refers: infs'stamped envelope'} {eval: TEST_VALUE_NT} {created here}</span>
<span class="plain-syntax"> KIND_NT'kind of thing' {refined} {refers: infs'thing'}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'thing' {refined} {refers: infs'thing'} {creation: &lt;&lt; kind=thing(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before someone resolving a stamped envelope when the person ' {unit: 4} {imperative definition: 825}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out someone resolving a stamped envelope' {unit: 4} {imperative definition: 826}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone resolving a stamped envelope' {unit: 4} {imperative definition: 827}</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of someone resolving a stamped envelope when the per' {unit: 4} {imperative definition: 828}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before someone resolving a stamped envelope when the person ' {unit: 4} {imperative definition: 826}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out someone resolving a stamped envelope' {unit: 4} {imperative definition: 827}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone resolving a stamped envelope' {unit: 4} {imperative definition: 828}</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of someone resolving a stamped envelope when the per' {unit: 4} {imperative definition: 829}</span>
<span class="plain-syntax"> SENTENCE_NT'a dvd is a kind of artwork' {unit: 4} {classified} {interpretation of subject: infs'stamped envelope'}</span>
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'dvd' {indefinite 'a' n/m/f nom/acc s} {refined} {creation: &lt;&lt; kind=dvd(x) &gt;&gt;} {refers: infs'dvd'} {eval: TEST_VALUE_NT} {created here}</span>
<span class="plain-syntax"> KIND_NT'kind of artwork' {refined} {refers: infs'artwork'}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'artwork' {refined} {refers: infs'artwork'} {creation: &lt;&lt; kind=artwork(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before someone resolving a dvd when the person asked is not ' {unit: 4} {imperative definition: 829}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out someone resolving a dvd' {unit: 4} {imperative definition: 830}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone resolving a dvd' {unit: 4} {imperative definition: 831}</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of someone resolving a dvd when the person asked car' {unit: 4} {imperative definition: 832}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before listing contents' {unit: 4} {imperative definition: 833}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before grouping together dvds' {unit: 4} {imperative definition: 834}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before someone resolving a dvd when the person asked is not ' {unit: 4} {imperative definition: 830}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out someone resolving a dvd' {unit: 4} {imperative definition: 831}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone resolving a dvd' {unit: 4} {imperative definition: 832}</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of someone resolving a dvd when the person asked car' {unit: 4} {imperative definition: 833}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before listing contents' {unit: 4} {imperative definition: 834}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before grouping together dvds' {unit: 4} {imperative definition: 835}</span>
<span class="plain-syntax"> SENTENCE_NT'approaching is an action applying to one thing' {unit: 4} {classified}</span>
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'approaching'</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'applying to one thing'</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out someone approaching' {unit: 4} {imperative definition: 835}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out someone approaching' {unit: 4} {imperative definition: 836}</span>
<span class="plain-syntax"> SENTENCE_NT'a coupon is a kind of thing' {unit: 4} {classified} {interpretation of subject: infs'dvd'}</span>
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'coupon' {indefinite 'a' n/m/f nom/acc s} {refined} {creation: &lt;&lt; kind=coupon(x) &gt;&gt;} {refers: infs'coupon'} {eval: TEST_VALUE_NT} {created here}</span>
<span class="plain-syntax"> KIND_NT'kind of thing' {refined} {refers: infs'thing'}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'thing' {refined} {refers: infs'thing'} {creation: &lt;&lt; kind=thing(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out someone resolving a coupon' {unit: 4} {imperative definition: 836}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out someone resolving a coupon' {unit: 4} {imperative definition: 837}</span>
<span class="plain-syntax"> SENTENCE_NT'the block giving rule is not listed in any rulebook' {unit: 4} {classified}</span>
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {rule placement sense: negative} {special meaning: rule-listed-in}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'the block giving rule'</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'in any rulebook'</span>
<span class="plain-syntax"> IMPERATIVE_NT'check giving something to someone ( this is the block player' {unit: 4} {imperative definition: 837}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before someone resolving a coupon when the person asked is n' {unit: 4} {imperative definition: 838}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after someone giving a coupon to vanessa' {unit: 4} {imperative definition: 839}</span>
<span class="plain-syntax"> IMPERATIVE_NT'check giving something to someone ( this is the block player' {unit: 4} {imperative definition: 838}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before someone resolving a coupon when the person asked is n' {unit: 4} {imperative definition: 839}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after someone giving a coupon to vanessa' {unit: 4} {imperative definition: 840}</span>
<span class="plain-syntax"> SENTENCE_NT'infection color is a kind of value' {unit: 4} {classified} {interpretation of subject: infs'coupon'}</span>
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'infection color' {refined} {creation: &lt;&lt; kind=infection color(x) &gt;&gt;} {refers: infs'object'-k} {eval: TEST_VALUE_NT} {created here}</span>
@ -703,7 +703,7 @@ that is, with the content of extensions excluded, and with the content of
<span class="plain-syntax"> AND_NT',' {refined}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'saffron silk' {refined} {refers: infs'saffron silk'} {eval: CONSTANT_NT'saffron silk' {kind: infection color} {instance: I86'saffron silk'[infection color]} {enumeration: 25}} {created here}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'cookie dough cream' {refined} {refers: infs'cookie dough cream'} {eval: CONSTANT_NT'cookie dough cream' {kind: infection color} {instance: I87'cookie dough cream'[infection color]} {enumeration: 26}} {created here}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to say list of flavors' {unit: 4} {imperative definition: 840}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to say list of flavors' {unit: 4} {imperative definition: 841}</span>
<span class="plain-syntax"> SENTENCE_NT'understand "ask vanessa for [flavored ice cream]" as buying ' {unit: 4} {classified}</span>
<span class="plain-syntax"> VERB_NT'understand' {verb 'understand' 3p p act IS_TENSE +ve} {prep2: as} {special meaning: understand-as}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'"ask vanessa for [flavored ice cream]"'</span>
@ -716,8 +716,8 @@ that is, with the content of extensions excluded, and with the content of
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'buying the flavor'</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'applying to one infection color'</span>
<span class="plain-syntax"> IMPERATIVE_NT'check buying the flavor' {unit: 4} {imperative definition: 841}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out buying the flavor' {unit: 4} {imperative definition: 842}</span>
<span class="plain-syntax"> IMPERATIVE_NT'check buying the flavor' {unit: 4} {imperative definition: 842}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out buying the flavor' {unit: 4} {imperative definition: 843}</span>
<span class="plain-syntax"> SENTENCE_NT'understand "ice cream" or "cream" or "ice" or "sherbet" or "' {unit: 4} {classified}</span>
<span class="plain-syntax"> VERB_NT'understand' {verb 'understand' 3p p act IS_TENSE +ve} {prep2: as} {special meaning: understand-as}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'"ice cream" or "cream" or "ice" or "sherbet" or "sorbet"'</span>
@ -751,12 +751,12 @@ that is, with the content of extensions excluded, and with the content of
<span class="plain-syntax"> VERB_NT'understand' {verb 'understand' 3p p act IS_TENSE +ve} {prep2: as} {special meaning: understand-as}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'the infection color property'</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'referring to an ice cream cone'</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out someone resolving an ice cream cone' {unit: 4} {imperative definition: 843}</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of someone eating a fresh ice cream cone' {unit: 4} {imperative definition: 844}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone eating an ice cream cone' {unit: 4} {imperative definition: 845}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before printing the name of an ice cream cone' {unit: 4} {imperative definition: 846}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out someone resolving an ice cream cone' {unit: 4} {imperative definition: 844}</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of someone eating a fresh ice cream cone' {unit: 4} {imperative definition: 845}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone eating an ice cream cone' {unit: 4} {imperative definition: 846}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before printing the name of an ice cream cone' {unit: 4} {imperative definition: 847}</span>
<span class="plain-syntax"> HEADING_NT'section 2 - infection rules' {heading 5} {under: H5'section 2 - infection rules'} {unit: 4}</span>
<span class="plain-syntax"> IMPERATIVE_NT'this is the infection rule' {unit: 4} {imperative definition: 847}</span>
<span class="plain-syntax"> IMPERATIVE_NT'this is the infection rule' {unit: 4} {imperative definition: 848}</span>
<span class="plain-syntax"> SENTENCE_NT'a person can be infected or clean' {unit: 4} {classified}</span>
<span class="plain-syntax"> VERB_NT'can be' {verb 'be able to be' s/p 3p act IS_TENSE +ve} {special meaning: can-be}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'a person' {refined} {refers: infs'person'} {creation: &lt;&lt; kind=person(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
@ -769,11 +769,11 @@ that is, with the content of extensions excluded, and with the content of
<span class="plain-syntax"> COMMON_NOUN_NT'person' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'person'} {creation: &lt;&lt; kind=person(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
<span class="plain-syntax"> ALLOWED_NT'has' {refined}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'infection color' {indefinite 'an' n/m/f nom/acc s} {refined}</span>
<span class="plain-syntax"> IMPERATIVE_NT'every turn' {unit: 4} {imperative definition: 848}</span>
<span class="plain-syntax"> IMPERATIVE_NT'definition' {unit: 4} {imperative definition: 849}</span>
<span class="plain-syntax"> IMPERATIVE_NT'every turn' {unit: 4} {imperative definition: 849}</span>
<span class="plain-syntax"> IMPERATIVE_NT'definition' {unit: 4} {imperative definition: 850}</span>
<span class="plain-syntax"> IMPERATIVE_NT'when play begins' {unit: 4} {imperative definition: 851}</span>
<span class="plain-syntax"> IMPERATIVE_NT'every turn' {unit: 4} {imperative definition: 852}</span>
<span class="plain-syntax"> IMPERATIVE_NT'definition' {unit: 4} {imperative definition: 851}</span>
<span class="plain-syntax"> IMPERATIVE_NT'when play begins' {unit: 4} {imperative definition: 852}</span>
<span class="plain-syntax"> IMPERATIVE_NT'every turn' {unit: 4} {imperative definition: 853}</span>
<span class="plain-syntax"> SENTENCE_NT'understand "sneeze on [something]" as sneezing on' {unit: 4} {classified}</span>
<span class="plain-syntax"> VERB_NT'understand' {verb 'understand' 3p p act IS_TENSE +ve} {prep2: as} {special meaning: understand-as}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'"sneeze on [something]"'</span>
@ -782,11 +782,11 @@ that is, with the content of extensions excluded, and with the content of
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'sneezing on'</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'applying to one thing'</span>
<span class="plain-syntax"> IMPERATIVE_NT'check sneezing on' {unit: 4} {imperative definition: 853}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out sneezing on' {unit: 4} {imperative definition: 854}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out someone sneezing on' {unit: 4} {imperative definition: 855}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report sneezing on' {unit: 4} {imperative definition: 856}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone sneezing on' {unit: 4} {imperative definition: 857}</span>
<span class="plain-syntax"> IMPERATIVE_NT'check sneezing on' {unit: 4} {imperative definition: 854}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out sneezing on' {unit: 4} {imperative definition: 855}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out someone sneezing on' {unit: 4} {imperative definition: 856}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report sneezing on' {unit: 4} {imperative definition: 857}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone sneezing on' {unit: 4} {imperative definition: 858}</span>
<span class="plain-syntax"> SENTENCE_NT'understand "inject [someone] with [something]" as injecting ' {unit: 4} {classified}</span>
<span class="plain-syntax"> VERB_NT'understand' {verb 'understand' 3p p act IS_TENSE +ve} {prep2: as} {special meaning: understand-as}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'"inject [someone] with [something]"'</span>
@ -807,10 +807,10 @@ that is, with the content of extensions excluded, and with the content of
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'injecting it with'</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'applying to two things'</span>
<span class="plain-syntax"> IMPERATIVE_NT'check injecting it with' {unit: 4} {imperative definition: 858}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out injecting it with' {unit: 4} {imperative definition: 859}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after injecting the player with something' {unit: 4} {imperative definition: 860}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report injecting it with' {unit: 4} {imperative definition: 861}</span>
<span class="plain-syntax"> IMPERATIVE_NT'check injecting it with' {unit: 4} {imperative definition: 859}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out injecting it with' {unit: 4} {imperative definition: 860}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after injecting the player with something' {unit: 4} {imperative definition: 861}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report injecting it with' {unit: 4} {imperative definition: 862}</span>
<span class="plain-syntax"> HEADING_NT'section 3 - geography' {heading 5} {under: H5'section 3 - geography'} {unit: 4}</span>
<span class="plain-syntax"> INCLUSION_NT'include locksmith by emily short' {unit: 4}</span>
<span class="plain-syntax"> HEADING_NT'version 12 of locksmith by emily short begins here' {heading 0} {under: H0'version 12 of locksmith by emily short begins here'} {includes: Locksmith by Emily Short v12 } {unit: 3}</span>
@ -835,9 +835,9 @@ that is, with the content of extensions excluded, and with the content of
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'going toward'</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'applying to one thing'</span>
<span class="plain-syntax"> IMPERATIVE_NT'check going toward' {unit: 4} {imperative definition: 899}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out going toward' {unit: 4} {imperative definition: 900}</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of waiting when the destination of the player is not' {unit: 4} {imperative definition: 901}</span>
<span class="plain-syntax"> IMPERATIVE_NT'check going toward' {unit: 4} {imperative definition: 900}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out going toward' {unit: 4} {imperative definition: 901}</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of waiting when the destination of the player is not' {unit: 4} {imperative definition: 902}</span>
<span class="plain-syntax"> SENTENCE_NT'understand "stop" or "cease" as stopping' {unit: 4} {classified}</span>
<span class="plain-syntax"> VERB_NT'understand' {verb 'understand' 3p p act IS_TENSE +ve} {prep2: as} {special meaning: understand-as}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'"stop" or "cease"'</span>
@ -846,11 +846,11 @@ that is, with the content of extensions excluded, and with the content of
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'stopping'</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'applying to nothing'</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out stopping' {unit: 4} {imperative definition: 902}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report stopping' {unit: 4} {imperative definition: 903}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after going to an air-conditioned room' {unit: 4} {imperative definition: 904}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after going from an air-conditioned room' {unit: 4} {imperative definition: 905}</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of listening to an air-conditioned room' {unit: 4} {imperative definition: 906}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out stopping' {unit: 4} {imperative definition: 903}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report stopping' {unit: 4} {imperative definition: 904}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after going to an air-conditioned room' {unit: 4} {imperative definition: 905}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after going from an air-conditioned room' {unit: 4} {imperative definition: 906}</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of listening to an air-conditioned room' {unit: 4} {imperative definition: 907}</span>
<span class="plain-syntax"> SENTENCE_NT'the alfred cralle pool hall is a room' {unit: 4} {classified} {interpretation of subject: infs'person'}</span>
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'alfred cralle pool hall' {definite 'the' n/m/f s/p nom/acc} {refined} {refers: infs'alfred cralle pool hall'} {eval: CONSTANT_NT'alfred cralle pool hall' {kind: object} {instance: I88'alfred cralle pool hall'} {enumeration: 0}} {created here}</span>
@ -892,7 +892,7 @@ that is, with the content of extensions excluded, and with the content of
<span class="plain-syntax"> PROPER_NOUN_NT'felt door' {definite 'the' n/m/f s/p nom/acc} {refined} {refers: infs'felt door'} {eval: CONSTANT_NT'felt door' {kind: door} {instance: I90'felt door'} {enumeration: 0}}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'description' {refined} {eval: CONSTANT_NT {kind: texts valued property} {property: 'description'=text}}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'"It has a prominent lock, designed for an old-fashioned key.' {refined} {eval: CONSTANT_NT'"It has a prominent lock, designed for an old-fashioned key.' {kind: text}}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after locking a door with something in the presence of an ot' {unit: 4} {imperative definition: 907}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after locking a door with something in the presence of an ot' {unit: 4} {imperative definition: 908}</span>
<span class="plain-syntax"> SENTENCE_NT'nancy johnson memorial square is west of the felt door' {unit: 4} {classified} {interpretation of subject: infs'key to the city'}</span>
<span class="plain-syntax"> VERB_NT'is west of' {verb 'be' 3p s act IS_TENSE +ve} {prep1: west of}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'nancy johnson memorial square' {refined} {refers: infs'nancy johnson memorial square'} {eval: CONSTANT_NT'nancy johnson memorial square' {kind: object} {instance: I92'nancy johnson memorial square'} {enumeration: 0}} {created here}</span>
@ -954,8 +954,8 @@ that is, with the content of extensions excluded, and with the content of
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'slot' {definite 'the' n/m/f s/p nom/acc} {refined} {refers: infs'slot'} {eval: CONSTANT_NT'slot' {kind: object} {instance: I97'slot'} {enumeration: 0}}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'container' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'container'} {creation: &lt;&lt; kind=container(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out inserting something into the slot' {unit: 4} {imperative definition: 908}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report inserting something into the slot' {unit: 4} {imperative definition: 909}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out inserting something into the slot' {unit: 4} {imperative definition: 909}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report inserting something into the slot' {unit: 4} {imperative definition: 910}</span>
<span class="plain-syntax"> SENTENCE_NT'hamwi street is northeast of an iron gate' {unit: 4} {classified} {interpretation of subject: infs'slot'}</span>
<span class="plain-syntax"> VERB_NT'is northeast of' {verb 'be' 3p s act IS_TENSE +ve} {prep1: northeast of}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'hamwi street' {refined} {refers: infs'hamwi street'} {eval: CONSTANT_NT'hamwi street' {kind: object} {instance: I98'hamwi street'} {enumeration: 0}} {created here}</span>
@ -979,7 +979,7 @@ that is, with the content of extensions excluded, and with the content of
<span class="plain-syntax"> AND_NT'and' {refined}</span>
<span class="plain-syntax"> ADJECTIVE_NT'lockable' {refined} {predicate: lockable} {creation: &lt;&lt; lockable(x) ^ lockable(x) &gt;&gt;}</span>
<span class="plain-syntax"> ADJECTIVE_NT'unlocked' {refined} {predicate: unlocked} {creation: &lt;&lt; unlocked(x) ^ unlocked(x) &gt;&gt;}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before printing the name of the iron gate while not opening ' {unit: 4} {imperative definition: 910}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before printing the name of the iron gate while not opening ' {unit: 4} {imperative definition: 911}</span>
<span class="plain-syntax"> SENTENCE_NT'cold comfort ice cream is north of a metal door' {unit: 4} {classified} {interpretation of subject: infs'iron gate'}</span>
<span class="plain-syntax"> VERB_NT'is north of' {verb 'be' 3p s act IS_TENSE +ve} {prep1: north of}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'cold comfort ice cream' {refined} {refers: infs'cold comfort ice cream'} {eval: CONSTANT_NT'cold comfort ice cream' {kind: object} {instance: I100'cold comfort ice cream'} {enumeration: 0}} {created here}</span>
@ -1085,8 +1085,8 @@ that is, with the content of extensions excluded, and with the content of
<span class="plain-syntax"> VERB_NT'understand' {verb 'understand' 3p p act IS_TENSE +ve} {prep2: as} {special meaning: understand-as}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'"glass"'</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'the box'</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of attacking the closed emergency box' {unit: 4} {imperative definition: 911}</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of attacking the open emergency box' {unit: 4} {imperative definition: 912}</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of attacking the closed emergency box' {unit: 4} {imperative definition: 912}</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of attacking the open emergency box' {unit: 4} {imperative definition: 913}</span>
<span class="plain-syntax"> SENTENCE_NT'the syringe is in the emergency box' {unit: 4} {classified} {interpretation of subject: infs'emergency box'}</span>
<span class="plain-syntax"> VERB_NT'is in' {verb 'be' 3p s act IS_TENSE +ve} {prep1: in}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'syringe' {definite 'the' n/m/f s/p nom/acc} {refined} {refers: infs'syringe'} {eval: CONSTANT_NT'syringe' {kind: object} {instance: I109'syringe'} {enumeration: 0}} {created here}</span>
@ -1189,8 +1189,8 @@ that is, with the content of extensions excluded, and with the content of
<span class="plain-syntax"> SENTENCE_NT'use full-length room descriptions' {unit: 4} {classified}</span>
<span class="plain-syntax"> VERB_NT'use' {verb 'use' 3p p act IS_TENSE +ve} {special meaning: use}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'full-length room descriptions'</span>
<span class="plain-syntax"> IMPERATIVE_NT'after looking in an outdoors room' {unit: 4} {imperative definition: 913}</span>
<span class="plain-syntax"> IMPERATIVE_NT'definition' {unit: 4} {imperative definition: 914}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after looking in an outdoors room' {unit: 4} {imperative definition: 914}</span>
<span class="plain-syntax"> IMPERATIVE_NT'definition' {unit: 4} {imperative definition: 915}</span>
<span class="plain-syntax"> DEFN_CONT_NT'a door is proximate' {unit: 4}</span>
<span class="plain-syntax"> CODE_BLOCK_NT</span>
<span class="plain-syntax"> CODE_BLOCK_NT {control structure: IF}</span>
@ -1211,7 +1211,7 @@ that is, with the content of extensions excluded, and with the content of
<span class="plain-syntax"> INVOCATION_NT'yes' {phrase invoked: &lt;no-inter-name&gt;}</span>
<span class="plain-syntax"> INVOCATION_LIST_NT'no' {unit: 4}</span>
<span class="plain-syntax"> INVOCATION_NT'no' {phrase invoked: &lt;no-inter-name&gt;}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before exiting when the player is in an indoors room' {unit: 4} {imperative definition: 915}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before exiting when the player is in an indoors room' {unit: 4} {imperative definition: 916}</span>
<span class="plain-syntax"> SENTENCE_NT'blank is a room' {unit: 4} {classified} {interpretation of subject: infs'key to the city'}</span>
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'blank' {refined} {refers: infs'blank'} {eval: CONSTANT_NT'blank' {kind: object} {instance: I113'blank'} {enumeration: 0}} {created here}</span>
@ -1437,15 +1437,15 @@ that is, with the content of extensions excluded, and with the content of
<span class="plain-syntax"> PROPER_NOUN_NT'ned' {refined} {refers: infs'ned'} {eval: CONSTANT_NT'ned' {kind: man} {instance: I166'ned'} {enumeration: 0}}</span>
<span class="plain-syntax"> RELATIONSHIP_NT'owns' {meaning: ownership-r} {refined}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'movie rental' {definite 'the' n/m/f s/p nom/acc} {refined} {refers: infs'movie rental store'} {eval: CONSTANT_NT'movie rental store' {kind: object} {instance: I104'movie rental store'} {enumeration: 0}}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after printing the name of someone ( called target ) while l' {unit: 4} {imperative definition: 916}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after printing the name of someone ( called target ) while l' {unit: 4} {imperative definition: 917}</span>
<span class="plain-syntax"> SENTENCE_NT'the description of a person is usually "[The noun] [if the n' {unit: 4} {classified} {interpretation of subject: infs'ned'}</span>
<span class="plain-syntax"> VERB_NT'is usually' {certainty:likely} {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> X_OF_Y_NT'description of a person' {definite 'the' n/m/f s/p nom/acc} {refined}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'person' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'person'} {creation: &lt;&lt; kind=person(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'description' {refined} {eval: CONSTANT_NT {kind: texts valued property} {property: 'description'=text}}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'"[The noun] [if the noun is clean]looks healthy[otherwise]is' {refined} {eval: CONSTANT_NT'"[The noun] [if the noun is clean]looks healthy[otherwise]is' {kind: text}}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after examining another person who is carrying something' {unit: 4} {imperative definition: 917}</span>
<span class="plain-syntax"> IMPERATIVE_NT'when play begins' {unit: 4} {imperative definition: 918}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after examining another person who is carrying something' {unit: 4} {imperative definition: 918}</span>
<span class="plain-syntax"> IMPERATIVE_NT'when play begins' {unit: 4} {imperative definition: 919}</span>
<span class="plain-syntax"> HEADING_NT'section 5 - conversation' {heading 5} {under: H5'section 5 - conversation'} {unit: 4}</span>
<span class="plain-syntax"> SENTENCE_NT'a person has a table name called conversation' {unit: 4} {classified}</span>
<span class="plain-syntax"> VERB_NT'has' {verb 'have' 3p s act IS_TENSE +ve}</span>
@ -1454,8 +1454,8 @@ that is, with the content of extensions excluded, and with the content of
<span class="plain-syntax"> PROPERTYCALLED_NT'called'</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'table name' {indefinite 'a' n/m/f nom/acc s}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'conversation'</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of asking someone about something' {unit: 4} {imperative definition: 919}</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of telling someone about something' {unit: 4} {imperative definition: 920}</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of asking someone about something' {unit: 4} {imperative definition: 920}</span>
<span class="plain-syntax"> IMPERATIVE_NT'instead of telling someone about something' {unit: 4} {imperative definition: 921}</span>
<span class="plain-syntax"> SENTENCE_NT'understand "recap" or "recall" or "review" as recalling conv' {unit: 4} {classified}</span>
<span class="plain-syntax"> VERB_NT'understand' {verb 'understand' 3p p act IS_TENSE +ve} {prep2: as} {special meaning: understand-as}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'"recap" or "recall" or "review"'</span>
@ -1464,7 +1464,7 @@ that is, with the content of extensions excluded, and with the content of
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve} {special meaning: new-action}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'recalling conversations'</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'applying to nothing'</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out recalling conversations' {unit: 4} {imperative definition: 921}</span>
<span class="plain-syntax"> IMPERATIVE_NT'carry out recalling conversations' {unit: 4} {imperative definition: 922}</span>
<span class="plain-syntax"> SENTENCE_NT'the conversation of a person is usually table of general chi' {unit: 4} {classified} {interpretation of subject: infs'person'}</span>
<span class="plain-syntax"> VERB_NT'is usually' {certainty:likely} {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> X_OF_Y_NT'conversation of a person' {definite 'the' n/m/f s/p nom/acc} {refined}</span>
@ -1479,7 +1479,7 @@ that is, with the content of extensions excluded, and with the content of
<span class="plain-syntax"> PROPER_NOUN_NT'conversation' {refined} {eval: CONSTANT_NT {kind: table names valued property} {property: 'conversation'=table name}}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'table of vanessa chatter' {definite 'the' n/m/f s/p nom/acc} {refined} {eval: CONSTANT_NT'table of vanessa chatter' {kind: table name} {table: table_data}{meaning: {table of vanessa chatter = TABLE_MC}}}</span>
<span class="plain-syntax"> TABLE_NT'table of vanessa chatter topic reply summary turn stamp char' {unit: 4}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after reading a command' {unit: 4} {imperative definition: 922}</span>
<span class="plain-syntax"> IMPERATIVE_NT'after reading a command' {unit: 4} {imperative definition: 923}</span>
<span class="plain-syntax"> HEADING_NT'section 6 - movement description' {heading 5} {under: H5'section 6 - movement description'} {unit: 4}</span>
<span class="plain-syntax"> SENTENCE_NT'a person has some text called walk style' {unit: 4} {classified}</span>
<span class="plain-syntax"> VERB_NT'has' {verb 'have' 3p s act IS_TENSE +ve}</span>
@ -1526,8 +1526,8 @@ that is, with the content of extensions excluded, and with the content of
<span class="plain-syntax"> PROPER_NOUN_NT'"sashay"' {refined} {eval: CONSTANT_NT'"sashay"' {kind: text}}</span>
<span class="plain-syntax"> TABLE_NT'table of visible exits character second third heading chosen' {unit: 4}</span>
<span class="plain-syntax"> TABLE_NT'table of visible entrances character second third heading ch' {unit: 4}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to clear ( current table - a table name )' {unit: 4} {imperative definition: 923}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to tidy departures of ( current table - a table name )' {unit: 4} {imperative definition: 924}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to clear ( current table - a table name )' {unit: 4} {imperative definition: 924}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to tidy departures of ( current table - a table name )' {unit: 4} {imperative definition: 925}</span>
<span class="plain-syntax"> SENTENCE_NT'a door has a person called last opener' {unit: 4} {classified} {interpretation of subject: infs'person'}</span>
<span class="plain-syntax"> VERB_NT'has' {verb 'have' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'door' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'door'} {creation: &lt;&lt; kind=door(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
@ -1535,21 +1535,21 @@ that is, with the content of extensions excluded, and with the content of
<span class="plain-syntax"> PROPERTYCALLED_NT'called'</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'person' {indefinite 'a' n/m/f nom/acc s}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'last opener'</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone opening a door' {unit: 4} {imperative definition: 925}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone going through a door ( called route )' {unit: 4} {imperative definition: 926}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone opening a door' {unit: 4} {imperative definition: 926}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone going through a door ( called route )' {unit: 4} {imperative definition: 927}</span>
<span class="plain-syntax"> SENTENCE_NT'the last thing named is a thing that varies' {unit: 4} {classified} {interpretation of subject: infs'door'}</span>
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'last thing named' {definite 'the' n/m/f s/p nom/acc} {refined} {eval: NONLOCAL_VARIABLE_NT'last thing named' {nonlocal: 'last thing named'(var)thing}} {created here}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'thing that varies' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'values variable-pointer'-k} {creation: &lt;&lt; kind=things variable-pointer(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before printing the name of something ( called target ) whic' {unit: 4} {imperative definition: 927}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone going a direction' {unit: 4} {imperative definition: 928}</span>
<span class="plain-syntax"> IMPERATIVE_NT'this is the movement reporting rule' {unit: 4} {imperative definition: 929}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to generate descriptions from ( current table - a table name' {unit: 4} {imperative definition: 930}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before printing the name of something ( called target ) whic' {unit: 4} {imperative definition: 928}</span>
<span class="plain-syntax"> IMPERATIVE_NT'report someone going a direction' {unit: 4} {imperative definition: 929}</span>
<span class="plain-syntax"> IMPERATIVE_NT'this is the movement reporting rule' {unit: 4} {imperative definition: 930}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to generate descriptions from ( current table - a table name' {unit: 4} {imperative definition: 931}</span>
<span class="plain-syntax"> SENTENCE_NT'the last person named is a person that varies' {unit: 4} {classified} {interpretation of subject: infs'door'}</span>
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'last person named' {definite 'the' n/m/f s/p nom/acc} {refined} {eval: NONLOCAL_VARIABLE_NT'last person named' {nonlocal: 'last person named'(var)person}} {created here}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'person that varies' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'values variable-pointer'-k} {creation: &lt;&lt; kind=people variable-pointer(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before printing the name of a person ( called target )' {unit: 4} {imperative definition: 931}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before printing the name of a person ( called target )' {unit: 4} {imperative definition: 932}</span>
<span class="plain-syntax"> SENTENCE_NT'group size is a number that varies' {unit: 4} {classified} {interpretation of subject: infs'door'}</span>
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'group size' {refined} {eval: NONLOCAL_VARIABLE_NT'group size' {nonlocal: 'group size'(var)number}} {created here}</span>
@ -1558,19 +1558,19 @@ that is, with the content of extensions excluded, and with the content of
<span class="plain-syntax"> VERB_NT'is' {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'group size' {refined} {eval: NONLOCAL_VARIABLE_NT'group size' {nonlocal: 'group size'(var)number}{meaning: {group size = VARIABLE_MC}}}</span>
<span class="plain-syntax"> PROPER_NOUN_NT'1' {refined} {eval: CONSTANT_NT'1' {kind: number} {explicit literal} {number: 1}}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to clear marked people' {unit: 4} {imperative definition: 932}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before listing nondescript items' {unit: 4} {imperative definition: 933}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to describe patients' {unit: 4} {imperative definition: 934}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to say ( named character - a man ) as pronoun' {unit: 4} {imperative definition: 935}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to say ( named character - a woman ) as pronoun' {unit: 4} {imperative definition: 936}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to say looks as though dipped in for ( index - a number )' {unit: 4} {imperative definition: 937}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to clear marked people' {unit: 4} {imperative definition: 933}</span>
<span class="plain-syntax"> IMPERATIVE_NT'before listing nondescript items' {unit: 4} {imperative definition: 934}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to describe patients' {unit: 4} {imperative definition: 935}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to say ( named character - a man ) as pronoun' {unit: 4} {imperative definition: 936}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to say ( named character - a woman ) as pronoun' {unit: 4} {imperative definition: 937}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to say looks as though dipped in for ( index - a number )' {unit: 4} {imperative definition: 938}</span>
<span class="plain-syntax"> TABLE_NT'table of dipping phrases dipping "looks as though dipped in"' {unit: 4}</span>
<span class="plain-syntax"> SENTENCE_NT'a door is usually scenery' {unit: 4} {classified} {interpretation of subject: infs'door'}</span>
<span class="plain-syntax"> VERB_NT'is usually' {certainty:likely} {verb 'be' 3p s act IS_TENSE +ve}</span>
<span class="plain-syntax"> COMMON_NOUN_NT'door' {indefinite 'a' n/m/f nom/acc s} {refined} {refers: infs'door'} {creation: &lt;&lt; kind=door(x) &gt;&gt;} {eval: TEST_VALUE_NT}</span>
<span class="plain-syntax"> ADJECTIVE_NT'scenery' {refined} {predicate: scenery} {creation: &lt;&lt; scenery(x) ^ scenery(x) &gt;&gt;}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to make delimiter ( index - a number ) of ( count - a number' {unit: 4} {imperative definition: 938}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to say optional comma' {unit: 4} {imperative definition: 939}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to make delimiter ( index - a number ) of ( count - a number' {unit: 4} {imperative definition: 939}</span>
<span class="plain-syntax"> IMPERATIVE_NT'to say optional comma' {unit: 4} {imperative definition: 940}</span>
<span class="plain-syntax"> SENTENCE_NT'test me with go to cold comfort / z / z / z / z / ask vaness' {unit: 4} {classified}</span>
<span class="plain-syntax"> VERB_NT'test' {verb 'test' 3p p act IS_TENSE +ve} {prep2: with} {special meaning: test-with}</span>
<span class="plain-syntax"> UNPARSED_NOUN_NT'me'</span>

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,8 +1,8 @@
100.0% in inform7 run
54.4% in compilation to Inter
39.2% in //Sequence::undertake_queued_tasks//
3.4% in //MajorNodes::pre_pass//
2.5% in //MajorNodes::pass_1//
54.8% in compilation to Inter
39.7% in //Sequence::undertake_queued_tasks//
3.5% in //MajorNodes::pre_pass//
2.4% in //MajorNodes::pass_1//
2.0% in //RTPhrasebook::compile_entries//
1.3% in //ImperativeDefinitions::assess_all//
1.1% in //RTKindConstructors::compile//
@ -17,21 +17,21 @@
0.1% in //Task::make_built_in_kind_constructors//
0.1% in //World::stages_II_and_III//
1.9% not specifically accounted for
43.7% in running Inter pipeline
13.1% in step preparation
10.1% in inter step 7/16: consolidate-text
43.2% in running Inter pipeline
12.9% in step preparation
9.5% in inter step 7/16: consolidate-text
7.9% in inter step 2/16: link
6.4% in inter step 16/16: generate inform6 -> auto.inf
1.6% in inter step 11/16: make-identifiers-unique
6.7% in inter step 16/16: generate inform6 -> auto.inf
1.4% in inter step 11/16: make-identifiers-unique
0.4% in inter step 12/16: reconcile-verbs
0.2% in inter step 10/16: detect-indirect-calls
0.2% in inter step 14/16: eliminate-redundant-operations
0.2% in inter step 6/16: assimilate
0.2% in inter step 8/16: resolve-external-symbols
0.2% in inter step 9/16: inspect-plugs
0.1% in inter step 10/16: detect-indirect-calls
0.1% in inter step 13/16: eliminate-redundant-labels
0.1% in inter step 4/16: parse-linked-matter
0.1% in inter step 5/16: resolve-conditional-compilation
2.1% not specifically accounted for
2.5% not specifically accounted for
1.6% in supervisor
0.2% not specifically accounted for
0.3% not specifically accounted for

View file

@ -29,7 +29,10 @@ i7process_t i7_new_process(void) {
proc.receiver = i7_default_receiver;
proc.send_count = 0;
proc.sender = i7_default_sender;
proc.stylist = i7_default_stylist;
proc.glk_implementation = i7_default_glk;
proc.use_UTF8 = 1;
i7_initialise_miniglk_data(&proc);
return proc;
}
void i7_default_receiver(int id, wchar_t c, char *style) {
@ -64,6 +67,15 @@ void i7_set_process_receiver(i7process_t *proc,
void i7_set_process_sender(i7process_t *proc, char *(*sender)(int count)) {
proc->sender = sender;
}
void i7_set_process_stylist(i7process_t *proc,
void (*stylist)(struct i7process_t *proc, i7word_t which, i7word_t what)) {
proc->stylist = stylist;
}
void i7_set_process_glk_implementation(i7process_t *proc,
void (*glk_implementation)(struct i7process_t *proc, i7word_t glk_api_selector,
i7word_t varargc, i7word_t *z)) {
proc->glk_implementation = glk_implementation;
}
i7word_t fn_i7_mgl_Main(i7process_t *proc);
int i7_run_process(i7process_t *proc) {
int tc = setjmp(proc->execution_env);
@ -1075,108 +1087,150 @@ i7word_t i7_mcall_3(i7process_t *proc, i7word_t to, i7word_t prop, i7word_t v,
proc->state.variables[i7_var_self] = saved;
return rv;
}
#define I7_MAX_STREAMS 128
void i7_print_C_string(i7process_t *proc, char *c_string) {
if (c_string)
for (int i=0; c_string[i]; i++)
i7_print_char(proc, (i7word_t) c_string[i]);
}
i7_stream i7_memory_streams[I7_MAX_STREAMS];
void i7_print_decimal(i7process_t *proc, i7word_t x) {
char room[32];
sprintf(room, "%d", (int) x);
i7_print_C_string(proc, room);
}
void i7_print_object(i7process_t *proc, i7word_t x) {
i7_print_decimal(proc, x);
}
void i7_print_box(i7process_t *proc, i7word_t x) {
printf("Unimplemented: i7_print_box.\n");
i7_fatal_exit(proc);
}
void i7_print_char(i7process_t *proc, i7word_t x) {
if (x == 13) x = 10;
i7_push(proc, x);
i7word_t current = 0;
i7_opcode_glk(proc, i7_glk_stream_get_current, 0, &current);
i7_push(proc, current);
i7_opcode_glk(proc, i7_glk_put_char_stream, 2, NULL);
}
void i7_styling(i7process_t *proc, i7word_t which, i7word_t what) {
(proc->stylist)(proc, which, what);
}
void i7_opcode_glk(i7process_t *proc, i7word_t glk_api_selector, i7word_t varargc,
i7word_t *z) {
(proc->glk_implementation)(proc, glk_api_selector, varargc, z);
}
void i7_initialise_miniglk_data(i7process_t *proc) {
proc->miniglk = malloc(sizeof(miniglk_data));
if (proc->miniglk == NULL) {
printf("Memory allocation failed\n");
exit(1);
}
proc->miniglk->no_files = 0;
proc->miniglk->stdout_stream_id = 0;
proc->miniglk->stderr_stream_id = 1;
proc->miniglk->no_windows = 1;
proc->miniglk->rb_back = 0;
proc->miniglk->rb_front = 0;
proc->miniglk->no_lr = 0;
}
i7word_t fn_i7_mgl_TEXT_TY_CharacterLength(i7process_t *proc, i7word_t i7_mgl_local_txt, i7word_t i7_mgl_local_ch, i7word_t i7_mgl_local_i, i7word_t i7_mgl_local_dsize, i7word_t i7_mgl_local_p, i7word_t i7_mgl_local_cp, i7word_t i7_mgl_local_r);
i7word_t fn_i7_mgl_BlkValueRead(i7process_t *proc, i7word_t i7_mgl_local_from, i7word_t i7_mgl_local_pos, i7word_t i7_mgl_local_do_not_indirect, i7word_t i7_mgl_local_long_block, i7word_t i7_mgl_local_chunk_size_in_bytes, i7word_t i7_mgl_local_header_size_in_bytes, i7word_t i7_mgl_local_flags, i7word_t i7_mgl_local_entry_size_in_bytes, i7word_t i7_mgl_local_seek_byte_position);
void i7_style(i7process_t *proc, i7word_t what_v) {
i7_stream *S = &(i7_memory_streams[proc->state.current_output_stream_ID]);
S->style[0] = 0;
switch (what_v) {
case 0: break;
case 1: sprintf(S->style, "bold"); break;
case 2: sprintf(S->style, "italic"); break;
case 3: sprintf(S->style, "reverse"); break;
default: {
int L = fn_i7_mgl_TEXT_TY_CharacterLength(proc, what_v, 0, 0, 0, 0, 0, 0);
if (L > 127) L = 127;
for (int i=0; i<L; i++) S->style[i] = fn_i7_mgl_BlkValueRead(proc, what_v, i, 0, 0, 0, 0, 0, 0, 0);
S->style[L] = 0;
void i7_default_stylist(i7process_t *proc, i7word_t which, i7word_t what) {
if (which == 1) {
i7_mg_stream_t *S = &(proc->miniglk->memory_streams[proc->state.current_output_stream_ID]);
S->fixed_pitch = what;
sprintf(S->composite_style, "%s", S->style);
if (S->fixed_pitch) {
if (strlen(S->style) > 0) sprintf(S->composite_style + strlen(S->composite_style), ",");
sprintf(S->composite_style + strlen(S->composite_style), "fixedpitch");
}
} else {
i7_mg_stream_t *S = &(proc->miniglk->memory_streams[proc->state.current_output_stream_ID]);
S->style[0] = 0;
switch (what) {
case 0: break;
case 1: sprintf(S->style, "bold"); break;
case 2: sprintf(S->style, "italic"); break;
case 3: sprintf(S->style, "reverse"); break;
default: {
int L = fn_i7_mgl_TEXT_TY_CharacterLength(proc, what, 0, 0, 0, 0, 0, 0);
if (L > 127) L = 127;
for (int i=0; i<L; i++) S->style[i] = fn_i7_mgl_BlkValueRead(proc, what, i, 0, 0, 0, 0, 0, 0, 0);
S->style[L] = 0;
}
}
sprintf(S->composite_style, "%s", S->style);
if (S->fixed_pitch) {
if (strlen(S->style) > 0) sprintf(S->composite_style + strlen(S->composite_style), ",");
sprintf(S->composite_style + strlen(S->composite_style), "fixedpitch");
}
}
sprintf(S->composite_style, "%s", S->style);
if (S->fixed_pitch) {
if (strlen(S->style) > 0) sprintf(S->composite_style + strlen(S->composite_style), ",");
sprintf(S->composite_style + strlen(S->composite_style), "fixedpitch");
}
}
void i7_font(i7process_t *proc, int what) {
i7_stream *S = &(i7_memory_streams[proc->state.current_output_stream_ID]);
S->fixed_pitch = what;
sprintf(S->composite_style, "%s", S->style);
if (S->fixed_pitch) {
if (strlen(S->style) > 0) sprintf(S->composite_style + strlen(S->composite_style), ",");
sprintf(S->composite_style + strlen(S->composite_style), "fixedpitch");
}
}
i7_fileref filerefs[128 + 32];
int i7_no_filerefs = 0;
i7word_t i7_do_glk_fileref_create_by_name(i7process_t *proc, i7word_t usage, i7word_t name, i7word_t rock) {
if (i7_no_filerefs >= 128) {
i7word_t i7_miniglk_fileref_create_by_name(i7process_t *proc, i7word_t usage, i7word_t name, i7word_t rock) {
if (proc->miniglk->no_files >= 128) {
fprintf(stderr, "Out of streams\n"); i7_fatal_exit(proc);
}
int id = i7_no_filerefs++;
filerefs[id].usage = usage;
filerefs[id].name = name;
filerefs[id].rock = rock;
filerefs[id].handle = NULL;
int id = proc->miniglk->no_files++;
proc->miniglk->files[id].usage = usage;
proc->miniglk->files[id].name = name;
proc->miniglk->files[id].rock = rock;
proc->miniglk->files[id].handle = NULL;
for (int i=0; i<128; i++) {
i7byte_t c = i7_read_byte(proc, name+1+i);
filerefs[id].leafname[i] = c;
proc->miniglk->files[id].leafname[i] = c;
if (c == 0) break;
}
filerefs[id].leafname[127] = 0;
sprintf(filerefs[id].leafname + strlen(filerefs[id].leafname), ".glkdata");
proc->miniglk->files[id].leafname[127] = 0;
sprintf(proc->miniglk->files[id].leafname + strlen(proc->miniglk->files[id].leafname), ".glkdata");
return id;
}
int i7_fseek(i7process_t *proc, int id, int pos, int origin) {
if ((id < 0) || (id >= 128)) { fprintf(stderr, "Too many files\n"); i7_fatal_exit(proc); }
if (filerefs[id].handle == NULL) { fprintf(stderr, "File not open\n"); i7_fatal_exit(proc); }
return fseek(filerefs[id].handle, pos, origin);
if (proc->miniglk->files[id].handle == NULL) { fprintf(stderr, "File not open\n"); i7_fatal_exit(proc); }
return fseek(proc->miniglk->files[id].handle, pos, origin);
}
int i7_ftell(i7process_t *proc, int id) {
if ((id < 0) || (id >= 128)) { fprintf(stderr, "Too many files\n"); i7_fatal_exit(proc); }
if (filerefs[id].handle == NULL) { fprintf(stderr, "File not open\n"); i7_fatal_exit(proc); }
int t = ftell(filerefs[id].handle);
if (proc->miniglk->files[id].handle == NULL) { fprintf(stderr, "File not open\n"); i7_fatal_exit(proc); }
int t = ftell(proc->miniglk->files[id].handle);
return t;
}
int i7_fopen(i7process_t *proc, int id, int mode) {
if ((id < 0) || (id >= 128)) { fprintf(stderr, "Too many files\n"); i7_fatal_exit(proc); }
if (filerefs[id].handle) { fprintf(stderr, "File already open\n"); i7_fatal_exit(proc); }
if (proc->miniglk->files[id].handle) { fprintf(stderr, "File already open\n"); i7_fatal_exit(proc); }
char *c_mode = "r";
switch (mode) {
case filemode_Write: c_mode = "w"; break;
case filemode_Read: c_mode = "r"; break;
case filemode_ReadWrite: c_mode = "r+"; break;
case filemode_WriteAppend: c_mode = "r+"; break;
case i7_filemode_Write: c_mode = "w"; break;
case i7_filemode_Read: c_mode = "r"; break;
case i7_filemode_ReadWrite: c_mode = "r+"; break;
case i7_filemode_WriteAppend: c_mode = "r+"; break;
}
FILE *h = fopen(filerefs[id].leafname, c_mode);
FILE *h = fopen(proc->miniglk->files[id].leafname, c_mode);
if (h == NULL) return 0;
filerefs[id].handle = h;
if (mode == filemode_WriteAppend) i7_fseek(proc, id, 0, SEEK_END);
proc->miniglk->files[id].handle = h;
if (mode == i7_filemode_WriteAppend) i7_fseek(proc, id, 0, SEEK_END);
return 1;
}
void i7_fclose(i7process_t *proc, int id) {
if ((id < 0) || (id >= 128)) { fprintf(stderr, "Too many files\n"); i7_fatal_exit(proc); }
if (filerefs[id].handle == NULL) { fprintf(stderr, "File not open\n"); i7_fatal_exit(proc); }
fclose(filerefs[id].handle);
filerefs[id].handle = NULL;
if (proc->miniglk->files[id].handle == NULL) { fprintf(stderr, "File not open\n"); i7_fatal_exit(proc); }
fclose(proc->miniglk->files[id].handle);
proc->miniglk->files[id].handle = NULL;
}
i7word_t i7_do_glk_fileref_does_file_exist(i7process_t *proc, i7word_t id) {
i7word_t i7_miniglk_fileref_does_file_exist(i7process_t *proc, i7word_t id) {
if ((id < 0) || (id >= 128)) { fprintf(stderr, "Too many files\n"); i7_fatal_exit(proc); }
if (filerefs[id].handle) return 1;
if (i7_fopen(proc, id, filemode_Read)) {
if (proc->miniglk->files[id].handle) return 1;
if (i7_fopen(proc, id, i7_filemode_Read)) {
i7_fclose(proc, id); return 1;
}
return 0;
@ -1184,30 +1238,29 @@ i7word_t i7_do_glk_fileref_does_file_exist(i7process_t *proc, i7word_t id) {
void i7_fputc(i7process_t *proc, int c, int id) {
if ((id < 0) || (id >= 128)) { fprintf(stderr, "Too many files\n"); i7_fatal_exit(proc); }
if (filerefs[id].handle == NULL) { fprintf(stderr, "File not open\n"); i7_fatal_exit(proc); }
fputc(c, filerefs[id].handle);
if (proc->miniglk->files[id].handle == NULL) { fprintf(stderr, "File not open\n"); i7_fatal_exit(proc); }
fputc(c, proc->miniglk->files[id].handle);
}
int i7_fgetc(i7process_t *proc, int id) {
if ((id < 0) || (id >= 128)) { fprintf(stderr, "Too many files\n"); i7_fatal_exit(proc); }
if (filerefs[id].handle == NULL) { fprintf(stderr, "File not open\n"); i7_fatal_exit(proc); }
int c = fgetc(filerefs[id].handle);
if (proc->miniglk->files[id].handle == NULL) { fprintf(stderr, "File not open\n"); i7_fatal_exit(proc); }
int c = fgetc(proc->miniglk->files[id].handle);
return c;
}
i7word_t i7_stdout_id = 0, i7_stderr_id = 1;
i7word_t i7_do_glk_stream_get_current(i7process_t *proc) {
i7word_t i7_miniglk_stream_get_current(i7process_t *proc) {
return proc->state.current_output_stream_ID;
}
void i7_do_glk_stream_set_current(i7process_t *proc, i7word_t id) {
if ((id < 0) || (id >= I7_MAX_STREAMS)) { fprintf(stderr, "Stream ID %d out of range\n", id); i7_fatal_exit(proc); }
void i7_miniglk_stream_set_current(i7process_t *proc, i7word_t id) {
if ((id < 0) || (id >= I7_MINIGLK_MAX_STREAMS)) { fprintf(stderr, "Stream ID %d out of range\n", id); i7_fatal_exit(proc); }
proc->state.current_output_stream_ID = id;
}
i7_stream i7_new_stream(i7process_t *proc, FILE *F, int win_id) {
i7_stream S;
i7_mg_stream_t i7_new_stream(i7process_t *proc, FILE *F, int win_id) {
i7_mg_stream_t S;
S.to_file = F;
S.to_file_id = -1;
S.to_memory = NULL;
@ -1229,58 +1282,58 @@ i7_stream i7_new_stream(i7process_t *proc, FILE *F, int win_id) {
return S;
}
void i7_initialise_streams(i7process_t *proc) {
for (int i=0; i<I7_MAX_STREAMS; i++) i7_memory_streams[i] = i7_new_stream(proc, NULL, 0);
i7_memory_streams[i7_stdout_id] = i7_new_stream(proc, stdout, 0);
i7_memory_streams[i7_stdout_id].active = 1;
i7_memory_streams[i7_stdout_id].encode_UTF8 = 1;
i7_memory_streams[i7_stderr_id] = i7_new_stream(proc, stderr, 0);
i7_memory_streams[i7_stderr_id].active = 1;
i7_memory_streams[i7_stderr_id].encode_UTF8 = 1;
i7_do_glk_stream_set_current(proc, i7_stdout_id);
for (int i=0; i<I7_MINIGLK_MAX_STREAMS; i++) proc->miniglk->memory_streams[i] = i7_new_stream(proc, NULL, 0);
proc->miniglk->memory_streams[proc->miniglk->stdout_stream_id] = i7_new_stream(proc, stdout, 0);
proc->miniglk->memory_streams[proc->miniglk->stdout_stream_id].active = 1;
proc->miniglk->memory_streams[proc->miniglk->stdout_stream_id].encode_UTF8 = 1;
proc->miniglk->memory_streams[proc->miniglk->stderr_stream_id] = i7_new_stream(proc, stderr, 0);
proc->miniglk->memory_streams[proc->miniglk->stderr_stream_id].active = 1;
proc->miniglk->memory_streams[proc->miniglk->stderr_stream_id].encode_UTF8 = 1;
i7_miniglk_stream_set_current(proc, proc->miniglk->stdout_stream_id);
}
i7word_t i7_open_stream(i7process_t *proc, FILE *F, int win_id) {
for (int i=0; i<I7_MAX_STREAMS; i++)
if (i7_memory_streams[i].active == 0) {
i7_memory_streams[i] = i7_new_stream(proc, F, win_id);
i7_memory_streams[i].active = 1;
i7_memory_streams[i].previous_id = proc->state.current_output_stream_ID;
for (int i=0; i<I7_MINIGLK_MAX_STREAMS; i++)
if (proc->miniglk->memory_streams[i].active == 0) {
proc->miniglk->memory_streams[i] = i7_new_stream(proc, F, win_id);
proc->miniglk->memory_streams[i].active = 1;
proc->miniglk->memory_streams[i].previous_id = proc->state.current_output_stream_ID;
return i;
}
fprintf(stderr, "Out of streams\n"); i7_fatal_exit(proc);
return 0;
}
i7word_t i7_do_glk_stream_open_memory(i7process_t *proc, i7word_t buffer, i7word_t len, i7word_t fmode, i7word_t rock) {
i7word_t i7_miniglk_stream_open_memory(i7process_t *proc, i7word_t buffer, i7word_t len, i7word_t fmode, i7word_t rock) {
if (fmode != 1) { fprintf(stderr, "Only file mode 1 supported, not %d\n", fmode); i7_fatal_exit(proc); }
i7word_t id = i7_open_stream(proc, NULL, 0);
i7_memory_streams[id].write_here_on_closure = buffer;
i7_memory_streams[id].write_limit = (size_t) len;
i7_memory_streams[id].char_size = 1;
proc->miniglk->memory_streams[id].write_here_on_closure = buffer;
proc->miniglk->memory_streams[id].write_limit = (size_t) len;
proc->miniglk->memory_streams[id].char_size = 1;
proc->state.current_output_stream_ID = id;
return id;
}
i7word_t i7_do_glk_stream_open_memory_uni(i7process_t *proc, i7word_t buffer, i7word_t len, i7word_t fmode, i7word_t rock) {
i7word_t i7_miniglk_stream_open_memory_uni(i7process_t *proc, i7word_t buffer, i7word_t len, i7word_t fmode, i7word_t rock) {
if (fmode != 1) { fprintf(stderr, "Only file mode 1 supported, not %d\n", fmode); i7_fatal_exit(proc); }
i7word_t id = i7_open_stream(proc, NULL, 0);
i7_memory_streams[id].write_here_on_closure = buffer;
i7_memory_streams[id].write_limit = (size_t) len;
i7_memory_streams[id].char_size = 4;
proc->miniglk->memory_streams[id].write_here_on_closure = buffer;
proc->miniglk->memory_streams[id].write_limit = (size_t) len;
proc->miniglk->memory_streams[id].char_size = 4;
proc->state.current_output_stream_ID = id;
return id;
}
i7word_t i7_do_glk_stream_open_file(i7process_t *proc, i7word_t fileref, i7word_t usage, i7word_t rock) {
i7word_t i7_miniglk_stream_open_file(i7process_t *proc, i7word_t fileref, i7word_t usage, i7word_t rock) {
i7word_t id = i7_open_stream(proc, NULL, 0);
i7_memory_streams[id].to_file_id = fileref;
proc->miniglk->memory_streams[id].to_file_id = fileref;
if (i7_fopen(proc, fileref, usage) == 0) return 0;
return id;
}
void i7_do_glk_stream_set_position(i7process_t *proc, i7word_t id, i7word_t pos, i7word_t seekmode) {
if ((id < 0) || (id >= I7_MAX_STREAMS)) { fprintf(stderr, "Stream ID %d out of range\n", id); i7_fatal_exit(proc); }
i7_stream *S = &(i7_memory_streams[id]);
void i7_miniglk_stream_set_position(i7process_t *proc, i7word_t id, i7word_t pos, i7word_t seekmode) {
if ((id < 0) || (id >= I7_MINIGLK_MAX_STREAMS)) { fprintf(stderr, "Stream ID %d out of range\n", id); i7_fatal_exit(proc); }
i7_mg_stream_t *S = &(proc->miniglk->memory_streams[id]);
if (S->to_file_id >= 0) {
int origin;
switch (seekmode) {
@ -1295,20 +1348,20 @@ void i7_do_glk_stream_set_position(i7process_t *proc, i7word_t id, i7word_t pos,
}
}
i7word_t i7_do_glk_stream_get_position(i7process_t *proc, i7word_t id) {
if ((id < 0) || (id >= I7_MAX_STREAMS)) { fprintf(stderr, "Stream ID %d out of range\n", id); i7_fatal_exit(proc); }
i7_stream *S = &(i7_memory_streams[id]);
i7word_t i7_miniglk_stream_get_position(i7process_t *proc, i7word_t id) {
if ((id < 0) || (id >= I7_MINIGLK_MAX_STREAMS)) { fprintf(stderr, "Stream ID %d out of range\n", id); i7_fatal_exit(proc); }
i7_mg_stream_t *S = &(proc->miniglk->memory_streams[id]);
if (S->to_file_id >= 0) {
return (i7word_t) i7_ftell(proc, S->to_file_id);
}
return (i7word_t) S->memory_used;
}
void i7_do_glk_stream_close(i7process_t *proc, i7word_t id, i7word_t result) {
if ((id < 0) || (id >= I7_MAX_STREAMS)) { fprintf(stderr, "Stream ID %d out of range\n", id); i7_fatal_exit(proc); }
void i7_miniglk_stream_close(i7process_t *proc, i7word_t id, i7word_t result) {
if ((id < 0) || (id >= I7_MINIGLK_MAX_STREAMS)) { fprintf(stderr, "Stream ID %d out of range\n", id); i7_fatal_exit(proc); }
if (id == 0) { fprintf(stderr, "Cannot close stdout\n"); i7_fatal_exit(proc); }
if (id == 1) { fprintf(stderr, "Cannot close stderr\n"); i7_fatal_exit(proc); }
i7_stream *S = &(i7_memory_streams[id]);
i7_mg_stream_t *S = &(proc->miniglk->memory_streams[id]);
if (S->active == 0) { fprintf(stderr, "Stream %d already closed\n", id); i7_fatal_exit(proc); }
if (proc->state.current_output_stream_ID == id) proc->state.current_output_stream_ID = S->previous_id;
if (S->write_here_on_closure != 0) {
@ -1338,38 +1391,35 @@ void i7_do_glk_stream_close(i7process_t *proc, i7word_t id, i7word_t result) {
S->memory_used = 0;
}
i7_winref winrefs[128];
int i7_no_winrefs = 1;
i7word_t i7_do_glk_window_open(i7process_t *proc, i7word_t split, i7word_t method, i7word_t size, i7word_t wintype, i7word_t rock) {
if (i7_no_winrefs >= 128) {
i7word_t i7_miniglk_window_open(i7process_t *proc, i7word_t split, i7word_t method, i7word_t size, i7word_t wintype, i7word_t rock) {
if (proc->miniglk->no_windows >= 128) {
fprintf(stderr, "Out of windows\n"); i7_fatal_exit(proc);
}
int id = i7_no_winrefs++;
winrefs[id].type = wintype;
winrefs[id].stream_id = i7_open_stream(proc, stdout, id);
winrefs[id].rock = rock;
int id = proc->miniglk->no_windows++;
proc->miniglk->windows[id].type = wintype;
proc->miniglk->windows[id].stream_id = i7_open_stream(proc, stdout, id);
proc->miniglk->windows[id].rock = rock;
return id;
}
i7word_t i7_stream_of_window(i7process_t *proc, i7word_t id) {
if ((id < 0) || (id >= i7_no_winrefs)) { fprintf(stderr, "Window ID %d out of range\n", id); i7_fatal_exit(proc); }
return winrefs[id].stream_id;
if ((id < 0) || (id >= proc->miniglk->no_windows)) { fprintf(stderr, "Window ID %d out of range\n", id); i7_fatal_exit(proc); }
return proc->miniglk->windows[id].stream_id;
}
i7word_t i7_rock_of_window(i7process_t *proc, i7word_t id) {
if ((id < 0) || (id >= i7_no_winrefs)) { fprintf(stderr, "Window ID %d out of range\n", id); i7_fatal_exit(proc); }
return winrefs[id].rock;
if ((id < 0) || (id >= proc->miniglk->no_windows)) { fprintf(stderr, "Window ID %d out of range\n", id); i7_fatal_exit(proc); }
return proc->miniglk->windows[id].rock;
}
void i7_to_receiver(i7process_t *proc, i7word_t rock, wchar_t c) {
i7_stream *S = &(i7_memory_streams[proc->state.current_output_stream_ID]);
i7_mg_stream_t *S = &(proc->miniglk->memory_streams[proc->state.current_output_stream_ID]);
if (proc->receiver == NULL) fputc(c, stdout);
(proc->receiver)(rock, c, S->composite_style);
}
void i7_do_glk_put_char_stream(i7process_t *proc, i7word_t stream_id, i7word_t x) {
i7_stream *S = &(i7_memory_streams[stream_id]);
void i7_miniglk_put_char_stream(i7process_t *proc, i7word_t stream_id, i7word_t x) {
i7_mg_stream_t *S = &(proc->miniglk->memory_streams[stream_id]);
if (S->to_file) {
int win_id = S->owned_by_window_id;
int rock = -1;
@ -1404,8 +1454,8 @@ void i7_do_glk_put_char_stream(i7process_t *proc, i7word_t stream_id, i7word_t x
}
}
i7word_t i7_do_glk_get_char_stream(i7process_t *proc, i7word_t stream_id) {
i7_stream *S = &(i7_memory_streams[stream_id]);
i7word_t i7_miniglk_get_char_stream(i7process_t *proc, i7word_t stream_id) {
i7_mg_stream_t *S = &(proc->miniglk->memory_streams[stream_id]);
if (S->to_file_id >= 0) {
S->chars_read++;
return i7_fgetc(proc, S->to_file_id);
@ -1413,39 +1463,21 @@ i7word_t i7_do_glk_get_char_stream(i7process_t *proc, i7word_t stream_id) {
return 0;
}
void i7_print_char(i7process_t *proc, i7word_t x) {
if (x == 13) x = 10;
i7_do_glk_put_char_stream(proc, proc->state.current_output_stream_ID, x);
}
void i7_print_C_string(i7process_t *proc, char *c_string) {
if (c_string)
for (int i=0; c_string[i]; i++)
i7_print_char(proc, (i7word_t) c_string[i]);
}
void i7_print_decimal(i7process_t *proc, i7word_t x) {
char room[32];
sprintf(room, "%d", (int) x);
i7_print_C_string(proc, room);
}
i7_glk_event i7_events_ring_buffer[32];
int i7_rb_back = 0, i7_rb_front = 0;
i7_glk_event *i7_next_event(i7process_t *proc) {
if (i7_rb_front == i7_rb_back) return NULL;
i7_glk_event *e = &(i7_events_ring_buffer[i7_rb_back]);
i7_rb_back++; if (i7_rb_back == 32) i7_rb_back = 0;
i7_mg_event_t *i7_next_event(i7process_t *proc) {
if (proc->miniglk->rb_front == proc->miniglk->rb_back) return NULL;
i7_mg_event_t *e = &(proc->miniglk->events_ring_buffer[proc->miniglk->rb_back]);
proc->miniglk->rb_back++; if (proc->miniglk->rb_back == I7_MINIGLK_RING_BUFFER_SIZE) proc->miniglk->rb_back = 0;
return e;
}
void i7_make_event(i7process_t *proc, i7_glk_event e) {
i7_events_ring_buffer[i7_rb_front] = e;
i7_rb_front++; if (i7_rb_front == 32) i7_rb_front = 0;
void i7_make_event(i7process_t *proc, i7_mg_event_t e) {
proc->miniglk->events_ring_buffer[proc->miniglk->rb_front] = e;
proc->miniglk->rb_front++; if (proc->miniglk->rb_front == I7_MINIGLK_RING_BUFFER_SIZE) proc->miniglk->rb_front = 0;
}
i7word_t i7_do_glk_select(i7process_t *proc, i7word_t structure) {
i7_glk_event *e = i7_next_event(proc);
i7word_t i7_miniglk_select(i7process_t *proc, i7word_t structure) {
i7_mg_event_t *e = i7_next_event(proc);
if (e == NULL) {
fprintf(stderr, "No events available to select\n"); i7_fatal_exit(proc);
}
@ -1465,10 +1497,9 @@ i7word_t i7_do_glk_select(i7process_t *proc, i7word_t structure) {
return 0;
}
int i7_no_lr = 0;
i7word_t i7_do_glk_request_line_event(i7process_t *proc, i7word_t window_id, i7word_t buffer, i7word_t max_len, i7word_t init_len) {
i7_glk_event e;
e.type = evtype_LineInput;
i7word_t i7_miniglk_request_line_event(i7process_t *proc, i7word_t window_id, i7word_t buffer, i7word_t max_len, i7word_t init_len) {
i7_mg_event_t e;
e.type = i7_evtype_LineInput;
e.win_id = window_id;
e.val1 = 1;
e.val2 = 0;
@ -1484,14 +1515,14 @@ i7word_t i7_do_glk_request_line_event(i7process_t *proc, i7word_t window_id, i7w
if (pos < max_len) i7_write_byte(proc, buffer + pos, 0); else i7_write_byte(proc, buffer + max_len-1, 0);
e.val1 = pos;
i7_make_event(proc, e);
if (i7_no_lr++ == 1000) {
if (proc->miniglk->no_lr++ == 1000) {
fprintf(stdout, "[Too many line events: terminating to prevent hang]\n"); exit(0);
}
return 0;
}
void i7_opcode_glk(i7process_t *proc, i7word_t glk_api_selector, i7word_t varargc, i7word_t *z) {
void i7_default_glk(i7process_t *proc, i7word_t glk_api_selector, i7word_t varargc, i7word_t *z) {
i7_debug_stack("i7_opcode_glk");
i7word_t args[5] = { 0, 0, 0, 0, 0 }, argc = 0;
while (varargc > 0) {
@ -1507,9 +1538,9 @@ void i7_opcode_glk(i7process_t *proc, i7word_t glk_api_selector, i7word_t vararg
case i7_glk_window_iterate:
rv = 0; break;
case i7_glk_window_open:
rv = i7_do_glk_window_open(proc, args[0], args[1], args[2], args[3], args[4]); break;
rv = i7_miniglk_window_open(proc, args[0], args[1], args[2], args[3], args[4]); break;
case i7_glk_set_window:
i7_do_glk_stream_set_current(proc, i7_stream_of_window(proc, args[0])); break;
i7_miniglk_stream_set_current(proc, i7_stream_of_window(proc, args[0])); break;
case i7_glk_stream_iterate:
rv = 0; break;
case i7_glk_fileref_iterate:
@ -1525,31 +1556,31 @@ void i7_opcode_glk(i7process_t *proc, i7word_t glk_api_selector, i7word_t vararg
case i7_glk_window_move_cursor:
rv = 0; break;
case i7_glk_stream_get_position:
rv = i7_do_glk_stream_get_position(proc, args[0]); break;
rv = i7_miniglk_stream_get_position(proc, args[0]); break;
case i7_glk_window_get_size:
if (args[0]) i7_write_word(proc, args[0], 0, 80);
if (args[1]) i7_write_word(proc, args[1], 0, 8);
rv = 0; break;
case i7_glk_request_line_event:
rv = i7_do_glk_request_line_event(proc, args[0], args[1], args[2], args[3]); break;
rv = i7_miniglk_request_line_event(proc, args[0], args[1], args[2], args[3]); break;
case i7_glk_select:
rv = i7_do_glk_select(proc, args[0]); break;
rv = i7_miniglk_select(proc, args[0]); break;
case i7_glk_stream_close:
i7_do_glk_stream_close(proc, args[0], args[1]); break;
i7_miniglk_stream_close(proc, args[0], args[1]); break;
case i7_glk_stream_set_current:
i7_do_glk_stream_set_current(proc, args[0]); break;
i7_miniglk_stream_set_current(proc, args[0]); break;
case i7_glk_stream_get_current:
rv = i7_do_glk_stream_get_current(proc); break;
rv = i7_miniglk_stream_get_current(proc); break;
case i7_glk_stream_open_memory:
rv = i7_do_glk_stream_open_memory(proc, args[0], args[1], args[2], args[3]); break;
rv = i7_miniglk_stream_open_memory(proc, args[0], args[1], args[2], args[3]); break;
case i7_glk_stream_open_memory_uni:
rv = i7_do_glk_stream_open_memory_uni(proc, args[0], args[1], args[2], args[3]); break;
rv = i7_miniglk_stream_open_memory_uni(proc, args[0], args[1], args[2], args[3]); break;
case i7_glk_fileref_create_by_name:
rv = i7_do_glk_fileref_create_by_name(proc, args[0], args[1], args[2]); break;
rv = i7_miniglk_fileref_create_by_name(proc, args[0], args[1], args[2]); break;
case i7_glk_fileref_does_file_exist:
rv = i7_do_glk_fileref_does_file_exist(proc, args[0]); break;
rv = i7_miniglk_fileref_does_file_exist(proc, args[0]); break;
case i7_glk_stream_open_file:
rv = i7_do_glk_stream_open_file(proc, args[0], args[1], args[2]); break;
rv = i7_miniglk_stream_open_file(proc, args[0], args[1], args[2]); break;
case i7_glk_fileref_destroy:
rv = 0; break;
case i7_glk_char_to_lower:
@ -1565,11 +1596,11 @@ void i7_opcode_glk(i7process_t *proc, i7word_t glk_api_selector, i7word_t vararg
((rv >= 0xF8) && (rv <= 0xFE))) rv -= 32;
break;
case i7_glk_stream_set_position:
i7_do_glk_stream_set_position(proc, args[0], args[1], args[2]); break;
i7_miniglk_stream_set_position(proc, args[0], args[1], args[2]); break;
case i7_glk_put_char_stream:
i7_do_glk_put_char_stream(proc, args[0], args[1]); break;
i7_miniglk_put_char_stream(proc, args[0], args[1]); break;
case i7_glk_get_char_stream:
rv = i7_do_glk_get_char_stream(proc, args[0]); break;
rv = i7_miniglk_get_char_stream(proc, args[0]); break;
default:
printf("Unimplemented: i7_opcode_glk %d.\n", glk_api_selector); i7_fatal_exit(proc);
break;
@ -1581,15 +1612,6 @@ void i7_print_name(i7process_t *proc, i7word_t x) {
fn_i7_mgl_PrintShortName(proc, x, 0);
}
void i7_print_object(i7process_t *proc, i7word_t x) {
i7_print_decimal(proc, x);
}
void i7_print_box(i7process_t *proc, i7word_t x) {
printf("Unimplemented: i7_print_box.\n");
i7_fatal_exit(proc);
}
i7word_t fn_i7_mgl_pending_boxed_quotation(i7process_t *proc) {
return 0;
}

View file

@ -46,7 +46,10 @@ typedef struct i7process_t {
void (*receiver)(int id, wchar_t c, char *style);
int send_count;
char *(*sender)(int count);
i7word_t (*communicator)(struct i7process_t *proc, char *id, int argc, i7word_t *args);
void (*stylist)(struct i7process_t *proc, i7word_t which, i7word_t what);
void (*glk_implementation)(struct i7process_t *proc, i7word_t glk_api_selector,
i7word_t varargc, i7word_t *z);
struct miniglk_data *miniglk;
int use_UTF8;
} i7process_t;
i7state_t i7_new_state(void);
@ -54,11 +57,15 @@ i7snapshot_t i7_new_snapshot(void);
i7process_t i7_new_process(void);
char *i7_default_sender(int count);
void i7_default_receiver(int id, wchar_t c, char *style);
i7word_t i7_default_communicator(i7process_t *proc, char *id, int argc, i7word_t *args);
int i7_default_main(int argc, char **argv);
void i7_set_process_receiver(i7process_t *proc,
void (*receiver)(int id, wchar_t c, char *style), int UTF8);
void i7_set_process_sender(i7process_t *proc, char *(*sender)(int count));
void i7_set_process_stylist(i7process_t *proc,
void (*stylist)(struct i7process_t *proc, i7word_t which, i7word_t what));
void i7_set_process_glk_implementation(i7process_t *proc,
void (*glk_implementation)(struct i7process_t *proc, i7word_t glk_api_selector,
i7word_t varargc, i7word_t *z));
int i7_run_process(i7process_t *proc);
void i7_benign_exit(i7process_t *proc);
void i7_fatal_exit(i7process_t *proc);
@ -231,112 +238,17 @@ i7word_t i7_mcall_2(i7process_t *proc, i7word_t to, i7word_t prop, i7word_t v,
i7word_t v2);
i7word_t i7_mcall_3(i7process_t *proc, i7word_t to, i7word_t prop, i7word_t v,
i7word_t v2, i7word_t v3);
#define I7_BODY_TEXT_ID 201
#define I7_STATUS_TEXT_ID 202
#define I7_BOX_TEXT_ID 203
void i7_style(i7process_t *proc, i7word_t what);
void i7_font(i7process_t *proc, int what);
#define fileusage_Data (0x00)
#define fileusage_SavedGame (0x01)
#define fileusage_Transcript (0x02)
#define fileusage_InputRecord (0x03)
#define fileusage_TypeMask (0x0f)
#define fileusage_TextMode (0x100)
#define fileusage_BinaryMode (0x000)
#define filemode_Write (0x01)
#define filemode_Read (0x02)
#define filemode_ReadWrite (0x03)
#define filemode_WriteAppend (0x05)
typedef struct i7_fileref {
i7word_t usage;
i7word_t name;
i7word_t rock;
char leafname[128];
FILE *handle;
} i7_fileref;
i7word_t i7_do_glk_fileref_create_by_name(i7process_t *proc, i7word_t usage, i7word_t name, i7word_t rock);
int i7_fseek(i7process_t *proc, int id, int pos, int origin);
int i7_ftell(i7process_t *proc, int id);
int i7_fopen(i7process_t *proc, int id, int mode);
void i7_fclose(i7process_t *proc, int id);
i7word_t i7_do_glk_fileref_does_file_exist(i7process_t *proc, i7word_t id);
void i7_fputc(i7process_t *proc, int c, int id);
int i7_fgetc(i7process_t *proc, int id);
typedef struct i7_stream {
FILE *to_file;
i7word_t to_file_id;
wchar_t *to_memory;
size_t memory_used;
size_t memory_capacity;
i7word_t previous_id;
i7word_t write_here_on_closure;
size_t write_limit;
int active;
int encode_UTF8;
int char_size;
int chars_read;
int read_position;
int end_position;
int owned_by_window_id;
int fixed_pitch;
char style[128];
char composite_style[300];
} i7_stream;
i7word_t i7_do_glk_stream_get_current(i7process_t *proc);
i7_stream i7_new_stream(i7process_t *proc, FILE *F, int win_id);
void i7_initialise_streams(i7process_t *proc);
i7word_t i7_open_stream(i7process_t *proc, FILE *F, int win_id);
i7word_t i7_do_glk_stream_open_memory(i7process_t *proc, i7word_t buffer, i7word_t len, i7word_t fmode, i7word_t rock);
i7word_t i7_do_glk_stream_open_memory_uni(i7process_t *proc, i7word_t buffer, i7word_t len, i7word_t fmode, i7word_t rock);
i7word_t i7_do_glk_stream_open_file(i7process_t *proc, i7word_t fileref, i7word_t usage, i7word_t rock);
#define seekmode_Start (0)
#define seekmode_Current (1)
#define seekmode_End (2)
void i7_do_glk_stream_set_position(i7process_t *proc, i7word_t id, i7word_t pos, i7word_t seekmode);
i7word_t i7_do_glk_stream_get_position(i7process_t *proc, i7word_t id);
void i7_do_glk_stream_close(i7process_t *proc, i7word_t id, i7word_t result);
typedef struct i7_winref {
i7word_t type;
i7word_t stream_id;
i7word_t rock;
} i7_winref;
i7word_t i7_do_glk_window_open(i7process_t *proc, i7word_t split, i7word_t method, i7word_t size, i7word_t wintype, i7word_t rock);
i7word_t i7_stream_of_window(i7process_t *proc, i7word_t id);
i7word_t i7_rock_of_window(i7process_t *proc, i7word_t id);
void i7_to_receiver(i7process_t *proc, i7word_t rock, wchar_t c);
void i7_do_glk_put_char_stream(i7process_t *proc, i7word_t stream_id, i7word_t x);
i7word_t i7_do_glk_get_char_stream(i7process_t *proc, i7word_t stream_id);
void i7_print_char(i7process_t *proc, i7word_t x);
void i7_print_C_string(i7process_t *proc, char *c_string);
void i7_print_decimal(i7process_t *proc, i7word_t x);
#define evtype_None (0)
#define evtype_Timer (1)
#define evtype_CharInput (2)
#define evtype_LineInput (3)
#define evtype_MouseInput (4)
#define evtype_Arrange (5)
#define evtype_Redraw (6)
#define evtype_SoundNotify (7)
#define evtype_Hyperlink (8)
#define evtype_VolumeNotify (9)
typedef struct i7_glk_event {
i7word_t type;
i7word_t win_id;
i7word_t val1;
i7word_t val2;
} i7_glk_event;
i7_glk_event *i7_next_event(i7process_t *proc);
void i7_make_event(i7process_t *proc, i7_glk_event e);
i7word_t i7_do_glk_select(i7process_t *proc, i7word_t structure);
i7word_t i7_do_glk_request_line_event(i7process_t *proc, i7word_t window_id, i7word_t buffer, i7word_t max_len, i7word_t init_len);
void i7_print_object(i7process_t *proc, i7word_t x);
void i7_print_box(i7process_t *proc, i7word_t x);
void i7_print_char(i7process_t *proc, i7word_t x);
void i7_styling(i7process_t *proc, i7word_t which, i7word_t what);
void i7_default_stylist(i7process_t *proc, i7word_t which, i7word_t what);
void i7_opcode_glk(i7process_t *proc, i7word_t glk_api_selector, i7word_t varargc,
i7word_t *z);
void i7_default_glk(i7process_t *proc, i7word_t glk_api_selector, i7word_t varargc,
i7word_t *z);
#define i7_glk_exit 0x0001
#define i7_glk_set_interrupt_handler 0x0002
#define i7_glk_tick 0x0003
@ -460,15 +372,132 @@ i7word_t i7_do_glk_request_line_event(i7process_t *proc, i7word_t window_id, i7w
#define i7_glk_date_to_time_local 0x016D
#define i7_glk_date_to_simple_time_utc 0x016E
#define i7_glk_date_to_simple_time_local 0x016F
void i7_opcode_glk(i7process_t *proc, i7word_t glk_api_selector, i7word_t varargc, i7word_t *z);
#define I7_BODY_TEXT_ID 201
#define I7_STATUS_TEXT_ID 202
#define I7_BOX_TEXT_ID 203
#define i7_fileusage_Data 0x00
#define i7_fileusage_SavedGame 0x01
#define i7_fileusage_Transcript 0x02
#define i7_fileusage_InputRecord 0x03
#define i7_fileusage_TypeMask 0x0f
#define i7_fileusage_TextMode 0x100
#define i7_fileusage_BinaryMode 0x000
#define i7_filemode_Write 0x01
#define i7_filemode_Read 0x02
#define i7_filemode_ReadWrite 0x03
#define i7_filemode_WriteAppend 0x05
#define seekmode_Start (0)
#define seekmode_Current (1)
#define seekmode_End (2)
#define i7_evtype_None 0
#define i7_evtype_Timer 1
#define i7_evtype_CharInput 2
#define i7_evtype_LineInput 3
#define i7_evtype_MouseInput 4
#define i7_evtype_Arrange 5
#define i7_evtype_Redraw 6
#define i7_evtype_SoundNotify 7
#define i7_evtype_Hyperlink 8
#define i7_evtype_VolumeNotify 9
typedef struct i7_mg_file_t {
i7word_t usage;
i7word_t name;
i7word_t rock;
char leafname[128];
FILE *handle;
} i7_mg_file_t;
typedef struct i7_mg_stream_t {
FILE *to_file;
i7word_t to_file_id;
wchar_t *to_memory;
size_t memory_used;
size_t memory_capacity;
i7word_t previous_id;
i7word_t write_here_on_closure;
size_t write_limit;
int active;
int encode_UTF8;
int char_size;
int chars_read;
int read_position;
int end_position;
int owned_by_window_id;
int fixed_pitch;
char style[128];
char composite_style[300];
} i7_mg_stream_t;
typedef struct i7_mg_window_t {
i7word_t type;
i7word_t stream_id;
i7word_t rock;
} i7_mg_window_t;
typedef struct i7_mg_event_t {
i7word_t type;
i7word_t win_id;
i7word_t val1;
i7word_t val2;
} i7_mg_event_t;
#define I7_MINIGLK_MAX_STREAMS 128
#define I7_MINIGLK_MAX_WINDOWS 128
#define I7_MINIGLK_RING_BUFFER_SIZE 32
typedef struct miniglk_data {
/* streams */
i7_mg_stream_t memory_streams[I7_MINIGLK_MAX_STREAMS];
i7word_t stdout_stream_id, stderr_stream_id;
/* files */
i7_mg_file_t files[128 + 32];
int no_files;
/* windows */
i7_mg_window_t windows[I7_MINIGLK_MAX_WINDOWS];
int no_windows;
/* events */
i7_mg_event_t events_ring_buffer[I7_MINIGLK_RING_BUFFER_SIZE];
int rb_back, rb_front;
int no_lr;
} miniglk_data;
void i7_initialise_miniglk_data(i7process_t *proc);
i7word_t i7_miniglk_fileref_create_by_name(i7process_t *proc, i7word_t usage, i7word_t name, i7word_t rock);
int i7_fseek(i7process_t *proc, int id, int pos, int origin);
int i7_ftell(i7process_t *proc, int id);
int i7_fopen(i7process_t *proc, int id, int mode);
void i7_fclose(i7process_t *proc, int id);
i7word_t i7_miniglk_fileref_does_file_exist(i7process_t *proc, i7word_t id);
void i7_fputc(i7process_t *proc, int c, int id);
int i7_fgetc(i7process_t *proc, int id);
i7word_t i7_miniglk_stream_get_current(i7process_t *proc);
i7_mg_stream_t i7_new_stream(i7process_t *proc, FILE *F, int win_id);
void i7_initialise_streams(i7process_t *proc);
i7word_t i7_open_stream(i7process_t *proc, FILE *F, int win_id);
i7word_t i7_miniglk_stream_open_memory(i7process_t *proc, i7word_t buffer, i7word_t len, i7word_t fmode, i7word_t rock);
i7word_t i7_miniglk_stream_open_memory_uni(i7process_t *proc, i7word_t buffer, i7word_t len, i7word_t fmode, i7word_t rock);
i7word_t i7_miniglk_stream_open_file(i7process_t *proc, i7word_t fileref, i7word_t usage, i7word_t rock);
void i7_miniglk_stream_set_position(i7process_t *proc, i7word_t id, i7word_t pos, i7word_t seekmode);
i7word_t i7_miniglk_stream_get_position(i7process_t *proc, i7word_t id);
void i7_miniglk_stream_close(i7process_t *proc, i7word_t id, i7word_t result);
i7word_t i7_miniglk_window_open(i7process_t *proc, i7word_t split, i7word_t method, i7word_t size, i7word_t wintype, i7word_t rock);
i7word_t i7_stream_of_window(i7process_t *proc, i7word_t id);
i7word_t i7_rock_of_window(i7process_t *proc, i7word_t id);
void i7_to_receiver(i7process_t *proc, i7word_t rock, wchar_t c);
void i7_miniglk_put_char_stream(i7process_t *proc, i7word_t stream_id, i7word_t x);
i7word_t i7_miniglk_get_char_stream(i7process_t *proc, i7word_t stream_id);
i7_mg_event_t *i7_next_event(i7process_t *proc);
void i7_make_event(i7process_t *proc, i7_mg_event_t e);
i7word_t i7_miniglk_select(i7process_t *proc, i7word_t structure);
i7word_t i7_miniglk_request_line_event(i7process_t *proc, i7word_t window_id, i7word_t buffer, i7word_t max_len, i7word_t init_len);
i7word_t fn_i7_mgl_IndefArt(i7process_t *proc, i7word_t i7_mgl_local_obj, i7word_t i7_mgl_local_i);
i7word_t fn_i7_mgl_DefArt(i7process_t *proc, i7word_t i7_mgl_local_obj, i7word_t i7_mgl_local_i);
i7word_t fn_i7_mgl_CIndefArt(i7process_t *proc, i7word_t i7_mgl_local_obj, i7word_t i7_mgl_local_i);
i7word_t fn_i7_mgl_CDefArt(i7process_t *proc, i7word_t i7_mgl_local_obj, i7word_t i7_mgl_local_i);
i7word_t fn_i7_mgl_PrintShortName(i7process_t *proc, i7word_t i7_mgl_local_obj, i7word_t i7_mgl_local_i);
void i7_print_name(i7process_t *proc, i7word_t x);
void i7_print_object(i7process_t *proc, i7word_t x);
void i7_print_box(i7process_t *proc, i7word_t x);
void i7_read(i7process_t *proc, i7word_t x);
i7word_t i7_encode_float(i7float_t val);
i7float_t i7_decode_float(i7word_t val);

View file

@ -304,8 +304,8 @@ in I6 the only legal uses of |style| are |style bold| and so on: there is no
legal way for |style| to be followed by an arbitrary value, as it is here. But
Inform 6 will not be compiling this: Inform will convert |style V;| directly to
the Inter statement |!style V|, which will then be translated to C as the function
call |i7_style(proc, V)| -- and that function, in our library of C code supporting
Inform, can handle any textual value of |V|.
call |i7_styling(proc, 2, V)| -- and that function, in our library of C code
supporting Inform, can handle any textual value of |V|.
With that bit of fancy footwork out of the way, we can make a pair of text
substitutions |[style NAME]| and |[end style]|, with the possible range of

View file

@ -17,470 +17,59 @@ void CInputOutputModel::begin(code_generation *gen) {
void CInputOutputModel::end(code_generation *gen) {
}
@
@ By input/output, we mean printing text, receiving textual commands, or reading
or writing files. Inter can do this in one of two ways: either
(a) With one of the following primitives, or
(b) With an assembly-language opcode, and in particular |@glk|.
=
int CInputOutputModel::invoke_primitive(code_generation *gen, inter_ti bip, inter_tree_node *P) {
text_stream *OUT = CodeGen::current(gen);
switch (bip) {
case SPACES_BIP: WRITE("for (int j = "); VNODE_1C; WRITE("; j > 0; j--) i7_print_char(proc, 32);"); break;
case FONT_BIP: WRITE("i7_font(proc, "); VNODE_1C; WRITE(")"); break;
case STYLE_BIP: WRITE("i7_style(proc, "); VNODE_1C; WRITE(")"); break;
case PRINT_BIP: WRITE("i7_print_C_string(proc, "); CodeGen::lt_mode(gen, PRINTING_LTM); VNODE_1C; CodeGen::lt_mode(gen, REGULAR_LTM); WRITE(")"); break;
case PRINTCHAR_BIP: WRITE("i7_print_char(proc, "); VNODE_1C; WRITE(")"); break;
case PRINTNL_BIP: WRITE("i7_print_char(proc, '\\n')"); break;
case PRINTOBJ_BIP: WRITE("i7_print_object(proc, "); VNODE_1C; WRITE(")"); break;
case PRINTNUMBER_BIP: WRITE("i7_print_decimal(proc, "); VNODE_1C; WRITE(")"); break;
case PRINTSTRING_BIP: WRITE("i7_print_C_string(proc, i7_text_to_C_string("); VNODE_1C; WRITE("))"); break;
case PRINTDWORD_BIP: WRITE("i7_print_dword(proc, "); VNODE_1C; WRITE(")"); break;
case BOX_BIP: WRITE("i7_print_box(proc, "); CodeGen::lt_mode(gen, BOX_LTM); VNODE_1C; CodeGen::lt_mode(gen, REGULAR_LTM); WRITE(")"); break;
default: return NOT_APPLICABLE;
case SPACES_BIP:
WRITE("for (int j = "); VNODE_1C;
WRITE("; j > 0; j--) i7_print_char(proc, 32);"); break;
case FONT_BIP:
WRITE("i7_styling(proc, 1, "); VNODE_1C; WRITE(")"); break;
case STYLE_BIP:
WRITE("i7_styling(proc, 2, "); VNODE_1C; WRITE(")"); break;
case PRINT_BIP:
WRITE("i7_print_C_string(proc, ");
CodeGen::lt_mode(gen, PRINTING_LTM); VNODE_1C;
CodeGen::lt_mode(gen, REGULAR_LTM); WRITE(")"); break;
case PRINTCHAR_BIP:
WRITE("i7_print_char(proc, "); VNODE_1C; WRITE(")"); break;
case PRINTNL_BIP:
WRITE("i7_print_char(proc, '\\n')"); break;
case PRINTOBJ_BIP:
WRITE("i7_print_object(proc, "); VNODE_1C; WRITE(")"); break;
case PRINTNUMBER_BIP:
WRITE("i7_print_decimal(proc, "); VNODE_1C; WRITE(")"); break;
case PRINTSTRING_BIP:
WRITE("i7_print_C_string(proc, i7_text_to_C_string("); VNODE_1C;
WRITE("))"); break;
case PRINTDWORD_BIP:
WRITE("i7_print_dword(proc, "); VNODE_1C; WRITE(")"); break;
case BOX_BIP:
WRITE("i7_print_box(proc, "); CodeGen::lt_mode(gen, BOX_LTM); VNODE_1C;
CodeGen::lt_mode(gen, REGULAR_LTM); WRITE(")"); break;
default: return NOT_APPLICABLE;
}
return FALSE;
}
@
@ See //C Literals// for the implementation of |i7_print_dword|: it funnels
through to |i7_print_char|, and so do all of these:
= (text to inform7_clib.h)
#define I7_BODY_TEXT_ID 201
#define I7_STATUS_TEXT_ID 202
#define I7_BOX_TEXT_ID 203
void i7_style(i7process_t *proc, i7word_t what);
void i7_font(i7process_t *proc, int what);
#define fileusage_Data (0x00)
#define fileusage_SavedGame (0x01)
#define fileusage_Transcript (0x02)
#define fileusage_InputRecord (0x03)
#define fileusage_TypeMask (0x0f)
#define fileusage_TextMode (0x100)
#define fileusage_BinaryMode (0x000)
#define filemode_Write (0x01)
#define filemode_Read (0x02)
#define filemode_ReadWrite (0x03)
#define filemode_WriteAppend (0x05)
typedef struct i7_fileref {
i7word_t usage;
i7word_t name;
i7word_t rock;
char leafname[128];
FILE *handle;
} i7_fileref;
i7word_t i7_do_glk_fileref_create_by_name(i7process_t *proc, i7word_t usage, i7word_t name, i7word_t rock);
int i7_fseek(i7process_t *proc, int id, int pos, int origin);
int i7_ftell(i7process_t *proc, int id);
int i7_fopen(i7process_t *proc, int id, int mode);
void i7_fclose(i7process_t *proc, int id);
i7word_t i7_do_glk_fileref_does_file_exist(i7process_t *proc, i7word_t id);
void i7_fputc(i7process_t *proc, int c, int id);
int i7_fgetc(i7process_t *proc, int id);
typedef struct i7_stream {
FILE *to_file;
i7word_t to_file_id;
wchar_t *to_memory;
size_t memory_used;
size_t memory_capacity;
i7word_t previous_id;
i7word_t write_here_on_closure;
size_t write_limit;
int active;
int encode_UTF8;
int char_size;
int chars_read;
int read_position;
int end_position;
int owned_by_window_id;
int fixed_pitch;
char style[128];
char composite_style[300];
} i7_stream;
i7word_t i7_do_glk_stream_get_current(i7process_t *proc);
i7_stream i7_new_stream(i7process_t *proc, FILE *F, int win_id);
=
= (text to inform7_clib.c)
#define I7_MAX_STREAMS 128
i7_stream i7_memory_streams[I7_MAX_STREAMS];
i7word_t fn_i7_mgl_TEXT_TY_CharacterLength(i7process_t *proc, i7word_t i7_mgl_local_txt, i7word_t i7_mgl_local_ch, i7word_t i7_mgl_local_i, i7word_t i7_mgl_local_dsize, i7word_t i7_mgl_local_p, i7word_t i7_mgl_local_cp, i7word_t i7_mgl_local_r);
i7word_t fn_i7_mgl_BlkValueRead(i7process_t *proc, i7word_t i7_mgl_local_from, i7word_t i7_mgl_local_pos, i7word_t i7_mgl_local_do_not_indirect, i7word_t i7_mgl_local_long_block, i7word_t i7_mgl_local_chunk_size_in_bytes, i7word_t i7_mgl_local_header_size_in_bytes, i7word_t i7_mgl_local_flags, i7word_t i7_mgl_local_entry_size_in_bytes, i7word_t i7_mgl_local_seek_byte_position);
void i7_style(i7process_t *proc, i7word_t what_v) {
i7_stream *S = &(i7_memory_streams[proc->state.current_output_stream_ID]);
S->style[0] = 0;
switch (what_v) {
case 0: break;
case 1: sprintf(S->style, "bold"); break;
case 2: sprintf(S->style, "italic"); break;
case 3: sprintf(S->style, "reverse"); break;
default: {
int L = fn_i7_mgl_TEXT_TY_CharacterLength(proc, what_v, 0, 0, 0, 0, 0, 0);
if (L > 127) L = 127;
for (int i=0; i<L; i++) S->style[i] = fn_i7_mgl_BlkValueRead(proc, what_v, i, 0, 0, 0, 0, 0, 0, 0);
S->style[L] = 0;
}
}
sprintf(S->composite_style, "%s", S->style);
if (S->fixed_pitch) {
if (strlen(S->style) > 0) sprintf(S->composite_style + strlen(S->composite_style), ",");
sprintf(S->composite_style + strlen(S->composite_style), "fixedpitch");
}
}
void i7_font(i7process_t *proc, int what) {
i7_stream *S = &(i7_memory_streams[proc->state.current_output_stream_ID]);
S->fixed_pitch = what;
sprintf(S->composite_style, "%s", S->style);
if (S->fixed_pitch) {
if (strlen(S->style) > 0) sprintf(S->composite_style + strlen(S->composite_style), ",");
sprintf(S->composite_style + strlen(S->composite_style), "fixedpitch");
}
}
i7_fileref filerefs[128 + 32];
int i7_no_filerefs = 0;
i7word_t i7_do_glk_fileref_create_by_name(i7process_t *proc, i7word_t usage, i7word_t name, i7word_t rock) {
if (i7_no_filerefs >= 128) {
fprintf(stderr, "Out of streams\n"); i7_fatal_exit(proc);
}
int id = i7_no_filerefs++;
filerefs[id].usage = usage;
filerefs[id].name = name;
filerefs[id].rock = rock;
filerefs[id].handle = NULL;
for (int i=0; i<128; i++) {
i7byte_t c = i7_read_byte(proc, name+1+i);
filerefs[id].leafname[i] = c;
if (c == 0) break;
}
filerefs[id].leafname[127] = 0;
sprintf(filerefs[id].leafname + strlen(filerefs[id].leafname), ".glkdata");
return id;
}
int i7_fseek(i7process_t *proc, int id, int pos, int origin) {
if ((id < 0) || (id >= 128)) { fprintf(stderr, "Too many files\n"); i7_fatal_exit(proc); }
if (filerefs[id].handle == NULL) { fprintf(stderr, "File not open\n"); i7_fatal_exit(proc); }
return fseek(filerefs[id].handle, pos, origin);
}
int i7_ftell(i7process_t *proc, int id) {
if ((id < 0) || (id >= 128)) { fprintf(stderr, "Too many files\n"); i7_fatal_exit(proc); }
if (filerefs[id].handle == NULL) { fprintf(stderr, "File not open\n"); i7_fatal_exit(proc); }
int t = ftell(filerefs[id].handle);
return t;
}
int i7_fopen(i7process_t *proc, int id, int mode) {
if ((id < 0) || (id >= 128)) { fprintf(stderr, "Too many files\n"); i7_fatal_exit(proc); }
if (filerefs[id].handle) { fprintf(stderr, "File already open\n"); i7_fatal_exit(proc); }
char *c_mode = "r";
switch (mode) {
case filemode_Write: c_mode = "w"; break;
case filemode_Read: c_mode = "r"; break;
case filemode_ReadWrite: c_mode = "r+"; break;
case filemode_WriteAppend: c_mode = "r+"; break;
}
FILE *h = fopen(filerefs[id].leafname, c_mode);
if (h == NULL) return 0;
filerefs[id].handle = h;
if (mode == filemode_WriteAppend) i7_fseek(proc, id, 0, SEEK_END);
return 1;
}
void i7_fclose(i7process_t *proc, int id) {
if ((id < 0) || (id >= 128)) { fprintf(stderr, "Too many files\n"); i7_fatal_exit(proc); }
if (filerefs[id].handle == NULL) { fprintf(stderr, "File not open\n"); i7_fatal_exit(proc); }
fclose(filerefs[id].handle);
filerefs[id].handle = NULL;
}
i7word_t i7_do_glk_fileref_does_file_exist(i7process_t *proc, i7word_t id) {
if ((id < 0) || (id >= 128)) { fprintf(stderr, "Too many files\n"); i7_fatal_exit(proc); }
if (filerefs[id].handle) return 1;
if (i7_fopen(proc, id, filemode_Read)) {
i7_fclose(proc, id); return 1;
}
return 0;
}
void i7_fputc(i7process_t *proc, int c, int id) {
if ((id < 0) || (id >= 128)) { fprintf(stderr, "Too many files\n"); i7_fatal_exit(proc); }
if (filerefs[id].handle == NULL) { fprintf(stderr, "File not open\n"); i7_fatal_exit(proc); }
fputc(c, filerefs[id].handle);
}
int i7_fgetc(i7process_t *proc, int id) {
if ((id < 0) || (id >= 128)) { fprintf(stderr, "Too many files\n"); i7_fatal_exit(proc); }
if (filerefs[id].handle == NULL) { fprintf(stderr, "File not open\n"); i7_fatal_exit(proc); }
int c = fgetc(filerefs[id].handle);
return c;
}
i7word_t i7_stdout_id = 0, i7_stderr_id = 1;
i7word_t i7_do_glk_stream_get_current(i7process_t *proc) {
return proc->state.current_output_stream_ID;
}
void i7_do_glk_stream_set_current(i7process_t *proc, i7word_t id) {
if ((id < 0) || (id >= I7_MAX_STREAMS)) { fprintf(stderr, "Stream ID %d out of range\n", id); i7_fatal_exit(proc); }
proc->state.current_output_stream_ID = id;
}
i7_stream i7_new_stream(i7process_t *proc, FILE *F, int win_id) {
i7_stream S;
S.to_file = F;
S.to_file_id = -1;
S.to_memory = NULL;
S.memory_used = 0;
S.memory_capacity = 0;
S.write_here_on_closure = 0;
S.write_limit = 0;
S.previous_id = 0;
S.active = 0;
S.encode_UTF8 = 0;
S.char_size = 4;
S.chars_read = 0;
S.read_position = 0;
S.end_position = 0;
S.owned_by_window_id = win_id;
S.style[0] = 0;
S.fixed_pitch = 0;
S.composite_style[0] = 0;
return S;
}
=
@
= (text to inform7_clib.h)
void i7_initialise_streams(i7process_t *proc);
i7word_t i7_open_stream(i7process_t *proc, FILE *F, int win_id);
i7word_t i7_do_glk_stream_open_memory(i7process_t *proc, i7word_t buffer, i7word_t len, i7word_t fmode, i7word_t rock);
i7word_t i7_do_glk_stream_open_memory_uni(i7process_t *proc, i7word_t buffer, i7word_t len, i7word_t fmode, i7word_t rock);
i7word_t i7_do_glk_stream_open_file(i7process_t *proc, i7word_t fileref, i7word_t usage, i7word_t rock);
#define seekmode_Start (0)
#define seekmode_Current (1)
#define seekmode_End (2)
void i7_do_glk_stream_set_position(i7process_t *proc, i7word_t id, i7word_t pos, i7word_t seekmode);
i7word_t i7_do_glk_stream_get_position(i7process_t *proc, i7word_t id);
void i7_do_glk_stream_close(i7process_t *proc, i7word_t id, i7word_t result);
typedef struct i7_winref {
i7word_t type;
i7word_t stream_id;
i7word_t rock;
} i7_winref;
i7word_t i7_do_glk_window_open(i7process_t *proc, i7word_t split, i7word_t method, i7word_t size, i7word_t wintype, i7word_t rock);
i7word_t i7_stream_of_window(i7process_t *proc, i7word_t id);
i7word_t i7_rock_of_window(i7process_t *proc, i7word_t id);
void i7_to_receiver(i7process_t *proc, i7word_t rock, wchar_t c);
void i7_do_glk_put_char_stream(i7process_t *proc, i7word_t stream_id, i7word_t x);
i7word_t i7_do_glk_get_char_stream(i7process_t *proc, i7word_t stream_id);
void i7_print_char(i7process_t *proc, i7word_t x);
void i7_print_C_string(i7process_t *proc, char *c_string);
void i7_print_decimal(i7process_t *proc, i7word_t x);
void i7_print_object(i7process_t *proc, i7word_t x);
void i7_print_box(i7process_t *proc, i7word_t x);
=
= (text to inform7_clib.c)
void i7_initialise_streams(i7process_t *proc) {
for (int i=0; i<I7_MAX_STREAMS; i++) i7_memory_streams[i] = i7_new_stream(proc, NULL, 0);
i7_memory_streams[i7_stdout_id] = i7_new_stream(proc, stdout, 0);
i7_memory_streams[i7_stdout_id].active = 1;
i7_memory_streams[i7_stdout_id].encode_UTF8 = 1;
i7_memory_streams[i7_stderr_id] = i7_new_stream(proc, stderr, 0);
i7_memory_streams[i7_stderr_id].active = 1;
i7_memory_streams[i7_stderr_id].encode_UTF8 = 1;
i7_do_glk_stream_set_current(proc, i7_stdout_id);
}
i7word_t i7_open_stream(i7process_t *proc, FILE *F, int win_id) {
for (int i=0; i<I7_MAX_STREAMS; i++)
if (i7_memory_streams[i].active == 0) {
i7_memory_streams[i] = i7_new_stream(proc, F, win_id);
i7_memory_streams[i].active = 1;
i7_memory_streams[i].previous_id = proc->state.current_output_stream_ID;
return i;
}
fprintf(stderr, "Out of streams\n"); i7_fatal_exit(proc);
return 0;
}
i7word_t i7_do_glk_stream_open_memory(i7process_t *proc, i7word_t buffer, i7word_t len, i7word_t fmode, i7word_t rock) {
if (fmode != 1) { fprintf(stderr, "Only file mode 1 supported, not %d\n", fmode); i7_fatal_exit(proc); }
i7word_t id = i7_open_stream(proc, NULL, 0);
i7_memory_streams[id].write_here_on_closure = buffer;
i7_memory_streams[id].write_limit = (size_t) len;
i7_memory_streams[id].char_size = 1;
proc->state.current_output_stream_ID = id;
return id;
}
i7word_t i7_do_glk_stream_open_memory_uni(i7process_t *proc, i7word_t buffer, i7word_t len, i7word_t fmode, i7word_t rock) {
if (fmode != 1) { fprintf(stderr, "Only file mode 1 supported, not %d\n", fmode); i7_fatal_exit(proc); }
i7word_t id = i7_open_stream(proc, NULL, 0);
i7_memory_streams[id].write_here_on_closure = buffer;
i7_memory_streams[id].write_limit = (size_t) len;
i7_memory_streams[id].char_size = 4;
proc->state.current_output_stream_ID = id;
return id;
}
i7word_t i7_do_glk_stream_open_file(i7process_t *proc, i7word_t fileref, i7word_t usage, i7word_t rock) {
i7word_t id = i7_open_stream(proc, NULL, 0);
i7_memory_streams[id].to_file_id = fileref;
if (i7_fopen(proc, fileref, usage) == 0) return 0;
return id;
}
void i7_do_glk_stream_set_position(i7process_t *proc, i7word_t id, i7word_t pos, i7word_t seekmode) {
if ((id < 0) || (id >= I7_MAX_STREAMS)) { fprintf(stderr, "Stream ID %d out of range\n", id); i7_fatal_exit(proc); }
i7_stream *S = &(i7_memory_streams[id]);
if (S->to_file_id >= 0) {
int origin;
switch (seekmode) {
case seekmode_Start: origin = SEEK_SET; break;
case seekmode_Current: origin = SEEK_CUR; break;
case seekmode_End: origin = SEEK_END; break;
default: fprintf(stderr, "Unknown seekmode\n"); i7_fatal_exit(proc);
}
i7_fseek(proc, S->to_file_id, pos, origin);
} else {
fprintf(stderr, "glk_stream_set_position supported only for file streams\n"); i7_fatal_exit(proc);
}
}
i7word_t i7_do_glk_stream_get_position(i7process_t *proc, i7word_t id) {
if ((id < 0) || (id >= I7_MAX_STREAMS)) { fprintf(stderr, "Stream ID %d out of range\n", id); i7_fatal_exit(proc); }
i7_stream *S = &(i7_memory_streams[id]);
if (S->to_file_id >= 0) {
return (i7word_t) i7_ftell(proc, S->to_file_id);
}
return (i7word_t) S->memory_used;
}
void i7_do_glk_stream_close(i7process_t *proc, i7word_t id, i7word_t result) {
if ((id < 0) || (id >= I7_MAX_STREAMS)) { fprintf(stderr, "Stream ID %d out of range\n", id); i7_fatal_exit(proc); }
if (id == 0) { fprintf(stderr, "Cannot close stdout\n"); i7_fatal_exit(proc); }
if (id == 1) { fprintf(stderr, "Cannot close stderr\n"); i7_fatal_exit(proc); }
i7_stream *S = &(i7_memory_streams[id]);
if (S->active == 0) { fprintf(stderr, "Stream %d already closed\n", id); i7_fatal_exit(proc); }
if (proc->state.current_output_stream_ID == id) proc->state.current_output_stream_ID = S->previous_id;
if (S->write_here_on_closure != 0) {
if (S->char_size == 4) {
for (size_t i = 0; i < S->write_limit; i++)
if (i < S->memory_used)
i7_write_word(proc, S->write_here_on_closure, i, S->to_memory[i]);
else
i7_write_word(proc, S->write_here_on_closure, i, 0);
} else {
for (size_t i = 0; i < S->write_limit; i++)
if (i < S->memory_used)
i7_write_byte(proc, S->write_here_on_closure + i, S->to_memory[i]);
else
i7_write_byte(proc, S->write_here_on_closure + i, 0);
}
}
if (result == -1) {
i7_push(proc, S->chars_read);
i7_push(proc, S->memory_used);
} else if (result != 0) {
i7_write_word(proc, result, 0, S->chars_read);
i7_write_word(proc, result, 1, S->memory_used);
}
if (S->to_file_id >= 0) i7_fclose(proc, S->to_file_id);
S->active = 0;
S->memory_used = 0;
}
i7_winref winrefs[128];
int i7_no_winrefs = 1;
i7word_t i7_do_glk_window_open(i7process_t *proc, i7word_t split, i7word_t method, i7word_t size, i7word_t wintype, i7word_t rock) {
if (i7_no_winrefs >= 128) {
fprintf(stderr, "Out of windows\n"); i7_fatal_exit(proc);
}
int id = i7_no_winrefs++;
winrefs[id].type = wintype;
winrefs[id].stream_id = i7_open_stream(proc, stdout, id);
winrefs[id].rock = rock;
return id;
}
i7word_t i7_stream_of_window(i7process_t *proc, i7word_t id) {
if ((id < 0) || (id >= i7_no_winrefs)) { fprintf(stderr, "Window ID %d out of range\n", id); i7_fatal_exit(proc); }
return winrefs[id].stream_id;
}
i7word_t i7_rock_of_window(i7process_t *proc, i7word_t id) {
if ((id < 0) || (id >= i7_no_winrefs)) { fprintf(stderr, "Window ID %d out of range\n", id); i7_fatal_exit(proc); }
return winrefs[id].rock;
}
void i7_to_receiver(i7process_t *proc, i7word_t rock, wchar_t c) {
i7_stream *S = &(i7_memory_streams[proc->state.current_output_stream_ID]);
if (proc->receiver == NULL) fputc(c, stdout);
(proc->receiver)(rock, c, S->composite_style);
}
void i7_do_glk_put_char_stream(i7process_t *proc, i7word_t stream_id, i7word_t x) {
i7_stream *S = &(i7_memory_streams[stream_id]);
if (S->to_file) {
int win_id = S->owned_by_window_id;
int rock = -1;
if (win_id >= 1) rock = i7_rock_of_window(proc, win_id);
unsigned int c = (unsigned int) x;
if (proc->use_UTF8) {
if (c >= 0x800) {
i7_to_receiver(proc, rock, 0xE0 + (c >> 12));
i7_to_receiver(proc, rock, 0x80 + ((c >> 6) & 0x3f));
i7_to_receiver(proc, rock, 0x80 + (c & 0x3f));
} else if (c >= 0x80) {
i7_to_receiver(proc, rock, 0xC0 + (c >> 6));
i7_to_receiver(proc, rock, 0x80 + (c & 0x3f));
} else i7_to_receiver(proc, rock, (int) c);
} else {
i7_to_receiver(proc, rock, (int) c);
}
} else if (S->to_file_id >= 0) {
i7_fputc(proc, (int) x, S->to_file_id);
S->end_position++;
} else {
if (S->memory_used >= S->memory_capacity) {
size_t needed = 4*S->memory_capacity;
if (needed == 0) needed = 1024;
wchar_t *new_data = (wchar_t *) calloc(needed, sizeof(wchar_t));
if (new_data == NULL) { fprintf(stderr, "Out of memory\n"); i7_fatal_exit(proc); }
for (size_t i=0; i<S->memory_used; i++) new_data[i] = S->to_memory[i];
free(S->to_memory);
S->to_memory = new_data;
}
S->to_memory[S->memory_used++] = (wchar_t) x;
}
}
i7word_t i7_do_glk_get_char_stream(i7process_t *proc, i7word_t stream_id) {
i7_stream *S = &(i7_memory_streams[stream_id]);
if (S->to_file_id >= 0) {
S->chars_read++;
return i7_fgetc(proc, S->to_file_id);
}
return 0;
}
void i7_print_char(i7process_t *proc, i7word_t x) {
if (x == 13) x = 10;
i7_do_glk_put_char_stream(proc, proc->state.current_output_stream_ID, x);
}
void i7_print_C_string(i7process_t *proc, char *c_string) {
if (c_string)
for (int i=0; c_string[i]; i++)
@ -492,30 +81,68 @@ void i7_print_decimal(i7process_t *proc, i7word_t x) {
sprintf(room, "%d", (int) x);
i7_print_C_string(proc, room);
}
void i7_print_object(i7process_t *proc, i7word_t x) {
i7_print_decimal(proc, x);
}
void i7_print_box(i7process_t *proc, i7word_t x) {
printf("Unimplemented: i7_print_box.\n");
i7_fatal_exit(proc);
}
=
= (text to inform7_clib.h)
#define evtype_None (0)
#define evtype_Timer (1)
#define evtype_CharInput (2)
#define evtype_LineInput (3)
#define evtype_MouseInput (4)
#define evtype_Arrange (5)
#define evtype_Redraw (6)
#define evtype_SoundNotify (7)
#define evtype_Hyperlink (8)
#define evtype_VolumeNotify (9)
@ Which in turn uses the |@glk| opcode:
typedef struct i7_glk_event {
i7word_t type;
i7word_t win_id;
i7word_t val1;
i7word_t val2;
} i7_glk_event;
i7_glk_event *i7_next_event(i7process_t *proc);
void i7_make_event(i7process_t *proc, i7_glk_event e);
i7word_t i7_do_glk_select(i7process_t *proc, i7word_t structure);
i7word_t i7_do_glk_request_line_event(i7process_t *proc, i7word_t window_id, i7word_t buffer, i7word_t max_len, i7word_t init_len);
= (text to inform7_clib.h)
void i7_print_char(i7process_t *proc, i7word_t x);
=
= (text to inform7_clib.c)
void i7_print_char(i7process_t *proc, i7word_t x) {
if (x == 13) x = 10;
i7_push(proc, x);
i7word_t current = 0;
i7_opcode_glk(proc, i7_glk_stream_get_current, 0, &current);
i7_push(proc, current);
i7_opcode_glk(proc, i7_glk_put_char_stream, 2, NULL);
}
=
@ At this point, then, all of our I/O needs will be handled if we can just
define two functions: |i7_styling|, for setting the font style, and |i7_opcode_glk|.
So we're nearly done, right? Right?
But in fact we route both of these functions through hooks which the user can
provide, so that the user can change the entire I/O model (if she is willing to
code up an alternative):
= (text to inform7_clib.h)
void i7_styling(i7process_t *proc, i7word_t which, i7word_t what);
void i7_default_stylist(i7process_t *proc, i7word_t which, i7word_t what);
void i7_opcode_glk(i7process_t *proc, i7word_t glk_api_selector, i7word_t varargc,
i7word_t *z);
void i7_default_glk(i7process_t *proc, i7word_t glk_api_selector, i7word_t varargc,
i7word_t *z);
=
= (text to inform7_clib.c)
void i7_styling(i7process_t *proc, i7word_t which, i7word_t what) {
(proc->stylist)(proc, which, what);
}
void i7_opcode_glk(i7process_t *proc, i7word_t glk_api_selector, i7word_t varargc,
i7word_t *z) {
(proc->glk_implementation)(proc, glk_api_selector, varargc, z);
}
=
@ What makes this more burdensome is that |@glk| is not so much a single opcode
as an entire instruction set: it is an compendium of over 120 disparate operations.
Indeed, the |glk_api_selector| argument to |i7_opcode_glk| chooses which one is
being used. For convenience, we define a set of names for them all -- which does
not imply any commitment to implement them all.
= (text to inform7_clib.h)
#define i7_glk_exit 0x0001
#define i7_glk_set_interrupt_handler 0x0002
#define i7_glk_tick 0x0003
@ -639,181 +266,58 @@ i7word_t i7_do_glk_request_line_event(i7process_t *proc, i7word_t window_id, i7w
#define i7_glk_date_to_time_local 0x016D
#define i7_glk_date_to_simple_time_utc 0x016E
#define i7_glk_date_to_simple_time_local 0x016F
void i7_opcode_glk(i7process_t *proc, i7word_t glk_api_selector, i7word_t varargc, i7word_t *z);
i7word_t fn_i7_mgl_IndefArt(i7process_t *proc, i7word_t i7_mgl_local_obj, i7word_t i7_mgl_local_i);
i7word_t fn_i7_mgl_DefArt(i7process_t *proc, i7word_t i7_mgl_local_obj, i7word_t i7_mgl_local_i);
i7word_t fn_i7_mgl_CIndefArt(i7process_t *proc, i7word_t i7_mgl_local_obj, i7word_t i7_mgl_local_i);
i7word_t fn_i7_mgl_CDefArt(i7process_t *proc, i7word_t i7_mgl_local_obj, i7word_t i7_mgl_local_i);
i7word_t fn_i7_mgl_PrintShortName(i7process_t *proc, i7word_t i7_mgl_local_obj, i7word_t i7_mgl_local_i);
void i7_print_name(i7process_t *proc, i7word_t x);
void i7_print_object(i7process_t *proc, i7word_t x);
void i7_print_box(i7process_t *proc, i7word_t x);
void i7_read(i7process_t *proc, i7word_t x);
=
= (text to inform7_clib.c)
i7_glk_event i7_events_ring_buffer[32];
int i7_rb_back = 0, i7_rb_front = 0;
A few other constants will also be useful. These are the window IDs for the
three Glk windows used by the standard Inform 7 kits: |I7_BODY_TEXT_ID| is
where text is regularly printed; |I7_STATUS_TEXT_ID| is for the "status line"
at the top of a traditional interactive fiction display, but can simply be
ignored for non-IF purposes; and |I7_BOX_TEXT_ID| is where box quotations
would be displayed over the top of text, though C projects probably should
not use this, and the default Glk implementation here ignores it.
i7_glk_event *i7_next_event(i7process_t *proc) {
if (i7_rb_front == i7_rb_back) return NULL;
i7_glk_event *e = &(i7_events_ring_buffer[i7_rb_back]);
i7_rb_back++; if (i7_rb_back == 32) i7_rb_back = 0;
return e;
}
void i7_make_event(i7process_t *proc, i7_glk_event e) {
i7_events_ring_buffer[i7_rb_front] = e;
i7_rb_front++; if (i7_rb_front == 32) i7_rb_front = 0;
}
i7word_t i7_do_glk_select(i7process_t *proc, i7word_t structure) {
i7_glk_event *e = i7_next_event(proc);
if (e == NULL) {
fprintf(stderr, "No events available to select\n"); i7_fatal_exit(proc);
}
if (structure == -1) {
i7_push(proc, e->type);
i7_push(proc, e->win_id);
i7_push(proc, e->val1);
i7_push(proc, e->val2);
} else {
if (structure) {
i7_write_word(proc, structure, 0, e->type);
i7_write_word(proc, structure, 1, e->win_id);
i7_write_word(proc, structure, 2, e->val1);
i7_write_word(proc, structure, 3, e->val2);
}
}
return 0;
}
int i7_no_lr = 0;
i7word_t i7_do_glk_request_line_event(i7process_t *proc, i7word_t window_id, i7word_t buffer, i7word_t max_len, i7word_t init_len) {
i7_glk_event e;
e.type = evtype_LineInput;
e.win_id = window_id;
e.val1 = 1;
e.val2 = 0;
wchar_t c; int pos = init_len;
if (proc->sender == NULL) i7_benign_exit(proc);
char *s = (proc->sender)(proc->send_count++);
int i = 0;
while (1) {
c = s[i++];
if ((c == EOF) || (c == 0) || (c == '\n') || (c == '\r')) break;
if (pos < max_len) i7_write_byte(proc, buffer + pos++, c);
}
if (pos < max_len) i7_write_byte(proc, buffer + pos, 0); else i7_write_byte(proc, buffer + max_len-1, 0);
e.val1 = pos;
i7_make_event(proc, e);
if (i7_no_lr++ == 1000) {
fprintf(stdout, "[Too many line events: terminating to prevent hang]\n"); exit(0);
}
return 0;
}
void i7_opcode_glk(i7process_t *proc, i7word_t glk_api_selector, i7word_t varargc, i7word_t *z) {
i7_debug_stack("i7_opcode_glk");
i7word_t args[5] = { 0, 0, 0, 0, 0 }, argc = 0;
while (varargc > 0) {
i7word_t v = i7_pull(proc);
if (argc < 5) args[argc++] = v;
varargc--;
}
int rv = 0;
switch (glk_api_selector) {
case i7_glk_gestalt:
rv = 1; break;
case i7_glk_window_iterate:
rv = 0; break;
case i7_glk_window_open:
rv = i7_do_glk_window_open(proc, args[0], args[1], args[2], args[3], args[4]); break;
case i7_glk_set_window:
i7_do_glk_stream_set_current(proc, i7_stream_of_window(proc, args[0])); break;
case i7_glk_stream_iterate:
rv = 0; break;
case i7_glk_fileref_iterate:
rv = 0; break;
case i7_glk_stylehint_set:
rv = 0; break;
case i7_glk_schannel_iterate:
rv = 0; break;
case i7_glk_schannel_create:
rv = 0; break;
case i7_glk_set_style:
rv = 0; break;
case i7_glk_window_move_cursor:
rv = 0; break;
case i7_glk_stream_get_position:
rv = i7_do_glk_stream_get_position(proc, args[0]); break;
case i7_glk_window_get_size:
if (args[0]) i7_write_word(proc, args[0], 0, 80);
if (args[1]) i7_write_word(proc, args[1], 0, 8);
rv = 0; break;
case i7_glk_request_line_event:
rv = i7_do_glk_request_line_event(proc, args[0], args[1], args[2], args[3]); break;
case i7_glk_select:
rv = i7_do_glk_select(proc, args[0]); break;
case i7_glk_stream_close:
i7_do_glk_stream_close(proc, args[0], args[1]); break;
case i7_glk_stream_set_current:
i7_do_glk_stream_set_current(proc, args[0]); break;
case i7_glk_stream_get_current:
rv = i7_do_glk_stream_get_current(proc); break;
case i7_glk_stream_open_memory:
rv = i7_do_glk_stream_open_memory(proc, args[0], args[1], args[2], args[3]); break;
case i7_glk_stream_open_memory_uni:
rv = i7_do_glk_stream_open_memory_uni(proc, args[0], args[1], args[2], args[3]); break;
case i7_glk_fileref_create_by_name:
rv = i7_do_glk_fileref_create_by_name(proc, args[0], args[1], args[2]); break;
case i7_glk_fileref_does_file_exist:
rv = i7_do_glk_fileref_does_file_exist(proc, args[0]); break;
case i7_glk_stream_open_file:
rv = i7_do_glk_stream_open_file(proc, args[0], args[1], args[2]); break;
case i7_glk_fileref_destroy:
rv = 0; break;
case i7_glk_char_to_lower:
rv = args[0];
if (((rv >= 0x41) && (rv <= 0x5A)) ||
((rv >= 0xC0) && (rv <= 0xD6)) ||
((rv >= 0xD8) && (rv <= 0xDE))) rv += 32;
break;
case i7_glk_char_to_upper:
rv = args[0];
if (((rv >= 0x61) && (rv <= 0x7A)) ||
((rv >= 0xE0) && (rv <= 0xF6)) ||
((rv >= 0xF8) && (rv <= 0xFE))) rv -= 32;
break;
case i7_glk_stream_set_position:
i7_do_glk_stream_set_position(proc, args[0], args[1], args[2]); break;
case i7_glk_put_char_stream:
i7_do_glk_put_char_stream(proc, args[0], args[1]); break;
case i7_glk_get_char_stream:
rv = i7_do_glk_get_char_stream(proc, args[0]); break;
default:
printf("Unimplemented: i7_opcode_glk %d.\n", glk_api_selector); i7_fatal_exit(proc);
break;
}
if (z) *z = rv;
}
void i7_print_name(i7process_t *proc, i7word_t x) {
fn_i7_mgl_PrintShortName(proc, x, 0);
}
void i7_print_object(i7process_t *proc, i7word_t x) {
i7_print_decimal(proc, x);
}
void i7_print_box(i7process_t *proc, i7word_t x) {
printf("Unimplemented: i7_print_box.\n");
i7_fatal_exit(proc);
}
i7word_t fn_i7_mgl_pending_boxed_quotation(i7process_t *proc) {
return 0;
}
= (text to inform7_clib.h)
#define I7_BODY_TEXT_ID 201
#define I7_STATUS_TEXT_ID 202
#define I7_BOX_TEXT_ID 203
=
These are needed for different forms of file I/O:
= (text to inform7_clib.h)
#define i7_fileusage_Data 0x00
#define i7_fileusage_SavedGame 0x01
#define i7_fileusage_Transcript 0x02
#define i7_fileusage_InputRecord 0x03
#define i7_fileusage_TypeMask 0x0f
#define i7_fileusage_TextMode 0x100
#define i7_fileusage_BinaryMode 0x000
#define i7_filemode_Write 0x01
#define i7_filemode_Read 0x02
#define i7_filemode_ReadWrite 0x03
#define i7_filemode_WriteAppend 0x05
=
And these are modes for seeking a position in a file:
= (text to inform7_clib.h)
#define seekmode_Start (0)
#define seekmode_Current (1)
#define seekmode_End (2)
=
And these are "event types":
= (text to inform7_clib.h)
#define i7_evtype_None 0
#define i7_evtype_Timer 1
#define i7_evtype_CharInput 2
#define i7_evtype_LineInput 3
#define i7_evtype_MouseInput 4
#define i7_evtype_Arrange 5
#define i7_evtype_Redraw 6
#define i7_evtype_SoundNotify 7
#define i7_evtype_Hyperlink 8
#define i7_evtype_VolumeNotify 9
=

View file

@ -0,0 +1,650 @@
[CMiniglk::] C Miniglk.
Just enough of the Glk input/output interface to allow simple console text in
and out, and no more.
@h Glk - an apology.
The code below is in no way a proper implementation of the Glk input/output
system, which was developed as an interactive fiction standard by Andrew Plotkin,
and which has served us well and will continue to do so. It is not even a full
implementation of basic console I/O via Glk, for which see the |cheapglk|
C library.
Instead, our aim is to do the absolute minimum possible in simple self-contained
C code, and to impose as few restrictions as possible beyond that. The flip side
of Glk's gilt-edged engineering quality is that it can be a gilded cage: for some
imaginable uses of Inform 7-via-C, say based on Unity or in an iOS app, strict
use of Glk would be constraining.
In an attempt to have the best of both worlds, the code below is only the
default Glk implementation for an Inform 7-via-C project, and the user can
duck out of it by providing an implementation of her own. (Indeed, this could
even be |cheapglk|, as mentioned above.)
This section of code therefore defines just two functions, |i7_default_stylist|
and |i7_default_glk|, plus their supporting code -- which turns out to be quite
a lot, but there are only those two points of entry.
@h Miniglk.
Each process needs to keep track of its own files, streams, windows and events,
which are wrapped up in a |miniglk_data| structure as follows:
= (text to inform7_clib.h)
typedef struct i7_mg_file_t {
i7word_t usage;
i7word_t name;
i7word_t rock;
char leafname[128];
FILE *handle;
} i7_mg_file_t;
typedef struct i7_mg_stream_t {
FILE *to_file;
i7word_t to_file_id;
wchar_t *to_memory;
size_t memory_used;
size_t memory_capacity;
i7word_t previous_id;
i7word_t write_here_on_closure;
size_t write_limit;
int active;
int encode_UTF8;
int char_size;
int chars_read;
int read_position;
int end_position;
int owned_by_window_id;
int fixed_pitch;
char style[128];
char composite_style[300];
} i7_mg_stream_t;
typedef struct i7_mg_window_t {
i7word_t type;
i7word_t stream_id;
i7word_t rock;
} i7_mg_window_t;
typedef struct i7_mg_event_t {
i7word_t type;
i7word_t win_id;
i7word_t val1;
i7word_t val2;
} i7_mg_event_t;
#define I7_MINIGLK_MAX_STREAMS 128
#define I7_MINIGLK_MAX_WINDOWS 128
#define I7_MINIGLK_RING_BUFFER_SIZE 32
typedef struct miniglk_data {
/* streams */
i7_mg_stream_t memory_streams[I7_MINIGLK_MAX_STREAMS];
i7word_t stdout_stream_id, stderr_stream_id;
/* files */
i7_mg_file_t files[128 + 32];
int no_files;
/* windows */
i7_mg_window_t windows[I7_MINIGLK_MAX_WINDOWS];
int no_windows;
/* events */
i7_mg_event_t events_ring_buffer[I7_MINIGLK_RING_BUFFER_SIZE];
int rb_back, rb_front;
int no_lr;
} miniglk_data;
void i7_initialise_miniglk_data(i7process_t *proc);
=
= (text to inform7_clib.c)
void i7_initialise_miniglk_data(i7process_t *proc) {
proc->miniglk = malloc(sizeof(miniglk_data));
if (proc->miniglk == NULL) {
printf("Memory allocation failed\n");
exit(1);
}
proc->miniglk->no_files = 0;
proc->miniglk->stdout_stream_id = 0;
proc->miniglk->stderr_stream_id = 1;
proc->miniglk->no_windows = 1;
proc->miniglk->rb_back = 0;
proc->miniglk->rb_front = 0;
proc->miniglk->no_lr = 0;
}
=
@
= (text to inform7_clib.h)
i7word_t i7_miniglk_fileref_create_by_name(i7process_t *proc, i7word_t usage, i7word_t name, i7word_t rock);
int i7_fseek(i7process_t *proc, int id, int pos, int origin);
int i7_ftell(i7process_t *proc, int id);
int i7_fopen(i7process_t *proc, int id, int mode);
void i7_fclose(i7process_t *proc, int id);
i7word_t i7_miniglk_fileref_does_file_exist(i7process_t *proc, i7word_t id);
void i7_fputc(i7process_t *proc, int c, int id);
int i7_fgetc(i7process_t *proc, int id);
i7word_t i7_miniglk_stream_get_current(i7process_t *proc);
i7_mg_stream_t i7_new_stream(i7process_t *proc, FILE *F, int win_id);
=
= (text to inform7_clib.c)
i7word_t fn_i7_mgl_TEXT_TY_CharacterLength(i7process_t *proc, i7word_t i7_mgl_local_txt, i7word_t i7_mgl_local_ch, i7word_t i7_mgl_local_i, i7word_t i7_mgl_local_dsize, i7word_t i7_mgl_local_p, i7word_t i7_mgl_local_cp, i7word_t i7_mgl_local_r);
i7word_t fn_i7_mgl_BlkValueRead(i7process_t *proc, i7word_t i7_mgl_local_from, i7word_t i7_mgl_local_pos, i7word_t i7_mgl_local_do_not_indirect, i7word_t i7_mgl_local_long_block, i7word_t i7_mgl_local_chunk_size_in_bytes, i7word_t i7_mgl_local_header_size_in_bytes, i7word_t i7_mgl_local_flags, i7word_t i7_mgl_local_entry_size_in_bytes, i7word_t i7_mgl_local_seek_byte_position);
void i7_default_stylist(i7process_t *proc, i7word_t which, i7word_t what) {
if (which == 1) {
i7_mg_stream_t *S = &(proc->miniglk->memory_streams[proc->state.current_output_stream_ID]);
S->fixed_pitch = what;
sprintf(S->composite_style, "%s", S->style);
if (S->fixed_pitch) {
if (strlen(S->style) > 0) sprintf(S->composite_style + strlen(S->composite_style), ",");
sprintf(S->composite_style + strlen(S->composite_style), "fixedpitch");
}
} else {
i7_mg_stream_t *S = &(proc->miniglk->memory_streams[proc->state.current_output_stream_ID]);
S->style[0] = 0;
switch (what) {
case 0: break;
case 1: sprintf(S->style, "bold"); break;
case 2: sprintf(S->style, "italic"); break;
case 3: sprintf(S->style, "reverse"); break;
default: {
int L = fn_i7_mgl_TEXT_TY_CharacterLength(proc, what, 0, 0, 0, 0, 0, 0);
if (L > 127) L = 127;
for (int i=0; i<L; i++) S->style[i] = fn_i7_mgl_BlkValueRead(proc, what, i, 0, 0, 0, 0, 0, 0, 0);
S->style[L] = 0;
}
}
sprintf(S->composite_style, "%s", S->style);
if (S->fixed_pitch) {
if (strlen(S->style) > 0) sprintf(S->composite_style + strlen(S->composite_style), ",");
sprintf(S->composite_style + strlen(S->composite_style), "fixedpitch");
}
}
}
i7word_t i7_miniglk_fileref_create_by_name(i7process_t *proc, i7word_t usage, i7word_t name, i7word_t rock) {
if (proc->miniglk->no_files >= 128) {
fprintf(stderr, "Out of streams\n"); i7_fatal_exit(proc);
}
int id = proc->miniglk->no_files++;
proc->miniglk->files[id].usage = usage;
proc->miniglk->files[id].name = name;
proc->miniglk->files[id].rock = rock;
proc->miniglk->files[id].handle = NULL;
for (int i=0; i<128; i++) {
i7byte_t c = i7_read_byte(proc, name+1+i);
proc->miniglk->files[id].leafname[i] = c;
if (c == 0) break;
}
proc->miniglk->files[id].leafname[127] = 0;
sprintf(proc->miniglk->files[id].leafname + strlen(proc->miniglk->files[id].leafname), ".glkdata");
return id;
}
int i7_fseek(i7process_t *proc, int id, int pos, int origin) {
if ((id < 0) || (id >= 128)) { fprintf(stderr, "Too many files\n"); i7_fatal_exit(proc); }
if (proc->miniglk->files[id].handle == NULL) { fprintf(stderr, "File not open\n"); i7_fatal_exit(proc); }
return fseek(proc->miniglk->files[id].handle, pos, origin);
}
int i7_ftell(i7process_t *proc, int id) {
if ((id < 0) || (id >= 128)) { fprintf(stderr, "Too many files\n"); i7_fatal_exit(proc); }
if (proc->miniglk->files[id].handle == NULL) { fprintf(stderr, "File not open\n"); i7_fatal_exit(proc); }
int t = ftell(proc->miniglk->files[id].handle);
return t;
}
int i7_fopen(i7process_t *proc, int id, int mode) {
if ((id < 0) || (id >= 128)) { fprintf(stderr, "Too many files\n"); i7_fatal_exit(proc); }
if (proc->miniglk->files[id].handle) { fprintf(stderr, "File already open\n"); i7_fatal_exit(proc); }
char *c_mode = "r";
switch (mode) {
case i7_filemode_Write: c_mode = "w"; break;
case i7_filemode_Read: c_mode = "r"; break;
case i7_filemode_ReadWrite: c_mode = "r+"; break;
case i7_filemode_WriteAppend: c_mode = "r+"; break;
}
FILE *h = fopen(proc->miniglk->files[id].leafname, c_mode);
if (h == NULL) return 0;
proc->miniglk->files[id].handle = h;
if (mode == i7_filemode_WriteAppend) i7_fseek(proc, id, 0, SEEK_END);
return 1;
}
void i7_fclose(i7process_t *proc, int id) {
if ((id < 0) || (id >= 128)) { fprintf(stderr, "Too many files\n"); i7_fatal_exit(proc); }
if (proc->miniglk->files[id].handle == NULL) { fprintf(stderr, "File not open\n"); i7_fatal_exit(proc); }
fclose(proc->miniglk->files[id].handle);
proc->miniglk->files[id].handle = NULL;
}
i7word_t i7_miniglk_fileref_does_file_exist(i7process_t *proc, i7word_t id) {
if ((id < 0) || (id >= 128)) { fprintf(stderr, "Too many files\n"); i7_fatal_exit(proc); }
if (proc->miniglk->files[id].handle) return 1;
if (i7_fopen(proc, id, i7_filemode_Read)) {
i7_fclose(proc, id); return 1;
}
return 0;
}
void i7_fputc(i7process_t *proc, int c, int id) {
if ((id < 0) || (id >= 128)) { fprintf(stderr, "Too many files\n"); i7_fatal_exit(proc); }
if (proc->miniglk->files[id].handle == NULL) { fprintf(stderr, "File not open\n"); i7_fatal_exit(proc); }
fputc(c, proc->miniglk->files[id].handle);
}
int i7_fgetc(i7process_t *proc, int id) {
if ((id < 0) || (id >= 128)) { fprintf(stderr, "Too many files\n"); i7_fatal_exit(proc); }
if (proc->miniglk->files[id].handle == NULL) { fprintf(stderr, "File not open\n"); i7_fatal_exit(proc); }
int c = fgetc(proc->miniglk->files[id].handle);
return c;
}
i7word_t i7_miniglk_stream_get_current(i7process_t *proc) {
return proc->state.current_output_stream_ID;
}
void i7_miniglk_stream_set_current(i7process_t *proc, i7word_t id) {
if ((id < 0) || (id >= I7_MINIGLK_MAX_STREAMS)) { fprintf(stderr, "Stream ID %d out of range\n", id); i7_fatal_exit(proc); }
proc->state.current_output_stream_ID = id;
}
i7_mg_stream_t i7_new_stream(i7process_t *proc, FILE *F, int win_id) {
i7_mg_stream_t S;
S.to_file = F;
S.to_file_id = -1;
S.to_memory = NULL;
S.memory_used = 0;
S.memory_capacity = 0;
S.write_here_on_closure = 0;
S.write_limit = 0;
S.previous_id = 0;
S.active = 0;
S.encode_UTF8 = 0;
S.char_size = 4;
S.chars_read = 0;
S.read_position = 0;
S.end_position = 0;
S.owned_by_window_id = win_id;
S.style[0] = 0;
S.fixed_pitch = 0;
S.composite_style[0] = 0;
return S;
}
=
@
= (text to inform7_clib.h)
void i7_initialise_streams(i7process_t *proc);
i7word_t i7_open_stream(i7process_t *proc, FILE *F, int win_id);
i7word_t i7_miniglk_stream_open_memory(i7process_t *proc, i7word_t buffer, i7word_t len, i7word_t fmode, i7word_t rock);
i7word_t i7_miniglk_stream_open_memory_uni(i7process_t *proc, i7word_t buffer, i7word_t len, i7word_t fmode, i7word_t rock);
i7word_t i7_miniglk_stream_open_file(i7process_t *proc, i7word_t fileref, i7word_t usage, i7word_t rock);
void i7_miniglk_stream_set_position(i7process_t *proc, i7word_t id, i7word_t pos, i7word_t seekmode);
i7word_t i7_miniglk_stream_get_position(i7process_t *proc, i7word_t id);
void i7_miniglk_stream_close(i7process_t *proc, i7word_t id, i7word_t result);
i7word_t i7_miniglk_window_open(i7process_t *proc, i7word_t split, i7word_t method, i7word_t size, i7word_t wintype, i7word_t rock);
i7word_t i7_stream_of_window(i7process_t *proc, i7word_t id);
i7word_t i7_rock_of_window(i7process_t *proc, i7word_t id);
void i7_to_receiver(i7process_t *proc, i7word_t rock, wchar_t c);
void i7_miniglk_put_char_stream(i7process_t *proc, i7word_t stream_id, i7word_t x);
i7word_t i7_miniglk_get_char_stream(i7process_t *proc, i7word_t stream_id);
=
= (text to inform7_clib.c)
void i7_initialise_streams(i7process_t *proc) {
for (int i=0; i<I7_MINIGLK_MAX_STREAMS; i++) proc->miniglk->memory_streams[i] = i7_new_stream(proc, NULL, 0);
proc->miniglk->memory_streams[proc->miniglk->stdout_stream_id] = i7_new_stream(proc, stdout, 0);
proc->miniglk->memory_streams[proc->miniglk->stdout_stream_id].active = 1;
proc->miniglk->memory_streams[proc->miniglk->stdout_stream_id].encode_UTF8 = 1;
proc->miniglk->memory_streams[proc->miniglk->stderr_stream_id] = i7_new_stream(proc, stderr, 0);
proc->miniglk->memory_streams[proc->miniglk->stderr_stream_id].active = 1;
proc->miniglk->memory_streams[proc->miniglk->stderr_stream_id].encode_UTF8 = 1;
i7_miniglk_stream_set_current(proc, proc->miniglk->stdout_stream_id);
}
i7word_t i7_open_stream(i7process_t *proc, FILE *F, int win_id) {
for (int i=0; i<I7_MINIGLK_MAX_STREAMS; i++)
if (proc->miniglk->memory_streams[i].active == 0) {
proc->miniglk->memory_streams[i] = i7_new_stream(proc, F, win_id);
proc->miniglk->memory_streams[i].active = 1;
proc->miniglk->memory_streams[i].previous_id = proc->state.current_output_stream_ID;
return i;
}
fprintf(stderr, "Out of streams\n"); i7_fatal_exit(proc);
return 0;
}
i7word_t i7_miniglk_stream_open_memory(i7process_t *proc, i7word_t buffer, i7word_t len, i7word_t fmode, i7word_t rock) {
if (fmode != 1) { fprintf(stderr, "Only file mode 1 supported, not %d\n", fmode); i7_fatal_exit(proc); }
i7word_t id = i7_open_stream(proc, NULL, 0);
proc->miniglk->memory_streams[id].write_here_on_closure = buffer;
proc->miniglk->memory_streams[id].write_limit = (size_t) len;
proc->miniglk->memory_streams[id].char_size = 1;
proc->state.current_output_stream_ID = id;
return id;
}
i7word_t i7_miniglk_stream_open_memory_uni(i7process_t *proc, i7word_t buffer, i7word_t len, i7word_t fmode, i7word_t rock) {
if (fmode != 1) { fprintf(stderr, "Only file mode 1 supported, not %d\n", fmode); i7_fatal_exit(proc); }
i7word_t id = i7_open_stream(proc, NULL, 0);
proc->miniglk->memory_streams[id].write_here_on_closure = buffer;
proc->miniglk->memory_streams[id].write_limit = (size_t) len;
proc->miniglk->memory_streams[id].char_size = 4;
proc->state.current_output_stream_ID = id;
return id;
}
i7word_t i7_miniglk_stream_open_file(i7process_t *proc, i7word_t fileref, i7word_t usage, i7word_t rock) {
i7word_t id = i7_open_stream(proc, NULL, 0);
proc->miniglk->memory_streams[id].to_file_id = fileref;
if (i7_fopen(proc, fileref, usage) == 0) return 0;
return id;
}
void i7_miniglk_stream_set_position(i7process_t *proc, i7word_t id, i7word_t pos, i7word_t seekmode) {
if ((id < 0) || (id >= I7_MINIGLK_MAX_STREAMS)) { fprintf(stderr, "Stream ID %d out of range\n", id); i7_fatal_exit(proc); }
i7_mg_stream_t *S = &(proc->miniglk->memory_streams[id]);
if (S->to_file_id >= 0) {
int origin;
switch (seekmode) {
case seekmode_Start: origin = SEEK_SET; break;
case seekmode_Current: origin = SEEK_CUR; break;
case seekmode_End: origin = SEEK_END; break;
default: fprintf(stderr, "Unknown seekmode\n"); i7_fatal_exit(proc);
}
i7_fseek(proc, S->to_file_id, pos, origin);
} else {
fprintf(stderr, "glk_stream_set_position supported only for file streams\n"); i7_fatal_exit(proc);
}
}
i7word_t i7_miniglk_stream_get_position(i7process_t *proc, i7word_t id) {
if ((id < 0) || (id >= I7_MINIGLK_MAX_STREAMS)) { fprintf(stderr, "Stream ID %d out of range\n", id); i7_fatal_exit(proc); }
i7_mg_stream_t *S = &(proc->miniglk->memory_streams[id]);
if (S->to_file_id >= 0) {
return (i7word_t) i7_ftell(proc, S->to_file_id);
}
return (i7word_t) S->memory_used;
}
void i7_miniglk_stream_close(i7process_t *proc, i7word_t id, i7word_t result) {
if ((id < 0) || (id >= I7_MINIGLK_MAX_STREAMS)) { fprintf(stderr, "Stream ID %d out of range\n", id); i7_fatal_exit(proc); }
if (id == 0) { fprintf(stderr, "Cannot close stdout\n"); i7_fatal_exit(proc); }
if (id == 1) { fprintf(stderr, "Cannot close stderr\n"); i7_fatal_exit(proc); }
i7_mg_stream_t *S = &(proc->miniglk->memory_streams[id]);
if (S->active == 0) { fprintf(stderr, "Stream %d already closed\n", id); i7_fatal_exit(proc); }
if (proc->state.current_output_stream_ID == id) proc->state.current_output_stream_ID = S->previous_id;
if (S->write_here_on_closure != 0) {
if (S->char_size == 4) {
for (size_t i = 0; i < S->write_limit; i++)
if (i < S->memory_used)
i7_write_word(proc, S->write_here_on_closure, i, S->to_memory[i]);
else
i7_write_word(proc, S->write_here_on_closure, i, 0);
} else {
for (size_t i = 0; i < S->write_limit; i++)
if (i < S->memory_used)
i7_write_byte(proc, S->write_here_on_closure + i, S->to_memory[i]);
else
i7_write_byte(proc, S->write_here_on_closure + i, 0);
}
}
if (result == -1) {
i7_push(proc, S->chars_read);
i7_push(proc, S->memory_used);
} else if (result != 0) {
i7_write_word(proc, result, 0, S->chars_read);
i7_write_word(proc, result, 1, S->memory_used);
}
if (S->to_file_id >= 0) i7_fclose(proc, S->to_file_id);
S->active = 0;
S->memory_used = 0;
}
i7word_t i7_miniglk_window_open(i7process_t *proc, i7word_t split, i7word_t method, i7word_t size, i7word_t wintype, i7word_t rock) {
if (proc->miniglk->no_windows >= 128) {
fprintf(stderr, "Out of windows\n"); i7_fatal_exit(proc);
}
int id = proc->miniglk->no_windows++;
proc->miniglk->windows[id].type = wintype;
proc->miniglk->windows[id].stream_id = i7_open_stream(proc, stdout, id);
proc->miniglk->windows[id].rock = rock;
return id;
}
i7word_t i7_stream_of_window(i7process_t *proc, i7word_t id) {
if ((id < 0) || (id >= proc->miniglk->no_windows)) { fprintf(stderr, "Window ID %d out of range\n", id); i7_fatal_exit(proc); }
return proc->miniglk->windows[id].stream_id;
}
i7word_t i7_rock_of_window(i7process_t *proc, i7word_t id) {
if ((id < 0) || (id >= proc->miniglk->no_windows)) { fprintf(stderr, "Window ID %d out of range\n", id); i7_fatal_exit(proc); }
return proc->miniglk->windows[id].rock;
}
void i7_to_receiver(i7process_t *proc, i7word_t rock, wchar_t c) {
i7_mg_stream_t *S = &(proc->miniglk->memory_streams[proc->state.current_output_stream_ID]);
if (proc->receiver == NULL) fputc(c, stdout);
(proc->receiver)(rock, c, S->composite_style);
}
void i7_miniglk_put_char_stream(i7process_t *proc, i7word_t stream_id, i7word_t x) {
i7_mg_stream_t *S = &(proc->miniglk->memory_streams[stream_id]);
if (S->to_file) {
int win_id = S->owned_by_window_id;
int rock = -1;
if (win_id >= 1) rock = i7_rock_of_window(proc, win_id);
unsigned int c = (unsigned int) x;
if (proc->use_UTF8) {
if (c >= 0x800) {
i7_to_receiver(proc, rock, 0xE0 + (c >> 12));
i7_to_receiver(proc, rock, 0x80 + ((c >> 6) & 0x3f));
i7_to_receiver(proc, rock, 0x80 + (c & 0x3f));
} else if (c >= 0x80) {
i7_to_receiver(proc, rock, 0xC0 + (c >> 6));
i7_to_receiver(proc, rock, 0x80 + (c & 0x3f));
} else i7_to_receiver(proc, rock, (int) c);
} else {
i7_to_receiver(proc, rock, (int) c);
}
} else if (S->to_file_id >= 0) {
i7_fputc(proc, (int) x, S->to_file_id);
S->end_position++;
} else {
if (S->memory_used >= S->memory_capacity) {
size_t needed = 4*S->memory_capacity;
if (needed == 0) needed = 1024;
wchar_t *new_data = (wchar_t *) calloc(needed, sizeof(wchar_t));
if (new_data == NULL) { fprintf(stderr, "Out of memory\n"); i7_fatal_exit(proc); }
for (size_t i=0; i<S->memory_used; i++) new_data[i] = S->to_memory[i];
free(S->to_memory);
S->to_memory = new_data;
}
S->to_memory[S->memory_used++] = (wchar_t) x;
}
}
i7word_t i7_miniglk_get_char_stream(i7process_t *proc, i7word_t stream_id) {
i7_mg_stream_t *S = &(proc->miniglk->memory_streams[stream_id]);
if (S->to_file_id >= 0) {
S->chars_read++;
return i7_fgetc(proc, S->to_file_id);
}
return 0;
}
=
= (text to inform7_clib.h)
i7_mg_event_t *i7_next_event(i7process_t *proc);
void i7_make_event(i7process_t *proc, i7_mg_event_t e);
i7word_t i7_miniglk_select(i7process_t *proc, i7word_t structure);
i7word_t i7_miniglk_request_line_event(i7process_t *proc, i7word_t window_id, i7word_t buffer, i7word_t max_len, i7word_t init_len);
i7word_t fn_i7_mgl_IndefArt(i7process_t *proc, i7word_t i7_mgl_local_obj, i7word_t i7_mgl_local_i);
i7word_t fn_i7_mgl_DefArt(i7process_t *proc, i7word_t i7_mgl_local_obj, i7word_t i7_mgl_local_i);
i7word_t fn_i7_mgl_CIndefArt(i7process_t *proc, i7word_t i7_mgl_local_obj, i7word_t i7_mgl_local_i);
i7word_t fn_i7_mgl_CDefArt(i7process_t *proc, i7word_t i7_mgl_local_obj, i7word_t i7_mgl_local_i);
i7word_t fn_i7_mgl_PrintShortName(i7process_t *proc, i7word_t i7_mgl_local_obj, i7word_t i7_mgl_local_i);
void i7_print_name(i7process_t *proc, i7word_t x);
void i7_read(i7process_t *proc, i7word_t x);
=
= (text to inform7_clib.c)
i7_mg_event_t *i7_next_event(i7process_t *proc) {
if (proc->miniglk->rb_front == proc->miniglk->rb_back) return NULL;
i7_mg_event_t *e = &(proc->miniglk->events_ring_buffer[proc->miniglk->rb_back]);
proc->miniglk->rb_back++; if (proc->miniglk->rb_back == I7_MINIGLK_RING_BUFFER_SIZE) proc->miniglk->rb_back = 0;
return e;
}
void i7_make_event(i7process_t *proc, i7_mg_event_t e) {
proc->miniglk->events_ring_buffer[proc->miniglk->rb_front] = e;
proc->miniglk->rb_front++; if (proc->miniglk->rb_front == I7_MINIGLK_RING_BUFFER_SIZE) proc->miniglk->rb_front = 0;
}
i7word_t i7_miniglk_select(i7process_t *proc, i7word_t structure) {
i7_mg_event_t *e = i7_next_event(proc);
if (e == NULL) {
fprintf(stderr, "No events available to select\n"); i7_fatal_exit(proc);
}
if (structure == -1) {
i7_push(proc, e->type);
i7_push(proc, e->win_id);
i7_push(proc, e->val1);
i7_push(proc, e->val2);
} else {
if (structure) {
i7_write_word(proc, structure, 0, e->type);
i7_write_word(proc, structure, 1, e->win_id);
i7_write_word(proc, structure, 2, e->val1);
i7_write_word(proc, structure, 3, e->val2);
}
}
return 0;
}
i7word_t i7_miniglk_request_line_event(i7process_t *proc, i7word_t window_id, i7word_t buffer, i7word_t max_len, i7word_t init_len) {
i7_mg_event_t e;
e.type = i7_evtype_LineInput;
e.win_id = window_id;
e.val1 = 1;
e.val2 = 0;
wchar_t c; int pos = init_len;
if (proc->sender == NULL) i7_benign_exit(proc);
char *s = (proc->sender)(proc->send_count++);
int i = 0;
while (1) {
c = s[i++];
if ((c == EOF) || (c == 0) || (c == '\n') || (c == '\r')) break;
if (pos < max_len) i7_write_byte(proc, buffer + pos++, c);
}
if (pos < max_len) i7_write_byte(proc, buffer + pos, 0); else i7_write_byte(proc, buffer + max_len-1, 0);
e.val1 = pos;
i7_make_event(proc, e);
if (proc->miniglk->no_lr++ == 1000) {
fprintf(stdout, "[Too many line events: terminating to prevent hang]\n"); exit(0);
}
return 0;
}
void i7_default_glk(i7process_t *proc, i7word_t glk_api_selector, i7word_t varargc, i7word_t *z) {
i7_debug_stack("i7_opcode_glk");
i7word_t args[5] = { 0, 0, 0, 0, 0 }, argc = 0;
while (varargc > 0) {
i7word_t v = i7_pull(proc);
if (argc < 5) args[argc++] = v;
varargc--;
}
int rv = 0;
switch (glk_api_selector) {
case i7_glk_gestalt:
rv = 1; break;
case i7_glk_window_iterate:
rv = 0; break;
case i7_glk_window_open:
rv = i7_miniglk_window_open(proc, args[0], args[1], args[2], args[3], args[4]); break;
case i7_glk_set_window:
i7_miniglk_stream_set_current(proc, i7_stream_of_window(proc, args[0])); break;
case i7_glk_stream_iterate:
rv = 0; break;
case i7_glk_fileref_iterate:
rv = 0; break;
case i7_glk_stylehint_set:
rv = 0; break;
case i7_glk_schannel_iterate:
rv = 0; break;
case i7_glk_schannel_create:
rv = 0; break;
case i7_glk_set_style:
rv = 0; break;
case i7_glk_window_move_cursor:
rv = 0; break;
case i7_glk_stream_get_position:
rv = i7_miniglk_stream_get_position(proc, args[0]); break;
case i7_glk_window_get_size:
if (args[0]) i7_write_word(proc, args[0], 0, 80);
if (args[1]) i7_write_word(proc, args[1], 0, 8);
rv = 0; break;
case i7_glk_request_line_event:
rv = i7_miniglk_request_line_event(proc, args[0], args[1], args[2], args[3]); break;
case i7_glk_select:
rv = i7_miniglk_select(proc, args[0]); break;
case i7_glk_stream_close:
i7_miniglk_stream_close(proc, args[0], args[1]); break;
case i7_glk_stream_set_current:
i7_miniglk_stream_set_current(proc, args[0]); break;
case i7_glk_stream_get_current:
rv = i7_miniglk_stream_get_current(proc); break;
case i7_glk_stream_open_memory:
rv = i7_miniglk_stream_open_memory(proc, args[0], args[1], args[2], args[3]); break;
case i7_glk_stream_open_memory_uni:
rv = i7_miniglk_stream_open_memory_uni(proc, args[0], args[1], args[2], args[3]); break;
case i7_glk_fileref_create_by_name:
rv = i7_miniglk_fileref_create_by_name(proc, args[0], args[1], args[2]); break;
case i7_glk_fileref_does_file_exist:
rv = i7_miniglk_fileref_does_file_exist(proc, args[0]); break;
case i7_glk_stream_open_file:
rv = i7_miniglk_stream_open_file(proc, args[0], args[1], args[2]); break;
case i7_glk_fileref_destroy:
rv = 0; break;
case i7_glk_char_to_lower:
rv = args[0];
if (((rv >= 0x41) && (rv <= 0x5A)) ||
((rv >= 0xC0) && (rv <= 0xD6)) ||
((rv >= 0xD8) && (rv <= 0xDE))) rv += 32;
break;
case i7_glk_char_to_upper:
rv = args[0];
if (((rv >= 0x61) && (rv <= 0x7A)) ||
((rv >= 0xE0) && (rv <= 0xF6)) ||
((rv >= 0xF8) && (rv <= 0xFE))) rv -= 32;
break;
case i7_glk_stream_set_position:
i7_miniglk_stream_set_position(proc, args[0], args[1], args[2]); break;
case i7_glk_put_char_stream:
i7_miniglk_put_char_stream(proc, args[0], args[1]); break;
case i7_glk_get_char_stream:
rv = i7_miniglk_get_char_stream(proc, args[0]); break;
default:
printf("Unimplemented: i7_opcode_glk %d.\n", glk_api_selector); i7_fatal_exit(proc);
break;
}
if (z) *z = rv;
}
void i7_print_name(i7process_t *proc, i7word_t x) {
fn_i7_mgl_PrintShortName(proc, x, 0);
}
i7word_t fn_i7_mgl_pending_boxed_quotation(i7process_t *proc) {
return 0;
}
=

View file

@ -416,7 +416,10 @@ typedef struct i7process_t {
void (*receiver)(int id, wchar_t c, char *style);
int send_count;
char *(*sender)(int count);
i7word_t (*communicator)(struct i7process_t *proc, char *id, int argc, i7word_t *args);
void (*stylist)(struct i7process_t *proc, i7word_t which, i7word_t what);
void (*glk_implementation)(struct i7process_t *proc, i7word_t glk_api_selector,
i7word_t varargc, i7word_t *z);
struct miniglk_data *miniglk;
int use_UTF8;
} i7process_t;
=
@ -457,7 +460,10 @@ i7process_t i7_new_process(void) {
proc.receiver = i7_default_receiver;
proc.send_count = 0;
proc.sender = i7_default_sender;
proc.stylist = i7_default_stylist;
proc.glk_implementation = i7_default_glk;
proc.use_UTF8 = 1;
i7_initialise_miniglk_data(&proc);
return proc;
}
=
@ -468,7 +474,6 @@ a new process, so we must define those:
= (text to inform7_clib.h)
char *i7_default_sender(int count);
void i7_default_receiver(int id, wchar_t c, char *style);
i7word_t i7_default_communicator(i7process_t *proc, char *id, int argc, i7word_t *args);
=
The receiver and sender functions allow our textual I/O to be managed by external
@ -541,6 +546,29 @@ void i7_set_process_sender(i7process_t *proc, char *(*sender)(int count)) {
}
=
Similarly, ambitious projects which want their own complete I/O systems can
set the following:
= (text to inform7_clib.h)
void i7_set_process_stylist(i7process_t *proc,
void (*stylist)(struct i7process_t *proc, i7word_t which, i7word_t what));
void i7_set_process_glk_implementation(i7process_t *proc,
void (*glk_implementation)(struct i7process_t *proc, i7word_t glk_api_selector,
i7word_t varargc, i7word_t *z));
=
= (text to inform7_clib.c)
void i7_set_process_stylist(i7process_t *proc,
void (*stylist)(struct i7process_t *proc, i7word_t which, i7word_t what)) {
proc->stylist = stylist;
}
void i7_set_process_glk_implementation(i7process_t *proc,
void (*glk_implementation)(struct i7process_t *proc, i7word_t glk_api_selector,
i7word_t varargc, i7word_t *z)) {
proc->glk_implementation = glk_implementation;
}
=
In all cases, execution is kicked off when |i7_run_process| is called on a process.
Ordinarily, that will execute the entire Inform 7 program and then come back to us;
but we need to cope with a sudden halt during execution, either through a fatal

View file

@ -43,4 +43,5 @@ Chapter 5: C
C Object Model
C Function Model
C Input-Output Model
C Miniglk
C Utility Functions