Created
March 3, 2014 17:27
-
-
Save kabbi/9330017 to your computer and use it in GitHub Desktop.
limbo pygments showcase
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!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">"sys.m"</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">"draw.m"</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">"arg.m"</span><span class="p">;</span> | |
<span class="k">include</span> <span class="s">"keyboard.m"</span><span class="p">;</span> | |
<span class="k">include</span> <span class="s">"tk.m"</span><span class="p">;</span> | |
<span class="k">include</span> <span class="s">"wmclient.m"</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">"sh.m"</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">-></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">-></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">-></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">-></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">-></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">-></span><span class="n">PATH</span><span class="p">;</span> | |
<span class="n">wmclient</span><span class="o">-></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">-></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">-></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">-></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">-></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">-></span><span class="n">PATH</span><span class="p">;</span> | |
<span class="n">arg</span><span class="o">-></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">-></span><span class="n">setusage</span><span class="p">(</span><span class="s">"9win [-s] [-x width] [-y height]"</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">-></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">'s'</span> <span class="o">=></span> | |
<span class="n">exportonly</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> | |
<span class="sc">'x'</span> <span class="o">=></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">-></span><span class="n">earg</span><span class="p">();</span> | |
<span class="sc">'y'</span> <span class="o">=></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">-></span><span class="n">earg</span><span class="p">();</span> | |
<span class="o">*</span> <span class="o">=></span> | |
<span class="n">arg</span><span class="o">-></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"><</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"><</span> <span class="mi">1</span><span class="p">)</span> | |
<span class="n">arg</span><span class="o">-></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">-></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">&&</span> <span class="k">hd</span> <span class="n">argv</span> <span class="o">==</span> <span class="s">"-s"</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">&&</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">"rio"</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">&&</span> <span class="n">exportonly</span><span class="p">){</span> | |
<span class="n">sys</span><span class="o">-></span><span class="n">fprint</span><span class="p">(</span><span class="n">sys</span><span class="o">-></span><span class="n">fildes</span><span class="p">(</span><span class="mi">2</span><span class="p">),</span> <span class="s">"9win: no command allowed with -s flag</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span> | |
<span class="n">raise</span> <span class="s">"fail:usage"</span><span class="p">;</span> | |
<span class="p">}</span> | |
<span class="n">title</span> <span class="o">:=</span> <span class="s">"9win"</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">" "</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">-></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">-></span><span class="n">fprint</span><span class="p">(</span><span class="n">sys</span><span class="o">-></span><span class="n">fildes</span><span class="p">(</span><span class="mi">2</span><span class="p">),</span> <span class="s">"9win: cannot get image to draw on</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span> | |
<span class="n">raise</span> <span class="s">"fail:no window"</span><span class="p">;</span> | |
<span class="p">}</span> | |
<span class="n">sys</span><span class="o">-></span><span class="n">pctl</span><span class="p">(</span><span class="n">Sys</span><span class="o">-></span><span class="n">FORKNS</span><span class="o">|</span><span class="n">Sys</span><span class="o">-></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">"/n/9win"</span><span class="p">;</span> | |
<span class="k">if</span><span class="p">(</span><span class="n">sys</span><span class="o">-></span><span class="n">bind</span><span class="p">(</span><span class="s">"#s"</span><span class="p">,</span> <span class="n">ld</span><span class="p">,</span> <span class="n">Sys</span><span class="o">-></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">&&</span> | |
<span class="n">sys</span><span class="o">-></span><span class="n">bind</span><span class="p">(</span><span class="s">"#s"</span><span class="p">,</span> <span class="n">ld</span> <span class="o">=</span> <span class="s">"/n/local"</span><span class="p">,</span> <span class="n">Sys</span><span class="o">-></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">-></span><span class="n">fprint</span><span class="p">(</span><span class="n">sys</span><span class="o">-></span><span class="n">fildes</span><span class="p">(</span><span class="mi">2</span><span class="p">),</span> <span class="s">"9win: cannot bind files: %r</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span> | |
<span class="n">raise</span> <span class="s">"fail:error"</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">"kbd"</span> <span class="o">::</span> <span class="s">"ptr"</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">-></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">-></span><span class="n">file2chan</span><span class="p">(</span><span class="n">ld</span><span class="p">,</span> <span class="s">"winname"</span><span class="p">);</span> | |
<span class="n">fconsctl</span> <span class="o">:=</span> <span class="n">sys</span><span class="o">-></span><span class="n">file2chan</span><span class="p">(</span><span class="n">ld</span><span class="p">,</span> <span class="s">"consctl"</span><span class="p">);</span> | |
<span class="n">fcons</span> <span class="o">:=</span> <span class="n">sys</span><span class="o">-></span><span class="n">file2chan</span><span class="p">(</span><span class="n">ld</span><span class="p">,</span> <span class="s">"cons"</span><span class="p">);</span> | |
<span class="n">fmouse</span> <span class="o">:=</span> <span class="n">sys</span><span class="o">-></span><span class="n">file2chan</span><span class="p">(</span><span class="n">ld</span><span class="p">,</span> <span class="s">"mouse"</span><span class="p">);</span> | |
<span class="n">fcursor</span> <span class="o">:=</span> <span class="n">sys</span><span class="o">-></span><span class="n">file2chan</span><span class="p">(</span><span class="n">ld</span><span class="p">,</span> <span class="s">"cursor"</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"><-</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">-></span><span class="n">fprint</span><span class="p">(</span><span class="n">sys</span><span class="o">-></span><span class="n">fildes</span><span class="p">(</span><span class="mi">2</span><span class="p">),</span> <span class="s">"9win: %s"</span><span class="p">,</span> <span class="n">e</span><span class="p">);</span> | |
<span class="n">raise</span> <span class="s">"fail:error"</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't get a "killed" 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">-></span><span class="n">bind</span><span class="p">(</span><span class="n">ld</span><span class="p">,</span> <span class="s">"/dev"</span><span class="p">,</span> <span class="n">Sys</span><span class="o">-></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">-></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"><-</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"><-</span><span class="n">w</span><span class="p">.</span><span class="n">ctl</span> <span class="o">=></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">-></span><span class="n">fprint</span><span class="p">(</span><span class="n">sys</span><span class="o">-></span><span class="n">fildes</span><span class="p">(</span><span class="mi">2</span><span class="p">),</span> <span class="s">"9win: ctl error: %s</span><span class="se">\n</span><span class="s">"</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">&&</span> <span class="n">c</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="o">&&</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">'!'</span><span class="p">){</span> | |
<span class="k">alt</span><span class="p">{</span> | |
<span class="n">reshape</span> <span class="o"><-=</span> <span class="mi">1</span> <span class="o">=></span> | |
<span class="p">;</span> | |
<span class="o">*</span> <span class="o">=></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"><-</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">=></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'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"><-=</span> <span class="n">p</span> <span class="o">=></span> | |
<span class="p">;</span> | |
<span class="o">*</span> <span class="o">=></span> | |
<span class="p">;</span> <span class="c1"># sys->fprint(sys->fildes(2), "9win: discarding mouse event\n");</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">-></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">-></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">-></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"><-</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">=></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"><-=</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"><-</span><span class="n">fcons</span><span class="p">.</span><span class="n">write</span> <span class="o">=></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">-></span><span class="n">write</span><span class="p">(</span><span class="n">sys</span><span class="o">-></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"><-=</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"><-</span><span class="n">fcons</span><span class="p">.</span><span class="n">read</span> <span class="o">=></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"><-=</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"><-</span><span class="n">fwinname</span><span class="p">.</span><span class="n">read</span> <span class="o">=></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">-></span><span class="n">sprint</span><span class="p">(</span><span class="s">"noborder.9win.%d"</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">-></span><span class="n">fprint</span><span class="p">(</span><span class="n">sys</span><span class="o">-></span><span class="n">fildes</span><span class="p">(</span><span class="mi">2</span><span class="p">),</span> <span class="s">"9win: namewin %q failed: %r"</span><span class="p">,</span> <span class="n">winname</span><span class="p">);</span> | |
<span class="n">rc</span> <span class="o"><-=</span> <span class="p">(</span><span class="kc">nil</span><span class="p">,</span> <span class="s">"namewin failure"</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"><</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"><-=</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"><-</span><span class="n">fwinname</span><span class="p">.</span><span class="n">write</span> <span class="o">=></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"><-=</span> <span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="s">"permission denied"</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"><-</span><span class="n">fconsctl</span><span class="p">.</span><span class="n">read</span> <span class="o">=></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"><-=</span> <span class="p">(</span><span class="kc">nil</span><span class="p">,</span> <span class="s">"permission denied"</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"><-</span><span class="n">fconsctl</span><span class="p">.</span><span class="n">write</span> <span class="o">=></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">"rawon"</span><span class="p">)</span> | |
<span class="n">wc</span> <span class="o"><-=</span> <span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="s">"cannot change console mode"</span><span class="p">);</span> | |
<span class="k">else</span> | |
<span class="n">wc</span> <span class="o"><-=</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"><-</span><span class="n">fmouse</span><span class="p">.</span><span class="n">read</span> <span class="o">=></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"><-=</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"><-</span><span class="n">fmouse</span><span class="p">.</span><span class="n">write</span> <span class="o">=></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"><-=</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"><-=</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"><-</span><span class="n">fcursor</span><span class="p">.</span><span class="n">read</span> <span class="o">=></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"><-=</span> <span class="p">(</span><span class="kc">nil</span><span class="p">,</span> <span class="s">"permission denied"</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"><-</span><span class="n">fcursor</span><span class="p">.</span><span class="n">write</span> <span class="o">=></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"><-=</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"><-=</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">-></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">-></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"><-</span><span class="n">ptr</span> <span class="o">=></span> | |
<span class="n">ch</span> <span class="o">=</span> <span class="sc">'m'</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"><-</span><span class="n">reshape</span> <span class="o">=></span> | |
<span class="n">ch</span> <span class="o">=</span> <span class="sc">'r'</span><span class="p">;</span> | |
<span class="n">rc</span> <span class="o">:=</span> <span class="o"><-</span><span class="n">rq</span> <span class="o">=></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"><-</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"><-=</span> <span class="p">(</span><span class="n">sys</span><span class="o">-></span><span class="n">aprint</span><span class="p">(</span><span class="s">"%c%11d %11d %11d %11d "</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">'m'</span><span class="p">)</span> | |
<span class="k">return</span> <span class="s">"invalid mouse message"</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"><</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">' '</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">' '</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">"invalid mouse message"</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">-></span><span class="n">sprint</span><span class="p">(</span><span class="s">"ptr %d %d"</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">"0123456789abcdef"</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">"cursor"</span><span class="p">);</span> | |
<span class="n">hot</span> <span class="o">:=</span> <span class="n">Draw</span><span class="o">-></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">-></span><span class="n">sprint</span><span class="p">(</span><span class="s">"cursor %d %d 16 32 "</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"><</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">>></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">&</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">"|<>&^*[]?();"</span><span class="p">;</span> | |
<span class="n">sys</span><span class="o">-></span><span class="n">pctl</span><span class="p">(</span><span class="n">Sys</span><span class="o">-></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">-></span><span class="n">bind</span><span class="p">(</span><span class="s">"#₪"</span><span class="p">,</span> <span class="s">"/srv"</span><span class="p">,</span> <span class="n">Sys</span><span class="o">-></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"><-=</span> <span class="n">sys</span><span class="o">-></span><span class="n">sprint</span><span class="p">(</span><span class="s">"cannot bind srv device: %r"</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">"/srv/9win."</span><span class="o">+</span><span class="kt">string</span> <span class="n">sys</span><span class="o">-></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">-></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">-></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"><-=</span> <span class="n">sys</span><span class="o">-></span><span class="n">sprint</span><span class="p">(</span><span class="s">"cannot create %s: %r"</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"><-=</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">-></span><span class="n">run</span><span class="p">(</span><span class="kc">nil</span><span class="p">,</span> <span class="s">"os"</span> <span class="o">::</span> | |
<span class="s">"rc"</span> <span class="o">::</span> <span class="s">"-c"</span> <span class="o">::</span> | |
<span class="s">"mount "</span><span class="o">+</span><span class="n">srvname</span><span class="o">+</span><span class="s">" /mnt/term;"</span><span class="o">+</span> | |
<span class="s">"rm "</span><span class="o">+</span><span class="n">srvname</span><span class="o">+</span><span class="s">";"</span><span class="o">+</span> | |
<span class="s">"bind -b /mnt/term"</span><span class="o">+</span><span class="n">ld</span><span class="o">+</span><span class="s">" /dev;"</span><span class="o">+</span> | |
<span class="s">"bind /mnt/term/dev/draw /dev/draw ||"</span><span class="o">+</span> | |
<span class="s">"bind -a /mnt/term/dev /dev;"</span><span class="o">+</span> | |
<span class="n">quotedc</span><span class="p">(</span><span class="s">"cd"</span><span class="o">::</span><span class="s">"/mnt/term"</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">";"</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">";"</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">-></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">-></span><span class="n">export</span><span class="p">(</span><span class="n">fd</span><span class="p">,</span> <span class="s">"/"</span><span class="p">,</span> <span class="n">Sys</span><span class="o">-></span><span class="n">EXPWAIT</span><span class="p">);</span> | |
<span class="n">ctl</span> <span class="o"><-=</span> <span class="s">"exit"</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">-></span><span class="n">LShift</span> <span class="o">=></span> | |
<span class="k">return</span> <span class="n">Kshift</span><span class="p">;</span> | |
<span class="n">Keyboard</span><span class="o">-></span><span class="n">LCtrl</span> <span class="o">=></span> | |
<span class="k">return</span> <span class="n">Kctl</span><span class="p">;</span> | |
<span class="n">Keyboard</span><span class="o">-></span><span class="n">LAlt</span> <span class="o">=></span> | |
<span class="k">return</span> <span class="n">Kalt</span><span class="p">;</span> | |
<span class="n">Keyboard</span><span class="o">-></span><span class="n">Home</span> <span class="o">=></span> | |
<span class="k">return</span> <span class="n">Khome</span><span class="p">;</span> | |
<span class="n">Keyboard</span><span class="o">-></span><span class="n">End</span> <span class="o">=></span> | |
<span class="k">return</span> <span class="n">Kend</span><span class="p">;</span> | |
<span class="n">Keyboard</span><span class="o">-></span><span class="n">Up</span> <span class="o">=></span> | |
<span class="k">return</span> <span class="n">Kup</span><span class="p">;</span> | |
<span class="n">Keyboard</span><span class="o">-></span><span class="n">Down</span> <span class="o">=></span> | |
<span class="k">return</span> <span class="n">Kdown</span><span class="p">;</span> | |
<span class="n">Keyboard</span><span class="o">-></span><span class="n">Left</span> <span class="o">=></span> | |
<span class="k">return</span> <span class="n">Kleft</span><span class="p">;</span> | |
<span class="n">Keyboard</span><span class="o">-></span><span class="n">Right</span> <span class="o">=></span> | |
<span class="k">return</span> <span class="n">Kright</span><span class="p">;</span> | |
<span class="n">Keyboard</span><span class="o">-></span><span class="n">Pgup</span> <span class="o">=></span> | |
<span class="k">return</span> <span class="n">Kpgup</span><span class="p">;</span> | |
<span class="n">Keyboard</span><span class="o">-></span><span class="n">Pgdown</span> <span class="o">=></span> | |
<span class="k">return</span> <span class="n">Kpgdown</span><span class="p">;</span> | |
<span class="n">Keyboard</span><span class="o">-></span><span class="n">Ins</span> <span class="o">=></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">=></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">-></span><span class="n">fd2path</span><span class="p">(</span><span class="n">sys</span><span class="o">-></span><span class="n">open</span><span class="p">(</span><span class="s">"."</span><span class="p">,</span> <span class="n">Sys</span><span class="o">-></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">""</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"><</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">' '</span> <span class="o">||</span> <span class="n">c</span> <span class="o">==</span> <span class="sc">'\t'</span> <span class="o">||</span> <span class="n">c</span> <span class="o">==</span> <span class="sc">'\n'</span> <span class="o">||</span> <span class="n">c</span> <span class="o">==</span> <span class="sc">'\''</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"><</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">"'"</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"><</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">'\''</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">'\''</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">'\''</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">' '</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">'^'</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"><</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">'-'</span> <span class="o">&&</span> <span class="n">i</span> <span class="o">></span> <span class="mi">0</span> <span class="o">&&</span> <span class="n">i</span> <span class="o"><</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">>=</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">&&</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="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"><<</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"><<</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"><<</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