MS-DOS KERMIT (Chapter of Kermit User Guide) Page 164 11. MS-DOS KERMIT Program: Daphne Tzoar and Jeff Damens, Columbia University; contributions by many others. Language: Microsoft Macro Assembler (MASM) Documentation: Frank da Cruz, Jeff Damens, Columbia University; Herm Fischer, Encino CA. Version: 2.28 Date: June 1985 Kermit-MS Capabilities At A Glance: Local operation: Yes Remote operation: Yes Transfers text files: Yes Transfers binary files: Yes Wildcard send: Yes ^X/^Y interruption: Yes Filename collision avoidance: Yes Can time out: Yes 8th-bit prefixing: Yes Repeat count prefixing: Yes Alternate block checks: Yes Terminal emulation: Yes Communication settings: Yes Transmit BREAK: Yes IBM mainframe communication: Yes Transaction logging: No Session logging: Yes Raw transmit: No Act as server: Yes Talk to server: Yes Advanced server functions: No Advanced commands for servers: Yes Local file management: Yes Handle file attributes: No Command/init files: Yes Command macros: Yes Kermit-MS is a program that implements the Kermit file transfer protocol for the IBM PC, XT, and AT and several other machines using the same Intel 8086 processor family (8088, 80286, etc) and operating system family (PC-DOS or MS-DOS, henceforth referred to collectively as MS-DOS or simply DOS). This section will describe the things you should know about the MS-DOS file system in order to make effective use of Kermit, and then it will describe the Kermit-MS program. The program operates under version 2.0 and above of DOS. It runs in ap- proximately 80K of memory -- over and above the memory used by DOS -- which means that your system should have at least 128K of RAM to use version 2 of MS-DOS Kermit. Version 1 of IBM PC Kermit is no longer distributed, but if you have an old copy, it will still be able to run under version 1.1 of PC-DOS and/or on machines with less than 128K memory. MS-DOS KERMIT Page 165 11.1. The MS-DOS File System The features of the MS-DOS file system of greatest interest to Kermit users are the form of the file specifications, and the distinction between pre-MS-DOS 2.0 file names and newer file names which allow directory paths. 11.1.1. File Specifications MS-DOS 2.x file specifications are of the form DEVICE:\PATHNAME\NAME.TYPE where the DEVICE is a single character identifier (for instance, A for the first floppy disk, C for the first fixed disk, D for a RAM disk emulator), PATHNAME is up to 63 characters of identifier(s) (up to 8 characters each) sur- rounded by reverse slashes, NAME is an identifier of up to 8 characters, and TYPE is an identifier of up to 3 characters in length. Device and pathname may be omitted. The first backslash in the pathname may be omitted if the specified path is relative to the current directory. In the path field, "." means current directory, ".." means parent directory. Some DOS implementations (like Wang) may use slash "/" rather than backslash in the path field. Pathname is normally omitted, and cannot be specified at all in certain Kermit-MS commands like SEND, which have not yet been fully converted from MS-DOS 1.x conventions. Device and directory pathnames, when omitted, default to either the user's current disk and directory, or to the current directory search path as specified in the DOS PATH environment variable, depending on the context in which the file name appears. When this manual says that a file is searched for "in the current path," it means that the PATH is searched first, and if the file is not found, then Kermit-MS looks on the current disk and directory. If the PATH environment variable is empty, Kermit looks only at the current disk and directory. NAME.TYPE is normally sufficient to specify a file, and only this information is sent along by Kermit-MS with an outgoing file. The device, path, name, and type fields may contain uppercase letters, digits, and the special characters "-" (dash), "_" (underscore), and "$" (dollar sign). (For use only among MS-DOS processors, additional filename special characters allowed are "#&!%'`(){}". There are no imbedded or trailing spaces. Other characters may be not be included; there is no mechanism for "quoting" other- wise illegal characters in filenames. The fields of the file specification are set off from one another by the punctuation indicated above. The name field is the primary identifier for the file. The type, also called the extension or suffix, is an indicator which, by convention, tells what kind of file we have. For instance FOO.BAS is the source of a BASIC program named FOO; FOO.OBJ might be the relocatable object module produced by compiling FOO.BAS; FOO.EXE could be an executable program produced by linking FOO.OBJ, and so forth. .EXE and .COM are the normal suffixes for executable programs. The MS-DOS allows a group of files to be specified in a single file specifica- tion by including the special "wildcard" characters, "*" and "?". A "*" MS-DOS KERMIT Page 166 matches any string of characters from the current position to the end of the field, including no characters at all; a "?" matches any single character. Here are some examples: *.BAS All files of type BAS (all BASIC source files) in the current direc- tory. FOO.* Files of all types with name FOO. F*.* All files whose names start with F. F?X*.* All files whose names start with F and contain X in the third posi- tion, followed by zero or more characters. ?.* All files whose names are exactly one character long. Wildcard notation is used on many computer systems in similar ways, and it is the mechanism most commonly used to instruct Kermit to send a group of files. Note: Kermit-MS uses the "?" character for help while commands are be- ing typed, so the single-character wildcard in Kermit-MS commands is "=" rather than "?". For example Kermit-MS>send =.* would send files of all types whose names were exactly one character long. Kermit-MS users should bear in mind that other (non-MS-DOS) systems may use different wildcard characters. For instance the DEC-20 uses "%" instead of "?" as the single character wildcard; when using Kermit-MS to request a wildcard file group from a Kermit-20 server, the Kermit-MS "=" must be replaced by the DEC-20 "%". 11.1.2. File Formats MS-DOS systems store files as bulk collections of 8 bit bytes, with no par- ticular differences between text, program code, and binary files. ASCII text files consist of lines separated by carriage-return-linefeed sequences (CRLFs), which conforms exactly to the way Kermit represents text files during transmis- sion. Since a non-MS-DOS receiving system might need to make distinctions as to file type, you may need to use various SET functions on the remote system to inform it that the incoming file is of some particular (non-default) type, such as binary. In transmitting files between Kermit-MS's, regardless of file con- tents, the receiving MS-DOS system is equally capable of processing text, code, and data, and in fact has no knowledge of how the bytes in the file are used. MS-DOS (unlike CP/M) is capable of pinpointing the end of file with precision by keeping a byte count in the directory, so one would expect no particular confusion in this regard. However, certain MS-DOS programs continue to use the CP/M convention of terminating a text file with a Control-Z character, and won't operate correctly unless this terminating byte is present. Therefore, Kermit-MS users should be aware of a special SET EOF option for both incoming and outbound files, described below. MS-DOS KERMIT Page 167 Non-MS-DOS systems may well be confused by nonstandard ASCII files from Kermit-MS. Files produced by Easywriter or Word Star, for example, may need to be converted to conventional ASCII format prior to transmission by commonly available "exporter" programs. Spreadsheet or database files usually need spe- cial formatting to be meaningful to non-MS-DOS recipients (though they can be transmitted between MS-DOS systems with Kermit-MS). Furthermore, files created by word processors (such as BLUE or Easy Writer) that store formatting data at the end of the file, after the control-Z and before physical end, will require special processing via SET EOF to strip the formatting data, lest they confuse non-MS-DOS recipients. 11.2. Program Operation Kermit-MS can be run interactively, from a batch file, or as an "external" DOS command. Commands consist of one or more fields, separated by "whitespace" -- one or more spaces or tabs. Upon initial startup, the program executes any commands found in the file MSKERMIT.INI in the current path. This initialization file may contain command macro definitions, communications settings for one or more ports, or any other Kermit-MS commands. Here is a sample MSKERMIT.INI file: set warning on define unix set local-echo off, set flow xon, set timer off def ibm set parity odd, set local on, set handsh xon, set timer on def modem set port 2, set baud 1200 def noisy set block-check 3, set send packet-length 40 set unix set port 1 set baud 4800 connect Interactive Operation: To run Kermit-MS interactively, invoke the program from DOS command level by typing its name. When you see the command's prompt, Kermit-MS> you may type Kermit commands repeatedly until you are ready to exit the program, for example: A> A>kermit IBM PC Kermit-MS V2.28 Type ? for help Kermit-MS>send foo.* informational messages about the files being sent MS-DOS KERMIT Page 168 Kermit-MS>get bar.* informational messages about the files being received Kermit-MS>exit A> During interactive operation, you may edit the command you're currently typing to erase the character most recently typed (BACKSPACE or DEL), the most recent field (CTRL-W), or the entire command (CTRL-U). In addition, you may use the help ("?") and recognition (ESC) features freely while typing Kermit-MS com- mands. A question mark typed at almost any point in a command produces a brief description of what is expected or possible at that point; for this reason, Kermit-MS uses "=" for the single-character match wildcard in local filenames. ESC typed at any point, even in a local filename, will cause the current field to be filled out if what you have typed so far is sufficient to identify it, and will leave you in position to type the next field (or to type a "?" to find out what the next field is); otherwise, the program will beep at you and wait for you to type further characters. Some Kermit-MS commands, like GET, SHOW KEY, SET KEY, may prompt for additional information on subsequent lines. If you have reached one of these prompts and then wish to cancel the command, you may type Control-C. Summary of Kermit-MS Command Characters: BACKSPACE Delete the character most recently typed. May be typed repeatedly to delete backwards. You may also use DELETE, RUBOUT, or equivalent keys. CTRL-W Delete the most recent "word", or field, on the command line. May be typed repeatedly. CTRL-U Delete the entire command line. CTRL-C Cancel the current command and return to the "Kermit-MS>" prompt. ? Type a brief message describing what you are expected to type in the current field. ESC If enough characters have been supplied in the current field (keyword or file name) to uniquely identify it, supply the remainder of the field and position to the next field of the command. Otherwise, sound a beep. = Wildcard character for matching single characters in filenames, equivalent to MS-DOS "?". Command Line Invocation: Kermit-MS may also be invoked with command line arguments from DOS command level, for instance: A>kermit send foo.bar MS-DOS KERMIT Page 169 or A>kermit set port 1, set baud 9600, connect In this case, help and recognition are not available (because the program won't start running until after you type the entire command line), and Kermit-MS will exit after completing the specified command or commands. Therefore, when in- voked with command line arguments, Kermit-MS will behave as if it were an ex- ternal DOS command, like MODE. Note that several commands may be given on the command line, separated by commas. Batch Operation: Like other MS-DOS programs, Kermit-MS may be operated under batch with either command line arguments and/or TAKE files; Kermit will also run interactively if invoked from batch, but it will read commands from the keyboard and not the batch file. 11.3. Kermit-MS Commands MS-DOS Kermit implements a large subset of the commands of "ideal" Kermit. Here's a brief summary: BYE to remote server. CLEAR key redefinitions. CLOSE log file and stop logging remote session. CONNECT as terminal to remote system. CWD change local working directory. DEFINE macros of Kermit-MS commands. DELETE local files. DIRECTORY listing of local files. DO a macro expansion. EXIT from Kermit-MS. FINISH Shut down remote server. GET remote files from server. HELP about Kermit-MS. LOCAL prefix for local file management commands. LOG remote terminal session. LOGOUT remote server. PUSH to MS-DOS command level. QUIT from Kermit-MS RECEIVE files from remote Kermit. REMOTE prefix for remote file management commands. RUN an MS-DOS program. SEND files to remote Kermit. SERVER mode of remote operation. SET various parameters. SHOW various parameters. SPACE inquiry. STATUS inquiry. TAKE commands from file. TYPE display a local file. VERSION display Kermit-MS program version number. MS-DOS KERMIT Page 170 The remainder of this section concentrates on the commands that have special form or meaning for MS-DOS Kermit. Not all of the following commands are necessarily available on all MS-DOS systems, and some of the commands may work somewhat differently between DOS versions. 11.3.1. Commands for File Transfer The file transfer commands are SEND, GET, and RECEIVE. THE SEND COMMAND Syntax: SEND filespec1 [filespec2] The SEND command causes a file or file group to be sent from the local MS-DOS system to the Kermit on the remote system. The remote Kermit may be running in either server or interactive mode; in the latter case, you should already have given it a RECEIVE command and escaped back to your PC. filespec1 may contain a device designator, like "A:" and the wildcard charac- ters "*" and/or "=". The current release of Kermit-MS, however, does not allow pathnames in the SEND command file specification. If filespec1 contains wildcard characters then all matching files will be sent, in the same order that MS-DOS would show them in a directory listing. If filespec1 specifies a single file, you may direct Kermit-MS to send that file with a different name, given in filespec2. For instance, in the command Kermit-MS>send foo.bar framus.widget filespec2 begins with the first nonblank character after filespec1 and ends with the carriage return; thus it may contain blanks or other unusual charac- ters that may be appropriate on the target machine. Lower case letters in filespec2 are raised to upper case for transmission. If a file can't be opened for read access, standard MS-DOS recovery procedures will take place. For example: Not ready error reading drive A Abort, Retry, Ignore? If you select "Abort," you will be returned to DOS. Files will be sent with their MS-DOS filename and filetype (for instance FOO.TXT, no device or pathname). Each file is sent as is, with no conversions done on the data, except for possibly adding or deleting a terminating Control-Z character (see the SET EOF command). Once you give Kermit-MS the SEND command, the name of each file will be dis- played on your screen as the transfer begins; packet, retry, and other counts will be displayed along with informational messages during the transfer. If the file is successfully transferred, you will see "Complete", otherwise there will be an error message. When the specified operation is done, the program will sound a beep. MS-DOS KERMIT Page 171 Several single-character commands may be given while a file transfer is in progress: ^X (Control-X) Stop sending the current file and go on to the next one, if any. ^Z Stop sending this file, and don't send any further files. ^C Return to Kermit-MS command level immediately without sending any kind of notification to the remote system. ^E Like ^C, but send an Error packet to the remote Kermit in an attempt to bring it back to server or interactive command level. CR Simulate a timeout: resend the current packet, or NAK the expected one. Control-X and Control-Z send the proper protocol messages to the remote Kermit to bring it gracefully to the desired state. Control-C leaves the remote Ker- mit in whatever state it happens to be in. Control-E "aborts" any protocol that is taking place. THE RECEIVE COMMAND Syntax: RECEIVE [filespec] The RECEIVE command tells Kermit-MS to receive a file or file group from the other system. Kermit-MS passively waits for the file to arrive; this command is not to be used when talking to a Kermit server (use GET for that). You should already have issued a SEND command to the remote Kermit and escaped back to Kermit-MS before issuing the RECEIVE command. If the optional filespec is provided, store the incoming file under that name. The filespec may include a device designator, or may consist of only a device designator; a directory name may not be included. The incoming file is stored on the default or specified device, in the current directory. If no name was specified, the name from the incoming file header packet is used; if that name is not a legal MS-DOS file name, Kermit-MS will delete excessive characters from it, and will change illegal characters to the letter X. If the optional filespec was provided, but more than one file arrives, the first file will be stored under the given filespec, and the remainder will be stored under their own names, but on the specified device. If an incoming file does not arrive in its entirety, Kermit-MS will normally discard it; it will not appear in your directory. You may change this behavior by using the command SET INCOMPLETE KEEP, which will cause as much of the file as arrived to be saved in your directory. The same single-character commands are available as during SEND: ^X Request that the remote Kermit stop sending the current file, and proceed to the next one immediately. Since this is an optional feature of the Kermit protocol, the remote Kermit might not honor the request. ^Z Request that the remote Kermit terminate the entire transfer; this is MS-DOS KERMIT Page 172 also an optional feature that may or may not be supported by the remote Kermit. ^C, ^E, and CR operate in the same way as they do during SEND. Note that in an emergency, ^E achieve the same result as ^Z. If the incoming file has the same name as a file that already exists, and WARN- ING is set ON, Kermit-MS will change the incoming name (and inform you how it renamed it) so as not to obliterate the pre-existing file. If WARNING is OFF, the original file will be overwritten; if you type ^X or ^Z to interrupt the transfer, you'll either get a partial new file, or else both the old and the new file of that name will be lost, depending on SET INCOMPLETE. In any case, when WARNING is off, files with the same name as incoming files will not sur- vive. Caution: If an incoming file's name (the part before the dot) corresponds to an MS-DOS device name, such as NUL, COM1, CON, AUX, or PRN, output will go to that device, rather than to a file with that name. This is a feature of MS-DOS. THE GET COMMAND Syntax: GET remote-filespec The GET command requests a remote Kermit server to send the file or file group specified by remote-filespec. This command can be used only when Kermit-MS has a Kermit server active on the other end of the connection. This means that you must have CONNECTed to the other system, logged in, run Kermit there, issued the SERVER command, and escaped back (e.g. ^]C) to the local Kermit-MS. If the remote Kermit does not have a SERVER command, then you should use SEND and RECEIVE as described above. You may use the GET command in a special way to specify a different name for storing the incoming file. Just type GET alone on a line, and you will be prompted separately for the remote filespec and the local filespec: Kermit-MS>get Remote Source File: com1.txt Local Destination File: xcom1.txt The local file name may contain a device field, but no directory specification. If more than one file arrives, only the first will be renamed. Incoming files will appear in the current directory if the device specified is the current device, otherwise in the top level directory of the specified device. The remote filespec is any string that can be a legal file specification for the remote system; it is not parsed or validated locally. It can contain whatever wildcard or file-group notation is valid on the remote system. As files arrive, their names will be displayed on your screen, along with packet traffic statistics and status messages. You may type ^X to request that the current incoming file be cancelled, ^Z to request that the entire incoming batch be cancelled, and ^C or ^E to return immediately to the Kermit-MS> prompt, exactly as described for the RECEIVE command. MS-DOS KERMIT Page 173 11.3.2. Commands for Terminal Connection The CONNECT command connects your PC as a terminal to the remote system, so that you can start up Kermit there. The BYE, FINISH, and LOGOUT commands allow you to shut down a remote Kermit server: BYE When communicating with a remote Kermit server, use the BYE command to shut down the server, log out its job, and exit lo- cally from Kermit-MS to DOS. FINISH Like BYE, FINISH shuts down the remote server. However, FINISH does not log out the server's job. You are left at Kermit-MS prompt level so that you can connect back to the job on the remote system. LOGOUT The LOGOUT command is identical to the BYE command, except you will remain at Kermit-MS prompt level, rather than exit to DOS, so that you can establish another connection. The CONNECT Command Establish an interactive terminal connection to the system connected to the currently selected communications port (e.g. COM1 or COM2) using full duplex (remote) echoing and no parity unless otherwise specified in previous SET com- mands. Get back to Kermit-MS by typing the escape character followed by the letter C. On most MS-DOS systems the escape character is Control-] by default. You can use the SET ESCAPE command to define a different escape character, and on some systems you can SET BAUD (or SPEED) to change the baud rate, and SET PORT to switch between ports. Terminal emulation is described in greater detail in section -MSTERM below. 11.3.3. Commands for File Management Kermit-MS provides commands or managing both local and remote files. THE REMOTE COMMANDS The REMOTE keyword is a prefix for a number of commands. It indicates that the command is to be performed by the remote Kermit, which must be running as a server. Note that not all Kermit servers are capable of executing all these commands, and some Kermit servers may be able to perform functions for which Kermit-MS does not yet have the corresponding commands. In case you send a command the server cannot execute, it will send back a message stating that the command is unknown to it. If the remote server can execute the command, it will send the results to your screen. Here are the REMOTE commands which Kermit-MS may issue: CWD [directory] Change Working Directory on the remote host. Change the default source and destination area for file transfer and management. You will be prompted for a password, which will be erased as you type it. If you do not supply a password (i.e. MS-DOS KERMIT Page 174 you type only a carriage return), the server will attempt to access the specified directory without a password. If you do not supply a directory name, your default or login directory on the remote system will be assumed and you will not be prompted for a password. DELETE filespec Delete the specified file or files on the remote system. In response, the remote host should display a list of the files that were or were not successfully deleted. DIRECTORY [filespec] The remote system will provide a directory listing of the specified files. If no files are specified, then all files in the default area (the current working directory) will be listed. HELP The remote host tells what server functions it is capable of. HOST [command] Send the command to the remote system's command processor for execution. SPACE [directory] Provide a brief summary of disk usage in the specified area on the remote host. If none specified, the default or current area will be summarized. TYPE filespec Display the contents of the specified remote file or files on the screen. THE LOCAL COMMAND The LOCAL keyword is a prefix for a number of commands. It indicates that the specified command is to be executed on the local MS-DOS system. The LOCAL prefix may be omitted. The local commands available are: CWD path Changes the current working directory to the given path. All references to file names without explicit paths will refer to that path. DELETE filespec Deletes the specified file or files. As in DOS, the names of the deleted files are not listed, only the message "file(s) deleted" or "file(s) not found", and if you give the command "delete *.*", Kermit-MS will prompt "Are you sure?", like DOS. DIRECTORY [filespec] Lists the names, sizes, and creation dates of files that match the given file specification. If no filespec is given, the command is equivalent to DIR *.*. SPACE Performs the MS-DOS CHKDSK function by running the CHKDSK program from the current path. RUN filespec Runs the specified file, which must be in .EXE or .COM format, or a .BAT file containing DOS commands, from the specified path or according to the value of the PATH variable if no path was included in the filespec. This command requires MS-DOS 2.0 or higher. MS-DOS KERMIT Page 175 TYPE filespec Displays the specified local file. PUSH Invokes an MS-DOS command processor "under" Kermit-MS, either COMMAND.COM or whatever shell you have specified with COMSPEC. When you return to Kermit-MS (for instance, by typing the MS-DOS EXIT command), you will find Kermit-MS as you left it, with all settings intact. This command only works in MS-DOS 2.0 or higher. The local RUN command has various uses, one of which is to supplement the fea- tures of Kermit-MS. For instance, suppose there is an involved procedure that you regularly perform on a certain remote system -- this might include giving commands to a modem to dial the system, looking for a particular herald or prompt, performing a login command sequence, running a selected application, and then running Kermit to send the results back to your PC. You could write a program in the compiled language of your choice, say C or BASIC, to send the desired commands to your modem and the remote system and to look for the ap- propriate responses. You could put all this in a Kermit-MS TAKE command file (see below), like run update.com receive The program, called UPDATE in this case, does everything up to and including starting Kermit sending from the remote system. When the program terminates, the next Kermit-MS command, "receive," is executed from the command file. When the end of the command file is reached, interactive operation is resumed. THE TAKE COMMAND Syntax: TAKE filespec Execute Kermit commands from the specified file, which may include an explicit path; if no path is specified, the value of the PATH variable is used; if PATH has no value, then the current disk and directory are searched. The command file may include any valid Kermit-MS commands, including TAKE, but it cannot include characters to be sent to a remote host during terminal emulation (i.e. after a CONNECT command). THE LOG COMMAND Syntax: LOG filespec Specifies that all characters that appear on your screen during CONNECT will be recorded in the specified file; the filespec may include a device specification but should not contain a directory path. The LOG allows you to "capture" files from a remote system that doesn't have Kermit, as well as to record remote com- mand typescripts. The log is closed when you EXIT from Kermit-MS or when you issue an explicit CLOSE command. MS-DOS KERMIT Page 176 11.3.4. The SERVER Command Kermit-MS is capable of acting as a Kermit server, providing file transfer for users coming in through one of the communication ports. The current version of Kermit-MS can send files (the user on the other end types the GET command), receive files (the user types SEND), and terminate, giving control back to the console (user types BYE). To put Kermit-MS into server mode, first issue any desired SET commands to select and configure the desired port, and then type the SERVER command. Kermit-MS will await all further instructions from the user Kermit on the other end of the connection, which may be hardwired or connected through an autoanswer modem. For example: Kermit-MS>set port 1 Kermit-MS>set baud 1200 Kermit-MS>set timer on Kermit-MS>set warning on Kermit-MS>server 11.3.5. The SET Command Syntax: SET parameter [value] Establish or modify various parameters for file transfer or terminal connec- tion. You can examine their values with the SHOW command. Note that there is no "set ibm" command; IBM mainframe communication parameters may be selected with a command macro (see below). The following SET commands are available in Kermit-MS: AUTOWRAP Controls line wrap during terminal emulation BAUD Communications port line speed BELL Whether to beep at the end of a transaction BLOCK-CHECK-TYPE Level of error checking for file transfer DEBUG Display packet contents during file transfer DEFAULT-DISK Default disk drive for file i/o DESTINATION Default destination device for incoming files END-OF-LINE Packet terminator EOF Method for determining or marking end of file ESCAPE Escape character for CONNECT FLOW-CONTROL Enable or disable XON/XOFF HANDSHAKE Half-duplex line turnaround option HEATH19 Heath/Zenith-19 terminal emulation INCOMPLETE What to do with an incompletely received file KEY Specify key redefinitions, or "keystroke macros" LOCAL-ECHO Specify which host does the echoing during CONNECT MODE-LINE Whether to display a mode line in terminal emulation PARITY Character parity to use PORT Select a communications port PROMPT Change the "Kermit-MS>" prompt to something else RECEIVE Request remote Kermit to use specified parameters REMOTE For running Kermit-MS interactively from back port SEND Use the specified parameters during file transfer TAKE-ECHO Control echoing of commands from TAKE files TIMER Enable/disable timeouts during file transfer MS-DOS KERMIT Page 177 WARNING Specify how to handle filename collisions The SET commands that are peculiar to MS-DOS Kermit are now described in greater detail. The others behave as in "ideal" Kermit. SET AUTOWRAP SYNTAX: SET AUTOWRAP ON or OFF Enable or disable automatically starting a new line when characters are dis- played after the right margin, during Heath-19 terminal emulation. SET BAUD Syntax: SET BAUD rate Set the speed of the currently selected terminal communications port (COM1 by default) to 300, 1200, 1800, 2400, 4800, 9600 or other common baud rate. Some implementations do not support this command. In any case, Kermit-MS leaves the current communication port settings alone unless you issue explicit SET com- mands to change them. SET SPEED is an acceptable synomym for SET BAUD. SET BELL Syntax: SET BELL ON or OFF Specifies whether bell (beeper) should sound upon completion of a file transfer operation. Normally ON. SET DEBUG Syntax: SET DEBUG ON or OFF ON Display the Kermit packet traffic on your screen during file transfer. If the debugger is loaded, transfer control to it when CTRL-C is typed. In Heath-19 terminal emulation on the IBM PC, display unusual control characters in uparrow notation. OFF Don't display debugging information (this is the default). If debug- ging was in effect, turn it off. SET DEFAULT-DISK Syntax: SET DEFAULT-DISK x: Specify the default disk drive to use for file transfer, directory listings, and so forth. Equivalent to typing the DOS command for changing disks. MS-DOS KERMIT Page 178 SET DESTINATION Syntax: SET DESTINATION device Specify the device for incoming files, DISK, PRINTER, or SCREEN. SET DESTINA- TION PRINTER will cause incoming files to be spooled directly to the printer; SCREEN will send output normally destined for the disk to the screen. The nor- mal destination is DISK. END-OF-LINE Syntax: SET END-OF-LINE number If the remote system needs packets to be terminated by anything other than car- riage return, specify the decimal value of the desired ASCII character. SET EOF Syntax: SET EOF option Controls how the end of file is handled. The options are: CTRL-Z Append a Control-Z character to the end of an incoming file, unless it already ends with a Control-Z. Certain MS-DOS text editors and other applications require files to be in this for- mat. For outbound files, treat the first Control-Z as the end of file, and do not send it nor any characters following it. NOCTRL-Z (Default) Store incoming files exactly as is, and send MS DOS files exactly as is (according to their byte count). SET ESCAPE Syntax: SET ESCAPE character Specify the control character you want to use to "escape" from remote connec- tions back to Kermit-MS. The default is normally ^] (Control-Rightbracket). The character is entered literally, and should normally be chosen from the AS- CII control range. SET FLOW-CONTROL Syntax: SET FLOW-CONTROL option Specify the full duplex flow control to be done on the currently selected port. The current options are XON/XOFF and NONE. The specified type of flow control will be done during both terminal emulation and file transfer. MS-DOS KERMIT Page 179 SET HANDSHAKE Syntax: SET HANDSHAKE option Specify any half-duplex handshaking to be done on the currently selected port. The options are BELL, CR, LF, NONE, XOFF, or XON. The specified handshaking will be done during file transfer only. Handshake is NONE by default; if set to other than NONE, then FLOW-CONTROL should be set to NONE. SET HEATH19 Syntax: SET HEATH19 ON or OFF Specify whether Kermit-MS should use its built-in software facility for emulat- ing a Heath/Zenith-19 (H19) terminal. ON During CONNECT, incoming characters are to be examined for H19 terminal screen control commands (escape sequences), and if encountered, the commands are to be emulated on the PC screen. The H19 codes are a su- perset of the popular DEC VT52 codes, so if your system does not sup- port the Heath-19, you may tell it that your terminal type is VT52 (or one of the many VT52 compatibles). The Heath-19 codes are listed in section -H19CODES, below. OFF All incoming characters will be sent to the screen "bare", through DOS. If you have loaded a device driver into DOS for the CON: device, such as ANSI.SYS, then that driver will be able to interpret the codes it- self. Most non-IBM systems have their own screen control code inter- preter built into DOS or firmware, or available as a loadable device driver. See section -MSTERM for details about terminal emulation. SET KEY Syntax: SET KEY key-specifier Specifies that when the designated key is struck during terminal emulation, the associated character string is sent. The key-specifier is one of the keywords F1, F2, ..., or SCAN followed by a scan code. Systems that have a BACKSPACE key also include BACKSPACE as a keyword. If SCAN is used, it is followed by a decimal number to indicate the scan code of the key, which you would ascertain from your system reference manual, or else by using the Kermit-MS SHOW KEY command. SET KEY prompts you on a new line for the definition string. Certain characters, like ESC and CR, may not be entered literally into the string, but can be included by inserting escape codes of the form \ooo, a backslash followed by a 2- or 3-digit octal number corresponding to the ASCII value of the desired character. If some other key redefinition package, like ProKey, has been loaded, then its redefinitions will take precedence over Kermit's. The SET KEY command is illustrated in the terminal emulation section, -MSTERM, below. MS-DOS KERMIT Page 180 SET LOCAL-ECHO Syntax: SET LOCAL-ECHO option Specify how characters are echoed during terminal emulation on the currently selected port. ON specifies that characters are to be echoed by Kermit-MS (because neither the remote computer nor the communications circuitry has been requested to echo), and is appropriate for half-duplex connections. LOCAL-ECHO is OFF by default, for full-duplex, remote echo operation. SET MODE-LINE Syntax: SET MODE-LINE ON or OFF Turn the mode line which appears during terminal connection on or off. Has no effect on systems that do not display a mode line during connect. SET PARITY Syntax: SET PARITY keyword Specify the character parity to be used on the currently selected port. The choices for SET PARITY are NONE (the default), ODD, EVEN, MARK, and SPACE. NONE means no parity processing is done, and the 8th bit of each character can be used for data when transmitting binary files. You will need to SET PARITY to ODD, EVEN, MARK, or possibly SPACE when com- municating with a system, or over a network, or through modems, concentrators, multiplexers, or front ends that require or impose character parity on the com- munication line. For instance, GTE Telenet requires MARK parity. If you neglect to SET PARITY when the communications equipment requires it, the symptom may be that terminal emulation works partially, and file transfer does not work at all. If you have set parity to ODD, EVEN, MARK, or SPACE, then Kermit-MS will re- quest that binary files will be transferred using 8th-bit-prefixing. If the other side knows how to do 8th-bit-prefixing (this is an optional feature of the Kermit protocol, and not all implementations of Kermit have it), then bi- nary files can be transmitted successfully. If NONE is specified, 8th-bit- prefixing will not be requested. Note that there is no advantage to using parity; it only slows Kermit file transfer down. The SET PARITY command is provided only to allow Kermit to adapt to hardware that insists upon using parity. SET PORT Syntax: SET PORT number or: SET PORT COM1 or COM2 or: SET PORT DEVICE device-name or: SET PORT FILE-HANDLE number MS-DOS KERMIT Page 181 On machines with more than one communications port, select the port to use for file transfer and CONNECT. This command lets you use a different asynchronous adapter, or switch between two or more simultaneous remote sessions. Sub- sequent SET BAUD, PARITY, HANDSHAKE, FLOW, and LOCAL-ECHO commands will apply to this port only. SET PORT 1 selects COM1, SET PORT 2 selects COM2. In "generic" MS-DOS Kermit, the alternate forms are available to allow you to experiment with device names or numbers until you find the communication port. SET REMOTE Syntax: SET REMOTE ON or OFF If you wish to run Kermit-MS interactively through the back port, for instance after the operator has done CTTY COM1, you must give the command SET REMOTE ON; this suppresses the file transfer display screen, so that the display won't in- terfere with the file transfer itself. SET RECEIVE Syntax: SET RECEIVE parameter value At the beginning of a protocol operation, request the remote Kermit to use the given value specified parameter, or inform Kermit-MS that the remote Kermit will be using it. PACKET-LENGTH Ask the remote Kermit to use the specified maximum length for packets that it sends to Kermit-MS. The normal (and maximum) length is 94. Use this command to shorten packets if the com- munication line is noisy; this will decrease the probability that a particular packet will be corrupted, and will reduce the retransmission overhead when corruption occurs, but it will in- crease the protocol overhead. PADCHAR Ask the remote Kermit to use the given character for inter- packet padding. Kermit-MS should never require any padding. PADDING Ask the remote Kermit to insert the given number of padding characters before each packet it sends. This should never be necessary. START-OF-PACKET The remote Kermit will be marking the beginning of packets with something other than Control-A. This will be necessary only if the hosts or communication equipment involved cannot pass a Control-A through as data. TIMEOUT Ask the remote Kermit to time out after the given number of seconds if a packet expected from Kermit-MS has not arrived. Use this command to change the normal timeout interval. MS-DOS KERMIT Page 182 SET SEND Syntax: SET SEND parameter value PACKET-LENGTH Use the specified maximum length for outbound packets. Nor- mally, Kermit-MS uses whatever length the other Kermit re- quests. PADCHAR Use the specified character for interpacket padding. Some hosts may require some padding characters (normally NUL or DEL) before a packet. PADDING How many padding characters to use between packets, normally zero. QUOTE Use the indicated printable character for prefixing (quoting) control characters and other prefix characters. The only reason to change this would be for sending a very long file that contains very many "#" characters (the normal control prefix) as data. START-OF-PACKET Mark the beginning of outbound packets with some control character other than Control-A. This will be necessary only if the remote host or the communication channel involved cannot accept a Control-A as data. The remote host must have been given the corresponding SET RECEIVE START-OF-PACKET command. TIMEOUT Change Kermit-MS's normal timeout interval; this command is ef- fective only if TIMER is set to be ON; it is normally OFF so that the remote Kermit can control timeouts. SET TAKE-ECHO Syntax: SET TAKE-ECHO ON or OFF Specifies whether screen display should occur during implicit or explicit TAKE operations on MSKERMIT.INI or other Kermit-MS command files, and during evalua- tion of macro definitions. Handy for finding errors in command files. SET TIMER Syntax: SET TIMER ON or OFF Enable or disable the timer that is used during file transfer to break the deadlock that occurs when an expected packet does not arrive. By default, the timer is OFF, because Kermit-MS is usually used in conjunction with a mainframe that is doing its own timeouts. During a file transfer, it is sufficient for one side to do the timing out and the mainframe is usually better equipped to adjust timeout intervals based on system load or other conditions. The timer should be set ON if you are communicating with a system that cannot do timeouts, such as IBM VM/CMS Kermit. MS-DOS KERMIT Page 183 SET WARNING Syntax: SET WARNING option Specify what to do when an incoming file has the same name as an existing file in the default directory of the default device. If ON, Kermit will warn you when an incoming file has the same name as an existing file, and automatically rename the incoming file (as indicated in the warning message) so as not to destroy (overwrite) the pre-existing one. If OFF, the pre-existing file is destroyed, even if the incoming file does not arrive completely. The new name is formed by changing the rightmost character in the name (before the dot) to a digit, incrementing the digit and moving leftwards until a unique name is found. For instance, ABC.TXT becomes AB0.TXT, then AB1.TXT, AB2.TXT, ..., A00.TXT, A01.TXT, etc. 11.3.6. The SHOW Command Syntax: SHOW option Currently, most parameters that may be altered with SET commands are displayed by the STATUS command. The SHOW command is used for displaying macro defini- tions and key redefinitions. The SHOW MACROS command displays the definitions of all currently defined mac- ros, as well as the amount of space left for new macro definitions. The SHOW KEY command allows you to determine the scan code produced by pressing a given key, so that you can construct a SET KEY command to redefine the key. If the key already has a redefinition in effect, that too will be displayed. In this example, a DEC Rainbow user determines the scan code for the accent grave key, and then redefines that key to send ESC: Kermit-MS>show key Press a key: ` Scan Code: 96 Definition: Kermit-MS>set key scan 96 Definition string: \33 Kermit-MS>show key Press a key: ` Scan Code: 96 Definition: \33 Kermit-MS> The SHOW KEY command only works on certain systems. MS-DOS KERMIT Page 184 11.3.7. Command Macros Kermit-MS provides a facility for combining commands into "macros." Command macro definitions may be included in your MSKERMIT.INI file, TAKEn explicitly from a specified file, or typed interactively, and may be invoked with the DO command. THE DEFINE COMMAND Kermit-MS command macros are constructed with the DEFINE command. The syntax is DEFINE macro-name [command [, command [, ...]]] Any Kermit-MS commands may be included. Example: define telenet set parity mark, set baud 1200, connect THE DO COMMAND A Kermit-MS command macro is invoked using the DO command. For instance, Kermit-MS comes with a predefined macro to allow convenient setup for IBM com- munications; to invoke it, you would type do ibm The IBM macro is defined as "parity mark, handshake xon, local-echo on, timer on". You can delete or replace this definition by adding a new (perhaps null) definition, such as define ibm parity even, handshake cr, local-echo on, timer on or define ibm 11.4. Terminal Emulation When you issue the CONNECT command, your PC acts as a terminal connected to a remote computer through the currently selected port. The characters you type are sent out the port, and characters that arrive at the port are displayed on your screen. If you have not previously issued a SET PORT command, COM1 is used. If you have SET LOCAL-ECHO ON for the selected port, then Kermit-MS will display characters on the screen as you type them. If LOCAL-ECHO is OFF, then XON/XOFF flow control will be done unless you have SET FLOW-CONTROL OFF. If you have SET PARITY to anything other than NONE, Kermit-MS will add the ap- propriate parity to each outbound character, and strip any parity from incoming ones. While CONNECTed, you can also communicate with an autodialer or "smart modem" to control the communications line, hang it up, and the like; for in- stance, typing +++ to a Hayes-like modem will allow you to follow that by dial- ing or hangup commands. If Heath-19 emulation is being done, incoming characters will be monitored for MS-DOS KERMIT Page 185 H19/VT52 escape sequences. These will be interpreted according to the table in section -H19CODES. Keys on the numeric keypad will not send H19/VT52 sequences unless programmed to do so, using key redefinitions. Caution: On some systems, such as the IBM PC family, Kermit-MS accesses the screen memory memory directly to perform certain H19 emulation functions such as character insert/delete and screen scroll. Without direct screen memory access, these functions would be painfully slow. Although Kermit-MS has been tested successfully on a variety of monochrome and color adapters and monitors, there may be combinations for which this method could cause video problems, such as snow. Should this occur, you can alleviate the problem by setting HEATH19 emulation OFF. In that case, however, you remove not only the problems, but also the desirable features of emulation. But Kermit-MS does permit you to load an external console device driver, such as IBM's ANSI.SYS, to provide any desired screen control. Table -MSTERMOPS shows the terminal emulation options for the systems presently supported by Kermit-MS. ------------------------------------------------------------------------------- System EscChar Cabilities Terminal Service IBM PC,XT,AT ^] R M P K Heath19 emulation DEC Rainbow ^] R P K VT102 firmware HP-110 ^] Dumb terminal HP-150 ^] R HP-2623 firmware NEC APC ^] R P K VT100, ADM3A firmware Wang PC ^A Wang firmware Zenith Z100 ^] ? ? ? ? Heath-19 emulation TI Pro ^] M P K VT100/Tektronix Generic DOS ^] Depends on system R = rollback, M = mode line, P = printer control, K = key redefinition. Table 11-1: Kermit-MS Terminal Emulation Options ------------------------------------------------------------------------------- Those systems that use the program's built-in Heath-19 emulation can disable it with the SET HEATH OFF command, in order to use an external console device driver like ANSI.SYS. When you first issue the CONNECT command, a message (on some systems, an in- verse video "mode line") will display the most important facts about the con- nection you've just established, so that you can quickly diagnose any problems. The items displayed in the mode line include the escape character, port number, the baud rate, the parity, the echo, and how to get help, for instance: --------------------------------------------------------------------------- EscChar:^],Port:1,Baud:9600,Parity:None,Echo:Remote,Type ^]? for Help --------------------------------------------------------------------------- MS-DOS KERMIT Page 186 The escape character is used to regain the attention of Kermit-MS. When you type the escape character, Kermit-MS waits for you to follow it with a single character command. For instance, the single-character-command "?" produces a list of available single character commands, such as this: ? Help -- prints the available single-character commands. C Close the connection and return to Kermit-MS prompt level. S Show the status of the connection. B Transmit a BREAK signal. 0 (the digit zero) Transmit a NUL (ASCII 0). P Push to DOS; get back by typing EXIT. Q Temporarily quit logging the remote session. R Resume logging the remote session. M Toggle the mode line, i.e. turn it off if it is on & vice versa. ^] (or whatever you have set the escape character to be) Typing the escape character twice sends one copy of it to the connected host. Typing any other character (except the space bar, which is the "null command") after the escape character will cause Kermit-MS to beep, but will do no harm. The escape character can be changed to something other than Control- Rightbracket by using the SET ESCAPE command. The IBM PC implementation also allows the mode line to be toggled by typing the keypad "+" key, and will send a BREAK signal if you type Ctrl-Break. The SET MODE-LINE command allows the mode line to be enabled or disabled from the com- mand line or initialization file. Kermit-MS includes several advanced features for use during terminal emulation, including screen scroll, printer control, and key redefinitions. 11.4.1. Screen Scroll On certain systems, Kermit-MS provides several pages of screen memory, which may be scrolled up and down using keys as shown in Table -MSSKEYS. ------------------------------------------------------------------------------- System Screen Down Line Down Screen Up Line Up IBM PC PgUp Ctrl-PgUp PgDn Ctrl-PgDn Rainbow PrevScreen Ctrl-PrevScreen NextScreen Ctrl-NextScreen HP-150 Prev Shift-UpArrow Next Shift-DownArrow NEC APC Uparrow Ctrl-UpArrow DownArrow Ctrl-DownArrow Table 11-2: Kermit-MS Screen Scroll Keys ------------------------------------------------------------------------------- There is presently no way to assign these functions to other keys. The IBM PC also allows use of the Home key to get to the top of its display memory and End key to get to the bottom, and the keypad plus (+) key to toggle the mode line on and off. MS-DOS KERMIT Page 187 The Rainbow implementation uses Shift-Next-Screen to get to the bottom of its display memory. 11.4.2. Printer Control During terminal emulation, a locally attached printer may be controlled in the normal manner, on most systems. Pushing the "Print Screen" key (shifted on some systems) will cause the current contents of the screen to be printed or spooled; holding down CTRL while depressing Print Screen will start or stop the spooling of incoming characters to the printer. ^P or ^N are sent to the host during terminal emulation, and do not toggle printing, as they do when you're talking directly to DOS. CTRL-Print-Screen can be simulated with the Kermit-MS LOG PRN and CLOSE com- mands. 11.4.3. Key Redefinitions Key redefinitions are useful for defining "keystroke macros" of login se- quences, frequently issued commands, and so forth, and for setting up the ter- minal for use with host resident software designed to work with terminals that send predefined sequences from their function keys. For instance, here's a key redefinition file for arranging the DEC Rainbow keyboard into the normal ASCII keyboard layout: ; Make shift-comma send a left angle bracket set key scan 556 < ; Shift-period sends a right angle bracket set key scan 558 > ; Accent grave is where ESC is supposed to be set key scan 96 \33 ; Put accent grave on the ESC function key set key f11 ` Since SET KEY is a two-line command, a special trick is necessary in order to include it in a single-line macro definition: just use a comma where you would have typed carriage return after the first line, for instance: define bar set key scan 261, foo The CLEAR command may be used to eliminate all key redefinitions. The SET KEY facility may be used provide the PC with a "meta" key for use with editors like EMACS or TVEDIT that can use "meta characters" as commands. A meta key is a shift key whose effect is to turn on the 8th (parity) bit of the character. For instance, on the IBM PC the scan codes produced by holding down ALT together with other keys can be determined using SHOW KEY, and then 8-bit ASCII equivalents with the 8th bit turned on can be defined using SET KEY; if the scan code produced by typing ALT-a, i.e. the letter "a" (ASCII 141, octal) with the ALT key held down, is 2078 (decimal), you would set the META equivalent to 141+200=341 (octal), or "\341" in octal SET KEY notation: MS-DOS KERMIT Page 188 Kermit-MS>sho key Press a key: ALT-a Scan Code: 2078 Definition: Kermit-MS>set key scan 2078 Definition String: \341 Whenever you type ALT-a with this definition in effect, Kermit-MS will transmit octal 341, rather than 141. 11.5. Installation of Kermit-MS by Bill Catchings, Columbia University If you already have Kermit on your PC, you can use it to obtain new versions of Kermit-MS when they appear on the central system at your site. If you do not have Kermit or any other reliable file capture facility on your PC, and there is no one from whom you can borrow a floppy disk to copy Kermit, then you should read the following instructions for initially "bootstrapping" Kermit-MS from a mainframe where it is stored onto your microcomputer. There are at least three methods of initially getting Kermit-MS onto your PC: 1. Try again to find a copy on diskette. 2. Use another file capture facility to get it. 3. Type in and run a bootstrapping program. 11.5.1. Try Again To Find A Kermit Disk Before explaining how to bootstrap Kermit onto your PC, a disclaimer must be made. Although a fair amount of thought and time has gone into these procedures, they are far from error free. If they were foolproof, there would be no need for a protocol such as Kermit. There are many places where things can go wrong, from something as simple as a typing mistake to something as un- avoidable and probably inevitable as a communications line failure. By far the easiest and best way to install Kermit is from a floppy disk. Before you em- bark on any of the following procedures it is a good idea to check once again for a diskette to copy, even it it contains an old version of Kermit. The time you spend searching is likely to be far less frustrating than the time you spend trying to bootstrap Kermit by the methods described below. 11.5.2. Bootstrapping From the Communication Line If you can't find a diskette with Kermit on it, there are two other methods available for bootstrapping MS-DOS Kermit onto your PC. The first method is to use a file capture method or other file transfer protocol to transfer the file to your PC. Some systems come supplied with facilities like this, and various public domain or commercial packages are available. The second method requires you to type in your own downloading program. In either case, you must transmit the file from the system where it resides MS-DOS KERMIT Page 189 over a communication line and into your PC. Since version 2 of MS-DOS Kermit is much larger than version 1, it comes with a new bootstrapping procedure in which the executable program is encoded much more compactly than in the earlier "fix" files. The new encoding packs 3 .EXE file bytes into 4 printable charac- ters in the MSxxx.BOO file, and also compresses adjacent zero bytes (of which there may be many). The .BOO file contains only printable ASCII characters, to ensure that downloading can take place regardless of parity or other peculariaries of the communication channel. 11.5.2.1. Use An Existing File Capture Facility In the rest of this discussion of bootstrapping, the host-resident boot .BOO file will be referred to as MSKERMIT.BOO. In fact, the actual name will depend on which MS-DOS system you are using -- MSIBMPC.BOO for the IBM PC or XT, MSRB100.BOO for the Rainbow 100, etc. Use your file capture facility, whatever it may be, to get the file MSKERMIT.BOO onto your PC's disk, but first make sure you have enough room for it. Once the file is on your disk, you must run the BASIC program MSPCTRAN.BAS to decode the file back into KERMIT.EXE. This program can be downloaded by the same method you used with MSKERMIT.BOO. The program looks on your current disk and directory for the file MSKERMIT.BOO and outputs KERMIT.EXE to the same place. KERMIT.EXE is about 50K bytes, so make sure there is space for it on your disk or else you will have to start the program over. Since the program will take about twenty minutes to completely translate the file you will want to avoid running it more than once. 11.5.2.2. Type In Your Own Bootstrap If you can't find some method for downloading the .BOO file and the BASIC program, the second way of bootstrapping Kermit is to use the programs MSPCBOOT.BAS and MSBOOT.FOR to download via your PC's asynchronous port from your host and translate it directly, "on the fly." You run the program MSBOOT.FOR on your host and then run the program MSPCBOOT.BAS in BASIC on your PC. The FORTRAN program sends the encoded .EXE file to the BASIC program, which decodes it and stores it in executable form on your current directory as KERMIT.EXE. A very rudimentary form of error checking is done to allow ob- viously corrupted records to be retransmitted. Follow this procedure: 1. First, you must establish a connection from your PC to the host sys- tem. A high speed connection is preferable; a "clean" line is preferable to a noisy one. In fact, a clean line is essential for this procedure. You must be able to log in to the host system over this connection. If your PC already has a terminal emulation facility, use that. If not, you might need to put your PC next to a real terminal and use that for logging in, then switch the connector to the PC at the critical moment. If you are using a terminal, make sure the terminal and PC have their communication ports set to the same speed. 2. Ensure that the files MSBOOT.FOR and MSKERMIT.BOO are present on the host system. MSBOOT.FOR is listed below, in case you need to type it in. MS-DOS KERMIT Page 190 3. Get back to your PC and type in MSPCBOOT.BAS on your PC; a listing appears below. There is no need to type in the comments (anything following an apostrophe); they are only there to clarify what the program is doing. Check very carefully for errors. You should check line 70 in the program to see that it reflects the way your system is actually set up. If necessary, substitute the correct baud rate for the supplied rate of 9600, and if you are not using COM1: make that change as well. If you are downloading from an IBM or other half-duplex mainframe, leave line 1000 as it is; otherwise, replace it by a RETURN statement. If you type it in directly to BASIC make sure you save the program before you run it, so you won't have to type it in again in case of error. 4. Get back to your host system and compile MSBOOT.FOR, if it needs compiling. Define logical unit numbers 5 and 6 to be the controll- ing terminal, and logical unit 7 to be the file MSKERMIT.BOO. On VAX/VMS systems, for example, use these commands: $assign sys$input for005 $assign sys$output for006 $assign mskermit.boo for007 On a DECSYSTEM-20, do: @define 5: tty: @define 6: tty: @define 7: mskermit.boo On an IBM system under VM/CMS, do this: .filedef 5 term ( lrecl 80 recfm v .filedef 6 term ( lrecl 80 recfm v .filedef 7 disk mskermit boo ( lrecl 77 recfm f perm 5. Set your host system up for downloading: - Ensure that your terminal does not automatically pause at the end of a screenful of output. For instance, on a DEC-20 you would issue the command "terminal no pause end-of-page". - Do whatever you can to disable messages from appearing at your terminal while these programs are running. This would include messages from other users, mail notification, alarms or alerts, system messages, and so forth. Such messages will interfere with the procedure, and probably render the result useless. - You should put your host terminal in "local echo" or "half duplex" mode, if possible. 6. Start the MSBOOT program on your host system. 7. Get back to the PC. If you have been using a terminal, switch the connector to the PC. 8. Now run the BASIC program, MSPCBOOT.BAS. This procedure will take at least twenty minutes and possibly longer depending on line speed. MS-DOS KERMIT Page 191 Watch your modem and/or disk lights for reassurance that something is happening. By using one of these installation methods, you should now have a working ver- sion of Kermit. If you experience any problems or quirky behavior with the program, it's possible that some part of it was corrupted during the download- ing procedure. Perhaps enough usable code remains to allow you to transfer MSKERMIT.EXE from the host. If not, you will have to repeat the downloading procedure. Once you have Kermit-MS on your disk, you should make the disk available to other users for copying, so that they can be spared the tedium of this bootstrap procedure. Here is a listing of MSPCBOOT.BAS. The "outdented" PRINT statements with line numbers ending in 5 may be included if you want incoming records to be dis- played on the screen. You don't need to include the comments. 1 'Run this program on the PC in conjunction with a Fortran program 2 '(MSBOOT.FOR) on the mainframe to download Kermit to the PC. This 3 'program will run for about thirty minutes, depending on line speed. 4 ' Bill Catchings, June 1984 (Revised Sept 1984) 5 ' Columbia University Center for Computing Activities 10 t$ = time$ ' Save the time. 20 defint a-z ' All integer to gain some speed. 30 n$ = chr$(0) 40 z = asc("0") 50 t = asc("~")-z 60 def fnuchr%(a$)=asc(a$)-z 70 open "com1:9600,s,7,1,cs,ds,cd" as #1 100 print#1,"O ,2" ' Char constants "O", " " and "," 110 input#1,f$ 120 if len(f$) < 5 then goto 110 ' In case the host echos the ACK. 130 input#1,n 135 print f$+" "+str$(n) 140 if n > 20 then goto 900 150 open f$ for output as #2 160 print "Outputting to "+f$ 170 goto 300 ' Correct version of the file. 200 gosub 1000 ' Do turnaround char processing 210 print#1,"NO" ' Tell host data was incorrect. 220 goto 320 300 gosub 1000 ' Do turnaround char processing 310 print#1,"OK" ' Say the line was all right. 320 input#1,x$ 330 if len(x$) < 5 then goto 320 ' In case the host echos ACK/NAK 340 input#1,n 345 print x$+" "+str$(n) 350 if len(x$) <> n then goto 200 ' Length doesn't match, NAK it. 360 if x$ = "&&&&&&&&&&" then goto 800 ' End of file? 370 y$ = "" ' Set output string to null. 380 goto 500 MS-DOS KERMIT Page 192 400 print#2,y$; ' Print the output string. 410 goto 300 ' Go get another line. 500 if len(x$) = 0 goto 400 ' Done with input string? 510 a = fnuchr%(x$) 520 if a = t then goto 700 ' Null repeat character? 530 q$=mid$(x$,2,3) ' Get the quadruplet to decode. 540 x$=mid$(x$,5) 550 b = fnuchr%(q$) 560 q$ = mid$(q$,2) 570 c = fnuchr%(q$) 580 q$ = mid$(q$,2) 590 d = fnuchr%(q$) 600 y$ = y$ + chr$(((a * 4) + (b \ 16)) and 255) ' Decode the quad. 610 y$ = y$ + chr$(((b * 16) + (c \ 4)) and 255) 620 y$ = y$ + chr$(((c * 64) + d) and 255) 630 goto 500 ' Get another quad. 700 x$ = mid$(x$,2) ' Expand nulls. 710 r = fnuchr%(x$) ' Get the number of nulls. 715 print " Null: ",r 720 x$ = mid$(x$,2) 730 for i=1 to r ' Loop, adding nulls to string. 740 y$ = y$ + n$ 750 next 760 print#2,y$; ' Print the nulls. 770 y$ = "" ' Clear the output buffer. 780 goto 500 800 print "Processing complete, elapsed time: "+t$+" to "+time$ 810 print "Output in "+f$ 820 close #1,#2 830 goto 9999 900 print "?The format of the BOO file is incorrect" 910 goto 820 1000 x$ = input$(1,#1) ' Make this line RETURN for full-duplex 1010 if x$ <> chr$(17) then goto 1000 ' Loop for a turn around char. 1020 return 9999 end MS-DOS KERMIT Page 193 Here is a listing of MSBOOT.FOR, in case you can't find it on your host system: C This Fortran program should be run on the mainframe in conjunction C with a Basic program (MSPCBOOT.BAS) on the PC to transfer C MSKERMIT.BOO to the PC and translate it into KERMIT.EXE. This C program uses a very rudimentary technique to try to insure that C the characters it sends arrive correctly. It just sends a count C of the number of characters sent after each line. In this way any C errors of character loss or insertion will be caught. If a C character is just corrupted it will not be caught. Hopefully if C this happens it will be in a non-critical part of the KERMIT.EXE C file. The reason a simple checksum was not used was so that this C program could run on machines using either EBCDIC or ASCII C characters. This program should take about thirty minutes to run. C C This program assumes that 5 and 6 are directed to the terminal and C 7 is directed to the file MSKERMIT.BOO. C C Bill Catchings, Columbia University Center for Computing Activities C June 1984 (Revised September 1984) C INTEGER LINE(77), ACK(4), CHECK, OK, SPACE, COMMA WRITE(6,100) 100 FORMAT(' Ready to transfer data, now run MSPCBOOT.BAS on the PC.') C Get characters for constants (character constants are rough in C some FORTRANs). READ (5,200) OK, SPACE, COMMA, ACK 200 FORMAT(4A1) C The following statement has been changed from GO TO 30. GO TO 20 C Get terminal handshake. 10 READ (5,200)ACK C Did the other side like it? (Did they send OK?) IF (ACK(1) .NE. OK) GO TO 50 C Yes, get new line from file. 20 READ (7,300,END=99)LINE 300 FORMAT(77A1) C Count the characters as some rudimentary check for noise. I = 1 30 IF (LINE(I) .EQ. SPACE) GO TO 40 I = I + 1 GO TO 30 C Put in a comma followed by the count. 40 LINE(I) = COMMA C Write to TTY. 50 WRITE (6,400)LINE,I-1 400 FORMAT(' ',77A1,I2) GOTO 10 MS-DOS KERMIT Page 194 C Send good-bye message. 99 WRITE (6,500) 500 FORMAT(' ',10('&'),',10') STOP END 11.6. Compatibility with Older Versions of MS-DOS Kermit MS-DOS Kermit supports many different systems. Like CP/M-80 Kermit, this sup- port was added to the program piecemeal, at many sites, using conditional as- sembly. However, before allowing the program to grow into a complicated monolith like CP/M-80 Kermit, we have broken the program up into separate modules, with system dependencies isolated into a single module consisting of compact collections of low-level primitives for console and port i/o. The last monolithic (single source file) release of MS-DOS Kermit was 1.20. To this and earlier versions was added support for systems like the Seequa Chameleon, the Tandy 2000, the Victor 9000, the Heath/Zenith 100, and others. Eventually, support for these systems may be integrated with the new modular version. Meanwhile, implementations based on these old versions will have at least the following incompatibilies from the version described here: - RECEIVE filespec is used instead of GET filespec. There is no GET command in older versions, and no way to specify a new name for an incoming file. - No LOCAL or REMOTE commands. - No 8th-bit prefixing, repeat counts, CRCs or 2-character checksums. - No TAKE or initialization files. - No command macros or command line arguments. - No terminal session logging. and others, depending on the specific version. 11.7. What's Missing Kermit-MS has plenty of room for improvement. Features that need to be im- proved or added include: - A built-in facility for sending files "raw" to the remote system, obeying current settings for parity, flow control, handshake, and so forth. This might include a script interpretation facility to allow remote sessions to be conducted automatically. For the present, this can be accomplished with a user-supplied program invoked with the Kermit-MS RUN command. - Additional functionality when running in server mode -- directory listings, file deletion, execution of DOS commands, etc. - More commands when talking to remote servers -- REMOTE RENAME, COPY, STATUS, WHO, etc. - Allowance for fully qualified DOS file specifications, including path names, in all commands. MS-DOS KERMIT Page 195 - Filename conversion options (normal form, handling of fully qualified filespecs, etc.). - Transaction file logging. - Improved command parsing; for instance, accept default values for omitted trailing fields. - A better built-in help facility. - Support for Kermit file attribute packets. 11.8. Program Organization Kermit-MS version 2 is composed of separate assembler source files, assembled separately, and linked together. The modules are: System/Device Independent: MSKERM.ASM Main program MSSEND.ASM File sender MSRECV.ASM File receiver MSSERV.ASM Server operation MSFILE.ASM File i/o MSCMD.ASM Command parser MSTERM.ASM CONNECT command MSCOMM.ASM Communications port buffering & flow control MSSET.ASM SET, SHOW, and STATUS commands MSXDMB.ASM Dummy module to force segment order; must be linked FIRST. MSFINAL.ASM Dummy module to find the end of the data segment; must be linked LAST. MSDEFS.H Data structure definitions and equates System/Device Dependent: MSXxxx.ASM System-dependent code for system xxx MSYxxx.ASM System-dependent screen and keyboard code MSZxxx.ASM Modem control (modem-dependent) The modular organization allows easier modification of the program, quicker transfer of modified portions from system-to-system. The modules are designed to be well-defined and self-contained, such that they can be easily replaced. For instance, someone who prefers windows and mice to typing commands could replace the command parsing module without having to worry about the effect on the other modules. To assemble any of the Kermit modules, file MSDEFS.H must be on the default disk. All the Kermit implementations require the modules MSCMD, MSCOMM, MSFILE, MSKERM, MSRECV, MSSEND, MSSERV, MSSET, MSTERM, MSXDMB, MSFINAL. MSXDMB must be the first module linked; MSFINAL must be the last. The IBM PC version requires MSXIBM and MSYIBM as well. MS-DOS KERMIT Page 196 The Rainbow version requires MSXRB. The HP150 version requires MSXHP150, the Wang version requires MSXWNG, and the generic version requires MSXGEN. Once all the required object modules exist, they may be linked together to produce Kermit. For example, on the Rainbow: A>link Microsoft Object Linker V2.00 (C) Copyright 1982 by Microsoft Inc. Object Modules [.OBJ]: msxdmb mskerm msxrb mscomm msset mssend + msrecv msserv msfile msterm mscmd msfinal Run File [MSXDMB.EXE]: kermit List File [NUL.MAP]: kermit A> 11.9. Adding Support For New Systems You can bring Kermit-MS to systems that are not explicitly supported in one of two ways -- attempt to run the "generic" MS-DOS Kermit on it, or add explicit code to support your system. 11.9.1. Generic MS-DOS Kermit To get started with Kermit on a new system, try running "generic" MS-DOS Ker- mit; in many cases, it will run as is. The generic version accomplishes all its port and console i/o through DOS calls, and during terminal connection does not attempt to emulate any particular kind of terminal. In some cases, the generic version may still require some fiddling to run on a new system; for in- stance, different systems refer to their communication ports in different ways -- COM1, AUX, etc. The SET PORT command allows you to specify the port using any of these device names, or using DOS file handles -- keep trying until you find the one that works. Generic MS-DOS Kermit will probably run no faster than 1200 baud, and it only works with DOS 2.0 or later. 11.9.2. Adding System-Dependent Code The following is a guide to the system dependent module of Kermit-MS. MS-DOS KERMIT Page 197 SPECIFICATION FOR KERMIT SYSTEM-DEPENDENT MODULES by Jeff Damens, Columbia University All the system-independent global data structures used in Kermit-MS are defined in the file MSDEFS.H. The routine MSXxxx.ASM contains system-dependent support for system xxx, except for terminal emulation, which is in MSYxxx.ASM, described below. The routines in the MSX module may change any registers but the stack pointer and segment registers, unless otherwise noted. A routine that returns via a RET instruction is said to return normally; a routine that skip returns is one that returns to three bytes past the normal return address. Global variables that must be defined in the system-dependent module: XOFSNT byte. This should be set to a non-zero value if we are doing flow control and have sent an XOFF character to the remote host, zero otherwise. MACHNAM byte. A $-terminated string identifying the machine this ver- sion of Kermit is for; it is printed when Kermit starts up. SETKTAB byte. A keyword table associating terminal key names to 16-bit scan code values, used in the set key command. If the kermit version can accept arbitrary decimal values as scan codes, the word "SCAN" should appear in the table with a scan value of -1. If key redefinition is not implemented, the first byte of the table should be a zero. SETKHLP byte. A $-terminated string to be printed when ? is typed in the SET KEY command. This is usually simply a list of the key names in SETKTAB. SETKHLP must be defined even if key redefinition is not implemented, to satisfy the linker; if key redefinition is not implemented, SETKHLP will never be dis- played. COUNT word. The number of characters in the serial input buffer, if known. This is how Kermit knows to send an XON if the serial handler has sent an XOFF. If the number of characters in the buffer isn't known, COUNT should be 0. These are the required entry points for the system dependent dependent module MSXxxx.ASM. MS-DOS KERMIT Page 198 SERINI Parameters None. Returns Normally, no return value. Description Perform any initialization that must be done before the serial port can be used, including setting baud rate, interrupt vec- tors, etc. Parity and baud rate should be set according to the values in the PORTINFO structure. The external variable PORTVAL points to the PORTINFO structure for the current port. Calling SERINI more than once without an intervening call to SERRST should have no effect. SERRST Parameters None. Returns Normally, no return value. Description Undoes any initialization done by SERINI, including resetting the serial port, restoring any interrupt vectors changed by SERINI, etc. Calling this more than once without an interven- ing call to SERINI should be harmless. CLRBUF Parameters None. Returns Normally, no return value. Description Remove and discard from the serial port's input buffer any characters sent by the remote host that have not yet been read by Kermit, and set COUNT to 0. This is used before a file transfer to flush NAK's that accumulate in the buffer when the remote host is in server mode. OUTCHR Parameters A character in AH. Returns Skip returns if the character has been transmitted; returns normally if the character can not be transmitted because of a hardware error. Description Sends the character in AH out the currently selected serial port. OUTCHR can assume that SERINI will have been called previously. OUTCHR should call the external routine DOPAR to set the parity of the character if the communications hardware doesn't automatically set parity. Flow control should be honored; the external variable PORTVAL contains a pointer to a PORTINFO structure (as defined in MSDEFS.H) containing the cur- rent flow control definitions. MS-DOS KERMIT Page 199 COMS Parameters None. Returns Normally if a parse error is encountered, skip returns other- wise. Description Called by the SET PORT command. On a machine with multiple serial ports, COMS should parse for the name or number of a serial port and make that the port used by succeeding calls to SERINI, PRTCHR, OUTCHR, and SERRST. It should set the external variable PORTVAL to point to one of the external port struc- tures PORT1 or PORT2, and set COMFLG in the FLAGS structure to 1 for port one, 0 for port 2. For implementations that use only one serial port, COMS should print a message to that ef- fect and skip return. VTS Parameters None. Returns Normally if a parse error is encountered, skip returns other- wise. Description Parses for an ON or OFF, sets HEATH-19 emulation while in ter- minal emulation appropriately. The VTFLG field of the FLAGS structure should be set non-zero if HEATH-29 emulation is on, zero otherwise. If HEATH-19 emulation is not done, VTS should print a message and skip return. DODEL Parameters None. Returns Normally, no return value. Description Erases the character immediately to the left of the cursor from the screen, then backs up the cursor. CTLU Parameters None. Returns Normally, no return value. Description Move the cursor to the left margin, then clear the line. MS-DOS KERMIT Page 200 CMBLNK Parameters None. Returns Normally, no return value. Description Clears the screen and homes the cursor. LOCATE Parameters None. Returns Normally, no return value. Description Homes the cursor. LCLINI Parameters None. Returns Normally, no return value. Description Performs any system-dependent initialization required by this implementation. PRTCHR Parameters None. Returns Normally, with the next character from the currently selected serial port in AL. Skip returns if no character is available. Description Reads the next character from the current serial port. PRTCHR can assume SERINI has been called previously, and should handle flow control correctly. DOBAUD Parameters None. Returns Normally, no return value. Description Sets the baud rate for the current port. The baud rate should be obtained from the BAUD field of the PORTINFO structure, pointed to by the external variable PORTVAL. MS-DOS KERMIT Page 201 CLEARL Parameters None. Returns Normally, no return value. Description Clears from the cursor to the end of the current line. DODISK Parameters None. Returns Normally, no return value. Description Sets the external variable DRIVES to the number of disk drives attached to the machine. GETBAUD Parameters None. Returns Normally, no return value. Description Store current baud rate of the currently selected port in the BAUD field of the current PORTINFO structure, which is pointed to by PORTVAL. If the baud rate is to default to a particular value, this routine can store that value into the BAUD field instead. BEEP Parameters None. Returns Normally, no return value. Description Rings the terminal bell. PUTHLP Parameters A pointer to a string in AX. Returns Normally, no return value. Description Writes the null-terminated string given in AX to the terminal. This is used to display help and status messages. The IBM and Rainbow versions write the string in a reverse video box. MS-DOS KERMIT Page 202 PUTMOD Parameters A pointer to a string in AX. Returns Normally, no return value. Description Writes the null-terminated string given in AX to the last line of the screen, in inverse video if possible. CLRMOD Parameters None. Returns Normally, no return value. Description Clears the line written by PUTMOD. POSCUR Parameters Row in DH, column in DL. Returns Normally, no return value. Description Positions the cursor to the row and column given in DX. Rows and columns both originate at 0 (not 1!). SENDBR Parameters None. Returns Normally, no return value. Description Send a break to the current serial port. SHOWKEY Parameters Pointer to a terminal argument block in AX (see TERM below). Returns Normally, with a string pointer in AX and the length of the string in CX. Description Called by the SHOW KEY command. Reads a key from the terminal and returns a string containing implementation-dependent infor- mation about the key. In the usual case, the string contains the key's (machine-dependent) scan code, and the key's defini- tion (if any) from the terminal argument block. The length of the returned string should be returned in CX. The string may contain any characters; unprintable characters will be quoted when the string is printed. If the implementation does not support key redefinition, SHOWKEY may return a static string saying so. MS-DOS KERMIT Page 203 TERM Parameters Pointer to terminal argument block in AX. Returns Normally, no return value. Description Do terminal emulation, based on argument block described below... The terminal emulator is supplied in the file MSYxxx.ASM. The terminal ar- gument block passed to the terminal emulator has the following fields: FLGS Byte containing flags. Flags are: SCRSAM (80H) If on, the terminal emulator shouldn't re-display the screen when entered. CAPT (40H) Capture output. If on, the routine passed in field CAPTR is called with each character sent to the screen. EMHEATH (20H) Emulate a Heath-19 terminal if on. HAVTT (10H) A key redefinition table is present. TRNCTL (08H) Print control character X as ^X (useful for debugging). MODOFF (04H) Do not display emulator mode line if on. LCLECHO (01H) Echo keyboard characters on the screen in ad- dition to sending them to the port. PRT Port to use for terminal emulation, used only in mode line. This is just a copy of COMFLG in FLAGS. COLS Number of columns on screen. ROWS Number of rows on screen. CAPTR Routine to call to with each character sent to the screen if CAPT flag is on. Characters are passed in AL. BELLD Bell divisor (used only on IBM). KLEN Number of keys in key redefinition table, if HAVTT flag is on. KTAB Address of key redefinition table. The key redefinition table is a table of KLEN 16-bit scan codes. Each (machine dependent) scan code represents a key that is redefined. KRPL Address of key replacement table. The key replacement table parallels the key redefinition table given in KTAB. Entries in MS-DOS KERMIT Page 204 the replacement table are 16-bit pointers to redefinitions. Each redefinition has a one-byte length, followed by the definition. ESCC Escape character (single byte). When this character is typed to the emulator, it should return. BAUDB byte. Bits describing the baud rate so it can be printed on the mode line. This is a copy of the BAUD field in the POR- TINFO structure. Currently used only on the IBM. See MSDEFS.H for possible values. PARITY byte. Current parity to print on the mode line. This is a copy of PARFLG in the PORTINFO structure. Currently used only on the IBM. See MSDEFS.H for possible values. 11.10. Heath/Zenith-19 Control Codes The Heath/Zenith-19 terminal is equivalent to the DEC VT52 with extensions for line and character insertion and deletion. Items marked with an asterisk are not currently supported by Kermit-MS H19 emulation. Cursor Functions Sequence Mnemonic Definition ESC H HCUH Cursor Home ESC C HCUF Cursor Forward ESC D HCUB Cursor Backward ESC B HCUD Cursor Down ESC A HCUU Cursor Up ESC I HRI Reverse Index *ESC n HCPR Cursor Position Report ESC j HSCP Save Cursor Position ESC k HRCP Set Cursor to Previously Saved Position ESC Y HDCA Direct Cursor Addressing, 1-based: 31+line# 31+col# (same as VT52) Erasing and Editing Sequence Mnemonic Definition ESC E HCD Clear Display (Shift Erase) ESC b HBD Erase Beginning of Display ESC J HEOP Erase to End of Page (Erase Key) ESC l HEL Erase Entire Line ESC o HEBL Erase Beginning of Line ESC K HEOL Erase to End of Line ESC L HIL Insert Line ESC M HDL Delete Line ESC N HDCH Delete Character ESC @ HEIM Enter Insert Character Mode ESC O HERM Exit Insert Character Mode MS-DOS KERMIT Page 205 Configuration Sequence Mnemonic Definition *ESC z HRAM Reset to Power-Up Configuration *ESC r Bn HMBR Modify Baud Rate: Bn= A=110, B=150, C=300, D=600, E=1200, F=1800, G=2000, H=2400, I=3600, J=4800, K=7200, L=9600, M=19200 ESC x Ps HSM Set Mode(s): Ps= * 1 = Enable 25th line * 2 = No key click * 3 = Hold screen mode 4 = Block cursor * 5 = Cursor off * 6 = Keypad shifted * 7 = Alternate keypad mode * 8 = Auto line feed on CR * 9 = Auto CR on line feed ESC y Ps HRM Reset mode(s): Ps= * 1 = Disable 25th line * 2 = Enable key click * 3 = Exit hold screen mode 4 = Underscore cursor * 5 = Cursor on * 6 = Keypad unshifted * 7 = Exit alternate keypad mode * 8 = No auto line feed * 9 = No auto CR *ESC < HEAM Enter ANSI Mode Modes of Operation Sequence Mnemonic Definition *ESC [ HEHS Enter Hold Screen Mode *ESC \ HXHS Exit Hold Screen Mode ESC p HERV Enter Reverse Video Mode ESC q HXRV Exit Reverse Video Mode *ESC F HEGM Enter Graphics Mode *ESC G HXGM Exit Graphics Mode *ESC t HEKS Enter Keypad Shifted Mode *ESC u HXKS Exit Keypad Shifted Mode *ESC = HAKM Enter Alternare Keypad Mode *ESC > HXAM Exit Alternate Keypad Mode MS-DOS KERMIT Page 206 Additional Operations Sequence Mnemonic Definition *ESC } HDK Keyboard Disable *ESC { HEK Keyboard Enable ESC v HEWA Wrap Around at End of Line ESC w HXWA Discard at End of Line ESC Z HID Identify as VT52 (ESC / K) *ESC ] HX25 Transmit 25th Line *ESC # HXMP Transmit Page Enhanced Character Support ESC [ p1 ; ... pn m Set Graphics Rendition where p1, ..., pn are chosen from the following: 0 Reset to normal character display. 1 Display characters in high intensity. 4 Display characters underlined. 5 Display characters blinking. 7 Display characters in reverse video. The Heath-19 transmits the following sequences, but it will not respond to them if they are received. Kermit-MS will transmit them only if they are programmed with SET KEY. ESC S HF1 Function Key #1 ESC T HF2 Function Key #2 ESC U HF3 Function Key #3 ESC V HF4 Function Key #4 ESC W HF5 Function Key #5 ESC P HF7 Function Key #7 ESC Q HF8 Function Key #8 ESC R HF9 Function Key #9