microcom Serial Terminal Emulator
1. Description
2. Features
3. Usage
4. Setup and Help
5. Script Language
6. Distribution
7. LRP disk
8. Support
9. Acknowledgment
1. Description
microcom is a minicom-like serial terminal emulator with scripting support. The requirement for this program was to be small enough to fit on a floppy-based Linux distribution - such as the one from Linux Router Project. We managed to bring the executable size down under 17k, no ncurses library support required.
This software is released under GNU General Public License.
Rev. 1.02 - August 2000
- fixed bug: if the script fails because of a syntax error, terminal settings are not restored correctly upon program exit;
- fixed bug: if a script line is longer than 80 characters, the line will not be interpreted correctly
- fixed documentation
- add modem autodetection
- add log facility
Rev. 1.01 - March 2000
- correctly restore terminal settings upon program exit;
- merge fix submitted by Wesley Stupar: "In the case of ~tn or ~th or ~ts, the pts structure was not getting initialized before saving. It made the connection freeze in my case."
Rev. 1.00 - February 2000
2. Features
Add/strip line feeds, local echo control
Hardware/software flow control support
8 bit, one stop, no parity
Support for standard speeds form 1200 to 460800 bps
Default UNIX tty emulation
BASIC like script language support
Distribution: source code, LINUX executable, LRP based floppy
Automatic modem detection
3. Usage
The command to start microcom is:
microcom [options]
[options] include:
-Ddevfile use the specified serial port device;
if a port is not provided, microcom
will try to autodetect a modem
example: -D/dev/ttyS3
-S run script from script.scr (default)
-Sscrfile run script from scrfile
microcom provides session logging in microcom.log file
WinDOS to Linux mapping of the serial ports is as follows
WinDOS Linux
-----------------------------------
com1 /dev/ttyS0
com2 /dev/ttyS1
com3 /dev/ttyS2
com4 /dev/ttyS3
Usage examples:
microcom - microcom will try to autodetect a modem
microcom -D/dev/ttyS3 - run microcom on /dev/ttyS3 (com4 equiv.)
microcom -S - start the default script.scr script
microcom -Smyscript - run the script from myscript file
4. Setup and Help
To access the setup and help facilities of microcom press the ~ key. The program will display the main help screen:
**********Help***********
x - quit microcom
b - send break
l - log on
s - start script
t - set terminal
q - quit help
*************************
- x - exit microcom;
- b - send a break on the comm line;
- l - start/stop logging data coming on the com port into microcom.log file
- s - start the script: script.scr or the one specified on the command line when the program was started; if the script is already running, same key will stop the script;
- t - go to the terminal help screen.
The terminal help screen:
******Set terminal ******
p - set speed
m - no CR/NL mapping
n - no flow control
h - hardware flow control
s - software flow control
q - quit help
*************************
- m - enable/disable CR/NL mapping for terminal;
- n, h, s - change the flow control for the comm line - no/hardware/software flow control; the preferred setting when connecting through a modem is hardware flow control;
- p - go to the speed help screen;
The speed help screen
******Set speed *********
a - 1200
b - 2400
c - 4800
d - 9600
e - 19200
f - 38400
g - 57600
h - 115200
i - 230400
j - 460800
q - quit help
*************************
Chose the speed of the serial comm port.
5. Script Language
5.1 Variables
The only type of variable supported by microcom is integer.
5.1.1 Definition and initialization
Use set command to define and initialize a variable.
Example:
set a 7
Initialize a=7
5.1.2 Increment
Use inc command to increment the value of the variable.
Example:
inc a
Increment a.
5.1.3 Decrement
Use dec command to decrement the value of the variable.
Example:
dec a
Decrementing a variable that has the value 0, will have the result -1 - variables are integers.
5.2 Program control
5.2.1 Comment
A comment line always starts with #.
Example:
#this is a comment
5.2.2 If statement
Use if statement for conditional branching in the program.
Example:
if a > 0 print message
or
if b != a goto label
For conditional testing, the supported operators are:
!=, =, >, <
5.2.3 Goto
Use the goto statement to jump to another line of program.
Example:
if a > 10 goto label1
#more program lines .......
label1:
print message
5.2.4 Suspend program
Use suspend to end the script. By default, when the execution of the script reaches the end, the script is restarted automatically.
Example:
if a < 10 suspend
5.2.5 Unix shell invocation
A command starting with ! is redirected to the current unix shell
Example:
! ls -al
Please note the blank space following ! character.
5.2.6 Timeout
Use timeout to wait for a specified number of seconds:
Example:
#wait for 7 seconds
timeout 7
5.3 Display access
The only operation supported in this category is to send a string to the display using print command.
Example:
print message
This will print "message\n" on the screen. The string will not get sent to the comm port.
5.4 Comm port access
5.4.1 Send
Use send command to send a string to the comm port.
Example:
send at&f
This will send "at&f\n" to the comm port.
5.4.2 Expect
Use expect command to wait for a specific string to be received from the comm port.
Example:
expect CONNECT
The program will wait to get "CONNECT" from the modem.
expect command also implements a timeout of 60 seconds. In case the expected string does not arrive form comm port, the command will timeout and it will automatically restart the script from the beginning. This functionality is used in implementing error recovery in the script, as in the next example:
#the script starts by sending several \n to the modem;
#this is the error recovery phase,
#just in case the first time it timeout the expect command;
send
send
#just reset the modem
send at&f
#dial phone number
send attd 2225151
#wait for the connection - timeout and restart the script if necessary
expect CONNECT
print Call connected
6. Distribution
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
m102.tar.gz (xx,xxx bytes) - source code for microcom, Linux (Mandrake 6.0) executable;
floppy.tar.gz (1,380,153) - utilities and image to create a LRP disk (no FPU emulation) with microcom installed
7. LRP disk
Linux Router Project (LRP) is a networking-centric micro-distribution of Linux. LRP is small enough to fit on a single 1.44MB floppy disk, and makes building and maintaining routers, access servers, thin servers, thin clients, network appliances, and typically embedded systems next to trivial.
floppy.img is the original LRP disk image, with support for serial port and microcom terminal emulator. This image has to be transferred on a blank DOS formatted floppy disk.
- under DOS: run rawrite2.exe and supply the drive and image file when prompted
- under Linux:
dd if=floppy.img of=/dev/fd0
rawrite2.exe program is included in the distribution.
8. Support
The development page for microcom is located at sourceforge.net. You can also email us.
9. Acknowledgment
The starting point of microcom Serial Terminal Emulator was robin.c program described in Linux Application Development by Michael K. Johnson and Erik W. Troan.
The backbone of the scripting facilities of microcom is script.c developed by Miquel van Smoorenburg for minicom program.