<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://msc.siamtools.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Tiny_Serial_Console_COM</id>
		<title>Tiny Serial Console COM - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://msc.siamtools.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Tiny_Serial_Console_COM"/>
		<link rel="alternate" type="text/html" href="https://msc.siamtools.com/wiki/index.php?title=Tiny_Serial_Console_COM&amp;action=history"/>
		<updated>2026-05-01T19:28:57Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.28.0</generator>

	<entry>
		<id>https://msc.siamtools.com/wiki/index.php?title=Tiny_Serial_Console_COM&amp;diff=761&amp;oldid=prev</id>
		<title>Snifer at 09:28, 20 February 2011</title>
		<link rel="alternate" type="text/html" href="https://msc.siamtools.com/wiki/index.php?title=Tiny_Serial_Console_COM&amp;diff=761&amp;oldid=prev"/>
				<updated>2011-02-20T09:28:04Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;' lang='en'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 09:28, 20 February 2011&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l873&quot; &gt;Line 873:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 873:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[http://brokestream.com/tinyserial.html Source]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[http://brokestream.com/tinyserial.html Source&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;]&amp;lt;br&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Another easy to use include GUI program:[http://cutecom.sourceforge.net/ Cutecom&lt;/ins&gt;]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Snifer</name></author>	</entry>

	<entry>
		<id>https://msc.siamtools.com/wiki/index.php?title=Tiny_Serial_Console_COM&amp;diff=760&amp;oldid=prev</id>
		<title>Snifer at 09:21, 20 February 2011</title>
		<link rel="alternate" type="text/html" href="https://msc.siamtools.com/wiki/index.php?title=Tiny_Serial_Console_COM&amp;diff=760&amp;oldid=prev"/>
				<updated>2011-02-20T09:21:41Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;' lang='en'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 09:21, 20 February 2011&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l194&quot; &gt;Line 194:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 194:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Save to com.c&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Save to com.c&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;br&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Building: cc -o com com.c&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Building: cc -o com com.c&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;br&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Usage&amp;#160;  : ./com /dev/device [speed]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Usage&amp;#160;  : ./com /dev/device [speed]&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;br&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Example : ./com /dev/ttyS0 [115200]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Example : ./com /dev/ttyS0 [115200]&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;br&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Keys&amp;#160; &amp;#160; : Ctrl-A - exit, Ctrl-X - display control lines status&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Keys&amp;#160; &amp;#160; : Ctrl-A - exit, Ctrl-X - display control lines status&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;br&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[http://tinyserial.sf.net/ Sorce]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[http://tinyserial.sf.net/ Sorce]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Snifer</name></author>	</entry>

	<entry>
		<id>https://msc.siamtools.com/wiki/index.php?title=Tiny_Serial_Console_COM&amp;diff=759&amp;oldid=prev</id>
		<title>Snifer: Created page with 'Tiny Serial Code : &lt;pre&gt; /*  * Building: cc -o com com.c  * Usage   : ./com /dev/device [speed]  * Example : ./com /dev/ttyS0 [115200]  * Keys    : Ctrl-A - exit, Ctrl-X - displa…'</title>
		<link rel="alternate" type="text/html" href="https://msc.siamtools.com/wiki/index.php?title=Tiny_Serial_Console_COM&amp;diff=759&amp;oldid=prev"/>
				<updated>2011-02-20T09:19:39Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;#039;Tiny Serial Code : &amp;lt;pre&amp;gt; /*  * Building: cc -o com com.c  * Usage   : ./com /dev/device [speed]  * Example : ./com /dev/ttyS0 [115200]  * Keys    : Ctrl-A - exit, Ctrl-X - displa…&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Tiny Serial Code :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * Building: cc -o com com.c&lt;br /&gt;
 * Usage   : ./com /dev/device [speed]&lt;br /&gt;
 * Example : ./com /dev/ttyS0 [115200]&lt;br /&gt;
 * Keys    : Ctrl-A - exit, Ctrl-X - display control lines status&lt;br /&gt;
 * Darcs   : darcs get http://tinyserial.sf.net/&lt;br /&gt;
 * Homepage: http://tinyserial.sourceforge.net&lt;br /&gt;
 * Version : 2009-03-05&lt;br /&gt;
 *&lt;br /&gt;
 * Ivan Tikhonov, http://www.brokestream.com, kefeer@brokestream.com&lt;br /&gt;
 * Patches by Jim Kou, Henry Nestler, Jon Miner, Alan Horstmann&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Copyright (C) 2007 Ivan Tikhonov&lt;br /&gt;
&lt;br /&gt;
  This software is provided 'as-is', without any express or implied&lt;br /&gt;
  warranty.  In no event will the authors be held liable for any damages&lt;br /&gt;
  arising from the use of this software.&lt;br /&gt;
&lt;br /&gt;
  Permission is granted to anyone to use this software for any purpose,&lt;br /&gt;
  including commercial applications, and to alter it and redistribute it&lt;br /&gt;
  freely, subject to the following restrictions:&lt;br /&gt;
&lt;br /&gt;
  1. The origin of this software must not be misrepresented; you must not&lt;br /&gt;
     claim that you wrote the original software. If you use this software&lt;br /&gt;
     in a product, an acknowledgment in the product documentation would be&lt;br /&gt;
     appreciated but is not required.&lt;br /&gt;
  2. Altered source versions must be plainly marked as such, and must not be&lt;br /&gt;
     misrepresented as being the original software.&lt;br /&gt;
  3. This notice may not be removed or altered from any source distribution.&lt;br /&gt;
&lt;br /&gt;
  Ivan Tikhonov, kefeer@brokestream.com&lt;br /&gt;
