Skip to content

Instantly share code, notes, and snippets.

@kabbi
Created March 3, 2014 17:27
Show Gist options
  • Save kabbi/9330017 to your computer and use it in GitHub Desktop.
Save kabbi/9330017 to your computer and use it in GitHub Desktop.
limbo pygments showcase
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title></title>
<meta http-equiv="content-type" content="text/html; charset=latin1">
<style type="text/css">
td.linenos { background-color: #f0f0f0; padding-right: 10px; }
span.lineno { background-color: #f0f0f0; padding: 0 5px 0 5px; }
pre { line-height: 125%; }
body .hll { background-color: #49483e }
body { background: #272822; color: #f8f8f2 }
body .c { color: #75715e } /* Comment */
body .err { color: #960050; background-color: #1e0010 } /* Error */
body .k { color: #66d9ef } /* Keyword */
body .l { color: #ae81ff } /* Literal */
body .n { color: #f8f8f2 } /* Name */
body .o { color: #f92672 } /* Operator */
body .p { color: #f8f8f2 } /* Punctuation */
body .cm { color: #75715e } /* Comment.Multiline */
body .cp { color: #75715e } /* Comment.Preproc */
body .c1 { color: #75715e } /* Comment.Single */
body .cs { color: #75715e } /* Comment.Special */
body .gd { color: #f92672 } /* Generic.Deleted */
body .ge { font-style: italic } /* Generic.Emph */
body .gi { color: #a6e22e } /* Generic.Inserted */
body .gs { font-weight: bold } /* Generic.Strong */
body .gu { color: #75715e } /* Generic.Subheading */
body .kc { color: #66d9ef } /* Keyword.Constant */
body .kd { color: #66d9ef } /* Keyword.Declaration */
body .kn { color: #f92672 } /* Keyword.Namespace */
body .kp { color: #66d9ef } /* Keyword.Pseudo */
body .kr { color: #66d9ef } /* Keyword.Reserved */
body .kt { color: #66d9ef } /* Keyword.Type */
body .ld { color: #e6db74 } /* Literal.Date */
body .m { color: #ae81ff } /* Literal.Number */
body .s { color: #e6db74 } /* Literal.String */
body .na { color: #a6e22e } /* Name.Attribute */
body .nb { color: #f8f8f2 } /* Name.Builtin */
body .nc { color: #a6e22e } /* Name.Class */
body .no { color: #66d9ef } /* Name.Constant */
body .nd { color: #a6e22e } /* Name.Decorator */
body .ni { color: #f8f8f2 } /* Name.Entity */
body .ne { color: #a6e22e } /* Name.Exception */
body .nf { color: #a6e22e } /* Name.Function */
body .nl { color: #f8f8f2 } /* Name.Label */
body .nn { color: #f8f8f2 } /* Name.Namespace */
body .nx { color: #a6e22e } /* Name.Other */
body .py { color: #f8f8f2 } /* Name.Property */
body .nt { color: #f92672 } /* Name.Tag */
body .nv { color: #f8f8f2 } /* Name.Variable */
body .ow { color: #f92672 } /* Operator.Word */
body .w { color: #f8f8f2 } /* Text.Whitespace */
body .mf { color: #ae81ff } /* Literal.Number.Float */
body .mh { color: #ae81ff } /* Literal.Number.Hex */
body .mi { color: #ae81ff } /* Literal.Number.Integer */
body .mo { color: #ae81ff } /* Literal.Number.Oct */
body .sb { color: #e6db74 } /* Literal.String.Backtick */
body .sc { color: #e6db74 } /* Literal.String.Char */
body .sd { color: #e6db74 } /* Literal.String.Doc */
body .s2 { color: #e6db74 } /* Literal.String.Double */
body .se { color: #ae81ff } /* Literal.String.Escape */
body .sh { color: #e6db74 } /* Literal.String.Heredoc */
body .si { color: #e6db74 } /* Literal.String.Interpol */
body .sx { color: #e6db74 } /* Literal.String.Other */
body .sr { color: #e6db74 } /* Literal.String.Regex */
body .s1 { color: #e6db74 } /* Literal.String.Single */
body .ss { color: #e6db74 } /* Literal.String.Symbol */
body .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */
body .vc { color: #f8f8f2 } /* Name.Variable.Class */
body .vg { color: #f8f8f2 } /* Name.Variable.Global */
body .vi { color: #f8f8f2 } /* Name.Variable.Instance */
body .il { color: #ae81ff } /* Literal.Number.Integer.Long */
</style>
</head>
<body>
<h2></h2>
<div class="highlight"><pre><span class="k">implement</span> <span class="n">Ninewin</span><span class="p">;</span>
<span class="k">include</span> <span class="s">&quot;sys.m&quot;</span><span class="p">;</span>
<span class="n">sys</span><span class="o">:</span> <span class="n">Sys</span><span class="p">;</span>
<span class="k">include</span> <span class="s">&quot;draw.m&quot;</span><span class="p">;</span>
<span class="n">draw</span><span class="o">:</span> <span class="n">Draw</span><span class="p">;</span>
<span class="n">Image</span><span class="p">,</span> <span class="n">Display</span><span class="p">,</span> <span class="n">Pointer</span><span class="o">:</span> <span class="k">import</span> <span class="n">draw</span><span class="p">;</span>
<span class="k">include</span> <span class="s">&quot;arg.m&quot;</span><span class="p">;</span>
<span class="k">include</span> <span class="s">&quot;keyboard.m&quot;</span><span class="p">;</span>
<span class="k">include</span> <span class="s">&quot;tk.m&quot;</span><span class="p">;</span>
<span class="k">include</span> <span class="s">&quot;wmclient.m&quot;</span><span class="p">;</span>
<span class="n">wmclient</span><span class="o">:</span> <span class="n">Wmclient</span><span class="p">;</span>
<span class="n">Window</span><span class="o">:</span> <span class="k">import</span> <span class="n">wmclient</span><span class="p">;</span>
<span class="k">include</span> <span class="s">&quot;sh.m&quot;</span><span class="p">;</span>
<span class="n">sh</span><span class="o">:</span> <span class="n">Sh</span><span class="p">;</span>
<span class="c1"># run a p9 graphics program (default rio) under inferno wm,</span>
<span class="c1"># making available to it:</span>
<span class="c1"># /dev/winname - naming the current inferno window (changing on resize)</span>
<span class="c1"># /dev/mouse - pointer file + resize events; write to change position</span>
<span class="c1"># /dev/cursor - change appearance of cursor.</span>
<span class="c1"># /dev/draw - inferno draw device</span>
<span class="c1"># /dev/cons - read keyboard events, write to 9win stdout.</span>
<span class="n">Ninewin</span><span class="o">:</span> <span class="kt">module</span> <span class="p">{</span>
<span class="n">init</span><span class="o">:</span> <span class="kt">fn</span><span class="p">(</span><span class="n">ctxt</span><span class="o">:</span> <span class="kt">ref</span> <span class="n">Draw</span><span class="o">-&gt;</span><span class="n">Context</span><span class="p">,</span> <span class="n">argv</span><span class="o">:</span> <span class="kt">list</span> <span class="kt">of</span> <span class="kt">string</span><span class="p">);</span>
<span class="p">};</span>
<span class="n">winname</span><span class="o">:</span> <span class="kt">string</span><span class="p">;</span>
<span class="n">init</span><span class="p">(</span><span class="n">ctxt</span><span class="o">:</span> <span class="kt">ref</span> <span class="n">Draw</span><span class="o">-&gt;</span><span class="n">Context</span><span class="p">,</span> <span class="n">argv</span><span class="o">:</span> <span class="kt">list</span> <span class="kt">of</span> <span class="kt">string</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">size</span> <span class="o">:=</span> <span class="n">Draw</span><span class="o">-&gt;</span><span class="n">Point</span><span class="p">(</span><span class="mi">500</span><span class="p">,</span> <span class="mi">500</span><span class="p">);</span>
<span class="n">sys</span> <span class="o">=</span> <span class="k">load</span> <span class="n">Sys</span> <span class="n">Sys</span><span class="o">-&gt;</span><span class="n">PATH</span><span class="p">;</span>
<span class="n">draw</span> <span class="o">=</span> <span class="k">load</span> <span class="n">Draw</span> <span class="n">Draw</span><span class="o">-&gt;</span><span class="n">PATH</span><span class="p">;</span>
<span class="n">wmclient</span> <span class="o">=</span> <span class="k">load</span> <span class="n">Wmclient</span> <span class="n">Wmclient</span><span class="o">-&gt;</span><span class="n">PATH</span><span class="p">;</span>
<span class="n">wmclient</span><span class="o">-&gt;</span><span class="n">init</span><span class="p">();</span>
<span class="n">sh</span> <span class="o">=</span> <span class="k">load</span> <span class="n">Sh</span> <span class="n">Sh</span><span class="o">-&gt;</span><span class="n">PATH</span><span class="p">;</span>
<span class="n">buts</span> <span class="o">:=</span> <span class="n">Wmclient</span><span class="o">-&gt;</span><span class="n">Resize</span><span class="p">;</span>
<span class="k">if</span><span class="p">(</span><span class="n">ctxt</span> <span class="o">==</span> <span class="kc">nil</span><span class="p">){</span>
<span class="n">ctxt</span> <span class="o">=</span> <span class="n">wmclient</span><span class="o">-&gt;</span><span class="n">makedrawcontext</span><span class="p">();</span>
<span class="n">buts</span> <span class="o">=</span> <span class="n">Wmclient</span><span class="o">-&gt;</span><span class="n">Plain</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">arg</span> <span class="o">:=</span> <span class="k">load</span> <span class="n">Arg</span> <span class="n">Arg</span><span class="o">-&gt;</span><span class="n">PATH</span><span class="p">;</span>
<span class="n">arg</span><span class="o">-&gt;</span><span class="n">init</span><span class="p">(</span><span class="n">argv</span><span class="p">);</span>
<span class="n">arg</span><span class="o">-&gt;</span><span class="n">setusage</span><span class="p">(</span><span class="s">&quot;9win [-s] [-x width] [-y height]&quot;</span><span class="p">);</span>
<span class="n">exportonly</span> <span class="o">:=</span> <span class="mi">0</span><span class="p">;</span>
<span class="k">while</span><span class="p">(((</span><span class="n">opt</span> <span class="o">:=</span> <span class="n">arg</span><span class="o">-&gt;</span><span class="n">opt</span><span class="p">()))</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">){</span>
<span class="k">case</span> <span class="n">opt</span> <span class="p">{</span>
<span class="sc">&#39;s&#39;</span> <span class="o">=&gt;</span>
<span class="n">exportonly</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
<span class="sc">&#39;x&#39;</span> <span class="o">=&gt;</span>
<span class="n">size</span><span class="p">.</span><span class="n">x</span> <span class="o">=</span> <span class="kt">int</span> <span class="n">arg</span><span class="o">-&gt;</span><span class="n">earg</span><span class="p">();</span>
<span class="sc">&#39;y&#39;</span> <span class="o">=&gt;</span>
<span class="n">size</span><span class="p">.</span><span class="n">y</span> <span class="o">=</span> <span class="kt">int</span> <span class="n">arg</span><span class="o">-&gt;</span><span class="n">earg</span><span class="p">();</span>
<span class="o">*</span> <span class="o">=&gt;</span>
<span class="n">arg</span><span class="o">-&gt;</span><span class="n">usage</span><span class="p">();</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="k">if</span><span class="p">(</span><span class="n">size</span><span class="p">.</span><span class="n">x</span> <span class="o">&lt;</span> <span class="mi">1</span> <span class="o">||</span> <span class="n">size</span><span class="p">.</span><span class="n">y</span> <span class="o">&lt;</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">arg</span><span class="o">-&gt;</span><span class="n">usage</span><span class="p">();</span>
<span class="n">argv</span> <span class="o">=</span> <span class="n">arg</span><span class="o">-&gt;</span><span class="n">argv</span><span class="p">();</span>
<span class="k">if</span><span class="p">(</span><span class="n">argv</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="o">&amp;&amp;</span> <span class="k">hd</span> <span class="n">argv</span> <span class="o">==</span> <span class="s">&quot;-s&quot;</span><span class="p">){</span>
<span class="n">exportonly</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
<span class="n">argv</span> <span class="o">=</span> <span class="k">tl</span> <span class="n">argv</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">if</span><span class="p">(</span><span class="n">argv</span> <span class="o">==</span> <span class="kc">nil</span> <span class="o">&amp;&amp;</span> <span class="o">!</span><span class="n">exportonly</span><span class="p">)</span>
<span class="n">argv</span> <span class="o">=</span> <span class="s">&quot;rio&quot;</span> <span class="o">::</span> <span class="kc">nil</span><span class="p">;</span>
<span class="k">if</span><span class="p">(</span><span class="n">argv</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="o">&amp;&amp;</span> <span class="n">exportonly</span><span class="p">){</span>
<span class="n">sys</span><span class="o">-&gt;</span><span class="n">fprint</span><span class="p">(</span><span class="n">sys</span><span class="o">-&gt;</span><span class="n">fildes</span><span class="p">(</span><span class="mi">2</span><span class="p">),</span> <span class="s">&quot;9win: no command allowed with -s flag</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">);</span>
<span class="n">raise</span> <span class="s">&quot;fail:usage&quot;</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">title</span> <span class="o">:=</span> <span class="s">&quot;9win&quot;</span><span class="p">;</span>
<span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="n">exportonly</span><span class="p">)</span>
<span class="n">title</span> <span class="o">+=</span> <span class="s">&quot; &quot;</span> <span class="o">+</span> <span class="k">hd</span> <span class="n">argv</span><span class="p">;</span>
<span class="n">w</span> <span class="o">:=</span> <span class="n">wmclient</span><span class="o">-&gt;</span><span class="n">window</span><span class="p">(</span><span class="n">ctxt</span><span class="p">,</span> <span class="n">title</span><span class="p">,</span> <span class="n">buts</span><span class="p">);</span>
<span class="n">w</span><span class="p">.</span><span class="n">reshape</span><span class="p">(((</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">size</span><span class="p">));</span>
<span class="n">w</span><span class="p">.</span><span class="n">onscreen</span><span class="p">(</span><span class="kc">nil</span><span class="p">);</span>
<span class="k">if</span><span class="p">(</span><span class="n">w</span><span class="p">.</span><span class="n">image</span> <span class="o">==</span> <span class="kc">nil</span><span class="p">){</span>
<span class="n">sys</span><span class="o">-&gt;</span><span class="n">fprint</span><span class="p">(</span><span class="n">sys</span><span class="o">-&gt;</span><span class="n">fildes</span><span class="p">(</span><span class="mi">2</span><span class="p">),</span> <span class="s">&quot;9win: cannot get image to draw on</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">);</span>
<span class="n">raise</span> <span class="s">&quot;fail:no window&quot;</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">sys</span><span class="o">-&gt;</span><span class="n">pctl</span><span class="p">(</span><span class="n">Sys</span><span class="o">-&gt;</span><span class="n">FORKNS</span><span class="o">|</span><span class="n">Sys</span><span class="o">-&gt;</span><span class="n">NEWPGRP</span><span class="p">,</span> <span class="kc">nil</span><span class="p">);</span>
<span class="n">ld</span> <span class="o">:=</span> <span class="s">&quot;/n/9win&quot;</span><span class="p">;</span>
<span class="k">if</span><span class="p">(</span><span class="n">sys</span><span class="o">-&gt;</span><span class="n">bind</span><span class="p">(</span><span class="s">&quot;#s&quot;</span><span class="p">,</span> <span class="n">ld</span><span class="p">,</span> <span class="n">Sys</span><span class="o">-&gt;</span><span class="n">MREPL</span><span class="p">)</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span> <span class="o">&amp;&amp;</span>
<span class="n">sys</span><span class="o">-&gt;</span><span class="n">bind</span><span class="p">(</span><span class="s">&quot;#s&quot;</span><span class="p">,</span> <span class="n">ld</span> <span class="o">=</span> <span class="s">&quot;/n/local&quot;</span><span class="p">,</span> <span class="n">Sys</span><span class="o">-&gt;</span><span class="n">MREPL</span><span class="p">)</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">){</span>
<span class="n">sys</span><span class="o">-&gt;</span><span class="n">fprint</span><span class="p">(</span><span class="n">sys</span><span class="o">-&gt;</span><span class="n">fildes</span><span class="p">(</span><span class="mi">2</span><span class="p">),</span> <span class="s">&quot;9win: cannot bind files: %r</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">);</span>
<span class="n">raise</span> <span class="s">&quot;fail:error&quot;</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">w</span><span class="p">.</span><span class="n">startinput</span><span class="p">(</span><span class="s">&quot;kbd&quot;</span> <span class="o">::</span> <span class="s">&quot;ptr&quot;</span> <span class="o">::</span> <span class="kc">nil</span><span class="p">);</span>
<span class="k">spawn</span> <span class="n">ptrproc</span><span class="p">(</span><span class="n">rq</span> <span class="o">:=</span> <span class="kt">chan</span> <span class="kt">of</span> <span class="n">Sys</span><span class="o">-&gt;</span><span class="n">Rread</span><span class="p">,</span> <span class="n">ptr</span> <span class="o">:=</span> <span class="kt">chan</span><span class="p">[</span><span class="mi">10</span><span class="p">]</span> <span class="kt">of</span> <span class="kt">ref</span> <span class="n">Pointer</span><span class="p">,</span> <span class="n">reshape</span> <span class="o">:=</span> <span class="kt">chan</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="kt">of</span> <span class="kt">int</span><span class="p">);</span>
<span class="n">fwinname</span> <span class="o">:=</span> <span class="n">sys</span><span class="o">-&gt;</span><span class="n">file2chan</span><span class="p">(</span><span class="n">ld</span><span class="p">,</span> <span class="s">&quot;winname&quot;</span><span class="p">);</span>
<span class="n">fconsctl</span> <span class="o">:=</span> <span class="n">sys</span><span class="o">-&gt;</span><span class="n">file2chan</span><span class="p">(</span><span class="n">ld</span><span class="p">,</span> <span class="s">&quot;consctl&quot;</span><span class="p">);</span>
<span class="n">fcons</span> <span class="o">:=</span> <span class="n">sys</span><span class="o">-&gt;</span><span class="n">file2chan</span><span class="p">(</span><span class="n">ld</span><span class="p">,</span> <span class="s">&quot;cons&quot;</span><span class="p">);</span>
<span class="n">fmouse</span> <span class="o">:=</span> <span class="n">sys</span><span class="o">-&gt;</span><span class="n">file2chan</span><span class="p">(</span><span class="n">ld</span><span class="p">,</span> <span class="s">&quot;mouse&quot;</span><span class="p">);</span>
<span class="n">fcursor</span> <span class="o">:=</span> <span class="n">sys</span><span class="o">-&gt;</span><span class="n">file2chan</span><span class="p">(</span><span class="n">ld</span><span class="p">,</span> <span class="s">&quot;cursor&quot;</span><span class="p">);</span>
<span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="n">exportonly</span><span class="p">){</span>
<span class="k">spawn</span> <span class="n">run</span><span class="p">(</span><span class="n">sync</span> <span class="o">:=</span> <span class="kt">chan</span> <span class="kt">of</span> <span class="kt">string</span><span class="p">,</span> <span class="n">w</span><span class="p">.</span><span class="n">ctl</span><span class="p">,</span> <span class="n">ld</span><span class="p">,</span> <span class="n">argv</span><span class="p">);</span>
<span class="k">if</span><span class="p">((</span><span class="n">e</span> <span class="o">:=</span> <span class="o">&lt;-</span><span class="n">sync</span><span class="p">)</span> <span class="o">!=</span> <span class="kc">nil</span><span class="p">){</span>
<span class="n">sys</span><span class="o">-&gt;</span><span class="n">fprint</span><span class="p">(</span><span class="n">sys</span><span class="o">-&gt;</span><span class="n">fildes</span><span class="p">(</span><span class="mi">2</span><span class="p">),</span> <span class="s">&quot;9win: %s&quot;</span><span class="p">,</span> <span class="n">e</span><span class="p">);</span>
<span class="n">raise</span> <span class="s">&quot;fail:error&quot;</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="k">spawn</span> <span class="n">serveproc</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="n">rq</span><span class="p">,</span> <span class="n">fwinname</span><span class="p">,</span> <span class="n">fconsctl</span><span class="p">,</span> <span class="n">fcons</span><span class="p">,</span> <span class="n">fmouse</span><span class="p">,</span> <span class="n">fcursor</span><span class="p">);</span>
<span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="n">exportonly</span><span class="p">){</span>
<span class="c1"># handle events synchronously so that we don&#39;t get a &quot;killed&quot; message</span>
<span class="c1"># from the shell.</span>
<span class="n">handleevents</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="n">ptr</span><span class="p">,</span> <span class="n">reshape</span><span class="p">);</span>
<span class="p">}</span><span class="k">else</span><span class="p">{</span>
<span class="k">spawn</span> <span class="n">handleevents</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="n">ptr</span><span class="p">,</span> <span class="n">reshape</span><span class="p">);</span>
<span class="n">sys</span><span class="o">-&gt;</span><span class="n">bind</span><span class="p">(</span><span class="n">ld</span><span class="p">,</span> <span class="s">&quot;/dev&quot;</span><span class="p">,</span> <span class="n">Sys</span><span class="o">-&gt;</span><span class="n">MBEFORE</span><span class="p">);</span>
<span class="n">export</span><span class="p">(</span><span class="n">sys</span><span class="o">-&gt;</span><span class="n">fildes</span><span class="p">(</span><span class="mi">0</span><span class="p">),</span> <span class="n">w</span><span class="p">.</span><span class="n">ctl</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="n">handleevents</span><span class="p">(</span><span class="n">w</span><span class="o">:</span> <span class="kt">ref</span> <span class="n">Window</span><span class="p">,</span> <span class="n">ptr</span><span class="o">:</span> <span class="kt">chan</span> <span class="kt">of</span> <span class="kt">ref</span> <span class="n">Pointer</span><span class="p">,</span> <span class="n">reshape</span><span class="o">:</span> <span class="kt">chan</span> <span class="kt">of</span> <span class="kt">int</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">for</span><span class="p">(;;)</span><span class="k">alt</span><span class="p">{</span>
<span class="n">c</span> <span class="o">:=</span> <span class="o">&lt;-</span><span class="n">w</span><span class="p">.</span><span class="n">ctxt</span><span class="p">.</span><span class="n">ctl</span> <span class="n">or</span>
<span class="n">c</span> <span class="o">=</span> <span class="o">&lt;-</span><span class="n">w</span><span class="p">.</span><span class="n">ctl</span> <span class="o">=&gt;</span>
<span class="n">e</span> <span class="o">:=</span> <span class="n">w</span><span class="p">.</span><span class="n">wmctl</span><span class="p">(</span><span class="n">c</span><span class="p">);</span>
<span class="k">if</span><span class="p">(</span><span class="n">e</span> <span class="o">!=</span> <span class="kc">nil</span><span class="p">)</span>
<span class="n">sys</span><span class="o">-&gt;</span><span class="n">fprint</span><span class="p">(</span><span class="n">sys</span><span class="o">-&gt;</span><span class="n">fildes</span><span class="p">(</span><span class="mi">2</span><span class="p">),</span> <span class="s">&quot;9win: ctl error: %s</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">e</span><span class="p">);</span>
<span class="k">if</span><span class="p">(</span><span class="n">e</span> <span class="o">==</span> <span class="kc">nil</span> <span class="o">&amp;&amp;</span> <span class="n">c</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="o">&amp;&amp;</span> <span class="n">c</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="sc">&#39;!&#39;</span><span class="p">){</span>
<span class="k">alt</span><span class="p">{</span>
<span class="n">reshape</span> <span class="o">&lt;-=</span> <span class="mi">1</span> <span class="o">=&gt;</span>
<span class="p">;</span>
<span class="o">*</span> <span class="o">=&gt;</span>
<span class="p">;</span>
<span class="p">}</span>
<span class="n">winname</span> <span class="o">=</span> <span class="kc">nil</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">p</span> <span class="o">:=</span> <span class="o">&lt;-</span><span class="n">w</span><span class="p">.</span><span class="n">ctxt</span><span class="p">.</span><span class="n">ptr</span> <span class="o">=&gt;</span>
<span class="k">if</span><span class="p">(</span><span class="n">w</span><span class="p">.</span><span class="n">pointer</span><span class="p">(</span><span class="o">*</span><span class="n">p</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">){</span>
<span class="c1"># XXX would block here if client isn&#39;t reading mouse... but we do want to</span>
<span class="c1"># extert back-pressure, which conflicts.</span>
<span class="k">alt</span><span class="p">{</span>
<span class="n">ptr</span> <span class="o">&lt;-=</span> <span class="n">p</span> <span class="o">=&gt;</span>
<span class="p">;</span>
<span class="o">*</span> <span class="o">=&gt;</span>
<span class="p">;</span> <span class="c1"># sys-&gt;fprint(sys-&gt;fildes(2), &quot;9win: discarding mouse event\n&quot;);</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="n">serveproc</span><span class="p">(</span><span class="n">w</span><span class="o">:</span> <span class="kt">ref</span> <span class="n">Window</span><span class="p">,</span> <span class="n">mouserq</span><span class="o">:</span> <span class="kt">chan</span> <span class="kt">of</span> <span class="n">Sys</span><span class="o">-&gt;</span><span class="n">Rread</span><span class="p">,</span> <span class="n">fwinname</span><span class="p">,</span> <span class="n">fconsctl</span><span class="p">,</span> <span class="n">fcons</span><span class="p">,</span> <span class="n">fmouse</span><span class="p">,</span> <span class="n">fcursor</span><span class="o">:</span> <span class="kt">ref</span> <span class="n">Sys</span><span class="o">-&gt;</span><span class="n">FileIO</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">winid</span> <span class="o">:=</span> <span class="mi">0</span><span class="p">;</span>
<span class="n">krc</span><span class="o">:</span> <span class="kt">list</span> <span class="kt">of</span> <span class="n">Sys</span><span class="o">-&gt;</span><span class="n">Rread</span><span class="p">;</span>
<span class="n">ks</span><span class="o">:</span> <span class="kt">string</span><span class="p">;</span>
<span class="n">for</span><span class="p">(;;)</span><span class="k">alt</span> <span class="p">{</span>
<span class="n">c</span> <span class="o">:=</span> <span class="o">&lt;-</span><span class="n">w</span><span class="p">.</span><span class="n">ctxt</span><span class="p">.</span><span class="n">kbd</span> <span class="o">=&gt;</span>
<span class="n">ks</span><span class="p">[</span><span class="k">len</span> <span class="n">ks</span><span class="p">]</span> <span class="o">=</span> <span class="n">inf2p9key</span><span class="p">(</span><span class="n">c</span><span class="p">);</span>
<span class="k">if</span><span class="p">(</span><span class="n">krc</span> <span class="o">!=</span> <span class="kc">nil</span><span class="p">){</span>
<span class="k">hd</span> <span class="n">krc</span> <span class="o">&lt;-=</span> <span class="p">(</span><span class="kt">array</span> <span class="kt">of</span> <span class="kt">byte</span> <span class="n">ks</span><span class="p">,</span> <span class="kc">nil</span><span class="p">);</span>
<span class="n">ks</span> <span class="o">=</span> <span class="kc">nil</span><span class="p">;</span>
<span class="n">krc</span> <span class="o">=</span> <span class="k">tl</span> <span class="n">krc</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">(</span><span class="kc">nil</span><span class="p">,</span> <span class="n">d</span><span class="p">,</span> <span class="kc">nil</span><span class="p">,</span> <span class="n">wc</span><span class="p">)</span> <span class="o">:=</span> <span class="o">&lt;-</span><span class="n">fcons</span><span class="p">.</span><span class="n">write</span> <span class="o">=&gt;</span>
<span class="k">if</span><span class="p">(</span><span class="n">wc</span> <span class="o">!=</span> <span class="kc">nil</span><span class="p">){</span>
<span class="n">sys</span><span class="o">-&gt;</span><span class="n">write</span><span class="p">(</span><span class="n">sys</span><span class="o">-&gt;</span><span class="n">fildes</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span> <span class="n">d</span><span class="p">,</span> <span class="k">len</span> <span class="n">d</span><span class="p">);</span>
<span class="n">wc</span> <span class="o">&lt;-=</span> <span class="p">(</span><span class="k">len</span> <span class="n">d</span><span class="p">,</span> <span class="kc">nil</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">(</span><span class="kc">nil</span><span class="p">,</span> <span class="kc">nil</span><span class="p">,</span> <span class="kc">nil</span><span class="p">,</span> <span class="n">rc</span><span class="p">)</span> <span class="o">:=</span> <span class="o">&lt;-</span><span class="n">fcons</span><span class="p">.</span><span class="n">read</span> <span class="o">=&gt;</span>
<span class="k">if</span><span class="p">(</span><span class="n">rc</span> <span class="o">!=</span> <span class="kc">nil</span><span class="p">){</span>
<span class="k">if</span><span class="p">(</span><span class="n">ks</span> <span class="o">!=</span> <span class="kc">nil</span><span class="p">){</span>
<span class="n">rc</span> <span class="o">&lt;-=</span> <span class="p">(</span><span class="kt">array</span> <span class="kt">of</span> <span class="kt">byte</span> <span class="n">ks</span><span class="p">,</span> <span class="kc">nil</span><span class="p">);</span>
<span class="n">ks</span> <span class="o">=</span> <span class="kc">nil</span><span class="p">;</span>
<span class="p">}</span><span class="k">else</span>
<span class="n">krc</span> <span class="o">=</span> <span class="n">rc</span> <span class="o">::</span> <span class="n">krc</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">(</span><span class="n">offset</span><span class="p">,</span> <span class="kc">nil</span><span class="p">,</span> <span class="kc">nil</span><span class="p">,</span> <span class="n">rc</span><span class="p">)</span> <span class="o">:=</span> <span class="o">&lt;-</span><span class="n">fwinname</span><span class="p">.</span><span class="n">read</span> <span class="o">=&gt;</span>
<span class="k">if</span><span class="p">(</span><span class="n">rc</span> <span class="o">!=</span> <span class="kc">nil</span><span class="p">){</span>
<span class="k">if</span><span class="p">(</span><span class="n">winname</span> <span class="o">==</span> <span class="kc">nil</span><span class="p">){</span>
<span class="n">winname</span> <span class="o">=</span> <span class="n">sys</span><span class="o">-&gt;</span><span class="n">sprint</span><span class="p">(</span><span class="s">&quot;noborder.9win.%d&quot;</span><span class="p">,</span> <span class="n">winid</span><span class="o">++</span><span class="p">);</span>
<span class="k">if</span><span class="p">(</span><span class="n">w</span><span class="p">.</span><span class="n">image</span><span class="p">.</span><span class="n">name</span><span class="p">(</span><span class="n">winname</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">){</span>
<span class="n">sys</span><span class="o">-&gt;</span><span class="n">fprint</span><span class="p">(</span><span class="n">sys</span><span class="o">-&gt;</span><span class="n">fildes</span><span class="p">(</span><span class="mi">2</span><span class="p">),</span> <span class="s">&quot;9win: namewin %q failed: %r&quot;</span><span class="p">,</span> <span class="n">winname</span><span class="p">);</span>
<span class="n">rc</span> <span class="o">&lt;-=</span> <span class="p">(</span><span class="kc">nil</span><span class="p">,</span> <span class="s">&quot;namewin failure&quot;</span><span class="p">);</span>
<span class="k">break</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="n">d</span> <span class="o">:=</span> <span class="kt">array</span> <span class="kt">of</span> <span class="kt">byte</span> <span class="n">winname</span><span class="p">;</span>
<span class="k">if</span><span class="p">(</span><span class="n">offset</span> <span class="o">&lt;</span> <span class="k">len</span> <span class="n">d</span><span class="p">)</span>
<span class="n">d</span> <span class="o">=</span> <span class="n">d</span><span class="p">[</span><span class="n">offset</span><span class="o">:</span><span class="p">];</span>
<span class="k">else</span>
<span class="n">d</span> <span class="o">=</span> <span class="kc">nil</span><span class="p">;</span>
<span class="n">rc</span> <span class="o">&lt;-=</span> <span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="kc">nil</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">(</span><span class="kc">nil</span><span class="p">,</span> <span class="kc">nil</span><span class="p">,</span> <span class="kc">nil</span><span class="p">,</span> <span class="n">wc</span><span class="p">)</span> <span class="o">:=</span> <span class="o">&lt;-</span><span class="n">fwinname</span><span class="p">.</span><span class="n">write</span> <span class="o">=&gt;</span>
<span class="k">if</span><span class="p">(</span><span class="n">wc</span> <span class="o">!=</span> <span class="kc">nil</span><span class="p">)</span>
<span class="n">wc</span> <span class="o">&lt;-=</span> <span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="s">&quot;permission denied&quot;</span><span class="p">);</span>
<span class="p">(</span><span class="kc">nil</span><span class="p">,</span> <span class="kc">nil</span><span class="p">,</span> <span class="kc">nil</span><span class="p">,</span> <span class="n">rc</span><span class="p">)</span> <span class="o">:=</span> <span class="o">&lt;-</span><span class="n">fconsctl</span><span class="p">.</span><span class="n">read</span> <span class="o">=&gt;</span>
<span class="k">if</span><span class="p">(</span><span class="n">rc</span> <span class="o">!=</span> <span class="kc">nil</span><span class="p">)</span>
<span class="n">rc</span> <span class="o">&lt;-=</span> <span class="p">(</span><span class="kc">nil</span><span class="p">,</span> <span class="s">&quot;permission denied&quot;</span><span class="p">);</span>
<span class="p">(</span><span class="kc">nil</span><span class="p">,</span> <span class="n">d</span><span class="p">,</span> <span class="kc">nil</span><span class="p">,</span> <span class="n">wc</span><span class="p">)</span> <span class="o">:=</span> <span class="o">&lt;-</span><span class="n">fconsctl</span><span class="p">.</span><span class="n">write</span> <span class="o">=&gt;</span>
<span class="k">if</span><span class="p">(</span><span class="n">wc</span> <span class="o">!=</span> <span class="kc">nil</span><span class="p">){</span>
<span class="k">if</span><span class="p">(</span><span class="kt">string</span> <span class="n">d</span> <span class="o">!=</span> <span class="s">&quot;rawon&quot;</span><span class="p">)</span>
<span class="n">wc</span> <span class="o">&lt;-=</span> <span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="s">&quot;cannot change console mode&quot;</span><span class="p">);</span>
<span class="k">else</span>
<span class="n">wc</span> <span class="o">&lt;-=</span> <span class="p">(</span><span class="k">len</span> <span class="n">d</span><span class="p">,</span> <span class="kc">nil</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">(</span><span class="kc">nil</span><span class="p">,</span> <span class="kc">nil</span><span class="p">,</span> <span class="kc">nil</span><span class="p">,</span> <span class="n">rc</span><span class="p">)</span> <span class="o">:=</span> <span class="o">&lt;-</span><span class="n">fmouse</span><span class="p">.</span><span class="n">read</span> <span class="o">=&gt;</span>
<span class="k">if</span><span class="p">(</span><span class="n">rc</span> <span class="o">!=</span> <span class="kc">nil</span><span class="p">)</span>
<span class="n">mouserq</span> <span class="o">&lt;-=</span> <span class="n">rc</span><span class="p">;</span>
<span class="p">(</span><span class="kc">nil</span><span class="p">,</span> <span class="n">d</span><span class="p">,</span> <span class="kc">nil</span><span class="p">,</span> <span class="n">wc</span><span class="p">)</span> <span class="o">:=</span> <span class="o">&lt;-</span><span class="n">fmouse</span><span class="p">.</span><span class="n">write</span> <span class="o">=&gt;</span>
<span class="k">if</span><span class="p">(</span><span class="n">wc</span> <span class="o">!=</span> <span class="kc">nil</span><span class="p">){</span>
<span class="n">e</span> <span class="o">:=</span> <span class="n">cursorset</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="kt">string</span> <span class="n">d</span><span class="p">);</span>
<span class="k">if</span><span class="p">(</span><span class="n">e</span> <span class="o">==</span> <span class="kc">nil</span><span class="p">)</span>
<span class="n">wc</span> <span class="o">&lt;-=</span> <span class="p">(</span><span class="k">len</span> <span class="n">d</span><span class="p">,</span> <span class="kc">nil</span><span class="p">);</span>
<span class="k">else</span>
<span class="n">wc</span> <span class="o">&lt;-=</span> <span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">e</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">(</span><span class="kc">nil</span><span class="p">,</span> <span class="kc">nil</span><span class="p">,</span> <span class="kc">nil</span><span class="p">,</span> <span class="n">rc</span><span class="p">)</span> <span class="o">:=</span> <span class="o">&lt;-</span><span class="n">fcursor</span><span class="p">.</span><span class="n">read</span> <span class="o">=&gt;</span>
<span class="k">if</span><span class="p">(</span><span class="n">rc</span> <span class="o">!=</span> <span class="kc">nil</span><span class="p">)</span>
<span class="n">rc</span> <span class="o">&lt;-=</span> <span class="p">(</span><span class="kc">nil</span><span class="p">,</span> <span class="s">&quot;permission denied&quot;</span><span class="p">);</span>
<span class="p">(</span><span class="kc">nil</span><span class="p">,</span> <span class="n">d</span><span class="p">,</span> <span class="kc">nil</span><span class="p">,</span> <span class="n">wc</span><span class="p">)</span> <span class="o">:=</span> <span class="o">&lt;-</span><span class="n">fcursor</span><span class="p">.</span><span class="n">write</span> <span class="o">=&gt;</span>
<span class="k">if</span><span class="p">(</span><span class="n">wc</span> <span class="o">!=</span> <span class="kc">nil</span><span class="p">){</span>
<span class="n">e</span> <span class="o">:=</span> <span class="n">cursorswitch</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="n">d</span><span class="p">);</span>
<span class="k">if</span><span class="p">(</span><span class="n">e</span> <span class="o">==</span> <span class="kc">nil</span><span class="p">)</span>
<span class="n">wc</span> <span class="o">&lt;-=</span> <span class="p">(</span><span class="k">len</span> <span class="n">d</span><span class="p">,</span> <span class="kc">nil</span><span class="p">);</span>
<span class="k">else</span>
<span class="n">wc</span> <span class="o">&lt;-=</span> <span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">e</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="n">ptrproc</span><span class="p">(</span><span class="n">rq</span><span class="o">:</span> <span class="kt">chan</span> <span class="kt">of</span> <span class="n">Sys</span><span class="o">-&gt;</span><span class="n">Rread</span><span class="p">,</span> <span class="n">ptr</span><span class="o">:</span> <span class="kt">chan</span> <span class="kt">of</span> <span class="kt">ref</span> <span class="n">Pointer</span><span class="p">,</span> <span class="n">reshape</span><span class="o">:</span> <span class="kt">chan</span> <span class="kt">of</span> <span class="kt">int</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">rl</span><span class="o">:</span> <span class="kt">list</span> <span class="kt">of</span> <span class="n">Sys</span><span class="o">-&gt;</span><span class="n">Rread</span><span class="p">;</span>
<span class="n">c</span> <span class="o">:=</span> <span class="kt">ref</span> <span class="n">Pointer</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="mi">0</span><span class="p">);</span>
<span class="n">for</span><span class="p">(;;){</span>
<span class="n">ch</span><span class="o">:</span> <span class="kt">int</span><span class="p">;</span>
<span class="k">alt</span><span class="p">{</span>
<span class="n">p</span> <span class="o">:=</span> <span class="o">&lt;-</span><span class="n">ptr</span> <span class="o">=&gt;</span>
<span class="n">ch</span> <span class="o">=</span> <span class="sc">&#39;m&#39;</span><span class="p">;</span>
<span class="n">c</span> <span class="o">=</span> <span class="n">p</span><span class="p">;</span>
<span class="o">&lt;-</span><span class="n">reshape</span> <span class="o">=&gt;</span>
<span class="n">ch</span> <span class="o">=</span> <span class="sc">&#39;r&#39;</span><span class="p">;</span>
<span class="n">rc</span> <span class="o">:=</span> <span class="o">&lt;-</span><span class="n">rq</span> <span class="o">=&gt;</span>
<span class="n">rl</span> <span class="o">=</span> <span class="n">rc</span> <span class="o">::</span> <span class="n">rl</span><span class="p">;</span>
<span class="k">continue</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">if</span><span class="p">(</span><span class="n">rl</span> <span class="o">==</span> <span class="kc">nil</span><span class="p">)</span>
<span class="n">rl</span> <span class="o">=</span> <span class="o">&lt;-</span><span class="n">rq</span> <span class="o">::</span> <span class="n">rl</span><span class="p">;</span>
<span class="k">hd</span> <span class="n">rl</span> <span class="o">&lt;-=</span> <span class="p">(</span><span class="n">sys</span><span class="o">-&gt;</span><span class="n">aprint</span><span class="p">(</span><span class="s">&quot;%c%11d %11d %11d %11d &quot;</span><span class="p">,</span> <span class="n">ch</span><span class="p">,</span> <span class="n">c</span><span class="p">.</span><span class="n">xy</span><span class="p">.</span><span class="n">x</span><span class="p">,</span> <span class="n">c</span><span class="p">.</span><span class="n">xy</span><span class="p">.</span><span class="n">y</span><span class="p">,</span> <span class="n">c</span><span class="p">.</span><span class="n">buttons</span><span class="p">,</span> <span class="n">c</span><span class="p">.</span><span class="n">msec</span><span class="p">),</span> <span class="kc">nil</span><span class="p">);</span>
<span class="n">rl</span> <span class="o">=</span> <span class="k">tl</span> <span class="n">rl</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="n">cursorset</span><span class="p">(</span><span class="n">w</span><span class="o">:</span> <span class="kt">ref</span> <span class="n">Window</span><span class="p">,</span> <span class="n">m</span><span class="o">:</span> <span class="kt">string</span><span class="p">)</span><span class="o">:</span> <span class="kt">string</span>
<span class="p">{</span>
<span class="k">if</span><span class="p">(</span><span class="n">m</span> <span class="o">==</span> <span class="kc">nil</span> <span class="o">||</span> <span class="n">m</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="sc">&#39;m&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="s">&quot;invalid mouse message&quot;</span><span class="p">;</span>
<span class="n">x</span> <span class="o">:=</span> <span class="kt">int</span> <span class="n">m</span><span class="p">[</span><span class="mi">1</span><span class="o">:</span><span class="p">];</span>
<span class="n">for</span><span class="p">(</span><span class="n">i</span> <span class="o">:=</span> <span class="mi">1</span><span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="k">len</span> <span class="n">m</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span>
<span class="k">if</span><span class="p">(</span><span class="n">m</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="sc">&#39; &#39;</span><span class="p">){</span>
<span class="k">while</span><span class="p">(</span><span class="n">m</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="sc">&#39; &#39;</span><span class="p">)</span>
<span class="n">i</span><span class="o">++</span><span class="p">;</span>
<span class="k">break</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">if</span><span class="p">(</span><span class="n">i</span> <span class="o">==</span> <span class="k">len</span> <span class="n">m</span><span class="p">)</span>
<span class="k">return</span> <span class="s">&quot;invalid mouse message&quot;</span><span class="p">;</span>
<span class="n">y</span> <span class="o">:=</span> <span class="kt">int</span> <span class="n">m</span><span class="p">[</span><span class="n">i</span><span class="o">:</span><span class="p">];</span>
<span class="k">return</span> <span class="n">w</span><span class="p">.</span><span class="n">wmctl</span><span class="p">(</span><span class="n">sys</span><span class="o">-&gt;</span><span class="n">sprint</span><span class="p">(</span><span class="s">&quot;ptr %d %d&quot;</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">));</span>
<span class="p">}</span>
<span class="n">cursorswitch</span><span class="p">(</span><span class="n">w</span><span class="o">:</span> <span class="kt">ref</span> <span class="n">Window</span><span class="p">,</span> <span class="n">d</span><span class="o">:</span> <span class="kt">array</span> <span class="kt">of</span> <span class="kt">byte</span><span class="p">)</span><span class="o">:</span> <span class="kt">string</span>
<span class="p">{</span>
<span class="n">Hex</span><span class="o">:</span> <span class="kc">con</span> <span class="s">&quot;0123456789abcdef&quot;</span><span class="p">;</span>
<span class="k">if</span><span class="p">(</span><span class="k">len</span> <span class="n">d</span> <span class="o">!=</span> <span class="mi">2</span><span class="o">*</span><span class="mi">4</span><span class="o">+</span><span class="mi">64</span><span class="p">)</span>
<span class="k">return</span> <span class="n">w</span><span class="p">.</span><span class="n">wmctl</span><span class="p">(</span><span class="s">&quot;cursor&quot;</span><span class="p">);</span>
<span class="n">hot</span> <span class="o">:=</span> <span class="n">Draw</span><span class="o">-&gt;</span><span class="n">Point</span><span class="p">(</span><span class="n">bglong</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="mi">0</span><span class="o">*</span><span class="mi">4</span><span class="p">),</span> <span class="n">bglong</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="mi">1</span><span class="o">*</span><span class="mi">4</span><span class="p">));</span>
<span class="n">s</span> <span class="o">:=</span> <span class="n">sys</span><span class="o">-&gt;</span><span class="n">sprint</span><span class="p">(</span><span class="s">&quot;cursor %d %d 16 32 &quot;</span><span class="p">,</span> <span class="n">hot</span><span class="p">.</span><span class="n">x</span><span class="p">,</span> <span class="n">hot</span><span class="p">.</span><span class="n">y</span><span class="p">);</span>
<span class="n">for</span><span class="p">(</span><span class="n">i</span> <span class="o">:=</span> <span class="mi">2</span><span class="o">*</span><span class="mi">4</span><span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="k">len</span> <span class="n">d</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">){</span>
<span class="n">c</span> <span class="o">:=</span> <span class="kt">int</span> <span class="n">d</span><span class="p">[</span><span class="n">i</span><span class="p">];</span>
<span class="n">s</span><span class="p">[</span><span class="k">len</span> <span class="n">s</span><span class="p">]</span> <span class="o">=</span> <span class="n">Hex</span><span class="p">[</span><span class="n">c</span> <span class="o">&gt;&gt;</span> <span class="mi">4</span><span class="p">];</span>
<span class="n">s</span><span class="p">[</span><span class="k">len</span> <span class="n">s</span><span class="p">]</span> <span class="o">=</span> <span class="n">Hex</span><span class="p">[</span><span class="n">c</span> <span class="o">&amp;</span> <span class="mh">16rf</span><span class="p">];</span>
<span class="p">}</span>
<span class="k">return</span> <span class="n">w</span><span class="p">.</span><span class="n">wmctl</span><span class="p">(</span><span class="n">s</span><span class="p">);</span>
<span class="p">}</span>
<span class="n">run</span><span class="p">(</span><span class="n">sync</span><span class="p">,</span> <span class="n">ctl</span><span class="o">:</span> <span class="kt">chan</span> <span class="kt">of</span> <span class="kt">string</span><span class="p">,</span> <span class="n">ld</span><span class="o">:</span> <span class="kt">string</span><span class="p">,</span> <span class="n">argv</span><span class="o">:</span> <span class="kt">list</span> <span class="kt">of</span> <span class="kt">string</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">Rcmeta</span><span class="o">:</span> <span class="kc">con</span> <span class="s">&quot;|&lt;&gt;&amp;^*[]?();&quot;</span><span class="p">;</span>
<span class="n">sys</span><span class="o">-&gt;</span><span class="n">pctl</span><span class="p">(</span><span class="n">Sys</span><span class="o">-&gt;</span><span class="n">FORKNS</span><span class="p">,</span> <span class="kc">nil</span><span class="p">);</span>
<span class="k">if</span><span class="p">(</span><span class="n">sys</span><span class="o">-&gt;</span><span class="n">bind</span><span class="p">(</span><span class="s">&quot;#₪&quot;</span><span class="p">,</span> <span class="s">&quot;/srv&quot;</span><span class="p">,</span> <span class="n">Sys</span><span class="o">-&gt;</span><span class="n">MCREATE</span><span class="p">)</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">){</span>
<span class="n">sync</span> <span class="o">&lt;-=</span> <span class="n">sys</span><span class="o">-&gt;</span><span class="n">sprint</span><span class="p">(</span><span class="s">&quot;cannot bind srv device: %r&quot;</span><span class="p">);</span>
<span class="n">exit</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">srvname</span> <span class="o">:=</span> <span class="s">&quot;/srv/9win.&quot;</span><span class="o">+</span><span class="kt">string</span> <span class="n">sys</span><span class="o">-&gt;</span><span class="n">pctl</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="kc">nil</span><span class="p">);</span> <span class="c1"># XXX do better.</span>
<span class="n">fd</span> <span class="o">:=</span> <span class="n">sys</span><span class="o">-&gt;</span><span class="n">create</span><span class="p">(</span><span class="n">srvname</span><span class="p">,</span> <span class="n">Sys</span><span class="o">-&gt;</span><span class="n">ORDWR</span><span class="p">,</span> <span class="mo">8r600</span><span class="p">);</span>
<span class="k">if</span><span class="p">(</span><span class="n">fd</span> <span class="o">==</span> <span class="kc">nil</span><span class="p">){</span>
<span class="n">sync</span> <span class="o">&lt;-=</span> <span class="n">sys</span><span class="o">-&gt;</span><span class="n">sprint</span><span class="p">(</span><span class="s">&quot;cannot create %s: %r&quot;</span><span class="p">,</span> <span class="n">srvname</span><span class="p">);</span>
<span class="n">exit</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">sync</span> <span class="o">&lt;-=</span> <span class="kc">nil</span><span class="p">;</span>
<span class="k">spawn</span> <span class="n">export</span><span class="p">(</span><span class="n">fd</span><span class="p">,</span> <span class="n">ctl</span><span class="p">);</span>
<span class="n">sh</span><span class="o">-&gt;</span><span class="n">run</span><span class="p">(</span><span class="kc">nil</span><span class="p">,</span> <span class="s">&quot;os&quot;</span> <span class="o">::</span>
<span class="s">&quot;rc&quot;</span> <span class="o">::</span> <span class="s">&quot;-c&quot;</span> <span class="o">::</span>
<span class="s">&quot;mount &quot;</span><span class="o">+</span><span class="n">srvname</span><span class="o">+</span><span class="s">&quot; /mnt/term;&quot;</span><span class="o">+</span>
<span class="s">&quot;rm &quot;</span><span class="o">+</span><span class="n">srvname</span><span class="o">+</span><span class="s">&quot;;&quot;</span><span class="o">+</span>
<span class="s">&quot;bind -b /mnt/term&quot;</span><span class="o">+</span><span class="n">ld</span><span class="o">+</span><span class="s">&quot; /dev;&quot;</span><span class="o">+</span>
<span class="s">&quot;bind /mnt/term/dev/draw /dev/draw ||&quot;</span><span class="o">+</span>
<span class="s">&quot;bind -a /mnt/term/dev /dev;&quot;</span><span class="o">+</span>
<span class="n">quotedc</span><span class="p">(</span><span class="s">&quot;cd&quot;</span><span class="o">::</span><span class="s">&quot;/mnt/term&quot;</span><span class="o">+</span><span class="n">cwd</span><span class="p">()</span><span class="o">::</span><span class="kc">nil</span><span class="p">,</span> <span class="n">Rcmeta</span><span class="p">)</span><span class="o">+</span><span class="s">&quot;;&quot;</span><span class="o">+</span>
<span class="n">quotedc</span><span class="p">(</span><span class="n">argv</span><span class="p">,</span> <span class="n">Rcmeta</span><span class="p">)</span><span class="o">+</span><span class="s">&quot;;&quot;</span><span class="o">::</span>
<span class="kc">nil</span>
<span class="p">);</span>
<span class="p">}</span>
<span class="n">export</span><span class="p">(</span><span class="n">fd</span><span class="o">:</span> <span class="kt">ref</span> <span class="n">Sys</span><span class="o">-&gt;</span><span class="n">FD</span><span class="p">,</span> <span class="n">ctl</span><span class="o">:</span> <span class="kt">chan</span> <span class="kt">of</span> <span class="kt">string</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">sys</span><span class="o">-&gt;</span><span class="n">export</span><span class="p">(</span><span class="n">fd</span><span class="p">,</span> <span class="s">&quot;/&quot;</span><span class="p">,</span> <span class="n">Sys</span><span class="o">-&gt;</span><span class="n">EXPWAIT</span><span class="p">);</span>
<span class="n">ctl</span> <span class="o">&lt;-=</span> <span class="s">&quot;exit&quot;</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">inf2p9key</span><span class="p">(</span><span class="n">c</span><span class="o">:</span> <span class="kt">int</span><span class="p">)</span><span class="o">:</span> <span class="kt">int</span>
<span class="p">{</span>
<span class="n">KF</span><span class="o">:</span> <span class="k">import</span> <span class="n">Keyboard</span><span class="p">;</span>
<span class="n">P9KF</span><span class="o">:</span> <span class="kc">con</span> <span class="mh">16rF000</span><span class="p">;</span>
<span class="n">Spec</span><span class="o">:</span> <span class="kc">con</span> <span class="mh">16rF800</span><span class="p">;</span>
<span class="n">Khome</span><span class="o">:</span> <span class="kc">con</span> <span class="n">P9KF</span><span class="o">|</span><span class="mh">16r0D</span><span class="p">;</span>
<span class="n">Kup</span><span class="o">:</span> <span class="kc">con</span> <span class="n">P9KF</span><span class="o">|</span><span class="mh">16r0E</span><span class="p">;</span>
<span class="n">Kpgup</span><span class="o">:</span> <span class="kc">con</span> <span class="n">P9KF</span><span class="o">|</span><span class="mh">16r0F</span><span class="p">;</span>
<span class="n">Kprint</span><span class="o">:</span> <span class="kc">con</span> <span class="n">P9KF</span><span class="o">|</span><span class="mh">16r10</span><span class="p">;</span>
<span class="n">Kleft</span><span class="o">:</span> <span class="kc">con</span> <span class="n">P9KF</span><span class="o">|</span><span class="mh">16r11</span><span class="p">;</span>
<span class="n">Kright</span><span class="o">:</span> <span class="kc">con</span> <span class="n">P9KF</span><span class="o">|</span><span class="mh">16r12</span><span class="p">;</span>
<span class="n">Kdown</span><span class="o">:</span> <span class="kc">con</span> <span class="n">Spec</span><span class="o">|</span><span class="mh">16r00</span><span class="p">;</span>
<span class="n">Kview</span><span class="o">:</span> <span class="kc">con</span> <span class="n">Spec</span><span class="o">|</span><span class="mh">16r00</span><span class="p">;</span>
<span class="n">Kpgdown</span><span class="o">:</span> <span class="kc">con</span> <span class="n">P9KF</span><span class="o">|</span><span class="mh">16r13</span><span class="p">;</span>
<span class="n">Kins</span><span class="o">:</span> <span class="kc">con</span> <span class="n">P9KF</span><span class="o">|</span><span class="mh">16r14</span><span class="p">;</span>
<span class="n">Kend</span><span class="o">:</span> <span class="kc">con</span> <span class="n">P9KF</span><span class="o">|</span><span class="mh">16r18</span><span class="p">;</span>
<span class="n">Kalt</span><span class="o">:</span> <span class="kc">con</span> <span class="n">P9KF</span><span class="o">|</span><span class="mh">16r15</span><span class="p">;</span>
<span class="n">Kshift</span><span class="o">:</span> <span class="kc">con</span> <span class="n">P9KF</span><span class="o">|</span><span class="mh">16r16</span><span class="p">;</span>
<span class="n">Kctl</span><span class="o">:</span> <span class="kc">con</span> <span class="n">P9KF</span><span class="o">|</span><span class="mh">16r17</span><span class="p">;</span>
<span class="k">case</span> <span class="n">c</span> <span class="p">{</span>
<span class="n">Keyboard</span><span class="o">-&gt;</span><span class="n">LShift</span> <span class="o">=&gt;</span>
<span class="k">return</span> <span class="n">Kshift</span><span class="p">;</span>
<span class="n">Keyboard</span><span class="o">-&gt;</span><span class="n">LCtrl</span> <span class="o">=&gt;</span>
<span class="k">return</span> <span class="n">Kctl</span><span class="p">;</span>
<span class="n">Keyboard</span><span class="o">-&gt;</span><span class="n">LAlt</span> <span class="o">=&gt;</span>
<span class="k">return</span> <span class="n">Kalt</span><span class="p">;</span>
<span class="n">Keyboard</span><span class="o">-&gt;</span><span class="n">Home</span> <span class="o">=&gt;</span>
<span class="k">return</span> <span class="n">Khome</span><span class="p">;</span>
<span class="n">Keyboard</span><span class="o">-&gt;</span><span class="n">End</span> <span class="o">=&gt;</span>
<span class="k">return</span> <span class="n">Kend</span><span class="p">;</span>
<span class="n">Keyboard</span><span class="o">-&gt;</span><span class="n">Up</span> <span class="o">=&gt;</span>
<span class="k">return</span> <span class="n">Kup</span><span class="p">;</span>
<span class="n">Keyboard</span><span class="o">-&gt;</span><span class="n">Down</span> <span class="o">=&gt;</span>
<span class="k">return</span> <span class="n">Kdown</span><span class="p">;</span>
<span class="n">Keyboard</span><span class="o">-&gt;</span><span class="n">Left</span> <span class="o">=&gt;</span>
<span class="k">return</span> <span class="n">Kleft</span><span class="p">;</span>
<span class="n">Keyboard</span><span class="o">-&gt;</span><span class="n">Right</span> <span class="o">=&gt;</span>
<span class="k">return</span> <span class="n">Kright</span><span class="p">;</span>
<span class="n">Keyboard</span><span class="o">-&gt;</span><span class="n">Pgup</span> <span class="o">=&gt;</span>
<span class="k">return</span> <span class="n">Kpgup</span><span class="p">;</span>
<span class="n">Keyboard</span><span class="o">-&gt;</span><span class="n">Pgdown</span> <span class="o">=&gt;</span>
<span class="k">return</span> <span class="n">Kpgdown</span><span class="p">;</span>
<span class="n">Keyboard</span><span class="o">-&gt;</span><span class="n">Ins</span> <span class="o">=&gt;</span>
<span class="k">return</span> <span class="n">Kins</span><span class="p">;</span>
<span class="c1"># function keys</span>
<span class="n">KF</span><span class="o">|</span><span class="mi">1</span> <span class="n">or</span>
<span class="n">KF</span><span class="o">|</span><span class="mi">2</span> <span class="n">or</span>
<span class="n">KF</span><span class="o">|</span><span class="mi">3</span> <span class="n">or</span>
<span class="n">KF</span><span class="o">|</span><span class="mi">4</span> <span class="n">or</span>
<span class="n">KF</span><span class="o">|</span><span class="mi">5</span> <span class="n">or</span>
<span class="n">KF</span><span class="o">|</span><span class="mi">6</span> <span class="n">or</span>
<span class="n">KF</span><span class="o">|</span><span class="mi">7</span> <span class="n">or</span>
<span class="n">KF</span><span class="o">|</span><span class="mi">8</span> <span class="n">or</span>
<span class="n">KF</span><span class="o">|</span><span class="mi">9</span> <span class="n">or</span>
<span class="n">KF</span><span class="o">|</span><span class="mi">10</span> <span class="n">or</span>
<span class="n">KF</span><span class="o">|</span><span class="mi">11</span> <span class="n">or</span>
<span class="n">KF</span><span class="o">|</span><span class="mi">12</span> <span class="o">=&gt;</span>
<span class="k">return</span> <span class="p">(</span><span class="n">c</span> <span class="o">-</span> <span class="n">KF</span><span class="p">)</span> <span class="o">+</span> <span class="n">P9KF</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">return</span> <span class="n">c</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">cwd</span><span class="p">()</span><span class="o">:</span> <span class="kt">string</span>
<span class="p">{</span>
<span class="k">return</span> <span class="n">sys</span><span class="o">-&gt;</span><span class="n">fd2path</span><span class="p">(</span><span class="n">sys</span><span class="o">-&gt;</span><span class="n">open</span><span class="p">(</span><span class="s">&quot;.&quot;</span><span class="p">,</span> <span class="n">Sys</span><span class="o">-&gt;</span><span class="n">OREAD</span><span class="p">));</span>
<span class="p">}</span>
<span class="c1"># from string.b, waiting for declaration to be uncommented.</span>
<span class="n">quotedc</span><span class="p">(</span><span class="n">argv</span><span class="o">:</span> <span class="kt">list</span> <span class="kt">of</span> <span class="kt">string</span><span class="p">,</span> <span class="n">cl</span><span class="o">:</span> <span class="kt">string</span><span class="p">)</span><span class="o">:</span> <span class="kt">string</span>
<span class="p">{</span>
<span class="n">s</span> <span class="o">:=</span> <span class="s">&quot;&quot;</span><span class="p">;</span>
<span class="k">while</span> <span class="p">(</span><span class="n">argv</span> <span class="o">!=</span> <span class="kc">nil</span><span class="p">)</span> <span class="p">{</span>
<span class="n">arg</span> <span class="o">:=</span> <span class="k">hd</span> <span class="n">argv</span><span class="p">;</span>
<span class="n">for</span> <span class="p">(</span><span class="n">i</span> <span class="o">:=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="k">len</span> <span class="n">arg</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
<span class="n">c</span> <span class="o">:=</span> <span class="n">arg</span><span class="p">[</span><span class="n">i</span><span class="p">];</span>
<span class="k">if</span> <span class="p">(</span><span class="n">c</span> <span class="o">==</span> <span class="sc">&#39; &#39;</span> <span class="o">||</span> <span class="n">c</span> <span class="o">==</span> <span class="sc">&#39;\t&#39;</span> <span class="o">||</span> <span class="n">c</span> <span class="o">==</span> <span class="sc">&#39;\n&#39;</span> <span class="o">||</span> <span class="n">c</span> <span class="o">==</span> <span class="sc">&#39;\&#39;&#39;</span> <span class="o">||</span> <span class="n">in</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">cl</span><span class="p">))</span>
<span class="k">break</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">if</span> <span class="p">(</span><span class="n">i</span> <span class="o">&lt;</span> <span class="k">len</span> <span class="n">arg</span> <span class="o">||</span> <span class="n">arg</span> <span class="o">==</span> <span class="kc">nil</span><span class="p">)</span> <span class="p">{</span>
<span class="n">s</span> <span class="o">+=</span> <span class="s">&quot;&#39;&quot;</span> <span class="o">+</span> <span class="n">arg</span><span class="p">[</span><span class="mi">0</span><span class="o">:</span><span class="n">i</span><span class="p">];</span>
<span class="n">for</span> <span class="p">(;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="k">len</span> <span class="n">arg</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="n">arg</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="sc">&#39;\&#39;&#39;</span><span class="p">)</span>
<span class="n">s</span><span class="p">[</span><span class="k">len</span> <span class="n">s</span><span class="p">]</span> <span class="o">=</span> <span class="sc">&#39;\&#39;&#39;</span><span class="p">;</span>
<span class="n">s</span><span class="p">[</span><span class="k">len</span> <span class="n">s</span><span class="p">]</span> <span class="o">=</span> <span class="n">arg</span><span class="p">[</span><span class="n">i</span><span class="p">];</span>
<span class="p">}</span>
<span class="n">s</span><span class="p">[</span><span class="k">len</span> <span class="n">s</span><span class="p">]</span> <span class="o">=</span> <span class="sc">&#39;\&#39;&#39;</span><span class="p">;</span>
<span class="p">}</span> <span class="k">else</span>
<span class="n">s</span> <span class="o">+=</span> <span class="n">arg</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span><span class="k">tl</span> <span class="n">argv</span> <span class="o">!=</span> <span class="kc">nil</span><span class="p">)</span>
<span class="n">s</span><span class="p">[</span><span class="k">len</span> <span class="n">s</span><span class="p">]</span> <span class="o">=</span> <span class="sc">&#39; &#39;</span><span class="p">;</span>
<span class="n">argv</span> <span class="o">=</span> <span class="k">tl</span> <span class="n">argv</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">return</span> <span class="n">s</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">in</span><span class="p">(</span><span class="n">c</span><span class="o">:</span> <span class="kt">int</span><span class="p">,</span> <span class="n">s</span><span class="o">:</span> <span class="kt">string</span><span class="p">)</span><span class="o">:</span> <span class="kt">int</span>
<span class="p">{</span>
<span class="n">n</span> <span class="o">:=</span> <span class="k">len</span> <span class="n">s</span><span class="p">;</span>
<span class="k">if</span><span class="p">(</span><span class="n">n</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="n">ans</span> <span class="o">:=</span> <span class="mi">0</span><span class="p">;</span>
<span class="n">negate</span> <span class="o">:=</span> <span class="mi">0</span><span class="p">;</span>
<span class="k">if</span><span class="p">(</span><span class="n">s</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="sc">&#39;^&#39;</span><span class="p">)</span> <span class="p">{</span>
<span class="n">negate</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
<span class="n">s</span> <span class="o">=</span> <span class="n">s</span><span class="p">[</span><span class="mi">1</span><span class="o">:</span><span class="p">];</span>
<span class="n">n</span><span class="o">--</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">for</span><span class="p">(</span><span class="n">i</span> <span class="o">:=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">n</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span><span class="p">(</span><span class="n">s</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="sc">&#39;-&#39;</span> <span class="o">&amp;&amp;</span> <span class="n">i</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="o">&amp;&amp;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">n</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span><span class="p">(</span><span class="n">c</span> <span class="o">&gt;=</span> <span class="n">s</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">&amp;&amp;</span> <span class="n">c</span> <span class="o">&lt;=</span> <span class="n">s</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">])</span> <span class="p">{</span>
<span class="n">ans</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
<span class="k">break</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">i</span><span class="o">++</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">else</span>
<span class="k">if</span><span class="p">(</span><span class="n">c</span> <span class="o">==</span> <span class="n">s</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="p">{</span>
<span class="n">ans</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
<span class="k">break</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="k">if</span><span class="p">(</span><span class="n">negate</span><span class="p">)</span>
<span class="n">ans</span> <span class="o">=</span> <span class="o">!</span><span class="n">ans</span><span class="p">;</span>
<span class="c1"># just to showcase labels</span>
<span class="nl">skip:</span>
<span class="k">return</span> <span class="n">ans</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">bglong</span><span class="p">(</span><span class="n">d</span><span class="o">:</span> <span class="kt">array</span> <span class="kt">of</span> <span class="kt">byte</span><span class="p">,</span> <span class="n">i</span><span class="o">:</span> <span class="kt">int</span><span class="p">)</span><span class="o">:</span> <span class="kt">int</span>
<span class="p">{</span>
<span class="k">return</span> <span class="kt">int</span> <span class="n">d</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">|</span> <span class="p">(</span><span class="kt">int</span> <span class="n">d</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">&lt;&lt;</span><span class="mi">8</span><span class="p">)</span> <span class="o">|</span> <span class="p">(</span><span class="kt">int</span> <span class="n">d</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">2</span><span class="p">]</span><span class="o">&lt;&lt;</span><span class="mi">16</span><span class="p">)</span> <span class="o">|</span> <span class="p">(</span><span class="kt">int</span> <span class="n">d</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">3</span><span class="p">]</span><span class="o">&lt;&lt;</span><span class="mi">24</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment