tmud-2.10.1/benchmark/
tmud-2.10.1/cmd/
tmud-2.10.1/cmd/objects/
tmud-2.10.1/cmd/tiny/
tmud-2.10.1/doc/classes/SQLite/
tmud-2.10.1/doc/classes/SQLite3/
tmud-2.10.1/doc/classes/TernaryTrie/
tmud-2.10.1/doc/files/cmd/objects/
tmud-2.10.1/doc/files/cmd/tiny/
tmud-2.10.1/doc/files/lib/
tmud-2.10.1/doc/files/lib/engine/
tmud-2.10.1/doc/files/lib/farts/
tmud-2.10.1/farts/
tmud-2.10.1/lib/
tmud-2.10.1/lib/core/
tmud-2.10.1/lib/engine/
tmud-2.10.1/lib/farts/
tmud-2.10.1/logs/
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html 
     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <title>Class: TerminalFilter</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  <meta http-equiv="Content-Script-Type" content="text/javascript" />
  <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
  <script type="text/javascript">
  // <![CDATA[

  function popupCode( url ) {
    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
  }

  function toggleCode( id ) {
    if ( document.getElementById )
      elem = document.getElementById( id );
    else if ( document.all )
      elem = eval( "document.all." + id );
    else
      return false;

    elemStyle = elem.style;
    
    if ( elemStyle.display != "block" ) {
      elemStyle.display = "block"
    } else {
      elemStyle.display = "none"
    }

    return true;
  }
  
  // Make codeblocks hidden by default
  document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
  
  // ]]>
  </script>

</head>
<body>



    <div id="classHeader">
        <table class="header-table">
        <tr class="top-aligned-row">
          <td><strong>Class</strong></td>
          <td class="class-name-in-header">TerminalFilter</td>
        </tr>
        <tr class="top-aligned-row">
            <td><strong>In:</strong></td>
            <td>
                <a href="../files/lib/network/protocol/terminalfilter_rb.html">
                lib/network/protocol/terminalfilter.rb
                </a>
        <br />
            </td>
        </tr>

        <tr class="top-aligned-row">
            <td><strong>Parent:</strong></td>
            <td>
                <a href="Filter.html">
                Filter
               </a>
            </td>
        </tr>
        </table>
    </div>
  <!-- banner header -->

  <div id="bodyContent">



  <div id="contextContent">
    <div id="diagram">
      <map id="map" name="map">
  <area shape="rect" coords="100,101,199,149"      href="TerminalFilter.html" alt="TerminalFilter
" />
  <area shape="rect" coords="5,5,83,53"      href="ASCIICodes.html" alt="ASCIICodes
" />
  <area shape="rect" coords="107,5,192,53"      href="VT100Codes.html" alt="VT100Codes
" />
  <area shape="rect" coords="216,5,288,53"      href="Filter.html" alt="Filter
" />
</map>
<img src="../dot/f_37.png" usemap="#map" border="0" alt="dot/f_37.png">
    </div>

    <div id="description">
      <p>
The <a href="TerminalFilter.html">TerminalFilter</a> class implements a
subset of ANSI/VT100 protocol.
</p>

    </div>


   </div>

    <div id="method-list">
      <h3 class="section-bar">Methods</h3>

      <div class="name-list">
      <a href="#M000284">echo</a>&nbsp;&nbsp;
      <a href="#M000285">execute</a>&nbsp;&nbsp;
      <a href="#M000282">filter_in</a>&nbsp;&nbsp;
      <a href="#M000283">filter_out</a>&nbsp;&nbsp;
      <a href="#M000281">init</a>&nbsp;&nbsp;
      <a href="#M000286">mode?</a>&nbsp;&nbsp;
      <a href="#M000280">new</a>&nbsp;&nbsp;
      <a href="#M000287">set_mode</a>&nbsp;&nbsp;
      </div>
    </div>

  </div>


    <!-- if includes -->
    <div id="includes">
      <h3 class="section-bar">Included Modules</h3>

      <div id="includes-list">
        <span class="include-name"><a href="ASCIICodes.html">ASCIICodes</a></span>
        <span class="include-name"><a href="VT100Codes.html">VT100Codes</a></span>
      </div>
    </div>

    <div id="section">





      


    <!-- if method_list -->
    <div id="methods">
      <h3 class="section-bar">Public Class methods</h3>

      <div id="method-M000280" class="method-detail">
        <a name="M000280"></a>

        <div class="method-heading">
          <a href="#M000280" class="method-signature">
          <span class="method-name">new</span><span class="method-args">(pstack)</span>
          </a>
        </div>
      
        <div class="method-description">
          <p>
Construct filter
</p>
<dl>
<dt><tt>pstack</tt></dt><dd>The <a href="ProtocolStack.html">ProtocolStack</a> associated with this
filter

</dd>
</dl>
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000280-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000280-source">
<pre>
<span class="ruby-comment cmt"># File lib/network/protocol/terminalfilter.rb, line 31</span>
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">pstack</span>)
    <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">pstack</span>)
    <span class="ruby-ivar">@mode</span> = <span class="ruby-identifier">:ground</span> <span class="ruby-comment cmt">#  Parse mode :ground, :escape</span>
    <span class="ruby-ivar">@csi</span> = <span class="ruby-value str">&quot;&quot;</span>
  <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>

      <h3 class="section-bar">Public Instance methods</h3>

      <div id="method-M000284" class="method-detail">
        <a name="M000284"></a>

        <div class="method-heading">
          <a href="#M000284" class="method-signature">
          <span class="method-name">echo</span><span class="method-args">(ch)</span>
          </a>
        </div>
      
        <div class="method-description">
          <p>
Handle server-side <a href="TerminalFilter.html#M000284">echo</a>
</p>
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000284-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000284-source">
<pre>
<span class="ruby-comment cmt"># File lib/network/protocol/terminalfilter.rb, line 385</span>
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">echo</span>(<span class="ruby-identifier">ch</span>)
    <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@pstack</span>.<span class="ruby-identifier">echo_on</span>
      <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@pstack</span>.<span class="ruby-identifier">hide_on</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">ch</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">!=</span> <span class="ruby-constant">CR</span>
        <span class="ruby-ivar">@pstack</span>.<span class="ruby-identifier">conn</span>.<span class="ruby-identifier">sock</span>.<span class="ruby-identifier">send</span>(<span class="ruby-value str">'*'</span>,<span class="ruby-value">0</span>)
      <span class="ruby-keyword kw">else</span>
        <span class="ruby-ivar">@pstack</span>.<span class="ruby-identifier">conn</span>.<span class="ruby-identifier">sock</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">ch</span>,<span class="ruby-value">0</span>)
      <span class="ruby-keyword kw">end</span>
    <span class="ruby-keyword kw">end</span>
  <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>

      <div id="method-M000285" class="method-detail">
        <a name="M000285"></a>

        <div class="method-heading">
          <a href="#M000285" class="method-signature">
          <span class="method-name">execute</span><span class="method-args">(b)</span>
          </a>
        </div>
      
        <div class="method-description">
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000285-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000285-source">
<pre>
<span class="ruby-comment cmt"># File lib/network/protocol/terminalfilter.rb, line 395</span>
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">execute</span>(<span class="ruby-identifier">b</span>)
    <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">b</span>
    <span class="ruby-keyword kw">when</span> <span class="ruby-constant">ENQ</span>, <span class="ruby-constant">SO</span>, <span class="ruby-constant">SI</span>, <span class="ruby-constant">DC1</span>, <span class="ruby-constant">DC3</span> <span class="ruby-comment cmt"># not handled</span>
<span class="ruby-comment cmt"># ENQ  Transmit ANSWERBACK message</span>
<span class="ruby-comment cmt"># SO   Switch to G1 character set</span>
<span class="ruby-comment cmt"># SI   Switch to G0 character set</span>
<span class="ruby-comment cmt"># DC1  Causes terminal to resume transmission (XON).</span>
<span class="ruby-comment cmt"># DC3  Causes terminal to stop transmitting all codes except XOFF and XON (XOFF).</span>
      <span class="ruby-value str">&quot;&quot;</span>
    <span class="ruby-keyword kw">when</span> <span class="ruby-constant">VT</span>, <span class="ruby-constant">FF</span>
      <span class="ruby-value str">&quot;[UP 1]&quot;</span>
    <span class="ruby-keyword kw">when</span> <span class="ruby-constant">TAB</span>
      <span class="ruby-identifier">log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;(#{@pstack.conn.object_id}) TAB found&quot;</span>)
      <span class="ruby-value str">&quot;[TAB]&quot;</span>
    <span class="ruby-keyword kw">when</span> <span class="ruby-constant">BEL</span>
      <span class="ruby-value str">&quot;[BELL]&quot;</span>
    <span class="ruby-keyword kw">else</span>
      <span class="ruby-value str">&quot;&quot;</span>
    <span class="ruby-keyword kw">end</span>
  <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>

      <div id="method-M000282" class="method-detail">
        <a name="M000282"></a>

        <div class="method-heading">
          <a href="#M000282" class="method-signature">
          <span class="method-name">filter_in</span><span class="method-args">(str)</span>
          </a>
        </div>
      
        <div class="method-description">
          <p>
The <a href="TerminalFilter.html#M000282">filter_in</a> method filters out
VTxx terminal data and inserts format strings into the input stream.
</p>
<dl>
<dt><tt>str</tt></dt><dd>The string to be processed

</dd>
<dt><tt>return</tt></dt><dd>The filtered data

</dd>
</dl>
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000282-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000282-source">
<pre>
<span class="ruby-comment cmt"># File lib/network/protocol/terminalfilter.rb, line 47</span>
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">filter_in</span>(<span class="ruby-identifier">str</span>)
    <span class="ruby-identifier">buf</span> = <span class="ruby-value str">&quot;&quot;</span>
    <span class="ruby-identifier">str</span>.<span class="ruby-identifier">each_byte</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">b</span><span class="ruby-operator">|</span>
      <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">mode?</span>
      <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:ground</span>
        <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">b</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">0x20</span><span class="ruby-operator">..</span><span class="ruby-value">0x7e</span>
          <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">chr</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-constant">ESC</span>
          <span class="ruby-identifier">log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;(#{@pstack.conn.object_id}) ESC found&quot;</span>)
          <span class="ruby-ivar">@collect</span> = <span class="ruby-value str">&quot;&quot;</span>
          <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:escape</span>
        <span class="ruby-comment cmt"># These cause immediate execution no matter what mode</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-constant">ENQ</span>, <span class="ruby-constant">BEL</span>, <span class="ruby-constant">BS</span>, <span class="ruby-constant">TAB</span>, <span class="ruby-constant">VT</span>, <span class="ruby-constant">FF</span>, <span class="ruby-constant">SO</span>, <span class="ruby-constant">SI</span>, <span class="ruby-constant">DC1</span>, <span class="ruby-constant">DC3</span>, <span class="ruby-constant">CAN</span>, <span class="ruby-constant">SUB</span>, <span class="ruby-constant">DEL</span>
          <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">b</span>
          <span class="ruby-keyword kw">when</span> <span class="ruby-constant">BS</span>, <span class="ruby-constant">DEL</span>
            <span class="ruby-identifier">log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;(#{@pstack.conn.object_id}) BS, DEL found&quot;</span>)
            <span class="ruby-comment cmt"># slice local buffer or connection buffer</span>
            <span class="ruby-identifier">buf</span>.<span class="ruby-identifier">slice!</span>(<span class="ruby-value">-1</span>) <span class="ruby-operator">||</span> <span class="ruby-ivar">@pstack</span>.<span class="ruby-identifier">conn</span>.<span class="ruby-identifier">inbuffer</span>.<span class="ruby-identifier">slice!</span>(<span class="ruby-value">-1</span>)
          <span class="ruby-keyword kw">when</span> <span class="ruby-constant">CAN</span>, <span class="ruby-constant">SUB</span>
            <span class="ruby-ivar">@collect</span> = <span class="ruby-value str">&quot;&quot;</span>
            <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:ground</span>
          <span class="ruby-keyword kw">else</span>
            <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">execute</span>(<span class="ruby-identifier">b</span>)
          <span class="ruby-keyword kw">end</span>
        <span class="ruby-keyword kw">else</span>
          <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">chr</span>
        <span class="ruby-keyword kw">end</span>
      <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:escape</span>
        <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">b</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?[</span>
          <span class="ruby-identifier">log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;(#{@pstack.conn.object_id}) CSI sequence found&quot;</span>)
          <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:csi</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?]</span>
          <span class="ruby-identifier">log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;(#{@pstack.conn.object_id}) OSC/XTERM sequence found&quot;</span>)
          <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:xterm</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?P</span>
          <span class="ruby-identifier">log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;(#{@pstack.conn.object_id}) DCS sequence found&quot;</span>)
          <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:dcs</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?O</span>
          <span class="ruby-identifier">log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;(#{@pstack.conn.object_id}) SS3 sequence found&quot;</span>)
          <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:ss3</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?X</span>, <span class="ruby-value">?^</span>, <span class="ruby-value">?_</span>
          <span class="ruby-identifier">log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;(#{@pstack.conn.object_id}) SOS/PM/APC sequence found&quot;</span>)
          <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:sospmapc</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?D</span>
          <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[SCROLLDOWN]&quot;</span>
          <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:ground</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?M</span>
          <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[SCROLLUP]&quot;</span>
          <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:ground</span>
        <span class="ruby-comment cmt"># VT52</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?A</span>
          <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[UP 1]&quot;</span>
          <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:ground</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?B</span>
          <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[DOWN 1]&quot;</span>
          <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:ground</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?C</span>
          <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[RIGHT 1]&quot;</span>
          <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:ground</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?D</span>
          <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[LEFT 1]&quot;</span>
          <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:ground</span>
        <span class="ruby-comment cmt"># /VT52</span>
<span class="ruby-comment cmt">#        when ?H # Set tab at current position - ignored</span>
<span class="ruby-comment cmt">#        when ?E # Next line - like CRLF?</span>
<span class="ruby-comment cmt">#        when ?7 # Save cursor and attributes SCURA</span>
<span class="ruby-comment cmt">#        when ?8 # Restore cursor and attributes RCURA</span>
<span class="ruby-comment cmt">#        when ?c # reset device</span>
        <span class="ruby-comment cmt"># These cause immediate execution no matter what mode</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-constant">ENQ</span>, <span class="ruby-constant">BEL</span>, <span class="ruby-constant">BS</span>, <span class="ruby-constant">TAB</span>, <span class="ruby-constant">VT</span>, <span class="ruby-constant">FF</span>, <span class="ruby-constant">SO</span>, <span class="ruby-constant">SI</span>, <span class="ruby-constant">DC1</span>, <span class="ruby-constant">DC3</span>, <span class="ruby-constant">CAN</span>, <span class="ruby-constant">SUB</span>, <span class="ruby-constant">DEL</span>
          <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">b</span>
          <span class="ruby-keyword kw">when</span> <span class="ruby-constant">BS</span>, <span class="ruby-constant">DEL</span>
            <span class="ruby-identifier">log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;(#{@pstack.conn.object_id}) BS, DEL found&quot;</span>)
            <span class="ruby-comment cmt"># slice local buffer or connection buffer</span>
            <span class="ruby-identifier">buf</span>.<span class="ruby-identifier">slice!</span>(<span class="ruby-value">-1</span>) <span class="ruby-operator">||</span> <span class="ruby-ivar">@pstack</span>.<span class="ruby-identifier">conn</span>.<span class="ruby-identifier">inbuffer</span>.<span class="ruby-identifier">slice!</span>(<span class="ruby-value">-1</span>)
          <span class="ruby-keyword kw">when</span> <span class="ruby-constant">CAN</span>, <span class="ruby-constant">SUB</span>
            <span class="ruby-ivar">@collect</span> = <span class="ruby-value str">&quot;&quot;</span>
            <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:ground</span>
          <span class="ruby-keyword kw">else</span>
            <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">execute</span>(<span class="ruby-identifier">b</span>)
          <span class="ruby-keyword kw">end</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">0x20</span><span class="ruby-operator">..</span><span class="ruby-value">0x2</span><span class="ruby-constant">F</span>  <span class="ruby-comment cmt"># &quot; !&quot;#$%&amp;'()*+,-./&quot;</span>
          <span class="ruby-ivar">@collect</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">chr</span>
          <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:escint</span>
        <span class="ruby-keyword kw">else</span>
<span class="ruby-comment cmt"># These should all be immediately dispatched and sent to ground mode</span>
<span class="ruby-comment cmt">#        when &quot;0123456789:;&lt;=&gt;?@ABCDEFGHIJKLMNO&quot; 0x30..0x4F</span>
<span class="ruby-comment cmt">#        when &quot;QRSTUVW&quot; 0x51..0x57</span>
<span class="ruby-comment cmt">#        when &quot;YZ&quot; 0x59..0x5A</span>
<span class="ruby-comment cmt">#        when &quot;\\&quot; 0x5C</span>
<span class="ruby-comment cmt">#        when &quot;`abcdefghijklmnopqrstuvwxyz{|}~&quot; 0x60..0x7e</span>
          <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:ground</span>
        <span class="ruby-keyword kw">end</span>
      <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:escint</span>
<span class="ruby-comment cmt">#        case b</span>
<span class="ruby-comment cmt">#        when ?( # Set default font</span>
<span class="ruby-comment cmt">#        when ?) # Set alternate font</span>
           <span class="ruby-comment cmt"># both ( and ) may be followed by A,B,0,1,2  !!</span>
<span class="ruby-comment cmt">#        end</span>
         <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:ground</span>
      <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:dcs</span>
<span class="ruby-comment cmt"># terminated by ST or ESC           set_mode :ground</span>
      <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:xterm</span>
         <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:ground</span>
      <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:sospmapc</span>
         <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:ground</span>
      <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:csi</span>
        <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">b</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?A</span>
          <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;[UP #{@collect.to_i == 0 ? 1 : @collect.to_i}]&quot;</span>
          <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:ground</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?B</span>
          <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;[DOWN #{@collect.to_i == 0 ? 1 : @collect.to_i}]&quot;</span>
          <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:ground</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?C</span>
          <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;[RIGHT #{@collect.to_i == 0 ? 1 : @collect.to_i}]&quot;</span>
          <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:ground</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?D</span>
          <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;[LEFT #{@collect.to_i == 0 ? 1 : @collect.to_i}]&quot;</span>
          <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:ground</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?H</span>, <span class="ruby-value">?f</span>  <span class="ruby-comment cmt"># set cursor position \e[H or \e[&lt;row&gt;;&lt;col&gt;H</span>
          <span class="ruby-identifier">a</span> = <span class="ruby-ivar">@collect</span>.<span class="ruby-identifier">split</span>(<span class="ruby-value str">&quot;;&quot;</span>)
          <span class="ruby-identifier">a</span> = [<span class="ruby-value str">&quot;1&quot;</span>,<span class="ruby-value str">&quot;1&quot;</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>.<span class="ruby-identifier">empty?</span>
          <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;[HOME #{a[0]},#{a[1]}]&quot;</span>
          <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:ground</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?R</span> <span class="ruby-comment cmt"># report cursor pos</span>
          <span class="ruby-identifier">a</span> = <span class="ruby-ivar">@collect</span>.<span class="ruby-identifier">split</span>(<span class="ruby-value str">&quot;;&quot;</span>)
          <span class="ruby-identifier">a</span> = [<span class="ruby-value str">&quot;1&quot;</span>,<span class="ruby-value str">&quot;1&quot;</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>.<span class="ruby-identifier">empty?</span>
          <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;[CURSOR #{a[0]},#{a[1]}]&quot;</span>
          <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:ground</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?r</span> <span class="ruby-comment cmt"># Set scrolling region</span>
          <span class="ruby-comment cmt"># Enable scrolling entire display \e[r or just a region \e[&lt;srow&gt;;&lt;erow&gt;r</span>
          <span class="ruby-identifier">a</span> = <span class="ruby-ivar">@collect</span>.<span class="ruby-identifier">split</span>(<span class="ruby-value str">&quot;;&quot;</span>)
          <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">a</span>.<span class="ruby-identifier">empty?</span>  <span class="ruby-comment cmt"># lines numbered from 1</span>
            <span class="ruby-comment cmt"># This should be 1 to n or the whole screen if no parms</span>
            <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[SCRRESET]&quot;</span>
          <span class="ruby-keyword kw">else</span>
            <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;[SCRREG #{a[0]},#{a[1]}]&quot;</span>
          <span class="ruby-keyword kw">end</span>
          <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:ground</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?J</span>
          <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@collect</span>.<span class="ruby-identifier">to_i</span> <span class="ruby-operator">==</span> <span class="ruby-value">2</span>
            <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[CLEAR]&quot;</span>
          <span class="ruby-keyword kw">end</span>
          <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:ground</span>
<span class="ruby-comment cmt">#     Erase from cursor to end of screen         Esc [ 0 J    or Esc [ J</span>
<span class="ruby-comment cmt">#     Erase from beginning of screen to cursor   Esc [ 1 J</span>
<span class="ruby-comment cmt">#     Erase entire screen                        Esc [ 2 J</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?K</span>
          <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@collect</span>.<span class="ruby-identifier">to_i</span> <span class="ruby-operator">==</span> <span class="ruby-value">2</span>
            <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[CLEARLINE]&quot;</span>
          <span class="ruby-keyword kw">end</span>
          <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:ground</span>
<span class="ruby-comment cmt">#        when ?K  Erase line</span>
<span class="ruby-comment cmt">#     Erase from cursor to end of line           Esc [ 0 K    or Esc [ K</span>
<span class="ruby-comment cmt">#     Erase from beginning of line to cursor     Esc [ 1 K</span>
<span class="ruby-comment cmt">#     Erase line containing cursor               Esc [ 2 K</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?G</span>
          <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;[POS #{@collect.to_i == 0 ? 1 : @collect.to_i}]&quot;</span>
          <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:ground</span>
<span class="ruby-comment cmt">#        when ?G  Set starting column of presentation</span>

        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?g</span>, <span class="ruby-value">?c</span>, <span class="ruby-value">?h</span>, <span class="ruby-value">?l</span>, <span class="ruby-value">?s</span>, <span class="ruby-value">?u</span>, <span class="ruby-value">?x</span>, <span class="ruby-value">?y</span>, <span class="ruby-value">?q</span>, <span class="ruby-value">?i</span>, <span class="ruby-value">?p</span>
          <span class="ruby-comment cmt"># unhandled</span>
          <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:ground</span>
<span class="ruby-comment cmt">#        when ?c  DA request/response - Device code - response is \e[&lt;code&gt;0c</span>


<span class="ruby-comment cmt">#        when ?g  Tab clear at current position</span>
<span class="ruby-comment cmt">#  CSI 3 g is clear all tabs</span>

<span class="ruby-comment cmt">#        when ?h  Set mode</span>
<span class="ruby-comment cmt">#        when ?l  Reset mode</span>
<span class="ruby-comment cmt"># Enable Line Wrap  &lt;ESC&gt;[7h</span>
<span class="ruby-comment cmt"># Disable Line Wrap &lt;ESC&gt;[7l</span>

<span class="ruby-comment cmt">#        when ?s  save cursor</span>
<span class="ruby-comment cmt">#        when ?u  unsave cursor</span>
<span class="ruby-comment cmt">#  Same as ESC7 and ESC8 but not attributes?</span>

<span class="ruby-comment cmt">#        when ?x  Report terminal parameters</span>
<span class="ruby-comment cmt">#        when ?y  Confidence test</span>
<span class="ruby-comment cmt">#        when ?q  load LEDs</span>
<span class="ruby-comment cmt">#        when ?i  printing</span>
<span class="ruby-comment cmt">#        when ?p  Set Key Definition  &lt;ESC&gt;[{key};&quot;{string}&quot;p</span>

<span class="ruby-comment cmt">#        when ?P # -&gt; set_mode :dcs</span>


        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?n</span>  <span class="ruby-comment cmt"># Device status request</span>
          <span class="ruby-identifier">i</span> = <span class="ruby-ivar">@collect</span>.<span class="ruby-identifier">to_i</span>
          <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">i</span> <span class="ruby-operator">==</span> <span class="ruby-value">6</span>  <span class="ruby-comment cmt"># Query cursor position - response is \e[&lt;row&gt;;&lt;col&gt;R</span>
            <span class="ruby-comment cmt"># request for report cursor pos</span>
            <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[CURREPT]&quot;</span>
          <span class="ruby-keyword kw">end</span>
          <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:ground</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?m</span>  <span class="ruby-comment cmt"># SGR color</span>
          <span class="ruby-identifier">a</span> = <span class="ruby-ivar">@collect</span>.<span class="ruby-identifier">split</span>(<span class="ruby-value str">&quot;;&quot;</span>)
          <span class="ruby-identifier">a</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">cd</span><span class="ruby-operator">|</span>
            <span class="ruby-identifier">s</span> = <span class="ruby-constant">SGR2CODE</span>[<span class="ruby-identifier">cd</span>]
            <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">s</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">s</span>
          <span class="ruby-keyword kw">end</span>
          <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:ground</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?z</span>  <span class="ruby-comment cmt"># MXP mode</span>
          <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[MXP @collect.to_i]&quot;</span>
          <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:ground</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?~</span>  <span class="ruby-comment cmt"># keys</span>
          <span class="ruby-identifier">i</span> = <span class="ruby-ivar">@collect</span>.<span class="ruby-identifier">to_i</span>
          <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">i</span>
          <span class="ruby-keyword kw">when</span> <span class="ruby-value">1</span>, <span class="ruby-value">7</span>
            <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[HOME 1,1]&quot;</span>
          <span class="ruby-keyword kw">when</span> <span class="ruby-value">2</span>
            <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[INSERT]&quot;</span>
          <span class="ruby-keyword kw">when</span> <span class="ruby-value">3</span>  <span class="ruby-comment cmt"># delete</span>
            <span class="ruby-identifier">log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;(#{@pstack.conn.object_id}) BS, DEL found&quot;</span>)
            <span class="ruby-identifier">buf</span>.<span class="ruby-identifier">slice!</span>(<span class="ruby-value">-1</span>) <span class="ruby-operator">||</span> <span class="ruby-ivar">@pstack</span>.<span class="ruby-identifier">conn</span>.<span class="ruby-identifier">inbuffer</span>.<span class="ruby-identifier">slice!</span>(<span class="ruby-value">-1</span>)
            <span class="ruby-identifier">echo</span>(<span class="ruby-constant">BS</span>.<span class="ruby-identifier">chr</span>)
          <span class="ruby-keyword kw">when</span> <span class="ruby-value">4</span>, <span class="ruby-value">8</span>
            <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[END]&quot;</span>
          <span class="ruby-keyword kw">when</span> <span class="ruby-value">5</span>
            <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[PAGEUP]&quot;</span>
          <span class="ruby-keyword kw">when</span> <span class="ruby-value">6</span>
            <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[PAGEDOWN]&quot;</span>
          <span class="ruby-keyword kw">when</span> <span class="ruby-value">11</span>
            <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[F1]&quot;</span>
          <span class="ruby-keyword kw">when</span> <span class="ruby-value">12</span>
            <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[F2]&quot;</span>
          <span class="ruby-keyword kw">when</span> <span class="ruby-value">13</span>
            <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[F3]&quot;</span>
          <span class="ruby-keyword kw">when</span> <span class="ruby-value">14</span>
            <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[F4]&quot;</span>
          <span class="ruby-keyword kw">when</span> <span class="ruby-value">15</span>
            <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[F5]&quot;</span>
          <span class="ruby-keyword kw">when</span> <span class="ruby-value">17</span>
            <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[F6]&quot;</span>
          <span class="ruby-keyword kw">when</span> <span class="ruby-value">18</span>
            <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[F7]&quot;</span>
          <span class="ruby-keyword kw">when</span> <span class="ruby-value">19</span>
            <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[F8]&quot;</span>
          <span class="ruby-keyword kw">when</span> <span class="ruby-value">20</span>
            <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[F9]&quot;</span>
          <span class="ruby-keyword kw">when</span> <span class="ruby-value">21</span>
            <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[F10]&quot;</span>
          <span class="ruby-keyword kw">end</span>
          <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:ground</span>
        <span class="ruby-comment cmt"># These cause immediate execution no matter what mode</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-constant">ENQ</span>, <span class="ruby-constant">BEL</span>, <span class="ruby-constant">BS</span>, <span class="ruby-constant">TAB</span>, <span class="ruby-constant">VT</span>, <span class="ruby-constant">FF</span>, <span class="ruby-constant">SO</span>, <span class="ruby-constant">SI</span>, <span class="ruby-constant">DC1</span>, <span class="ruby-constant">DC3</span>, <span class="ruby-constant">CAN</span>, <span class="ruby-constant">SUB</span>, <span class="ruby-constant">DEL</span>
          <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">b</span>
          <span class="ruby-keyword kw">when</span> <span class="ruby-constant">BS</span>, <span class="ruby-constant">DEL</span>
            <span class="ruby-identifier">log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;(#{@pstack.conn.object_id}) BS, DEL found&quot;</span>)
            <span class="ruby-comment cmt"># slice local buffer or connection buffer</span>
            <span class="ruby-identifier">buf</span>.<span class="ruby-identifier">slice!</span>(<span class="ruby-value">-1</span>) <span class="ruby-operator">||</span> <span class="ruby-ivar">@pstack</span>.<span class="ruby-identifier">conn</span>.<span class="ruby-identifier">inbuffer</span>.<span class="ruby-identifier">slice!</span>(<span class="ruby-value">-1</span>)
          <span class="ruby-keyword kw">when</span> <span class="ruby-constant">CAN</span>, <span class="ruby-constant">SUB</span>
            <span class="ruby-ivar">@collect</span> = <span class="ruby-value str">&quot;&quot;</span>
            <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:ground</span>
          <span class="ruby-keyword kw">else</span>
            <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">execute</span>(<span class="ruby-identifier">b</span>)
          <span class="ruby-keyword kw">end</span>
        <span class="ruby-keyword kw">else</span>
          <span class="ruby-ivar">@collect</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">chr</span>
        <span class="ruby-keyword kw">end</span>
      <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:ss3</span>
        <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">b</span>
        <span class="ruby-comment cmt"># Windows XP telnet</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?P</span>
          <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[F1]&quot;</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?Q</span>
          <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[F2]&quot;</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?R</span>
          <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[F3]&quot;</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?S</span>
          <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[F4]&quot;</span>
        <span class="ruby-comment cmt"># /Windows XP telnet</span>
        <span class="ruby-comment cmt"># ANSI cursor key mode</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?A</span>
          <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[UP 1]&quot;</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?B</span>
          <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[DOWN 1]&quot;</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?C</span>
          <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[RIGHT 1]&quot;</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-value">?D</span>
          <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;[LEFT 1]&quot;</span>
        <span class="ruby-comment cmt"># /ANSI cursor key mode</span>
        <span class="ruby-comment cmt"># These cause immediate execution no matter what mode</span>
        <span class="ruby-keyword kw">when</span> <span class="ruby-constant">ENQ</span>, <span class="ruby-constant">BEL</span>, <span class="ruby-constant">BS</span>, <span class="ruby-constant">TAB</span>, <span class="ruby-constant">VT</span>, <span class="ruby-constant">FF</span>, <span class="ruby-constant">SO</span>, <span class="ruby-constant">SI</span>, <span class="ruby-constant">DC1</span>, <span class="ruby-constant">DC3</span>, <span class="ruby-constant">CAN</span>, <span class="ruby-constant">SUB</span>, <span class="ruby-constant">DEL</span>
          <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">b</span>
          <span class="ruby-keyword kw">when</span> <span class="ruby-constant">BS</span>, <span class="ruby-constant">DEL</span>
            <span class="ruby-identifier">log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;(#{@pstack.conn.object_id}) BS, DEL found&quot;</span>)
            <span class="ruby-comment cmt"># slice local buffer or connection buffer</span>
            <span class="ruby-identifier">buf</span>.<span class="ruby-identifier">slice!</span>(<span class="ruby-value">-1</span>) <span class="ruby-operator">||</span> <span class="ruby-ivar">@pstack</span>.<span class="ruby-identifier">conn</span>.<span class="ruby-identifier">inbuffer</span>.<span class="ruby-identifier">slice!</span>(<span class="ruby-value">-1</span>)
          <span class="ruby-keyword kw">when</span> <span class="ruby-constant">CAN</span>, <span class="ruby-constant">SUB</span>
            <span class="ruby-ivar">@collect</span> = <span class="ruby-value str">&quot;&quot;</span>
            <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:ground</span>
          <span class="ruby-keyword kw">else</span>
            <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">execute</span>(<span class="ruby-identifier">b</span>)
          <span class="ruby-keyword kw">end</span>
        <span class="ruby-keyword kw">end</span>
        <span class="ruby-identifier">set_mode</span> <span class="ruby-identifier">:ground</span>
      <span class="ruby-keyword kw">end</span>
    <span class="ruby-keyword kw">end</span>  <span class="ruby-comment cmt"># eachwhile b</span>

    <span class="ruby-identifier">buf</span>
  <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>

      <div id="method-M000283" class="method-detail">
        <a name="M000283"></a>

        <div class="method-heading">
          <a href="#M000283" class="method-signature">
          <span class="method-name">filter_out</span><span class="method-args">(str)</span>
          </a>
        </div>
      
        <div class="method-description">
          <p>
The <a href="TerminalFilter.html#M000283">filter_out</a> method filters
output data
</p>
<dl>
<dt><tt>str</tt></dt><dd>The string to be processed

</dd>
<dt><tt>return</tt></dt><dd>The filtered data

</dd>
</dl>
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000283-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000283-source">
<pre>
<span class="ruby-comment cmt"># File lib/network/protocol/terminalfilter.rb, line 357</span>
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">filter_out</span>(<span class="ruby-identifier">str</span>)
    <span class="ruby-keyword kw">return</span> <span class="ruby-value str">''</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">str</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">str</span>.<span class="ruby-identifier">empty?</span>
    <span class="ruby-keyword kw">case</span> <span class="ruby-ivar">@pstack</span>.<span class="ruby-identifier">terminal</span>
    <span class="ruby-keyword kw">when</span> <span class="ruby-regexp re">/^vt/</span>, <span class="ruby-value str">'xterm'</span>
      <span class="ruby-constant">VTKeys</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">key</span>,<span class="ruby-identifier">val</span><span class="ruby-operator">|</span>
        <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">str</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">key</span> <span class="ruby-keyword kw">do</span>
          <span class="ruby-identifier">s</span> = <span class="ruby-identifier">val</span>.<span class="ruby-identifier">dup</span>
          <span class="ruby-identifier">p1</span> = <span class="ruby-identifier">$1</span>.<span class="ruby-identifier">dup</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">$1</span>
          <span class="ruby-identifier">p2</span> = <span class="ruby-identifier">$2</span>.<span class="ruby-identifier">dup</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">$2</span>
          <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">p1</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">p2</span>
            <span class="ruby-identifier">s</span>.<span class="ruby-identifier">sub!</span>(<span class="ruby-regexp re">/\$;\$/</span>, <span class="ruby-node">&quot;#{p1};#{p2}&quot;</span>)
          <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">p1</span>
            <span class="ruby-identifier">s</span>.<span class="ruby-identifier">sub!</span>(<span class="ruby-regexp re">/\$/</span>, <span class="ruby-identifier">p1</span>)
          <span class="ruby-keyword kw">end</span>
          <span class="ruby-identifier">str</span>.<span class="ruby-identifier">sub!</span>(<span class="ruby-identifier">key</span>,<span class="ruby-identifier">s</span>)
        <span class="ruby-keyword kw">end</span>
      <span class="ruby-keyword kw">end</span>
    <span class="ruby-keyword kw">else</span>
      <span class="ruby-constant">VTKeys</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">key</span>,<span class="ruby-identifier">val</span><span class="ruby-operator">|</span>
        <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">str</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">key</span> <span class="ruby-keyword kw">do</span>
          <span class="ruby-identifier">str</span>.<span class="ruby-identifier">sub!</span>(<span class="ruby-identifier">key</span>,<span class="ruby-value str">&quot;&quot;</span>)
        <span class="ruby-keyword kw">end</span>
      <span class="ruby-keyword kw">end</span>
    <span class="ruby-keyword kw">end</span>
    <span class="ruby-identifier">str</span>
  <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>

      <div id="method-M000281" class="method-detail">
        <a name="M000281"></a>

        <div class="method-heading">
          <a href="#M000281" class="method-signature">
          <span class="method-name">init</span><span class="method-args">(args=nil)</span>
          </a>
        </div>
      
        <div class="method-description">
          <p>
Run any post-contruction initialization
</p>
<dl>
<dt><tt>args</tt></dt><dd>Optional initial options

</dd>
</dl>
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000281-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000281-source">
<pre>
<span class="ruby-comment cmt"># File lib/network/protocol/terminalfilter.rb, line 39</span>
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">init</span>(<span class="ruby-identifier">args</span>=<span class="ruby-keyword kw">nil</span>)
    <span class="ruby-keyword kw">true</span>
  <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>

      <div id="method-M000286" class="method-detail">
        <a name="M000286"></a>

        <div class="method-heading">
          <a href="#M000286" class="method-signature">
          <span class="method-name">mode?</span><span class="method-args">()</span>
          </a>
        </div>
      
        <div class="method-description">
          <p>
Get current parse mode
</p>
<dl>
<dt><tt>return</tt></dt><dd>The current parse mode

</dd>
</dl>
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000286-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000286-source">
<pre>
<span class="ruby-comment cmt"># File lib/network/protocol/terminalfilter.rb, line 418</span>
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">mode?</span>
    <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@mode</span>
  <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>

      <div id="method-M000287" class="method-detail">
        <a name="M000287"></a>

        <div class="method-heading">
          <a href="#M000287" class="method-signature">
          <span class="method-name">set_mode</span><span class="method-args">(m)</span>
          </a>
        </div>
      
        <div class="method-description">
          <p>
set current parse mode
</p>
<dl>
<dt><tt>m</tt></dt><dd>Mode to set it to

</dd>
</dl>
          <p><a class="source-toggle" href="#"
            onclick="toggleCode('M000287-source');return false;">[Source]</a></p>
          <div class="method-source-code" id="M000287-source">
<pre>
<span class="ruby-comment cmt"># File lib/network/protocol/terminalfilter.rb, line 424</span>
  <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">set_mode</span>(<span class="ruby-identifier">m</span>)
    <span class="ruby-ivar">@mode</span> = <span class="ruby-identifier">m</span>
  <span class="ruby-keyword kw">end</span>
</pre>
          </div>
        </div>
      </div>


    </div>


  </div>


<div id="validator-badges">
  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
</div>

</body>
</html>