<?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>
<a href="#M000285">execute</a>
<a href="#M000282">filter_in</a>
<a href="#M000283">filter_out</a>
<a href="#M000281">init</a>
<a href="#M000286">mode?</a>
<a href="#M000280">new</a>
<a href="#M000287">set_mode</a>
</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">""</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">&&</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">""</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">"[UP 1]"</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">"(#{@pstack.conn.object_id}) TAB found"</span>)
<span class="ruby-value str">"[TAB]"</span>
<span class="ruby-keyword kw">when</span> <span class="ruby-constant">BEL</span>
<span class="ruby-value str">"[BELL]"</span>
<span class="ruby-keyword kw">else</span>
<span class="ruby-value str">""</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">""</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"><<</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">"(#{@pstack.conn.object_id}) ESC found"</span>)
<span class="ruby-ivar">@collect</span> = <span class="ruby-value str">""</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">"(#{@pstack.conn.object_id}) BS, DEL found"</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">""</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"><<</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"><<</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">"(#{@pstack.conn.object_id}) CSI sequence found"</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">"(#{@pstack.conn.object_id}) OSC/XTERM sequence found"</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">"(#{@pstack.conn.object_id}) DCS sequence found"</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">"(#{@pstack.conn.object_id}) SS3 sequence found"</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">"(#{@pstack.conn.object_id}) SOS/PM/APC sequence found"</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"><<</span> <span class="ruby-value str">"[SCROLLDOWN]"</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"><<</span> <span class="ruby-value str">"[SCROLLUP]"</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"><<</span> <span class="ruby-value str">"[UP 1]"</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"><<</span> <span class="ruby-value str">"[DOWN 1]"</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"><<</span> <span class="ruby-value str">"[RIGHT 1]"</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"><<</span> <span class="ruby-value str">"[LEFT 1]"</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">"(#{@pstack.conn.object_id}) BS, DEL found"</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">""</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"><<</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"># " !"#$%&'()*+,-./"</span>
<span class="ruby-ivar">@collect</span> <span class="ruby-operator"><<</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 "0123456789:;<=>?@ABCDEFGHIJKLMNO" 0x30..0x4F</span>
<span class="ruby-comment cmt"># when "QRSTUVW" 0x51..0x57</span>
<span class="ruby-comment cmt"># when "YZ" 0x59..0x5A</span>
<span class="ruby-comment cmt"># when "\\" 0x5C</span>
<span class="ruby-comment cmt"># when "`abcdefghijklmnopqrstuvwxyz{|}~" 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"><<</span> <span class="ruby-node">"[UP #{@collect.to_i == 0 ? 1 : @collect.to_i}]"</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"><<</span> <span class="ruby-node">"[DOWN #{@collect.to_i == 0 ? 1 : @collect.to_i}]"</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"><<</span> <span class="ruby-node">"[RIGHT #{@collect.to_i == 0 ? 1 : @collect.to_i}]"</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"><<</span> <span class="ruby-node">"[LEFT #{@collect.to_i == 0 ? 1 : @collect.to_i}]"</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[<row>;<col>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">";"</span>)
<span class="ruby-identifier">a</span> = [<span class="ruby-value str">"1"</span>,<span class="ruby-value str">"1"</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"><<</span> <span class="ruby-node">"[HOME #{a[0]},#{a[1]}]"</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">";"</span>)
<span class="ruby-identifier">a</span> = [<span class="ruby-value str">"1"</span>,<span class="ruby-value str">"1"</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"><<</span> <span class="ruby-node">"[CURSOR #{a[0]},#{a[1]}]"</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[<srow>;<erow>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">";"</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"><<</span> <span class="ruby-value str">"[SCRRESET]"</span>
<span class="ruby-keyword kw">else</span>
<span class="ruby-identifier">buf</span> <span class="ruby-operator"><<</span> <span class="ruby-node">"[SCRREG #{a[0]},#{a[1]}]"</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"><<</span> <span class="ruby-value str">"[CLEAR]"</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"><<</span> <span class="ruby-value str">"[CLEARLINE]"</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"><<</span> <span class="ruby-node">"[POS #{@collect.to_i == 0 ? 1 : @collect.to_i}]"</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[<code>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 <ESC>[7h</span>
<span class="ruby-comment cmt"># Disable Line Wrap <ESC>[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 <ESC>[{key};"{string}"p</span>
<span class="ruby-comment cmt"># when ?P # -> 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[<row>;<col>R</span>
<span class="ruby-comment cmt"># request for report cursor pos</span>
<span class="ruby-identifier">buf</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"[CURREPT]"</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">";"</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"><<</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"><<</span> <span class="ruby-value str">"[MXP @collect.to_i]"</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"><<</span> <span class="ruby-value str">"[HOME 1,1]"</span>
<span class="ruby-keyword kw">when</span> <span class="ruby-value">2</span>
<span class="ruby-identifier">buf</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"[INSERT]"</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">"(#{@pstack.conn.object_id}) BS, DEL found"</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"><<</span> <span class="ruby-value str">"[END]"</span>
<span class="ruby-keyword kw">when</span> <span class="ruby-value">5</span>
<span class="ruby-identifier">buf</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"[PAGEUP]"</span>
<span class="ruby-keyword kw">when</span> <span class="ruby-value">6</span>
<span class="ruby-identifier">buf</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"[PAGEDOWN]"</span>
<span class="ruby-keyword kw">when</span> <span class="ruby-value">11</span>
<span class="ruby-identifier">buf</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"[F1]"</span>
<span class="ruby-keyword kw">when</span> <span class="ruby-value">12</span>
<span class="ruby-identifier">buf</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"[F2]"</span>
<span class="ruby-keyword kw">when</span> <span class="ruby-value">13</span>
<span class="ruby-identifier">buf</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"[F3]"</span>
<span class="ruby-keyword kw">when</span> <span class="ruby-value">14</span>
<span class="ruby-identifier">buf</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"[F4]"</span>
<span class="ruby-keyword kw">when</span> <span class="ruby-value">15</span>
<span class="ruby-identifier">buf</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"[F5]"</span>
<span class="ruby-keyword kw">when</span> <span class="ruby-value">17</span>
<span class="ruby-identifier">buf</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"[F6]"</span>
<span class="ruby-keyword kw">when</span> <span class="ruby-value">18</span>
<span class="ruby-identifier">buf</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"[F7]"</span>
<span class="ruby-keyword kw">when</span> <span class="ruby-value">19</span>
<span class="ruby-identifier">buf</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"[F8]"</span>
<span class="ruby-keyword kw">when</span> <span class="ruby-value">20</span>
<span class="ruby-identifier">buf</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"[F9]"</span>
<span class="ruby-keyword kw">when</span> <span class="ruby-value">21</span>
<span class="ruby-identifier">buf</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"[F10]"</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">"(#{@pstack.conn.object_id}) BS, DEL found"</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">""</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"><<</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"><<</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"><<</span> <span class="ruby-value str">"[F1]"</span>
<span class="ruby-keyword kw">when</span> <span class="ruby-value">?Q</span>
<span class="ruby-identifier">buf</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"[F2]"</span>
<span class="ruby-keyword kw">when</span> <span class="ruby-value">?R</span>
<span class="ruby-identifier">buf</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"[F3]"</span>
<span class="ruby-keyword kw">when</span> <span class="ruby-value">?S</span>
<span class="ruby-identifier">buf</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"[F4]"</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"><<</span> <span class="ruby-value str">"[UP 1]"</span>
<span class="ruby-keyword kw">when</span> <span class="ruby-value">?B</span>
<span class="ruby-identifier">buf</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"[DOWN 1]"</span>
<span class="ruby-keyword kw">when</span> <span class="ruby-value">?C</span>
<span class="ruby-identifier">buf</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"[RIGHT 1]"</span>
<span class="ruby-keyword kw">when</span> <span class="ruby-value">?D</span>
<span class="ruby-identifier">buf</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">"[LEFT 1]"</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">"(#{@pstack.conn.object_id}) BS, DEL found"</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">""</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"><<</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">&&</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">"#{p1};#{p2}"</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">""</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>