home *** CD-ROM | disk | FTP | other *** search
- #!./wermit
- #
- # logserial
- #
- # C-Kermit Script to copy a local shell session out the serial port in real
- # time; for example to feed it to a speaking device or serial printer; in this
- # case, the RC Systems DoubleTalk LT, which needs each line to be terminated
- # by an ASCII NUL character.
- #
- # Replace "./wermit" in the first line with the full path of your C-Kermit 9.0
- # program and give this script file execute permission with chmod +x.
- #
- # C-Kermit 9.0 or later is required, and it must be a version built with
- # -DNOUUCP, as the Mac OS X versions are, by default, in this C-Kermit
- # release. SET SESSION-LOG NULL-PADDED is new to C-Kermit 9.0, as is the
- # ability to send a log file (session, debug, packets...) to a serial port.
- #
- # The device on the other end should be connected with a null modem cable or
- # modem eliminator and it should be turned on before this script is executed,
- # otherwise the script is likely to hang when it tries to open the serial
- # port, because many versions of Unix will not open a serial port unless or
- # until certain modem signals such as CD, DSR, and/or CTS are presented.
- #
- # Frank da Cruz, Columbia University, October 2009
- #
- # Last update: Tue Oct 27 10:59:35 2009
-
- if < \v(version) 900299 exit 1 "FATAL - C-Kermit 9.0 required"
-
- # Change port parameters as appropriate:
-
- .portname = /dev/tty.KeySerial1 # Tested on a Keyspan USB adapter
- .speed = 9600
- .flow = rts/cts
-
- # Set up the serial port
-
- set carrier-watch off # Don't require carrier
- set line \m(portname) # Try to open the serial port
- if fail exit 1 "FATAL - \m(portname): \v(setlinemsg)" # Stop here on error
- set speed \m(speed) # Set the required transmission speed
- if fail exit 1 FATAL - "set speed \m(speed)" rejected for \m(portname)
- set flow \m(flow) # Set the appropriate flow control
- if fail exit 1 FATAL - "set flow \m(flow)" unsupported for \m(portname)
- output \13 # Send it a Carriage Return
- output \{1}4S # Set the desired speaking speed
-
- # The two output commands are specific to the DoubleTalk device. The carriage
- # return (\13) activates the speaking function, and "\{1}4S" (Ctrl-A, 4, S) is
- # a command to set the speaking rate. 5 is average, use a lower digit to slow
- # it down, a higher digit (up to 9) to speed it up.
- #
- # Since Kermit can't have two terminal connections open at the same time,
- # the serial port has to be closed. We just have to hope the settings stick
- # (in Mac OS X they do).
-
- close connection # Close the port
-
- # In the following section we open a new connection to a pseudoterminal (pty).
- # "set session-log null-padded" is also specific to the DoubleTalk device.
-
- set session-log binary # text might also work
- set session-log null-padded # Put ^@ after every ^J
- log session \m(portname) # Log session to serial port
- if fail {
- echo "---------------------------------------------------"
- echo ERROR: SERIAL PORT \m(portname) CAN'T BE OPENED FOR
- echo LOGGING. EITHER THE DEVICE IS NOT ACCESSIBLE OR IT
- echo IS IN USE BY ANOTHER PROCESS.
- echo "---------------------------------------------------"
- exit 1
- }
- set host /pty \$(SHELL) # Start new shell in a pseudoterminal
- if fail exit 1 "FATAL - Can't spawn a new shell"
-
- echo "---------------------------------------------------"
- echo STARTING NEW SHELL SESSION LOGGING TO \m(portname)...
- echo GIVE AN 'exit' COMMAND TO THE SHELL TO STOP LOGGING.
- echo "---------------------------------------------------"
-
- connect
-
- echo "---------------------------------------------------"
- echo SESSION TERMINATED, LOGGING STOPPED.
- echo "---------------------------------------------------"
- close session
- exit 0
-