&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;termios.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/signal.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/ioctl.h&amp;gt;&lt;br /&gt;
#include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;
#include &amp;lt;errno.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int transfer_byte(int from, int to, int is_control);&lt;br /&gt;
&lt;br /&gt;
typedef struct {char *name; int flag; } speed_spec;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void print_status(int fd) {&lt;br /&gt;
	int status;&lt;br /&gt;
	unsigned int arg;&lt;br /&gt;
	status = ioctl(fd, TIOCMGET, &amp;amp;arg);&lt;br /&gt;
	fprintf(stderr, &amp;quot;[STATUS]: &amp;quot;);&lt;br /&gt;
	if(arg &amp;amp; TIOCM_RTS) fprintf(stderr, &amp;quot;RTS &amp;quot;);&lt;br /&gt;
	if(arg &amp;amp; TIOCM_CTS) fprintf(stderr, &amp;quot;CTS &amp;quot;);&lt;br /&gt;
	if(arg &amp;amp; TIOCM_DSR) fprintf(stderr, &amp;quot;DSR &amp;quot;);&lt;br /&gt;
	if(arg &amp;amp; TIOCM_CAR) fprintf(stderr, &amp;quot;DCD &amp;quot;);&lt;br /&gt;
	if(arg &amp;amp; TIOCM_DTR) fprintf(stderr, &amp;quot;DTR &amp;quot;);&lt;br /&gt;
	if(arg &amp;amp; TIOCM_RNG) fprintf(stderr, &amp;quot;RI &amp;quot;);&lt;br /&gt;
	fprintf(stderr, &amp;quot;\r\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[])&lt;br /&gt;
{&lt;br /&gt;
	int comfd;&lt;br /&gt;
	struct termios oldtio, newtio;       //place for old and new port settings for serial port&lt;br /&gt;
	struct termios oldkey, newkey;       //place tor old and new port settings for keyboard teletype&lt;br /&gt;
	char *devicename = argv[1];&lt;br /&gt;
	int need_exit = 0;&lt;br /&gt;
	speed_spec speeds[] =&lt;br /&gt;
	{&lt;br /&gt;
		{&amp;quot;1200&amp;quot;, B1200},&lt;br /&gt;
		{&amp;quot;2400&amp;quot;, B2400},&lt;br /&gt;
		{&amp;quot;4800&amp;quot;, B4800},&lt;br /&gt;
		{&amp;quot;9600&amp;quot;, B9600},&lt;br /&gt;
		{&amp;quot;19200&amp;quot;, B19200},&lt;br /&gt;
		{&amp;quot;38400&amp;quot;, B38400},&lt;br /&gt;
		{&amp;quot;57600&amp;quot;, B57600},&lt;br /&gt;
		{&amp;quot;115200&amp;quot;, B115200},&lt;br /&gt;
		{NULL, 0}&lt;br /&gt;
	};&lt;br /&gt;
	int speed = B9600;&lt;br /&gt;
&lt;br /&gt;
	if(argc &amp;lt; 2) {&lt;br /&gt;
		fprintf(stderr, &amp;quot;example: %s /dev/ttyS0 [115200]\n&amp;quot;, argv[0]);&lt;br /&gt;
		exit(1);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	comfd = open(devicename, O_RDWR | O_NOCTTY | O_NONBLOCK);&lt;br /&gt;
	if (comfd &amp;lt; 0)&lt;br /&gt;
	{&lt;br /&gt;
		perror(devicename);&lt;br /&gt;
		exit(-1);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(argc &amp;gt; 2) {	&lt;br /&gt;
		speed_spec *s;&lt;br /&gt;
		for(s = speeds; s-&amp;gt;name; s++) {&lt;br /&gt;
			if(strcmp(s-&amp;gt;name, argv[2]) == 0) {&lt;br /&gt;
				speed = s-&amp;gt;flag;&lt;br /&gt;
				fprintf(stderr, &amp;quot;setting speed %s\n&amp;quot;, s-&amp;gt;name);&lt;br /&gt;
				break;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	fprintf(stderr, &amp;quot;C-a exit, C-x modem lines status\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	tcgetattr(STDIN_FILENO,&amp;amp;oldkey);&lt;br /&gt;
	newkey.c_cflag = B9600 | CRTSCTS | CS8 | CLOCAL | CREAD;&lt;br /&gt;
	newkey.c_iflag = IGNPAR;&lt;br /&gt;
	newkey.c_oflag = 0;&lt;br /&gt;
	newkey.c_lflag = 0;&lt;br /&gt;
	newkey.c_cc[VMIN]=1;&lt;br /&gt;
	newkey.c_cc[VTIME]=0;&lt;br /&gt;
	tcflush(STDIN_FILENO, TCIFLUSH);&lt;br /&gt;
	tcsetattr(STDIN_FILENO,TCSANOW,&amp;amp;newkey);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	tcgetattr(comfd,&amp;amp;oldtio); // save current port settings &lt;br /&gt;
	newtio.c_cflag = speed | CS8 | CLOCAL | CREAD;&lt;br /&gt;
	newtio.c_iflag = IGNPAR;&lt;br /&gt;
	newtio.c_oflag = 0;&lt;br /&gt;
	newtio.c_lflag = 0;&lt;br /&gt;
	newtio.c_cc[VMIN]=1;&lt;br /&gt;
	newtio.c_cc[VTIME]=0;&lt;br /&gt;
	tcflush(comfd, TCIFLUSH);&lt;br /&gt;
	tcsetattr(comfd,TCSANOW,&amp;amp;newtio);&lt;br /&gt;
&lt;br /&gt;
	print_status(comfd);&lt;br /&gt;
&lt;br /&gt;
	while(!need_exit) {&lt;br /&gt;
		fd_set fds;&lt;br /&gt;
		int ret;&lt;br /&gt;
		&lt;br /&gt;
		FD_ZERO(&amp;amp;fds);&lt;br /&gt;
		FD_SET(STDIN_FILENO, &amp;amp;fds);&lt;br /&gt;
		FD_SET(comfd, &amp;amp;fds);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		ret = select(comfd+1, &amp;amp;fds, NULL, NULL, NULL);&lt;br /&gt;
		if(ret == -1) {&lt;br /&gt;
			perror(&amp;quot;select&amp;quot;);&lt;br /&gt;
		} else if (ret &amp;gt; 0) {&lt;br /&gt;
			if(FD_ISSET(STDIN_FILENO, &amp;amp;fds)) {&lt;br /&gt;
				need_exit = transfer_byte(STDIN_FILENO, comfd, 1);&lt;br /&gt;
			}&lt;br /&gt;
			if(FD_ISSET(comfd, &amp;amp;fds)) {&lt;br /&gt;
				need_exit = transfer_byte(comfd, STDIN_FILENO, 0);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	tcsetattr(comfd,TCSANOW,&amp;amp;oldtio);&lt;br /&gt;
	tcsetattr(STDIN_FILENO,TCSANOW,&amp;amp;oldkey);&lt;br /&gt;
	close(comfd);&lt;br /&gt;
&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int transfer_byte(int from, int to, int is_control) {&lt;br /&gt;
	char c;&lt;br /&gt;
	int ret;&lt;br /&gt;
	do {&lt;br /&gt;
		ret = read(from, &amp;amp;c, 1);&lt;br /&gt;
	} while (ret &amp;lt; 0 &amp;amp;&amp;amp; errno == EINTR);&lt;br /&gt;
	if(ret == 1) {&lt;br /&gt;
		if(is_control) {&lt;br /&gt;
			if(c == '\x01') { // C-a&lt;br /&gt;
				return -1;&lt;br /&gt;
			} else if(c == '\x18') { // C-x&lt;br /&gt;
				print_status(to);&lt;br /&gt;
				return 0;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		while(write(to, &amp;amp;c, 1) == -1) {&lt;br /&gt;
			if(errno!=EAGAIN &amp;amp;&amp;amp; errno!=EINTR) { perror(&amp;quot;write failed&amp;quot;); break; }&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		fprintf(stderr, &amp;quot;\nnothing to read. probably port disconnected.\n&amp;quot;);&lt;br /&gt;
		return -2;&lt;br /&gt;
	}&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Save to com.c&lt;br /&gt;
Building: cc -o com com.c&lt;br /&gt;
Usage   : ./com /dev/device [speed]&lt;br /&gt;
Example : ./com /dev/ttyS0 [115200]&lt;br /&gt;
Keys    : Ctrl-A - exit, Ctrl-X - display control lines status&lt;br /&gt;
[http://tinyserial.sf.net/ Sorce]&lt;br /&gt;
&lt;br /&gt;
Another Serial terminal :&lt;br /&gt;
There is a teletype tool written by Clifford Wolf based on tinyserial which is much more advanced.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (C) 2008 Clifford Wolf&lt;br /&gt;
 *&lt;br /&gt;
 * This program is based on Ivan Tikhonov's tinyserial project.&lt;br /&gt;
 * http://tinyserial.sourceforge.net&lt;br /&gt;
 *&lt;br /&gt;
 * ----------------------------------------------------------------------&lt;br /&gt;
 *&lt;br /&gt;
 * Usage: teletype device [speed] [escape-letter] [command(s)]&lt;br /&gt;
 *&lt;br /&gt;
 * Default speed is 9600 Baud.&lt;br /&gt;
 * Default escape letter is 'A'.&lt;br /&gt;
 *   &lt;br /&gt;
 * Control Key Kombos:&lt;br /&gt;
 *&lt;br /&gt;
 *   Ctrl-A A       Send a Ctrl-A over the line&lt;br /&gt;
 *   Ctrl-A B       Send a break over the line&lt;br /&gt;
 *   Ctrl-A P       Set the break period in deciseconds&lt;br /&gt;
 *   Ctrl-A 0       Send a a single zero byte over the line&lt;br /&gt;
 *   Ctrl-A H       Print help message (command overview)&lt;br /&gt;
 *   Ctrl-A R       Toggle RTS (Ready To Send) signal&lt;br /&gt;
 *   Ctrl-A D       Toggle DTR (Data Terminal Ready) signal&lt;br /&gt;
 *   Ctrl-A T       Toggle timestamp-mode and reset timer&lt;br /&gt;
 *   Ctrl-A L       Set slow send mode (N chars/sec, 0=unlimited)&lt;br /&gt;
 *   Ctrl-A N       Create network link to remote TCP/IP port&lt;br /&gt;
 *   Ctrl-A E       Toggle local terminal echo&lt;br /&gt;
 *   Ctrl-A C       Run a chat script (or any other command such as 'sx')&lt;br /&gt;
 *   Ctrl-A W       Wait one second (this is usefull for scripts)&lt;br /&gt;
 *   Ctrl-A U       Set baud rate (use with care!)&lt;br /&gt;
 *   Ctrl-A S       Print line status&lt;br /&gt;
 *   Ctrl-A \       Exit without serial reset&lt;br /&gt;
 *   Ctrl-A X       Exit with serial reset&lt;br /&gt;
 *&lt;br /&gt;
 *   Ctrl-A . [x]   Change escape key from Ctrl-A to Ctrl-[x]&lt;br /&gt;
 *&lt;br /&gt;
 * Commands are in the form of '-&amp;lt;Key&amp;gt;&amp;lt;Argument&amp;gt;'. E.g.:&lt;br /&gt;
 * teletype /dev/tts 9600 -b -l10 -c'chat -f myscript.txt' -l0 -u115200 -c'sx datafile.bin' -x&lt;br /&gt;
 *&lt;br /&gt;
 * ----------------------------------------------------------------------&lt;br /&gt;
 *&lt;br /&gt;
 * Ivan Tikhonov, http://www.brokestream.com, kefeer@brokestream.com&lt;br /&gt;
 * Patches by Jim Kou (jimkou@malico.com.tw) and Henry Nestler&lt;br /&gt;
 *&lt;br /&gt;
 * Copyright (C) 2007 Ivan Tikhonov&lt;br /&gt;
 *&lt;br /&gt;
 * This software is provided 'as-is', without any express or implied&lt;br /&gt;
 * warranty.  In no event will the authors be held liable for any damages&lt;br /&gt;
 * arising from the use of this software.&lt;br /&gt;
 *&lt;br /&gt;
 * Permission is granted to anyone to use this software for any purpose,&lt;br /&gt;
 * including commercial applications, and to alter it and redistribute it&lt;br /&gt;
 * freely, subject to the following restrictions:&lt;br /&gt;
 *&lt;br /&gt;
 * 1. The origin of this software must not be misrepresented; you must not&lt;br /&gt;
 *    claim that you wrote the original software. If you use this software&lt;br /&gt;
 *    in a product, an acknowledgment in the product documentation would be&lt;br /&gt;
 *    appreciated but is not required.&lt;br /&gt;
 * 2. Altered source versions must be plainly marked as such, and must not be&lt;br /&gt;
 *    misrepresented as being the original software.&lt;br /&gt;
 * 3. This notice may not be removed or altered from any source distribution.&lt;br /&gt;
 *&lt;br /&gt;
 * Ivan Tikhonov, kefeer@brokestream.com&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#define _GNU_SOURCE&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;termios.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/signal.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/ioctl.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/time.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/wait.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/socket.h&amp;gt;&lt;br /&gt;
#include &amp;lt;netinet/in.h&amp;gt;&lt;br /&gt;
#include &amp;lt;arpa/inet.h&amp;gt;&lt;br /&gt;
#include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;
#include &amp;lt;errno.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
typedef struct { char *name; int flag; } speed_spec;&lt;br /&gt;
&lt;br /&gt;
speed_spec speeds[] =&lt;br /&gt;
{&lt;br /&gt;
	{&amp;quot;1200&amp;quot;, B1200},&lt;br /&gt;
	{&amp;quot;2400&amp;quot;, B2400},&lt;br /&gt;
	{&amp;quot;4800&amp;quot;, B4800},&lt;br /&gt;
	{&amp;quot;9600&amp;quot;, B9600},&lt;br /&gt;
	{&amp;quot;19200&amp;quot;, B19200},&lt;br /&gt;
	{&amp;quot;38400&amp;quot;, B38400},&lt;br /&gt;
	{&amp;quot;57600&amp;quot;, B57600},&lt;br /&gt;
	{&amp;quot;115200&amp;quot;, B115200},&lt;br /&gt;
	{NULL, 0}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct termios newtio;&lt;br /&gt;
&lt;br /&gt;
char escape_letter = 'A';&lt;br /&gt;
&lt;br /&gt;
int timestamp_mode = 0;&lt;br /&gt;
struct timeval timestamp_start;&lt;br /&gt;
&lt;br /&gt;
int chat_ptmx = -1;&lt;br /&gt;
int chat_autoexit = 0;&lt;br /&gt;
int break_period = 0;&lt;br /&gt;
&lt;br /&gt;
int skip_serial_reset = 0;&lt;br /&gt;
int slow_send = 0;&lt;br /&gt;
int local_echo = 0;&lt;br /&gt;
int comfd;&lt;br /&gt;
&lt;br /&gt;
int net_fd;&lt;br /&gt;
struct sockaddr_in net_peer;&lt;br /&gt;
int net_active;&lt;br /&gt;
&lt;br /&gt;
void print_status(int fd)&lt;br /&gt;
{&lt;br /&gt;
	unsigned int arg;&lt;br /&gt;
	ioctl(fd, TIOCMGET, &amp;amp;arg);&lt;br /&gt;
	fprintf(stderr, &amp;quot;[STATUS]:&amp;quot;);&lt;br /&gt;
	if (arg &amp;amp; TIOCM_RTS) fprintf(stderr, &amp;quot; RTS&amp;quot;);&lt;br /&gt;
	if (arg &amp;amp; TIOCM_CTS) fprintf(stderr, &amp;quot; CTS&amp;quot;);&lt;br /&gt;
	if (arg &amp;amp; TIOCM_DSR) fprintf(stderr, &amp;quot; DSR&amp;quot;);&lt;br /&gt;
	if (arg &amp;amp; TIOCM_CAR) fprintf(stderr, &amp;quot; DCD&amp;quot;);&lt;br /&gt;
	if (arg &amp;amp; TIOCM_DTR) fprintf(stderr, &amp;quot; DTR&amp;quot;);&lt;br /&gt;
	if (arg &amp;amp; TIOCM_RNG) fprintf(stderr, &amp;quot; RI&amp;quot;);&lt;br /&gt;
	fprintf(stderr, &amp;quot;\r\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void print_help(int command_line_usage)&lt;br /&gt;
{&lt;br /&gt;
	fprintf(stderr, &amp;quot;\r\n&amp;quot;);&lt;br /&gt;
	fprintf(stderr, &amp;quot;---------------------------------------------------------\r\n&amp;quot;);&lt;br /&gt;
	fprintf(stderr, &amp;quot;\r\n&amp;quot;);&lt;br /&gt;
	if (command_line_usage) {&lt;br /&gt;
		fprintf(stderr, &amp;quot;Usage: teletype device [speed] [escape-letter] [command(s)]\r\n&amp;quot;);&lt;br /&gt;
		fprintf(stderr, &amp;quot;\r\n&amp;quot;);&lt;br /&gt;
		fprintf(stderr, &amp;quot;Default speed is 9600 Baud.\r\n&amp;quot;);&lt;br /&gt;
		fprintf(stderr, &amp;quot;Default escape letter is 'A'.\r\n&amp;quot;);&lt;br /&gt;
		fprintf(stderr, &amp;quot;\r\n&amp;quot;);&lt;br /&gt;
		fprintf(stderr, &amp;quot;Supported speed rates:\r\n&amp;quot;);&lt;br /&gt;
		speed_spec *s;&lt;br /&gt;
		for (s = speeds; s-&amp;gt;name; s++) {&lt;br /&gt;
			fprintf(stderr, &amp;quot;%s%s&amp;quot;, s == speeds ? &amp;quot;  &amp;quot; : &amp;quot;, &amp;quot;, s-&amp;gt;name);&lt;br /&gt;
		}&lt;br /&gt;
		fprintf(stderr, &amp;quot;\r\n\r\n&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	fprintf(stderr, &amp;quot;Control Key Kombos:\r\n&amp;quot;);&lt;br /&gt;
	fprintf(stderr, &amp;quot;\r\n&amp;quot;);&lt;br /&gt;
	fprintf(stderr, &amp;quot;  Ctrl-%c A       Send a Ctrl-%c over the line\r\n&amp;quot;, escape_letter, escape_letter);&lt;br /&gt;
	fprintf(stderr, &amp;quot;  Ctrl-%c B       Send a break over the line\r\n&amp;quot;, escape_letter);&lt;br /&gt;
	fprintf(stderr, &amp;quot;  Ctrl-%c P       Set the break period in deciseconds\r\n&amp;quot;, escape_letter);&lt;br /&gt;
	fprintf(stderr, &amp;quot;  Ctrl-%c 0       Send a a single zero byte over the line\r\n&amp;quot;, escape_letter);&lt;br /&gt;
	fprintf(stderr, &amp;quot;  Ctrl-%c H       Print help message (command overview)\r\n&amp;quot;, escape_letter);&lt;br /&gt;
	fprintf(stderr, &amp;quot;  Ctrl-%c R       Toggle RTS (Ready To Send) signal\r\n&amp;quot;, escape_letter);&lt;br /&gt;
	fprintf(stderr, &amp;quot;  Ctrl-%c D       Toggle DTR (Data Terminal Ready) signal\r\n&amp;quot;, escape_letter);&lt;br /&gt;
	fprintf(stderr, &amp;quot;  Ctrl-%c T       Toggle timestamp-mode and reset timer\r\n&amp;quot;, escape_letter);&lt;br /&gt;
	fprintf(stderr, &amp;quot;  Ctrl-%c L       Set slow send mode (N chars/sec, 0=unlimited)\r\n&amp;quot;, escape_letter);&lt;br /&gt;
	fprintf(stderr, &amp;quot;  Ctrl-%c N       Create network link to remote TCP/IP port\r\n&amp;quot;, escape_letter);&lt;br /&gt;
	fprintf(stderr, &amp;quot;  Ctrl-%c E       Toggle local terminal echo\r\n&amp;quot;, escape_letter);&lt;br /&gt;
	fprintf(stderr, &amp;quot;  Ctrl-%c C       Run a chat script (or any other command such as 'sx')\r\n&amp;quot;, escape_letter);&lt;br /&gt;
	fprintf(stderr, &amp;quot;  Ctrl-%c W       Wait one second (this is usefull for scripts)\r\n&amp;quot;, escape_letter);&lt;br /&gt;
	fprintf(stderr, &amp;quot;  Ctrl-%c U       Set baud rate (use with care!)\r\n&amp;quot;, escape_letter);&lt;br /&gt;
	fprintf(stderr, &amp;quot;  Ctrl-%c S       Print line status\r\n&amp;quot;, escape_letter);&lt;br /&gt;
	fprintf(stderr, &amp;quot;  Ctrl-%c \\       Exit without serial reset\r\n&amp;quot;, escape_letter);&lt;br /&gt;
	fprintf(stderr, &amp;quot;  Ctrl-%c X       Exit with serial reset\r\n&amp;quot;, escape_letter);&lt;br /&gt;
	fprintf(stderr, &amp;quot;\r\n&amp;quot;);&lt;br /&gt;
	fprintf(stderr, &amp;quot;  Ctrl-%c . [x]   Change escape key from Ctrl-%c to Ctrl-[x]\r\n&amp;quot;, escape_letter, escape_letter);&lt;br /&gt;
	fprintf(stderr, &amp;quot;\r\n&amp;quot;);&lt;br /&gt;
	if (command_line_usage) {&lt;br /&gt;
		fprintf(stderr, &amp;quot;Commands are in the form of '-&amp;lt;Key&amp;gt;&amp;lt;Argument&amp;gt;'. E.g.:\r\n&amp;quot;);&lt;br /&gt;
		fprintf(stderr, &amp;quot;teletype /dev/tts 9600 -b -l10 -c'chat -f myscript.txt' -l0 -u115200 -c'sx datafile.bin' -x\r\n&amp;quot;);&lt;br /&gt;
		fprintf(stderr, &amp;quot;\r\n&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	fprintf(stderr, &amp;quot;---------------------------------------------------------\r\n&amp;quot;);&lt;br /&gt;
	fprintf(stderr, &amp;quot;\r\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void chat_close()&lt;br /&gt;
{&lt;br /&gt;
	if (chat_ptmx != -1) {&lt;br /&gt;
		close(chat_ptmx);&lt;br /&gt;
		chat_ptmx = -1;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void chat_open(const char *command_string)&lt;br /&gt;
{&lt;br /&gt;
	chat_close();&lt;br /&gt;
&lt;br /&gt;
	fprintf(stderr, &amp;quot;** CONTROL TURNED OVER TO CHAT SCRIPT (Ctrl-C = Abort) **\r\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	chat_ptmx = posix_openpt(O_RDWR|O_NOCTTY);&lt;br /&gt;
&lt;br /&gt;
	grantpt(chat_ptmx);&lt;br /&gt;
	unlockpt(chat_ptmx);&lt;br /&gt;
&lt;br /&gt;
	if (!fork())&lt;br /&gt;
	{&lt;br /&gt;
		close(0);&lt;br /&gt;
		close(1);&lt;br /&gt;
&lt;br /&gt;
		open(ptsname(chat_ptmx), O_RDWR);&lt;br /&gt;
		if (dup(0) &amp;lt; 0) {&lt;br /&gt;
			perror(&amp;quot;dup in chat_open() failed&amp;quot;);&lt;br /&gt;
			_exit(-1);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		execl(&amp;quot;/bin/sh&amp;quot;, &amp;quot;sh&amp;quot;, &amp;quot;-c&amp;quot;, command_string, NULL);&lt;br /&gt;
		_exit(-1);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
float tv_diff(struct timeval *a, struct timeval *b)&lt;br /&gt;
{&lt;br /&gt;
	float diff = 0;&lt;br /&gt;
	if (a-&amp;gt;tv_sec &amp;lt; b-&amp;gt;tv_sec)&lt;br /&gt;
		diff = ((1000000 - a-&amp;gt;tv_usec) + b-&amp;gt;tv_usec) / 1000000.0 + (b-&amp;gt;tv_sec - (a-&amp;gt;tv_sec + 1));&lt;br /&gt;
	else&lt;br /&gt;
		diff = (b-&amp;gt;tv_usec - a-&amp;gt;tv_usec) / 1000000.0;&lt;br /&gt;
	return diff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int user_input(int from, char *prompt, char *line, int n, char *argument)&lt;br /&gt;
{&lt;br /&gt;
	if (argument) {&lt;br /&gt;
		snprintf(line, n, &amp;quot;%s&amp;quot;, argument);&lt;br /&gt;
		fprintf(stderr, &amp;quot;\r\n%s: %s\r\n&amp;quot;, prompt, line);&lt;br /&gt;
		return 0;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	char c;&lt;br /&gt;
	int i = strlen(line);&lt;br /&gt;
&lt;br /&gt;
	fprintf(stderr, &amp;quot;\r\n%s: %s&amp;quot;, prompt, line);&lt;br /&gt;
&lt;br /&gt;
	while (1)&lt;br /&gt;
	{&lt;br /&gt;
		if (read(from, &amp;amp;c, 1) != 1)&lt;br /&gt;
			return 1;&lt;br /&gt;
		if (c == '\b' || c == 127) {&lt;br /&gt;
			if (i &amp;gt; 0) {&lt;br /&gt;
				fprintf(stderr, &amp;quot;\b \b&amp;quot;);&lt;br /&gt;
				line[--i] = 0;&lt;br /&gt;
			}&lt;br /&gt;
		} else if (c == 21 /* NAK */) {&lt;br /&gt;
			while (i &amp;gt; 0) {&lt;br /&gt;
				fprintf(stderr, &amp;quot;\b \b&amp;quot;);&lt;br /&gt;
				line[--i] = 0;&lt;br /&gt;
			}&lt;br /&gt;
		} else if (c == '\r' || c == '\n') {&lt;br /&gt;
			fprintf(stderr, &amp;quot;\r\n&amp;quot;);&lt;br /&gt;
			return 0;&lt;br /&gt;
		} else if (c &amp;gt;= ' ' &amp;amp;&amp;amp; i &amp;lt; n-1) {&lt;br /&gt;
			fputc(c, stderr);&lt;br /&gt;
			line[i++] = c;&lt;br /&gt;
			line[i] = 0;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int transfer_byte(int from, int to, int is_control, int command, char *argument)&lt;br /&gt;
{&lt;br /&gt;
	char c;&lt;br /&gt;
	static int got_escape = 0;&lt;br /&gt;
	char escape_c = escape_letter - 'A' + 1;&lt;br /&gt;
	if (command || read(from, &amp;amp;c, 1) == 1)&lt;br /&gt;
	{&lt;br /&gt;
		if (command || is_control) {&lt;br /&gt;
			if (command || got_escape) {&lt;br /&gt;
				if (command)&lt;br /&gt;
					c = command;&lt;br /&gt;
				got_escape = 0;&lt;br /&gt;
				if (c == 'b' || c == 'B') {&lt;br /&gt;
					if (break_period == 0) {&lt;br /&gt;
						tcsendbreak(to, 0);&lt;br /&gt;
					} else {&lt;br /&gt;
						ioctl(to, TCSBRKP, break_period);&lt;br /&gt;
					}&lt;br /&gt;
					return 0;&lt;br /&gt;
				}&lt;br /&gt;
				if (c == 'p' || c == 'P') {&lt;br /&gt;
					static char periodstring[4096] = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
					if (user_input(from, &amp;quot;Enter break period in deciseconds (0=default)&amp;quot;, periodstring, 4096, argument))&lt;br /&gt;
						goto read_error;&lt;br /&gt;
&lt;br /&gt;
					break_period = atoi(periodstring);&lt;br /&gt;
&lt;br /&gt;
					return 0;&lt;br /&gt;
				}&lt;br /&gt;
				if (c == '0') {&lt;br /&gt;
					c = 0;&lt;br /&gt;
					goto send_byte;&lt;br /&gt;
				}&lt;br /&gt;
				if (c == 'h' || c == 'H') {&lt;br /&gt;
					print_help(0);&lt;br /&gt;
					return 0;&lt;br /&gt;
				}&lt;br /&gt;
				if (c == 'r' || c == 'R') {&lt;br /&gt;
					unsigned int arg;&lt;br /&gt;
					ioctl(to, TIOCMGET, &amp;amp;arg);&lt;br /&gt;
					arg ^= TIOCM_RTS;&lt;br /&gt;
					ioctl(to, TIOCMSET, &amp;amp;arg);&lt;br /&gt;
					return 0;&lt;br /&gt;
				}&lt;br /&gt;
				if (c == 'd' || c == 'D') {&lt;br /&gt;
					unsigned int arg;&lt;br /&gt;
					ioctl(to, TIOCMGET, &amp;amp;arg);&lt;br /&gt;
					arg ^= TIOCM_DTR;&lt;br /&gt;
					ioctl(to, TIOCMSET, &amp;amp;arg);&lt;br /&gt;
					return 0;&lt;br /&gt;
				}&lt;br /&gt;
				if (c == 't' || c == 'T') {&lt;br /&gt;
					gettimeofday(&amp;amp;timestamp_start, NULL);&lt;br /&gt;
					timestamp_mode = !timestamp_mode;&lt;br /&gt;
					return 0;&lt;br /&gt;
				}&lt;br /&gt;
				if (c == 'l' || c == 'L') {&lt;br /&gt;
					static char ratestring[4096] = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
					if (user_input(from, &amp;quot;Enter rate in chars/second (0=unlimited)&amp;quot;, ratestring, 4096, argument))&lt;br /&gt;
						goto read_error;&lt;br /&gt;
&lt;br /&gt;
					slow_send = atoi(ratestring);&lt;br /&gt;
&lt;br /&gt;
					return 0;&lt;br /&gt;
				}&lt;br /&gt;
				if (c == 'n' || c == 'N') {&lt;br /&gt;
					static char connstring[4096] = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
					if (user_input(from, &amp;quot;Enter remote port (IP-ADDR:PORT)&amp;quot;, connstring, 4096, argument))&lt;br /&gt;
						goto read_error;&lt;br /&gt;
&lt;br /&gt;
					char *ips = strtok(connstring, &amp;quot;:&amp;quot;);&lt;br /&gt;
					char *ports = strtok(NULL, &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
					if (net_active) {&lt;br /&gt;
						close(net_fd);&lt;br /&gt;
						net_active = 0;&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
					if (ips &amp;amp;&amp;amp; ports) {&lt;br /&gt;
						bzero(&amp;amp;net_peer, sizeof(net_peer));&lt;br /&gt;
						net_peer.sin_family = AF_INET;&lt;br /&gt;
						net_peer.sin_addr.s_addr = inet_addr(ips);&lt;br /&gt;
						net_peer.sin_port = htons(atoi(ports));&lt;br /&gt;
						net_fd = socket(PF_INET, SOCK_STREAM, 0);&lt;br /&gt;
						connect(net_fd, (struct sockaddr*)&amp;amp;net_peer, sizeof(net_peer));&lt;br /&gt;
						net_active = 1;&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
					return 0;&lt;br /&gt;
				}&lt;br /&gt;
				if (c == 'e' || c == 'E') {&lt;br /&gt;
					local_echo = !local_echo;&lt;br /&gt;
					return 0;&lt;br /&gt;
				}&lt;br /&gt;
				if (c == 's' || c == 'S') {&lt;br /&gt;
					print_status(to);&lt;br /&gt;
					return 0;&lt;br /&gt;
				}&lt;br /&gt;
				if (c == 'c' || c == 'C') {&lt;br /&gt;
					static char command[4096] = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
					if (user_input(from, &amp;quot;Enter chat script command&amp;quot;, command, 4096, argument))&lt;br /&gt;
						goto read_error;&lt;br /&gt;
&lt;br /&gt;
					if (command[0])&lt;br /&gt;
						chat_open(command);&lt;br /&gt;
&lt;br /&gt;
					return 0;&lt;br /&gt;
				}&lt;br /&gt;
				if (c == 'w' || c == 'W') {&lt;br /&gt;
					sleep(1);&lt;br /&gt;
					return 0;&lt;br /&gt;
				}&lt;br /&gt;
				if (c == 'u' || c == 'U') {&lt;br /&gt;
					static char baud_rate[4096] = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
					if (user_input(from, &amp;quot;Enter new baud rate&amp;quot;, baud_rate, 4096, argument))&lt;br /&gt;
						goto read_error;&lt;br /&gt;
&lt;br /&gt;
					speed_spec *s;&lt;br /&gt;
					for (s = speeds; s-&amp;gt;name; s++) {&lt;br /&gt;
						if(strcmp(s-&amp;gt;name, baud_rate) == 0) {&lt;br /&gt;
							newtio.c_cflag = s-&amp;gt;flag | CS8 | CREAD;&lt;br /&gt;
							tcflush(to, TCIFLUSH);&lt;br /&gt;
							tcsetattr(to, TCSANOW, &amp;amp;newtio);&lt;br /&gt;
							break;&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
					return 0;&lt;br /&gt;
				}&lt;br /&gt;
				if (c == '\\') {&lt;br /&gt;
					fprintf(stderr, &amp;quot;\r\nBye (without reset).\r\n&amp;quot;);&lt;br /&gt;
					skip_serial_reset = 1;&lt;br /&gt;
					return -1;&lt;br /&gt;
				}&lt;br /&gt;
				if (c == 'x' || c == 'X') {&lt;br /&gt;
					fprintf(stderr, &amp;quot;\r\nBye.\r\n&amp;quot;);&lt;br /&gt;
					return -1;&lt;br /&gt;
				}&lt;br /&gt;
				if (c == '.') {&lt;br /&gt;
					fprintf(stderr, &amp;quot;\r\nType new escape letter: &amp;quot;);&lt;br /&gt;
					if (read(from, &amp;amp;c, 1) != 1)&lt;br /&gt;
						goto read_error;&lt;br /&gt;
					if (c &amp;gt;= 'a' &amp;amp;&amp;amp; c &amp;lt;= 'z')&lt;br /&gt;
						c -= 'a' - 'A';&lt;br /&gt;
					if (c &amp;gt;= 'A' &amp;amp;&amp;amp; c &amp;lt;= 'Z') {&lt;br /&gt;
						escape_letter = c;&lt;br /&gt;
						fprintf(stderr, &amp;quot;%c\r\nType [Ctrl-%c H] for help\r\n&amp;quot;, escape_letter, escape_letter);&lt;br /&gt;
					} else {&lt;br /&gt;
						fprintf(stderr, &amp;quot;%c\r\nThe character you typed is not a letter!\r\n&amp;quot;, c);&lt;br /&gt;
					}&lt;br /&gt;
					return 0;&lt;br /&gt;
				}&lt;br /&gt;
				if (write(to, &amp;amp;escape_c, 1) != 1) {&lt;br /&gt;
					perror(&amp;quot;write failed&amp;quot;);&lt;br /&gt;
					return -1;&lt;br /&gt;
				}&lt;br /&gt;
				if (c == 'a' || c == 'A')&lt;br /&gt;
					return 0;&lt;br /&gt;
			}&lt;br /&gt;
			if (c == escape_c) {&lt;br /&gt;
				got_escape = 1;&lt;br /&gt;
				return 0;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (!is_control &amp;amp;&amp;amp; timestamp_mode)&lt;br /&gt;
		{&lt;br /&gt;
			static int got_nl_cr = 0;&lt;br /&gt;
&lt;br /&gt;
			if (c == '\n' || c == '\r') {&lt;br /&gt;
				got_nl_cr = 1;&lt;br /&gt;
			} else&lt;br /&gt;
			if (got_nl_cr) {&lt;br /&gt;
				struct timeval tv;&lt;br /&gt;
				gettimeofday(&amp;amp;tv, NULL);&lt;br /&gt;
				fprintf(stdout, &amp;quot;&amp;lt;%7.3fs&amp;gt; &amp;quot;, tv_diff(&amp;amp;timestamp_start, &amp;amp;tv));&lt;br /&gt;
				fflush(stdout);&lt;br /&gt;
				got_nl_cr = 0;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
send_byte:&lt;br /&gt;
		if (slow_send &amp;amp;&amp;amp; to != STDOUT_FILENO) {&lt;br /&gt;
			usleep(1000000 / slow_send);&lt;br /&gt;
		}&lt;br /&gt;
		if (to == STDOUT_FILENO &amp;amp;&amp;amp; chat_ptmx != -1) {&lt;br /&gt;
			if (write(chat_ptmx, &amp;amp;c, 1) != 1)&lt;br /&gt;
				perror(&amp;quot;Single char write to chat_ptmx failed&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if (to == STDOUT_FILENO &amp;amp;&amp;amp; net_active) {&lt;br /&gt;
			if (write(net_fd, &amp;amp;c, 1) != 1)&lt;br /&gt;
				perror(&amp;quot;Single char write to net_fd failed&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if (to == comfd &amp;amp;&amp;amp; local_echo) {&lt;br /&gt;
			if (write(STDOUT_FILENO, &amp;amp;c, 1) != 1)&lt;br /&gt;
				perror(&amp;quot;Single char write to STDOUT_FILENO failed&amp;quot;);&lt;br /&gt;
			if (c == '\r') {&lt;br /&gt;
				if (write(STDOUT_FILENO, &amp;quot;\n&amp;quot;, 1) != 1)&lt;br /&gt;
					perror(&amp;quot;Single char write to STDOUT_FILENO failed&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		if (write(to, &amp;amp;c, 1) != 1) {&lt;br /&gt;
			perror(&amp;quot;write failed&amp;quot;);&lt;br /&gt;
			return -2;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
read_error:&lt;br /&gt;
		if (from == chat_ptmx &amp;amp;&amp;amp; chat_ptmx != -1) {&lt;br /&gt;
			chat_close();&lt;br /&gt;
			int status;&lt;br /&gt;
			if (wait(&amp;amp;status) &amp;gt;= 0 &amp;amp;&amp;amp; WEXITSTATUS(status) != 0) {&lt;br /&gt;
				fprintf(stderr, &amp;quot;\r\n** CHAT SCRIPT RETURNED ERROR CODE %d! **\r\n&amp;quot;, WEXITSTATUS(status));&lt;br /&gt;
				return -1;&lt;br /&gt;
			}&lt;br /&gt;
			fprintf(stderr, &amp;quot;\r\n** END OF CHAT SCRIPT **\r\n&amp;quot;);&lt;br /&gt;
			return chat_autoexit;&lt;br /&gt;
		}&lt;br /&gt;
		fprintf(stderr, &amp;quot;nothing to read. probably port disconnected.\n&amp;quot;);&lt;br /&gt;
		return -2;&lt;br /&gt;
	}&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[])&lt;br /&gt;
{&lt;br /&gt;
	struct termios oldtio;&lt;br /&gt;
	struct termios oldkey_stdin, oldkey_stdout, newkey;&lt;br /&gt;
	char *devicename = argv[1];&lt;br /&gt;
	int need_exit = 0;&lt;br /&gt;
	int speed = B9600;&lt;br /&gt;
&lt;br /&gt;
	if (argc &amp;lt; 2)&lt;br /&gt;
	{&lt;br /&gt;
		print_help(1);&lt;br /&gt;
		exit(1);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	comfd = open(devicename, O_RDWR | O_NOCTTY | O_NONBLOCK);&lt;br /&gt;
	if (comfd &amp;lt; 0)&lt;br /&gt;
	{&lt;br /&gt;
		perror(devicename);&lt;br /&gt;
		exit(-1);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	while (argc &amp;gt; 2)&lt;br /&gt;
	{	&lt;br /&gt;
		speed_spec *s;&lt;br /&gt;
		for (s = speeds; s-&amp;gt;name; s++) {&lt;br /&gt;
			if(strcmp(s-&amp;gt;name, argv[2]) == 0) {&lt;br /&gt;
				speed = s-&amp;gt;flag;&lt;br /&gt;
				break;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		if (s-&amp;gt;name) {&lt;br /&gt;
			argc--; argv++;&lt;br /&gt;
			continue;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (argv[2][0] &amp;gt;= 'A' &amp;amp;&amp;amp; argv[2][0] &amp;lt;= 'Z' &amp;amp;&amp;amp; !argv[2][1]) {&lt;br /&gt;
			escape_letter = argv[2][0];&lt;br /&gt;
			argc--; argv++;&lt;br /&gt;
			continue;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (argv[2][0] &amp;gt;= 'a' &amp;amp;&amp;amp; argv[2][0] &amp;lt;= 'z' &amp;amp;&amp;amp; !argv[2][1]) {&lt;br /&gt;
			escape_letter = argv[2][0] - ('a' - 'A');&lt;br /&gt;
			argc--; argv++;&lt;br /&gt;
			continue;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// if ((argv[2][0] &amp;lt; '0' || argv[2][0] &amp;gt; '9') &amp;amp;&amp;amp; argv[2][1]) {&lt;br /&gt;
		// 	chat_open(argv[2]);&lt;br /&gt;
		// 	chat_autoexit = 1;&lt;br /&gt;
		// 	argc--; argv++;&lt;br /&gt;
		// 	continue;&lt;br /&gt;
		// }&lt;br /&gt;
&lt;br /&gt;
		if (argv[2][0] == '-')&lt;br /&gt;
			break;&lt;br /&gt;
&lt;br /&gt;
		print_help(1);&lt;br /&gt;
		exit(1);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	tcgetattr(STDIN_FILENO, &amp;amp;oldkey_stdin);&lt;br /&gt;
	tcgetattr(STDOUT_FILENO, &amp;amp;oldkey_stdout);&lt;br /&gt;
	memset(&amp;amp;newkey, 0, sizeof(newkey));&lt;br /&gt;
	newkey.c_cflag = B9600 | CRTSCTS | CS8 | CLOCAL | CREAD;&lt;br /&gt;
	newkey.c_iflag = IGNPAR;&lt;br /&gt;
	newkey.c_oflag = 0;&lt;br /&gt;
	newkey.c_lflag = 0;&lt;br /&gt;
	newkey.c_cc[VMIN]=1;&lt;br /&gt;
	newkey.c_cc[VTIME]=0;&lt;br /&gt;
	tcflush(STDIN_FILENO, TCIFLUSH);&lt;br /&gt;
	tcflush(STDOUT_FILENO, TCIFLUSH);&lt;br /&gt;
	tcsetattr(STDIN_FILENO, TCSANOW, &amp;amp;newkey);&lt;br /&gt;
	tcsetattr(STDOUT_FILENO, TCSANOW, &amp;amp;newkey);&lt;br /&gt;
&lt;br /&gt;
	tcgetattr(comfd, &amp;amp;oldtio);&lt;br /&gt;
	newtio.c_cflag = speed | CS8 | CREAD;&lt;br /&gt;
	newtio.c_iflag = IGNPAR;&lt;br /&gt;
	newtio.c_oflag = 0;&lt;br /&gt;
	newtio.c_lflag = 0;&lt;br /&gt;
	newtio.c_cc[VMIN]=1;&lt;br /&gt;
	newtio.c_cc[VTIME]=0;&lt;br /&gt;
	tcflush(comfd, TCIFLUSH);&lt;br /&gt;
	tcsetattr(comfd, TCSANOW, &amp;amp;newtio);&lt;br /&gt;
&lt;br /&gt;
	if (!chat_autoexit) {&lt;br /&gt;
		fprintf(stderr, &amp;quot;Type [Ctrl-%c H] for help\r\n&amp;quot;, escape_letter);&lt;br /&gt;
		print_status(comfd);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	while (!need_exit)&lt;br /&gt;
	{&lt;br /&gt;
		fd_set fds;&lt;br /&gt;
		int max_fd = 0;&lt;br /&gt;
		int ret;&lt;br /&gt;
		&lt;br /&gt;
		FD_ZERO(&amp;amp;fds);&lt;br /&gt;
&lt;br /&gt;
		if (chat_ptmx != -1) {&lt;br /&gt;
			FD_SET(chat_ptmx, &amp;amp;fds);&lt;br /&gt;
			if (chat_ptmx &amp;gt;= max_fd)&lt;br /&gt;
				max_fd = chat_ptmx+1;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		FD_SET(STDIN_FILENO, &amp;amp;fds);&lt;br /&gt;
		if (STDIN_FILENO &amp;gt;= max_fd)&lt;br /&gt;
			max_fd = STDIN_FILENO+1;&lt;br /&gt;
&lt;br /&gt;
		FD_SET(comfd, &amp;amp;fds);&lt;br /&gt;
		if (comfd &amp;gt;= max_fd)&lt;br /&gt;
			max_fd = comfd+1;&lt;br /&gt;
&lt;br /&gt;
		if (net_active) {&lt;br /&gt;
			FD_SET(net_fd, &amp;amp;fds);&lt;br /&gt;
			if (net_fd &amp;gt;= max_fd)&lt;br /&gt;
				max_fd = net_fd+1;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (argc &amp;gt; 2 &amp;amp;&amp;amp; chat_ptmx == -1) {&lt;br /&gt;
			struct timeval timeout = { 0, 100000 };&lt;br /&gt;
			ret = select(max_fd, &amp;amp;fds, NULL, NULL, &amp;amp;timeout);&lt;br /&gt;
		} else {&lt;br /&gt;
			ret = select(max_fd, &amp;amp;fds, NULL, NULL, NULL);&lt;br /&gt;
		}&lt;br /&gt;
		if (ret == -1) {&lt;br /&gt;
			perror(&amp;quot;select&amp;quot;);&lt;br /&gt;
			need_exit = -2;&lt;br /&gt;
		} else if (ret &amp;gt; 0) {&lt;br /&gt;
			if (FD_ISSET(comfd, &amp;amp;fds)) {&lt;br /&gt;
				need_exit = transfer_byte(comfd, STDOUT_FILENO, 0, 0, NULL);&lt;br /&gt;
			} else if (FD_ISSET(STDIN_FILENO, &amp;amp;fds)) {&lt;br /&gt;
				if (argc &amp;gt; 2) {&lt;br /&gt;
					unsigned char ch;&lt;br /&gt;
					if (read(STDIN_FILENO, &amp;amp;ch, 1) == 1 &amp;amp;&amp;amp; ch == 3) {&lt;br /&gt;
						fprintf(stderr, &amp;quot;\r\n** COMMANDS ABORT **\r\n&amp;quot;);&lt;br /&gt;
						need_exit = -3;&lt;br /&gt;
					}&lt;br /&gt;
				} else if (chat_ptmx != -1) {&lt;br /&gt;
					unsigned char ch;&lt;br /&gt;
					if (read(STDIN_FILENO, &amp;amp;ch, 1) == 1 &amp;amp;&amp;amp; ch == 3) {&lt;br /&gt;
						fprintf(stderr, &amp;quot;\r\n** CHAT SCRIPT ABORT **\r\n&amp;quot;);&lt;br /&gt;
						chat_close();&lt;br /&gt;
						if (chat_autoexit) {&lt;br /&gt;
							fprintf(stderr, &amp;quot;Type [Ctrl-%c H] for help\r\n&amp;quot;, escape_letter);&lt;br /&gt;
							chat_autoexit = 0;&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				} else&lt;br /&gt;
					need_exit = transfer_byte(STDIN_FILENO, comfd, 1, 0, NULL);&lt;br /&gt;
			} else if (chat_ptmx != -1 &amp;amp;&amp;amp; FD_ISSET(chat_ptmx, &amp;amp;fds)) {&lt;br /&gt;
				need_exit = transfer_byte(chat_ptmx, comfd, 0, 0, NULL);&lt;br /&gt;
			} else if (net_active &amp;amp;&amp;amp; FD_ISSET(net_fd, &amp;amp;fds)) {&lt;br /&gt;
				need_exit = transfer_byte(net_fd, comfd, 0, 0, NULL);&lt;br /&gt;
			}&lt;br /&gt;
		} else if (argc &amp;gt; 2 &amp;amp;&amp;amp; chat_ptmx == -1) {&lt;br /&gt;
			if (argv[2][0] == '-' &amp;amp;&amp;amp; argv[2][1]) {&lt;br /&gt;
				fprintf(stderr, &amp;quot;\r\n** COMMAND: %s **\r\n&amp;quot;, &amp;amp;argv[2][1]);&lt;br /&gt;
				need_exit = transfer_byte(STDIN_FILENO, comfd, 1, argv[2][1], &amp;amp;argv[2][2]);&lt;br /&gt;
				argc--; argv++;&lt;br /&gt;
			} else {&lt;br /&gt;
				fprintf(stderr, &amp;quot;\r\n** COMMANDS SYNTAX ERROR **\r\n&amp;quot;);&lt;br /&gt;
				need_exit = 1;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	tcsetattr(STDIN_FILENO, TCSANOW, &amp;amp;oldkey_stdin);&lt;br /&gt;
	tcsetattr(STDOUT_FILENO, TCSANOW, &amp;amp;oldkey_stdout);&lt;br /&gt;
	if (!skip_serial_reset)&lt;br /&gt;
		tcsetattr(comfd, TCSANOW, &amp;amp;oldtio);&lt;br /&gt;
	close(comfd);&lt;br /&gt;
&lt;br /&gt;
	return need_exit &amp;lt; 0 ? -need_exit : 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[http://brokestream.com/tinyserial.html Source]&lt;/div&gt;</summary>
		<author><name>Snifer</name></author>	</entry>

	</feed>