@Part(MSKERMIT,root="kuser") @comment{Last update: Thu Dec 15 10:04:23 1988} @string(-msversion="@q<2.32>") @string(-msdate="@q<11 Dec 1988>") @Chapter @case(device,file="@*--------@* This document is formatted as an ordinary, plain text ASCII disk file, from SCRIBE text formatter source. Typeset copies are available from Columbia University.@*--------@*") @Begin @i(Program:)@\Joe R. Doupnik (Utah State University), with contributions by James Harvey (Indiana/Purdue University), James Sturdevant (A.C. Nielson Company), and many others. Originally by Daphne Tzoar and Jeff Damens (Columbia University). See History. @i(Language:)@\Microsoft Macro Assembler (MASM) @i(Version:)@\@value(-msversion) @i(Released:)@\December 11, 1988. @i(Documentation:)@\Christine Gianone, Frank da Cruz (Columbia University),@* Joe R. Doupnik (Utah State University) @i(Dedicated To:)@\Peppi @end @subheading @begin Local operation:@\Yes Remote operation:@\Yes Transfers text files:@\Yes Transfers binary files:@\Yes Wildcard send:@\Yes File transfer interruption:@\Yes Filename collision avoidance:@\Yes Can time out:@\Yes 8th-bit prefixing:@\Yes Repeat count compression:@\Yes Alternate block check types:@\Yes Terminal emulation:@\VT102, H19, VT52, Tektronix 4010 Communication settings:@\Speed, Parity, Flow Control, Echo Transmit BREAK:@\Yes (and Long BREAK) IBM mainframe communication:@\Yes Transaction logging:@\Yes Session logging (raw download):@\Yes Raw upload:@\Yes Act as server:@\Yes Talk to server:@\Yes Advanced server functions:@\Yes Advanced commands for servers:@\Yes Local file management:@\Yes Command/init files:@\Yes Command macros:@\Yes Extended-length packets:@\Yes Local area networks:@\Yes (NetBIOS and other support) MS-Windows compatibility:@\Yes Attribute packets:@\Yes Sliding windows:@\No @end @Index[PC-DOS]@Index[IBM PC Family]@Index[MS-DOS] MS-DOS Kermit, or "Kermit-MS" (or MS-Kermit), is a program that implements the Kermit file transfer protocol for the entire IBM PC family, including the PS/2 series, IBM compatibles, and several other machines based on the Intel 8086 processor series (8088, 80286, 80386, etc) and the DOS operating system family (PC-DOS or MS-DOS, henceforth referred to collectively as MS-DOS or simply DOS). It is assumed you are acquainted with your PC and with DOS, and that you are familiar with the general ideas of data communication and Kermit file transfer. A very brief overview is given here, but for details consult the early chapters of the @i (of which this document is a chapter), or the book @ux, by Frank @w, Digital Press (1987), order number EY-6705E-DP (phone 1-800-343-8321), which also includes background tutorials on computers, file systems, and data communication (including modems, cabling, etc). For further information about Kermit documentation, updates, lists of current available versions, and ordering information, write to: @begin Kermit Distribution Columbia University Center for Computing Activities 612 West 115th Street New York, NY 10025 (USA) @end @Section Kermit-MS version 2.32 runs in as little as 100K of memory, but will occupy up to 160K or so if it can be found for extra screen rollback memory, macro definitions, etc. Versions not using screen rollback memory will not require the additional space. It will also try to leave 24 Kbytes free for a second copy of @q which is needed for execution of certain commands. @index@index@index On the IBM PC family, Kermit-MS @value<-msversion> performs almost complete emulation of the DEC VT-102 and Heath/@|Zenith-19 terminals at speeds up to 19,200 baud or greater, lacking only the VT102's smooth scrolling and (on most display boards) 132 column features. And as of version 2.30, Kermit-MS also performs Tektronix 4010/4014 graphics terminal emulation on IBM PC family systems equipped with CGA, EGA, or other graphics adapters, with either color or monochrome monitors. Much of Kermit's speed is accomplished by direct writes to screen memory, but this is done in a "TopView-@|aware" manner to allow successful operation in windowing environments like MS-Windows@index, DesqView, and TopView itself. Speed is also due to direct access of the serial port 8250 @index UART (Universal Asynchronous Receiver/@|Transmitter) chip, with buffered, interrupt-@|driven receipt of characters and selectable XON/XOFF @Index flow control. Full speed 9600 baud operation is possible on 4.77Mhz systems without flow control, but flow control is required on these systems for 19,200 baud or higher rates. The IBM PC version should also run on near-clones like the DG/1@Index that differ from true PCs only in their choice of UART; non-8250 UARTs are detected automatically, and slower non-interrupt driven Bios serial port i/o is used, in which case the top speed is in the 1200 baud range. Kermit-MS @value<-msversion> runs on the entire IBM PC family (the PC, XT, AT, PCjr, Portable PC, PC Convertible, PS/2) and compatibles (Compaq, VAXmate, Z150, etc), and there are also specially tailored versions for non-IBM-@|compatibles like the DEC Rainbow, HP-110, HP-150, HP Portable Plus, Grid Compass II, Victor 9000, and others, plus a "generic DOS" version that should run (slowly) on any 8086-based MS-DOS machine. This document concentrates on the IBM version; some of the system-@|dependent capabilities described here may be lacking in the non-IBM versions. See section @ref<-msfeatures> for features of different systems. @q for the IBM PC family occupies about 102K of disk storage (the figure will vary for other versions). This can be reduced by about 15K if you run it through EXEPACK@index(EXEPACK). MS-Kermit is not distributed in packed form, because problems have been reported on certain systems when this is done. So if you decide to pack it, make sure to keep an unpacked version available to fall back to in case of problems. @Section Over the years, MS-Kermit has grown from a Kermit file transfer program that embodied a simple terminal emulator into a complex and powerful communication program that includes the Kermit file transfer protocol. As a result, the bulk of this manual is devoted to the communication features, rather than Kermit protocol operation. Skip ahead to the next section if you're not interested in the history of MS-Kermit. MS-DOS Kermit (like the Kermit file transfer protocol itself) is a product of the Systems Group of the Columbia University Center for Computing Activities, and it was one of the four original Kermit programs (with the CP/M, DEC-20, and IBM mainframe versions). It was initially written for the IBM PC with DOS 1.1 by Daphne Tzoar in 1981-1982, based largely on Bill Catchings's original CP/M 8080 assembler version. PC-Kermit (as it was called then) provided basic Kermit file transfer and VT52 emulation. Joellen Windsor of the University of Arizona added conditional assembly support for the Heath/Zenith-100 shortly thereafter, and soon after that Dave King of Carnegie-@|Mellon University added Heath-19 terminal emulation, and some patches to let the program run under the new DOS version, 2.0. During this era, the program version numbers went from 1.0 to 1.20. With the appearance in the marketplace of many new MS-DOS machines that were not compatible with the IBM PC, it became apparent that conditionally assembled code supporting each of these machines within a single monolithic source file was not the best way to organize the program. Therefore Daphne, along with Jeff Damens of Columbia, undertook to reorganize the program in a modular way, isolating system dependencies into separate files. The result was version 2.26, released in July 1984. It included support for the DEC Rainbow, the HP-150, the Wang PC, and generic MS-DOS, as well as for the IBM PC family and the H/Z-100. It also included many new features, like 8th-bit prefixing (code contributed by The Source Telecomputing), alternate block check selection, byte-count compression, server/client operation, access to local file and DOS operations, command macros, initialization and command files, screen rollback, key redefinition, and more. For the 2.26 release, the executable Kermit programs were encoded printably as @qq<.BOO> files, designed by Bill Catchings as part of this effort, for network and electronic-mail distribution. Release 2.27 was produced by Daphne and Jeff in December 1984. Unlike 2.26, it ran correctly on the new PC/AT under DOS 3.0, and included support for the NEC APC from Ron Blanford of Seattle, WA, and Ian Gibbons of the University of Hawaii, and for the TI Professional from Joe Smith of the Colorado School of Mines, plus some bug fixes and reorganization. 2.27 is the last version that runs under pre-2.0 versions of DOS. Version 2.28 (Daphne, Jeff, June 1985) added dynamic memory allocation to reduce disk storage for the @q<.EXE> file, and to allow the program to adjust itself to the PC's memory size, plus the inevitable bug fixes (many of them contributed by Edgar Butt of the University of Maryland and Gregg Small of the University of California at Berkeley). During this period, support for additional MS-DOS systems was added by various people. In December 1985, a tape showed up at Columbia sent by Prof.@ Joe R.@ Doupnik of the Center for Atmospheric and Space Studies and EE Department at Utah State University. This tape contained version 2.28 modified to fully support the DOS 2.0 file system, and to which many new features had been added, notably the ability of the MS-DOS Kermit server to process various REMOTE commands (DIR, CWD, SPACE, etc). And at about the same time, a tape arrived from James Harvey of Indiana/@|Purdue University, who had changed Kermit's CONNECT command to emulate the popular DEC VT100 terminal. James's material was sent to Joe, who then laboriously fitted the VT100 emulation into his own code, keeping the VT52 and H19 emulation alive as options, and upgrading the VT100 emulation to VT102 by adding features such as line and character insertion and deletion. The result was version 2.29, released in May 1986. Soon after the release of 2.29, some disks were sent in by James Sturdevant of the A.C. Nielson Company, containing a full implementation of the Kermit script facility, as described in the Kermit book. This material was sent to Joe, who had by now become keeper of MS-DOS Kermit and had already begun work on version 2.30 by adding support for extended-@|length packets. Joe had been carrying on voluminous network correspondence (Thanks, BITNET!) with Columbia and with MS-DOS Kermit users and testers all over the world, giving birth to many new features, including Tektronix graphics terminal emulation, support for operation over local area networks, support for 8-bit ASCII terminal connections and international character sets, ANSI printer control, and a redesigned, more powerful, more portable key redefinition mechanism. Version 2.30 was formally released on January 1, 1988, after many "alpha" and "beta" tests. Among the many contributors to this version were Brian Holley and Joe Smith for the Tektronix emulation, Robert Goeke for the NEC AP3 support, Brian Peterson and Andreas Stumpf for the Victor 9000, Bob Babcock and Joe White for the Sanyos, Christopher Lent for the Wang PC, Jack Bryans for an Intel iRMX version, Jim Noble for the Grid Compass, Geoff Mulligan and others for the Zenith 100, and David Knoell for the special Rainbow edition. And thanks to Gisbert Selke, Jack Bryans, and others for proofreading drafts of this manual, with apologies to anyone we neglected to mention. Work on version 2.31 began within weeks of the release of 2.30. The major new features were an improved command interface, a fully capable script programming language, and inclusion of file attributes packets to send the time, date and size of files along with the data. Support for Ungermann-Bass Net One LAN was also added, thanks to contributions from Henrik Levkowetz and Renne Rehmann. These changes led to a fairly thorough revision of the interior while providing the familiar commands and new features. Meanwhile, @index@index Horofumi Fujii and Akihiro Shirahasi of the National Laboratory for High-Energy Physics (KEK) in Japan adapted 2.31 to the NEC PC-9801, and for this machine added support for Japanese Kana and Kanji character sets. Version 2.32 was issued by Joe in December 1988. It included the usual bug fixes, plus several new script programming features, and improved support for international use, allowing for languages like Hebrew and Arabic that print right to left, adapted from work by Baruch Cochavy, IIT, Technion, Haifa, Israel. Thanks also to Glenn Trewitt, Mark Zinzow, and Ken Ridley for valuable suggestions and contributions to this release. Like all Kermit programs, MS-DOS Kermit may be freely copied and shared, so long as it is not done for profit. @Section MS-DOS Kermit performs two major functions, terminal emulation and file transfer. File transfer can be done using either the Kermit file transfer protocol, or else (without error checking), ASCII or XON/XOFF capture and transmission methods. To use Kermit for "raw" uploading or downloading of files, see the descriptions of the TRANSMIT and LOG SESSION commands. Before you can transfer files with another system using Kermit protocol, you must first connect to it as a terminal, login if necessary, and start up a Kermit program there. Kermit's CONNECT command lets you do this by making your PC act like a terminal. After setting things up on the other computer, you must return to the PC and tell it what to do. Returning to the PC is accomplished by typing a special sequence of characters, called the "escape sequence." The following example shows this process; the other computer is a Unix system, but the method is the same with most others. The parts you type are underlined (if this document was printed on a printer that can underline), and when you type a command, you terminate it with a carriage return, which you can't see in the example. The mysterious @qq(^]c) is MS-Kermit's escape sequence, which you enter by holding down the Control (Ctrl) key and pressing @qq(]) (right square bracket), and then typing the letter C. The example assumes the MS-Kermit program is stored on disk as @q. @begin @tabclear()@tabset(2.8inches,3.0inches,3.2inches) @index @i@\@i A>@ux IBM PC Kermit-MS V@value(-msversion) @value(-msdate)@\@i(Program's greeting.) Type ? or HELP for help Kermit-MS>@ux@\@i(Set the right baud rate). Kermit-MS>@ux@\@i(Connect as a terminal.) @ux@\@i(Dial the modem if necessary.) CONNECT 1200@\@i(The modem tells you you're connected.) @ @ @i @ @ @i Login: @ux@\@i(Login to the host.) password:@ux< >@\@i<(Passwords normally don't echo.)> % @ux@\@i(Run Kermit on the host.) C-Kermit>@ux@\@i(Tell it to receive a file.) @ux<^]c>@\@i(Escape back to the PC.) Kermit-MS>@ux@\@i(Send a file.) @ @ @i<(The file is transferred@value)> Kermit-MS>@\@i(Transfer complete, prompt reappears.) @end In this example, the user types "kermit", and sees the program's herald and its prompt, @qq(Kermit-MS>). Then she sets the appropriate communication speed ("baud rate"), connects as a terminal, issues a dialing command to a Hayes-like modem@index (you would skip this step if you had a direct connection), logs in to her ID on the Unix system which she has dialed, starts "C-Kermit" on the Unix system, tells it to receive a file, escapes back to the PC, and tells MS-Kermit to send a file. After the file is transferred, the user would normally connect back to the Unix system, exit from the Kermit program there, and log out: @begin @tabclear()@tabset(2.5inches) Kermit-MS>@ux@\@i(Connect again.) C-Kermit>@ux % @ux<^D>@\@i(Logout from Unix by typing Ctrl-D.) @ux<^]c>@\@i(Escape back to the PC.) Kermit-MS>@ux@\@i(Return to DOS.) @end To transfer a file in the other direction, simply exchange the "send" and "receive" commands above. That's the easiest and quickest way to use Kermit. If this simple scenario does not work for you, issue the MS-Kermit SHOW COMMUNICATIONS command and look for any obvious incorrect settings (port, speed, parity), fix them with SET commands (described in Section @ref<-msset>), and try again. (IBM mainframe linemode connections have so many "different" settings, there's a special command to do them all at once, "do ibm", which you would type as the first Kermit-MS command above.) If that doesn't help, read on. Many problems can crop up when you attempt to connect two unlike systems over a possibly hostile communication medium. And if you intend to be a frequent user of Kermit, there are many options you can take advantage of to adapt MS-Kermit to different systems, improve its performance, and automate common tasks. @Section The features of the MS-DOS file system of greatest interest to Kermit users are the form of the file specifications, and the formats of the files themselves. @subsection MS-DOS file specifications (in version 2.0 or later of DOS) are of the form @example(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) followed by a colon (@qq<:>), PATHNAME@index is up to 63 characters of identifier(s) (up to 8 characters each) surrounded by backslashes (@qq<\>), 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, @qq<.> means the current directory, @qq<..> means the parent directory. Some DOS implementations (like Wang) may use slash (@qq) rather than backslash as a directory separator. Pathname is normally omitted, but can be specified in all Kermit-MS commands (as of version @q<2.29>). 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. @Begin(Quotation) When this document says that a file is searched for "in the current path@index," it means that Kermit-MS looks on the current disk and directory first, and if the file is not found, then the directories listed in the PATH environment variable are searched. If the PATH environment variable is empty, Kermit looks only at the current disk and directory. @End(Quotation) @q is sufficient to specify a file on the current disk and directory, 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 @qq<-> (dash), @qq<_> (underscore), @qq<$> (dollar sign), @qq<&> (ampersand), @qq<#> (number sign), @qq<@@> (at sign), @qq (exclamation mark), @qq<'> (single quote), @qq<()> (parentheses), @qq<{}> (curly braces), @qq<^> (caret or circumflex), @qq<~> (tilde), and @qq<`> (accent grave). Normally, you should confine your filenames to letters and digits for maximum transportability to non-DOS systems. When you type lowercase letters in filenames, they are converted automatically to uppercase. There are no imbedded or trailing spaces. Other characters may not be included; there is no mechanism for "quoting" otherwise 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 @q is the source of a BASIC program named FOO; @q might be the relocatable object module produced by compiling @q; @q could be an executable program produced by loading @q, and so forth. @q(.EXE) and @q(.COM) are the normal suffixes for executable programs. @index MS-DOS allows a group of files to be specified in a single file specification by including the special "wildcard" characters, @qq<*> and @qq. A @qq<*> matches any string of characters from the current position to the end of the field, including no characters at all; a @qq matches any single character. Here are some examples: @Begin(Description,spread 0.5,leftmargin +10, indent -8) @q<*.BAS>@\All files of type @q (BASIC source files) in the current directory. @q@\Files of all types with name @q. @q@\All files whose names start with F. @q<*.?>@\All files whose types are exactly one character long, or have no type at all. @End(Description) 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. Users of Kermit-MS should bear in mind that other (non-@|MS-DOS) systems may use different wildcard characters. For instance VMS and the DEC-20 use @qq(%) instead of @qq(?) as the single character wildcard; when using Kermit-MS to request a wildcard file group from a Kermit-20 server, the DOS @qq must be replaced by the DEC-20 @qq<%>. @subsection MS-DOS systems store files as streams of 8-bit bytes, with no particular distinction among text, program code, and binary files. @index ASCII text files consist of lines separated by carriage-@|return-@|linefeed sequences (CRLFs), and this conforms exactly to the way Kermit represents text files during transmission, so Kermit-MS has no need for a SET FILE TYPE BINARY command. But since a non-@|MS-DOS receiving system might need to make distinctions as to file type, you will probably have to issue SET FILE TYPE commands there if you are sending it non-text files. In transmitting files between Kermit-MS programs, regardless of file contents, the receiving MS-DOS system is equally capable of processing text, code, and data, and in fact requires no knowledge of how the bytes in the file are to be used. @index[End Of File] MS-DOS (unlike CP/M) knows the exact end of a file because it keeps 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, you should be aware of a special SET EOF option for both incoming and outbound files, described later. Non-MS-DOS systems may be confused by nonstandard ASCII files sent by Kermit-MS: @begin Files containing any of the 8-bit "extended ASCII" characters may need conversion (or translation) to 7-bit ASCII. Files produced by word processing programs like Word Perfect or Word Star may contain special binary formatting codes, and could need conversion to conventional 7-bit ASCII format prior to transmission, using an "export" procedure. Files created by word processors that store formatting data at the end of the file, after the Control-Z and before physical end, may require special processing via SET EOF to strip the formatting data, lest they confuse non-@|MS-DOS recipients. Spreadsheet or database files usually need special formatting to be meaningful to non-@|MS-DOS recipients (though they can be transmitted between MS-DOS systems with Kermit-MS). Such programs usually come with an "export" procedure to convert their files to plain ASCII text. BASIC programs are normally saved in a binary "tokenized" form. Use BASIC's @qq<,a> SAVE option to save them as regular ASCII text, as in @example(save"foofa",a) @end In general, when attempting to transfer non-text files between MS-DOS and a different kind of system, consult the Kermit manual for that system. @section @label<-mspinv> The MS-DOS Kermit program can be run from any disk without any special installation procedure. On hard disk systems, it is convenient to store the program in one of the directories listed in your DOS PATH, and it is often desirable to customize Kermit's operation to your communications and computing environment by creating an initialization file. Kermit-MS can be run interactively, from a batch file, as an "external" DOS command, or from redirected standard input. 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 @index(MSKERMIT.INI)@q(MSKERMIT.INI) on the current disk, or (if not found on the current disk) in the first directory containing a file by that name, from the list in your DOS PATH environment variable. The Kermit initialization file may contain command macro definitions, communications settings for one or more ports, or any other Kermit-MS commands, and you may create it using any text editor capable of saving files in plain ASCII text format. Here is a sample: @case comment -- MSKERMIT.INI, MS-DOS Kermit initialization file comment -- Don't overwrite my files! set warning on comment -- Define macros for the systems I use... define unix set local-echo off,set par non,set flow xon,set timer off def ibm set par odd,set loc on,set hands xon,set flo none,set tim on def modem set port 2, set speed 1200 comment -- Define macros for quickly adapting to varying def noisy set block-check 3, set receive packet 40, set retry 20 def normal set block-check 1, set rec pack 94, set retry 5 def clean set block-check 2, set rec pack 500, set retry 5 comment -- I always start out by connecting to my UNIX system... set port 1 set speed 4800 do unix connect @end(example) A different file may be substituted for @q by using "@q<-f >@i(filename)" on the DOS command line, e.g. @example(kermit -f monday.ini) The meanings of these commands will emerge below. For now, just note how you can use command files (and "macro definitions") to easily adapt MS-Kermit to widely differing communication environments. A more advanced initialization file is shown in section @ref<-msini>. @subheading(Interactive Operation:) To run Kermit-MS interactively, invoke the program from DOS command level by typing its name, normally "kermit" (this means the program should be stored in your path@index(PATH) with the name @q). When you see the program's prompt, @example(Kermit-MS>) you may type Kermit commands repeatedly until you are ready to exit the program, as in the following example (which assumes there's already a Kermit "server" set up on the other end): @Begin(Example) A> A>@ux[kermit] IBM PC Kermit-MS V@value(-msversion) @value<-msdate> Type ? or HELP for help Kermit-MS>@ux[set speed 19200] Kermit-MS>@ux[send foo.*] @i(The files are sent.) Kermit-MS>@ux[get fot.*] @i(The requested files are received.) Kermit-MS>@ux[exit] A> @end[example] Interactive commands are described in Section @ref<-mscmdref>. @subheading(Command Line Invocation:) Kermit-MS may be invoked with command line arguments from DOS command level, for instance: @Begin(Example,below 0.5) A>@ux(kermit send peter.amy) @End(Example) or @Begin(Example,above 0.5) A>@ux(kermit set port 1, set speed 9600, connect) @End(Example) In this case, help and completion @index are not available (because the program that provides them won't start running until after you type the entire command line), and Kermit-MS will exit back to DOS after completing the specified command or commands. Therefore, when invoked with command line arguments, Kermit-MS will behave as if it were an external DOS command, like MODE. Note that several commands may be given on the command line, separated by commas. This can't be done interactively or from TAKE command files. @index(STAY) @index(-F Command) Two special Kermit commands can be given on the DOS command line. First is the keyword STAY which prevents Kermit from exiting naturally when the last command has completed (unless, of course, EXIT or QUIT was among the commands). The second command is @example<-F @i(filename)> This means use the indicated filename as the initialization file rather than @q. The PATH will be searched for this file, if necessary. A space or tab must separate -F from the filename, and the F may be in upper or lower case. Example: @example(kermit -f tuesday.ini, set port 2, do ibm, stay) You can run Kermit with no initialization file at all by using the command @example(kermit -f nul) If @q<-F> is the only command line option, STAY is implied. @subheading(Redirected Input and Output) @index Kermit-MS also can be operated by redirecting input to it from a file, as in: @begin C>@ux(kermit < myscript.txt > myscript.log) @end or from a DOS "pipe", as in @begin C>@ux(sort < sends.txt | kermit) @end The file @q(MYSCRIPT.TXT) contains Kermit commands as if they were typed manually. The DOS symbol "@q(<)" means that Kermit should read from the following file rather from the keyboard. Kermit knows this is occurring and takes special steps to avoid the real keyboard and to quit when the file has been completely examined. The filename can also be the name of a device, such as COM1, to converse on the same or different line as file transfer traffic. Information destined for the screen still goes to the screen unless the phrase "@q(> )@i" is added to the command line above to send the normal screen output to a file or device (device COM1 also works). Note that the terminal emulation screen cannot be redirected. @subheading(Batch Operation:) @index(Batch Operation of Kermit-MS) Like many other MS-DOS programs, Kermit-MS may be operated under DOS batch with command line arguments. If you invoke it without command line arguments, it will run interactively, reading commands from the keyboard and not the batch file. When it exits, batch processing will continue to the end of the batch file. Kermit-MS returns the "errorlevel" parameter used as program exit status. Present values are in the range 0 to 7 with three areas yielding success or failure reports for the entire Kermit session. The errorlevel values are: @begin(format) @tabclear()@tabset(1.6inch) @u< errorlevel>@\@ux 0@\entirely successful operation 1@\a Send command completed unsuccessfully 2@\a Receive or GET command completed unsuccessfully 4@\a REMOTE command completed unsuccessfully 3,5,6,7@\combinations (addition) of the above conditions @end(format) Note that failures are remembered for the whole session and are not canceled by a following successful operation of the same type. Thus, sending several files individually yields an errorlevel of 0 only if all the files were sent successfully. The "errorlevel" parameter also applies to script commands where OUTPUT corresponds to SEND and INPUT to RECEIVE. An example of Batch invocation of Kermit is shown in Figure @ref<-mssendbat>. You may also force Kermit to return any desired errorlevel, using the SET ERRORLEVEL@index command. DOS batch parameters may be passed along to Kermit; see section @ref<-msmacros> for details. @subheading(Remote Operation:) @index The MS-DOS CTTY command allows an MS-DOS system to be used from a terminal connected to its communication port. Such sessions must be conducted with great care, since many programs assume that they are running on the real console, and explicitly reference screen memory or the physical keyboard. Kermit can be used in this manner too, but before you give it any file transfer commands, you must inform it that it is running in "remote mode" rather than its normal "local mode." Use the SET REMOTE ON command for this purpose, to prevent the file transfer display from being sent out the port. @subheading @index If you invoke Kermit frequently, and you have sufficient memory on your PC, you may find it convenient to copy Kermit and its initialization file to a RAM disk when you start your system. This allows Kermit to be started and used quickly and silently, with no mechanical disk operations. For instance, if you're using IBM's VDISK facility to create the RAM disk, you might put statements like this in your @q file: @begin DEVICE=VDISK.SYS 384 512 128 /e @end This assumes you have 384K of extended (@q) memory installed and @q is in the root directory of the boot disk. It creates a 384K RAM disk with 512B sector size and space for 128 directories in the extended memory, assigning it the disk letter of your first unused disk. And then in your @q file (assuming the RAM disk is disk @q)@value @begin COPY KERMIT.EXE D: >NUL COPY MSKERMIT.INI D: >NUL COPY COMMAND.COM D: >NUL SET COMSPEC=D:\COMMAND.COM PATH D:\; ... @end The PATH@index(PATH) command allows DOS to find @q, and Kermit to find @q and @q, on the RAM disk. If you use Kermit transfer files to your RAM disk, remember to copy those files to a real disk before you turn off the system. @subheading @index Kermit-MS can operate within windowing environments like such as TopView, DESqview, and MS-Windows. It runs in an active window under MS-Windows, accepts cut and paste material, talks with mice, and shrinks to an icon (a boxed "KER"). An MS-Windows @index<.PIF Files>@q<.PIF> file can be constructed for Kermit using the PIFEDIT program, supplied with Windows. Memory requirements should be listed as 102 to 160KB. It should state that Kermit does not modify the screen, keyboard, memory, COM1, or COM2 (not true but it satisfies Windows). Program switch and exchange should be marked as Text, and Close Window on Exit should be checked. This configuration will let you run Kermit with all the Windows features, but slowly. To run at full speed under Windows, tell PIFEDIT that Kermit modifies the screen. Then you lose the Windows features (cutting, pasting, running the clock at the same time, etc), but you still get back to the Windows interface when you EXIT Kermit. MS-Kermit has also been reported to operate successfully under Concurrent DOS@index. However, since it does not interact explicitly with the Concurrent DOS time-slice scheduler, Kermit will tend use a lot of CPU cycles. @subheading @Index@Index @Index@index MS-Kermit is capable of using a serial port on another local area network (LAN) node, so long as that node is running an asynchronous communication server and you have installed a device driver on your own PC that makes COM1 or other communication port i/o use the network server. This type of connection works because MS-Kermit 2.30 and later releases on IBM PCs check the selected port to see if it's a real 8250 UART chip, and if it isn't, Kermit uses only Bios calls for port i/o, and the network routes these through your network device driver. It may be desirable to give the command SET PORT BIOS@i (@i is a digit 1-4) to actively select the Bios port rather than a real hardware device. This style of operation should be transparent to Kermit, but not all asynchronous communications servers utilize this technique. @index @index As of version 2.30, the IBM PC version of Kermit can also communicate directly with another PC on a local area network through the IBM NetBIOS emulator distributed with the LAN. In essence, the LAN substitutes for the serial port, modem, and other wiring. Kermit running on one user machine can transfer files with another Kermit also on the network much as if they were connected by modems, and Kermit can talk with some larger machines the same way. The important network command is @index @index @begin(example) SET PORT NETBIOS @i @end(example) for NetBios, or @begin(example) SET PORT UB-NET1 @i @end(example) for Ungermann-Bass Net-One NETCI. For details, see the description of the SET PORT and SERVER commands, and (if you're interested) Section @ref<-msnetw> for a technical description. Kermit can even communicate with some other computers, such as Unix systems, which accept logins via this remote pathway. The initial startup is the same as calling a mainframe and logging in except the command SET PORT NET @i is used instead of SET PORT COM1. A connection is established with the first use of the communications circuit, such as CONNECT, REMOTE DIR, SEND, or other file transfer command, and terminated with the HANGUP command. @Section @label<-mscmdref> MS-DOS Kermit has the following commands: @blankspace(1) @Begin(Format,spread 0) @tabclear()@tabset(1.25inches) @>@q<->F@\ specify alternate init file name on DOS command line. @>ASK@\ user to type text, in response to a prompt. @>ASSIGN@\ the value of one variable to another. @>BYE@\ to remote server, exit from MS-Kermit. @>CLEAR@\ serial port buffer. @>CLOSE@\ log files and stop logging remote session. @>COMMENT@\ For including comments in command files. @>CONNECT@\ as terminal to remote system (C). @>CWD or CD@\ change local working directory. @>DEFINE@\ a macro of Kermit-MS commands. @>DELETE@\ local files. @>DIRECTORY@\ listing of local files. @>DISABLE@\ server recognition of selected commands. @>DO@\ a command macro. @>ECHO@\ a line of text on the screen. @>ENABLE@\ server recognition of selected commands. @>EXIT@\ from Kermit-MS. @>FINISH@\ Shut down a remote Kermit server. @>GET@\ remote files from server. @>GOTO@\ jump to labeled line in script file. @>HANGUP@\ the phone or network connection. @>HELP@\ about Kermit-MS. @>IF@\ decision-making in Take or Macro scripts. @>INPUT@\ specified string from serial port, for scripts. @>LOG@\ remote terminal session, transactions, or packets. @>LOGOUT@\ remote server, don't exit from Kermit-MS. @>MAIL@\ send file to remote Mailer via Kermit. @>OUTPUT@\ string out serial port, for scripts. @>PAUSE@\ between commands. @>POP@\ exit Take file or Macro. @>PUSH@\ to MS-DOS command level. @>QUIT@\ from Kermit-MS (same as EXIT). @>RECEIVE@\ files from remote Kermit (R). @>REINPUT@\ reread script Input buffer. @>REMOTE@\ Prefix for remote file management commands. @>RUN@\ an MS-DOS program or command. @>SEND@\ files to remote Kermit (S). @>SERVER@\ mode of remote operation. @>SET@\ various parameters. @>SHOW@\ various parameters. @>SPACE@\ inquiry (about disk space). @>STATUS@\ inquiry (about settings). @>STAY@\ stay within Kermit after DOS command line invocation. @>STOP@\ exit all Take files or Macros. @>TAKE@\ commands from a file. @>TRANSMIT@\ a file "raw" (no error checking). @>TYPE@\ a local file on the screen. @>VERSION@\ display Kermit-MS program version number. @>WAIT@\ for the specified modem signal to appear. @End(format) Not all of these commands are necessarily available on all MS-DOS systems, and some of the commands may work somewhat differently between DOS versions. A command keyword, such as SEND, RECEIVE, HELP, etc, may be abbreviated, so long as you have typed enough letters to distinguish it from other keywords that are valid in that position. For instance, you can type CLE for CLEAR and CLO for CLOSE. Several common commands also have special non-@|unique abbreviations, like C for CONNECT, S for SEND, and R for RECEIVE. Kermit will notify you if you have typed a word with too few letters. @index During interactive operation, you may edit the command you're currently typing using BACKSPACE to erase the character most recently typed, Ctrl-W to delete the most recent field, or Ctrl-U to delete the entire command. The editing characters may be used in any combination until the command is finally entered by typing RETURN (Carriage Return, Enter) or Ctrl-L. You may use the help (@qq) and keyword completion @index (ESC) features freely while typing Kermit-MS commands. A question mark typed at almost any point in a command produces a brief description, or "menu"@index, of what is expected or possible at that point. ESC typed at any point, except 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 @qq(?) to find out what the next field is); otherwise, the program will beep at you and wait for you to type more characters. As of version 2.31, Kermit-MS recognizes full 8-bit character inputs, with only NUL, ESC, DEL/BS, Ctrl-W (delete word), Ctrl-U (delete line), and Ctrl-C being special. This is to enhance support for various languages and keyboards. The SET KEY and SHOW KEY commands can prompt for keyboard input and understand 8-bit characters but only at their interactive prompt. The SET KEY, INPUT, and OUTPUT commands accept "backslash number format" @index on the main Kermit command line. Thus, national characters which are full 8-bit codes can be expressed on command lines in backslash number form (\ddd)@index, provided the Kermit command itself can understand the form. Most commands that want numbers or single characters as operands understand this notation. To enter characters in backslash number format, type a backslash (@qq<\>) followed by a number corresponding to the ASCII code for the character. MS-Kermit accepts many different backslash codes in different contexts. These are summarized in Table @ref<-msbacksl>; letters following the backslach may be either upper or lower case. @begin @bar() @blankspace(1) @begin @tabclear()@tabset(0.75inch) @q<\123>@\(up to 3 decimal digits) - A decimal number @q<\d123>@\(up to 3 decimal digits) - A decimal number @q<\o123>@\(up to 3 octal digits) - An octal (base 8) number @q<\x123>@\(up to 3 hexadecimal digits) - a hexadecimal (base 16) number @q<\{ }>@\For grouping, e.g. @q<\{12}6 = Ctrl-L 6>, not @q<~> @q<\;>@\Include a semicolon in a TAKE-file command or macro definition. @q<\%>@\Introduce a Kermit variable, @q<\%1, \%2, ..., \%a, \%b, ... \%z> @q<\K>@\A Kermit connect-mode verb like @q<\Kexit> (see Table @ref<-kverbs>) @q<\B>@\Send a BREAK (OUTPUT command only) @q<\255>@\Shorthand for CRLF or LFCR (INPUT command only) @q<\CD>@\Carrier Detect RS-232 signal (WAIT command only) @q<\DSR>@\Data Set Ready RS-232 signal (WAIT command only) @q<\CTS>@\Clear to Send RS-232 signal (WAIT command only) @end @caption(MS-DOS Kermit Backslash Codes) @tag(-msbacksl) @bar() @end(table) Table @ref(-msascii) shows all of the 7-bit ASCII codes in decimal. Most Kermit commands understand backslash-ASCII codes, both imbedded within character strings, and alone, as when a single character or number is to be specified. @begin
@bar() @blankspace(1) @begin @u 0 NUL ^@@ | 32 SP | 64 @@ | 96 ` 1 SOH ^A | 33 ! | 65 A | 97 a 2 STX ^B | 34 " | 66 B | 98 b 3 ETX ^C | 35 # | 67 C | 99 c 4 EOT ^D | 36 $ | 68 D | 100 d 5 ENQ ^E | 37 % | 69 E | 101 e 6 ACK ^F | 38 & | 70 F | 102 f 7 BEL ^G beep | 39 ' | 71 G | 103 g 8 BS ^H backspace | 40 ( | 72 H | 104 h 9 HT ^I tab | 41 ) | 73 I | 105 i 10 LF ^J linefeed | 42 * | 74 J | 106 j 11 VT ^K | 43 + | 75 K | 107 k 12 FF ^L formfeed | 44 , | 76 L | 108 l 13 CR ^M return | 45 - | 77 M | 109 m 14 SO ^N shift out | 46 . | 78 N | 110 n 15 SI ^O shift in | 47 / | 79 O | 111 o 16 DLE ^P | 48 0 | 80 P | 112 p 17 DC1 ^Q XON | 49 1 | 81 Q | 113 q 18 DC2 ^R | 50 2 | 82 R | 114 r 19 DC3 ^S XOFF | 51 3 | 83 S | 115 s 20 DC4 ^T | 52 4 | 84 T | 116 t 21 NAK ^U | 53 5 | 85 U | 117 u 23 ETB ^W | 54 6 | 86 V | 118 v 22 SYN ^V | 55 7 | 87 W | 119 w 24 CAN ^X | 56 8 | 88 X | 120 x 25 EM ^Y | 57 9 | 89 Y | 121 y 26 SUB ^Z | 58 : | 90 Z | 122 z 27 ESC ^[ escape | 59 ; | 91 [ | 123 { 28 FS ^\ | 60 < | 92 \ | 124 | 29 GS ^] | 61 = | 93 ] | 125 } 30 RS ^^ | 62 > | 94 ^ | 126 ~ 31 US ^_ | 63 ? | 95 _ | 127 RUBOUT,DELETE @end(example) @caption @index @tag(-msascii) @bar() @end(table) Some Kermit-MS commands like GET, SHOW KEY, and 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 to get back to the main @q(Kermit-MS>) prompt. @subheading @begin(description,leftmargin +12,indent -8) SPACE@\Separates fields within the command. TAB@\Same as Space, and echoes as Space. You may also use Ctrl-I for Tab. BACKSPACE@\Deletes the character most recently typed. May be typed repeatedly to delete all the way back to the prompt. You may also use DELETE, RUBOUT, Ctrl-H, or equivalent keys. Ctrl-W@\Deletes the most recent "word", or field, on the command line. May be typed repeatedly. Ctrl-U@\Deletes the entire command line, back to the prompt. Ctrl-C@\Cancels the current command and returns to the "@q(Kermit-MS>)" prompt. Also, terminates execution of a TAKE command file. ESC@\If enough characters have been supplied in the current keyword to identify it uniquely the remainder of the field is supplied and the cursor is positioned to the next field of the command. Otherwise, a beep is sounded. ESC does not provide filename completion. @q@\Displays a brief message describing what may be typed in the current command field. Also, wildcard character for matching any single character in all but the first position of a filename. @q<#>@\Wildcard character for matching single characters in filenames. Equivalent to MS-DOS @qq, but used in the first position of a filename only, so that @qq may be used to get help at the beginning of a filename field. ENTER@\Enters the command. On most keyboards, you may also use RETURN or Ctrl-M. Ctrl-L@\Clears the screen and enters the command. @end(description) Liberal use of @qq allows you to feel your way through the commands and their fields. This feature is sometimes called "menu on demand" or "context sensitive help" -- unlike systems that force you to negotiate menus at every turn, menu-on-demand provides help only when it is needed. Command reading is done through DOS calls and Kermit key redefinition does not apply at Kermit-MS command level. But @q or other external console drivers can be used for this purpose@index, for instance to assign ESC to the PC's backquote key (@q is the IBM-supplied extended screen and keyboard device driver, described in the IBM DOS Technical Reference Manual). Other console drivers available include ProKey, SuperKey, @q (a public-@|domain replacement for @q), and FANSICONSOLE. The notation used in command descriptions is as follows: @begin @q<[>square brackets@q<]>@\An optional field. This field may be omitted. @q<{>curly braces@q<}>@\A list of alternatives, separated by commas. Choose one of the items from the list. @i@\Shows parameters, such as numbers or filenames, are shown in italics (providing the printer is capable of printing italics). You substitute the actual number or filename. @ux@\In dialog examples, the characters you should type are underlined (on printers that can show it) to distinguish them from computer typeout. @q@\A time of day, in 24-hour notation (10:00:00 is 10 AM; 23:30:00 is 11:30 PM), which may not be more than 12 hours later than the current time. @end The following sections describe all the MS-DOS Kermit commands. Since some command descriptions may contain references to other commands that haven't been explained yet, you might find that this manual makes more sense on a second reading. @subsection "Program management" is a rubric for Kermit-MS commands like TAKE, EXIT, HELP, COMMENT, ECHO, and VERSION, that don't fall into any other category. HELP displays a one screen introduction to frequently used Kermit commands and their editing keys, and suggests using the question mark command to see the terse list of primary level Kermit commands. VERSION@index displays the MS-Kermit program version number, which you should know in case you are reporting bugs or seeking technical assistance. Other program management commands require a bit more explanation. @subHeading Syntax: @q@ @ @i@ @ @q EXIT and QUIT are synonyms for each other. They cause MS-Kermit to return control to DOS or whatever program invoked MS-Kermit. The specific actions taken are: @begin Close any open log or other files. Close any open network connection. Release all memory claimed by the program. Return interrupts for the currently selected communication device to their original owner. Terminate execution. @end @index The serial port RS-232 signals are left alone upon EXIT, so that modem connections are not broken. Kermit-MS may be restarted with the connection intact. Use HANGUP to explicitly break a modem connection; and use SHOW MODEM or SHOW COMMUNICATIONS to view the status of modem signals CD (Carrier Detect), Data Set (modem) Ready (DSR), and Clear To Send (CTS). @subHeading @index Syntax: @q The STAY command, if included among command line arguments, instructs MS-Kermit not to exit upon completion but rather to enter interactive mode, unless EXIT or QUIT was among the command arguments. STAY has no effect when entered interactively or from a TAKE file. @subheading @index Syntax: @q PUSH is similar to EXIT, except it leaves MS-Kermit intact by invoking an MS-DOS command processor "under" Kermit-MS, either @q(COMMAND.COM) or whatever shell you have specified with COMSPEC (or SHELL, depending on the system) in your @q file. You can return to Kermit-MS by typing the MS-DOS EXIT command, and you will find Kermit-MS as you left it, with all settings and the terminal emulation screen intact. The same function is invoked by the CONNECT escape-level command P. Example: @begin @tabclear()@tabset(2.5inch) Kermit-MS>@ux@\@i(Push to DOS.) Command v. 3.30@\COMMAND.COM @i C>@ux@\@i(Run a DOS program.) @ @ @i(DISKCOPY dialog here@value) C>@ux@\@i(More DOS commands@value) @ @ @i(DOS session continues@value) C>@ux@\@i(When done, type DOS EXIT command.) Kermit-MS>@\@i(Back at Kermit.) @end @subHeading Syntax: @q The TAKE command gives you way a to collect MS-Kermit commands into a single file, so that you can execute many commands by typing a single (TAKE) command. TAKE instructs MS-Kermit to execute commands from the file that you specify. The current directory is searched for the file first, and then any directories listed in the PATH@index(PATH) environment variable. The command file may include any valid Kermit-MS commands, including TAKE, but it cannot include characters to be sent to a remote host after a CONNECT command (use scripts for that, described below). Execution of a TAKE file may be cancelled by typing Control-C at the keyboard. An implicit TAKE command is executed upon the initialization file, @index(MSKERMIT.INI)@q (or another file specified in the @qq<-f> command-line argument), whenever you start MS-Kermit. The @q file contains any commands you want to be executed each time you run Kermit. A sample is shown above, and a more ambitious example is shown in section @ref(-msini). Commands within TAKE files, unlike interactive commands, may include trailing comments, preceded by semicolons: @begin set port 2 ; Select the modem port. set speed 1200 ; Set the baud rate for the modem. connect ; Conduct a terminal session. hangup ; Hang up the phone after escaping back. @end Note the HANGUP command after CONNECT. The HANGUP command is not executed until after you escape back from your CONNECT session. If this file were called @q, the following TAKE command would execute it: @example(Kermit-MS>@ux[take modem.cmd]) This directs MS-Kermit to find the @q file, open it, execute the commands in it, close it, and return to the @q(MS-Kermit>) prompt when done. This process can take a while on floppy-disk based systems. Since TAKE file processing discards all characters from a line beginning with the first semicolon, it is normally not possible to include semicolons as part of the commands themselves, e.g. @begin get dska:foo.bar;6 @end To get around this restriction, you may precede such semicolons with a backslash: @begin get dska:foo.bar\;6 @end Commands from the TAKE file will normally not be displayed on your screen during execution. If you want to see them as they are executing, you can SET TAKE-ECHO ON (for instance, at the beginning or end of your @q file). With the echoing ON, comments are also displayed for reference, but the semicolon is not shown. TAKE files may be nested to a reasonable level. A command file that was invoked by another command file normally returns to its invoking command file, rather than to the @q(MS-Kermit>) prompt, when the end of the command file is reached. @index(POP) @index(STOP) TAKE files have two commands to quit processing before the end of the file is reached. The POP command exits the current TAKE file (or macro) and returns control to the previously executing TAKE or macro, where one is invoked within another. The STOP command exits all TAKE files and macros and returns directly to the Kermit prompt. In TAKE files (and macro definitions, which are discussed later), long commands may be continued on subsequent lines by terminating each continued line with a hyphen (minus sign). If a line needs to terminate with a real minus sign it may be expressed numerically as @q(\45) or can be extented with extra spaces. The overall command length is normally 127 bytes (a beep sounds near this limit). An explicit question mark (@qq) in a TAKE file will cause a help message to be displayed and the rest of the line will be read as another command. If you need to include a question mark in a command, use the ASCII backslash notation "@q<\63>". @subheading @index<-F Command> Syntax: @q<-F @i(filespec)> The @qq<-f> command is effective only on the DOS command line. It instructs MS-Kermit to use the specified file as its initialization file, rather than @q. Unlike other command-line arguments, @qq<-f> does not, of itself, cause MS-Kermit to exit upon completion. Example: @begin C>@ux(kermit -f sunday.ini) Kermit-MS> @end The -F command line option allows different MS-Kermit initialization files to coexist. You can create batch commands to invoke Kermit in different ways, for instance @q might contain @qq, @q @qq, etc. @subheading @index Syntax: @q]> The ECHO command writes the string to the screen, without adding a carriage return or line feed. ECHO may be used to report progress during execution of a TAKE command file, or to issue prompts during the execution of a script. @example The number at the end is a "backslash codes" for ASCII control characters, in this case carriage return (@q<\13>). Since the ECHO command interprets backslash codes, @index@q and similar console drivers can be programmed through this command by embedding ANSI escape sequences (see section @ref<-msescchars>) in the echo string. The ECHO command always outputs a linefeed before the string. @subheading @index @begin Syntax: @q(COMMENT )@i @end The COMMENT command lets you add comments to a TAKE command file. The word COMMENT (or any unique prefix thereof) must appear as the first word on the line. The COMMENT command may also be entered interactively. It has no effect at all. Example: @begin COMMENT - MS-Kermit command file to connect port 2 to an IBM mainframe set port 2 set speed 4800 ; Transmission rate is 4800 do ibm ; Set parameters for IBM linemode connect ; Be a terminal @end Question marks can be included in comments without invoking the help function. @Subsection These commands are executed on your local PC, and generally invoke DOS services. This allows you to perform common DOS functions without leaving Kermit. All file specifications may include device and/or directory fields. The local file management commands are: @begin(description,leftmargin +8,indent -8,group,blanklines hinge) @q@i(path)@\Changes the current working directory to the given path@index(PATH). All references to local file names without explicit paths will refer to that path. A drive letter may be included to also change disk drives. This command affects Kermit and any inferior programs that you RUN or PUSH to, but your previous disk and directory are restored when you exit from Kermit. For consistency with DOS, you may also type CD. @q@i(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 @q<*.*>", Kermit-MS will prompt "Are you sure?" since DOS is doing the work. @q[@i(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 @q(DIR *.*). Normal DOS switches are effective. @q@\Tells how much space is available on the current disk. @q@i(command)@\Passes the command line to @q for execution. Any legal DOS operation is permitted: running a program (perhaps with command line arguments or i/o redirection), executing a DOS command, or executing a batch file. Kermit is suspended while the command is executed and automatically resumes afterward. The command will be executed directly by @q so follow the rules of DOS. Example: @example[Kermit-MS>@ux{run more < xmas.txt}] @q@i(filespec)@\Displays the specified local file on the screen. Automatic pause is not available at the end of a page (but see above example for how to accomplish this). On most systems, Ctrl-S can be typed to stop scrolling and Ctrl-Q to continue scrolling. @end(description) In most cases when you issue a local command, Kermit attempts to run the equivalent DOS command. If you get a message like "@q", it means that Kermit could not find @q, or that there was not enough memory left to load it. To ensure that Kermit can find @q, you should include a PATH statement in your @q file, which includes the device and directory where @q resides. You can add your own local commands by defining macros for them. For example: @begin define edit run epsilon \%1 define more run more < \%1 define rename run ren \%1 \%2 @end Then you can use these commands at Kermit-MS prompt level: "@q", "@q", "@q". However, you cannot redefine built-in commands, for example: @example[define send receive \%1] See Section @ref<-msmacros> for further information about macros. @newpage() @subsection(COMMANDS FOR TERMINAL CONNECTION) The CONNECT command connects your PC as a terminal to the remote system so that you may conduct a session there, and the HANGUP command may be used to disconnect your modem (if you have one) from the remote system. There is presently no built-in DIAL command. Modems may be dialed "manually" during CONNECT, or you can construct your own DIAL command by using scripts, which are described in detail in subsequent sections. For completeness, the descriptions below contain copious reference to the SET commands, which let you modify all sorts of terminal and communication parameters (the SET commands are described in a later section). MS-Kermit is initially set up with the following parameters, so that you only need to issue SET commands for those that need to be changed: @begin PORT@\1 (in most cases, e.g. COM1 on the IBM PC family) TERMINAL@\VT102(*) emulation (IBM PC, DEC Rainbow) SPEED@\Whatever the serial card is currently set to. PARITY@\None FLOW-CONTROL@\XON/XOFF HANDSHAKE@\None LOCAL-ECHO@\Off DISPLAY@\7-bit characters INPUT TRANSLATION@\Off ESCAPE@\Control-Rightbracket @end (*) The VT102 terminal is compatible with the VT100, but includes a few additional functions. @subheading @index Syntax: @q The CONNECT command establishes an interactive terminal connection to the remote system using the currently selected communications port (SET PORT COM1 or COM2, COM1 is the default) with all settings currently in effect for that port, emulating the currently selected type of terminal. During CONNECT, the characters you type are sent out the communication port, and the characters that arrive at the port are displayed on the screen or interpreted by the selected terminal emulator. If you SET LOCAL-ECHO ON, MS-Kermit itself will display the characters you type on the screen. Before you issue the CONNECT command, be sure to set the correct communication speed (SET SPEED) and any other necessary communication parameters (e.g. SET PARITY, SET LOCAL-ECHO). If you have SET DEBUG ON, then (on most DOS systems, particularly the IBM PC), received control characters will be displayed in special notation and no particular terminal will be emulated. By default, 7-bit ASCII characters are displayed on the screen. If you SET DISPLAY 8, then 8-bit characters will be used (useful for "national" character sets)@index. Character translation will be done according to any SET TRANSLATION INPUT and SET KEY commands you have issued. In addition, characters that are sent to the screen will also be recorded in a disk file or on a printer if you have issued a LOG SESSION command@index. The CONNECT command turns your PC into a terminal to the other computer. To get back to the PC, type the escape character followed by the letter C (for "Close connection")@index. On most MS-DOS systems the escape character is Ctrl-@q(]) (Control-@|Rightbracket). That means, hold down the Ctrl key, press @qq<]>, and then type the letter C. @begin @tabclear()@tabset(2.5inch) Kermit-MS>@ux@\@i @ @ @i> @ux<^]c>@\@i Kermit-MS>@\@i @end This is called "escaping back". You can use the SET ESCAPE command to change the escape character to something besides @qq<^]>, or you can assign the escaping-@|back operation to a single key or key combination with SET KEY (on the IBM PC the default for this is Alt-X). You can include the CONNECT command in a TAKE command file, but not "bare" text to be sent to the remote system during CONNECT (use scripts for that, see Section @ref<-msscp>). When a TAKE file includes a CONNECT command, no further commands will be executed from the file until after you escape back. A curious side effect of allowing Kermit to accept input redirected from a file or device is that Connect mode will read characters from that file or device; not really that useful but it works if you happen to need it. When you CONNECT, the program attempts to raise the DTR and RTS RS-232 signals (see Table @ref<-msrs232c>), and it takes no specific action to lower them unless you explicitly issue the HANGUP command; thus you can EXIT from Kermit-MS and restart it without dropping a dialup connection. While CONNECTed, you can communicate directly with an autodialer or "smart modem" to control the communications line, hang it up, and the like, for instance, by typing AT commands to a Hayes-@|like modem. @begin @tabclear()@tabset(2.5inch) @index Kermit-MS>@ux@\@i<(See Section @ref[-msset])> Kermit-MS>@ux @ux@\@i(Now you're talking to the modem.) OK@\@i(Your modem responds) @ux@\@i(Type the modem's dialing command.) RINGING CONNECT 2400 Welcome to ... @\@i Please login: @end MS-Kermit makes no attempt to monitor the modem's Carrier Detect (CD) or Data Set Ready (DSR) signals (see Table @ref<-msrs232c>), and will take no notice if they drop. Thus it is not possible to automatically terminate a session if the connection is broken. However, you may query or test the status of these modem signals yourself using Kermit's SHOW MODEM, SHOW COMMUNICATIONS, and WAIT commands. @begin
@bar() @blankspace(1) @begin @case[device,file="Signal DB25 DB9 Description", pagedfile="Signal DB25 DB9 Description", else="@tabclear()@tabset(0.6inch,1.1inch,1.6inch) @ux@\@ux@\@ux@\@ux" ] @tabclear()@tabset(0.7inch,1.2inch,1.6inch) FG@\ 1@\-@\Frame (protective) ground TD@\ 2@\3@\Transmitted data (from PC to modem) RD@\ 3@\2@\Received data (by PC from modem) RTS@\ 4@\7@\Request to Send (by PC) CTS@\ 5@\8@\Clear to Send (by modem) DSR@\ 6@\6@\Dataset Ready (Modem is turned on) SG@\ 7@\5@\Signal Ground CD@\ 8@\1@\Carrier Detect (Modem is communicating with remote modem) DTR@\20@\4@\Data Terminal Ready (PC is online) RI@\22@\9@\Ring Indicate (Modem tells PC phone is ringing) @end @caption(RS-232-C Modem Signals) @tag(-msrs232c) @bar() @end(table) @index When using Kermit to connect two PCs "back to back," SET LOCAL-ECHO ON so that when you CONNECT to the other PC to send messages to its operator, you can see what you are typing. You should also SET TERMINAL NEWLINE ON, so that that a linefeed will be automatically supplied for each carriage return you type. @Subheading @index@index On serial port connections, the HANGUP command attempts to momentarily lower the modem signals DTR and RTS (Table @ref<-msrs232c>). It may be used to hang up the phone when dialed up through a modem, or to get the attention of port contention units or terminal concentrators that operate in this manner. On direct connections, it will probably have no effect. On local area network connections, the network session is fully terminated. HANGUP affects only the currently selected port. @subheading(TERMINAL EMULATION) @index(Terminal Emulation) The IBM PC version of Kermit-MS emulates the DEC VT102 terminal by default, and may also be instructed to emulate the DEC VT52, the Heath/Zenith-19, the Tektronix 4010 graphics terminal, or no terminal at all, selectable with the SET TERMINAL command (or you may "toggle" among the different emulations by typing the Alt-Minus key). Emulation of each of these terminals is nearly complete. VT102 emulation lacks only smooth scroll and 132 column mode (132 column mode is supported for a number of popular EGA and VGA boards). Double-@|height, double-@|width characters are supported, but simulated using ordinary characters. @index The IBM PC's 40-column (large character) screen mode may be used during CONNECT (but you may also have to inform the remote host that your screen width is 40). This can provide improved readability to visually impaired persons. To use 40-column mode, enter the DOS command "MODE 40" (or CO40 or BW40). Other screen sizes are also sensed and used automatically, provided you have set them from DOS, before starting Kermit. On color monitors, the foreground and background colors may be set using SET TERMINAL COLOR, and inverse/normal video display may also be selected, along with many other terminal parameters. A complete list of the commands, default key configurations, and escape sequences accepted by the IBM PC Kermit terminal emulator is given in section @ref(-termcodes). Non-IBM-compatible PCs have different terminal emulation options. See section @ref<-msfeatures>. @subheading(Escape-Level Commands) @index The escape character, normally Control-@q(]), is used to regain the attention of Kermit-MS during CONNECT (you can change the escape character using SET ESCAPE). 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 @qq(?) produces a list of available single character commands. This command is executed immediately; it may not be edited, and the program does not wait for a carriage return to confirm it. Table @ref(-kescapes) shows CONNECT escape-level commands available in Kermit-MS. @begin
@bar() @blankspace(1) @begin @Begin(Description,leftmargin +6,indent -4, spread 0) @q@\Help -- Lists the available single-@|character commands. @q<0>@\(the digit zero) Transmit a NUL (ASCII 0). @q@\Transmit a BREAK signal. @q@\Transmit a Long BREAK signal (on some systems). @q@\Close the connection and return to Kermit-MS prompt level. @q@\Hangup the phone by lowering DTR and CTS momentarily. @q@\File the current screen in the screen dump file. @q@\Toggle the mode line, i.e. turn it off if it is on or vice versa. @q

@\Push to DOS; get back to CONNECT by typing EXIT. @q@\Temporarily quit logging the remote session. @q@\Resume logging the remote session. @q@\Show the status of the connection. @q<^]>@\(or whatever you have set the escape character to be)@\Typing the escape character twice sends one copy of it to the connected host. @End(Description) @end @caption(Kermit-MS Single-Character CONNECT Escape Commands) @tag(-kescapes) @bar() @end(table) 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. These actions are also Kermit action verbs and can be assigned to single keys. See SET KEY for details. @subheading(The Mode Line) @index[Mode Line] When you first issue the CONNECT command, a message (on some systems, an inverse video "mode line") will display the most important facts about the connection you've just established, so that you can quickly diagnose any problems. Here's what the IBM PC mode line looks like: @case[device, postscript="@begin(example,leftmargin 2,above 1,below 1,group)", x9700="@begin(example,leftmargin 4,above 1,below 1,group)", else="@begin(example,leftmargin 0,longlines keep,above 1,below 1,group)"] Esc-chr:^] help:^]? port:1 speed:9600 parity:odd echo:rem VT102 .... PRN @end(example) This shows that the escape character is Ctrl-Rightbracket, that you would type Ctrl-rightbracket followed by question mark (@qq<^]?>) to get help during CONNECT, that you are connected on port 1 at 9600 baud with odd parity and remote echo, and that a VT102 terminal is being emulated. The four dots represent the VT102s LEDs (they turn into the digits 1,2,3,4 when "lit") and PRN will show up if the printer@index is activated (e.g. by Ctrl-PrintScreen). The mode line may be turned on and off using SET MODE, or the CONNECT escape character followed by the letter M. @subheading(Screen Rollback) @index@index On the IBM PC and some other systems (see Table @ref(-mstermops)), Kermit-MS provides several pages of screen memory which let you recall earlier terminal screens. These may be scrolled up and down using keys as shown in Table @ref<-msskeys>. For instance, the IBM PC uses PgUp (previous screen), PgDn (next screen), Ctrl-PgUp and Ctrl-PgDn (one line at a time), Home (top of screen memory), and End (bottom of screen memory). Lines that scroll off the top of the screen are saved. When an application clears the screen using a recognized screen-clear sequence @w<(ESC [ 2 J)>, the whole screen is saved. The screen scrolling functions may be assigned to different keys with the SET KEY command. If you have rolled the screen back and a new character must be displayed, it will normally appear at the current cursor position on the old screen. This is useful when you are trying to copy something from a previous screen. If you wish new characters to appear in their proper place on the "newest" screen, you can SET TERMINAL ROLL ON. The number of lines in the roll back buffer depends on the machine, 10 full screens for IBM PCs and DEC Rainbows, and on the amount of memory available in the machine. Each screen needs 4KB on IBM PCs. Denser displays receive fewer roll back lines. @subheading(Screen Dump) @index@index The screen dump feature writes the contents of the current screen to a file (@q unless another file was selected by the SET DUMP command) when the CONNECT escape-level command F is typed. The screen dump file is appended to on each successive screen dump, with each screen separated by a formfeed (Ctrl-L). This feature may be used in conjunction with screen rollback -- a handy way to recapture screenfuls of laboriously typed-in text after a remote host has crashed without saving your work. The corresponding action verb is "dump". Screen dump does not function when in Tektronix graphics mode; instead one of many graphics screen capture programs may be used independently commonly via the DOS Shift PrtSc key combination or by LOGging the incoming byte stream. A screen dump differs from a session log in two ways. First, each desired screen must be manually filed, and second, the screen dump file has been stripped of any escape sequences, whereas the session log records them (see LOG SESSION). @subheading(Printer Control) @index 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 by DOS; holding down Ctrl while depressing Print Screen will alternately start and stop the spooling of incoming characters to the printer. On the IBM PC, the mode line will show PRN when the printer is activated in this manner. @q(^P) or @q(^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 commands. VT102 (ANSI) style host-controlled transparent printing is also supported on the IBM PC. See section @ref<-msprint> for technical information about MS-Kermit's printer control. Unix users may use the following shell script to print files on a locally attached printer: @begin #!/bin/sh # pcprint # usage: pcprint file(s) # or | pcprint # echo -n '[5i' if [ $# -eq 0 ]; then cat else cat $* fi echo -n '[4i' @end Note that "@q()" above should be replaced by a real Escape, ASCII character 27. @subheading(Graphics) @index @index MS-Kermit on the IBM PC, compatibles, and several other systems, is capable of emulating a Tektronix 4010 graphics terminal, for use with host-based software that can generate Tektronix control codes. When you enter Tektronix emulation, your cursor will disappear. Don't be alarmed, this is how Tektronix terminals behave. The Tektronix emulator implements a mixture of Tek 4010 and 4014 features to draw characters, lines, and dots in graphics mode. These Tektronix terminals have a graphics display 780 dots high by 1024 dots wide. They use storage tube technology whereby a dot stays illuminated until the full screen is erased. They also lack cursor keys. Kermit's Tek emulator maps the 1024 by 780 dot display to the PC's current screen dimensions, say 640 across by 200 or 350 dots high, and retains limited use of the cursor keys. It automatically senses the active display adapter (EGA, CGA, Hercules, Mono, and AT&T/Olivetti style 640x400) and retains screen coloring (EGA) and the current graphics image (EGA and Hercules) if the adapter has sufficient memory. Automatic sensing can be manually overriden to select a particular display mode, such as VGA (640x480), by SET TERMINAL GRAPHICS . Pure monochrome systems, of course, lack a graphics capability; in this case Kermit approximates the graphic image by writing dots as plus signs. Tektronix graphics mode is entered two different ways, automatically and voluntarily: @begin Automatically (which you can prevent via the Kermit command DISABLE TEK). While emulating a VT102, VT52, or Heath-19, reception of the byte pair ESCAPE Control-L causes the PC to change to graphics mode, clear the screen, and obey new input as Tektronix commands. A second automatic entry is reception of the escape sequence @w(@qq) which does the same as above except the screen is not cleared. Automatic mode is exited by either reception of Control-X or @w(@qq) (lower case L), or by toggling the terminal type (ALT minus, Kermit verb@q<\KTermtype>) to VT102, or something other than TEK. (These @w(@qq) sequences derive from the DEC VT340 terminal.) Voluntary mode is when terminal type TEK4010 is selected by the Kermit command SET TERMINAL TEK4010 or by toggling to it using Alt-Minus. It is exited by SET TERMINAL another-kind or by toggling to another kind. ENABLE or DISABLE TEK and the exit-Tek-mode escape sequences are not applicable to voluntary mode. @end Here are several common questions about Tek mode, and their answers: @begin @i<"How do I escape from graphics mode back to being a regular terminal?"> Within CONNECT mode, you can type the @q<\KTermtype> key, which is assigned by default to Alt-Minus. Repeated pressing of this key "toggles" among Kermit's terminal types, VT102, VT52, Heath-19, and Tektronix. You can also escape back to Kermit-MS command level and issue an explicit SET TERMINAL command to change the terminal type. @i<"How can I return to the graphics screen without erasing it?"> The graphics screen is preserved if your graphics adapter has sufficient memory (see Table @ref<-mstekda>). In this case, both your text and graphics screens will be preserved when you toggle back and forth between a character terminal (e.g. VT102) and Tektronix. @i<"How do I erase the graphics screen?"> You can type the @q<\KReset> key, which is normally assigned to Alt-=. The screen also clears if the host sends a Control-L or ESC Control-L. @i<"How do I print or save the graphics screen?"> Kermit does not currently provide a way to do this, but you can load drivers like @q alongside Kermit for this purpose. @end While acting as a Tek terminal Kermit uses the keyboard translation appropriate to the VT102 terminal. However, received escape sequences are interpreted by the Tek emulator and VT102 escape codes are inoperative. The Tek emulator absorbs the ESCAPE and following character and treats any additional unknown items as ordinary text. The emulator can display text characters from a built-in 8-by-8 dot font for characters Space through DELete (no control codes nor special characters). Tabs are converted to single spaces. Only the low 7 bits of the character are used. While in Tek mode the emulator behaves as a simple TTY device for ordinary text and as a line or dot drawing Tektronix device for commands listed in Table @ref(-mstekrc). The screen resolution is governed by the kind of active display adapter and monitor in the PC (Table @ref<-mstekda>). Kermit senses this automatically when graphics mode is entered. Graphics are saved on page one of screen memory. Coloring is determined by the current terminal status, either the default screen or that overridden by the command SET TERMINAL COLOR. @begin

@bar() @blankspace(1) @begin @tabclear() @case[device,file="@tabset(1.6inch,3.0inch,3.75inch)", pagedfile="@tabset(1.6inch,3.0inch,3.75inch)", else="@tabset(1.5inch,3.0inch,3.75inch)" ] @ux@\@ux@\@ux@\@ux VGA@\Hi res color@\18@\640x480, graphics saved (407 lines),@* @\@\@\ 16 colors. VGA@\Monochrome@\17@\640x480, graphics saved (407 lines) EGA w/256KB@\Hi res color@\16 dec@\640x350, graphics saved, 16 colors. @\Med res color@\14@\640x200, graphics saved, 8 colors. @\Monochrome@\15@\640x350, graphics saved, b/w. EGA w/64KB@\Hi res color@\16@\640x350, graphics not saved, @\@\@\ 4 colors of red, white, blue, black. @\Med res color@\14@\640x200, graphics saved, 8 colors. @\Monochrome@\15@\640x350, graphics not saved. CGA@\Color@\6@\640x200, graphics not saved, b/w. Hercules@\Monochrome@\none@\720x348, graphics saved if memory. Monochrome@\Monochrome@\7@\80 by 25 text, graphics not saved. AT&T/Olivetti@\any@\72@\640x400, grahics not saved, b/w. DEC VAXMATE@\any@\208@\640x400, graphics not saved, b/w. TOSHIBA T3100@\any@\116@\640x400, graphics not saved, b/w. @end @caption @tag(-mstekda) @bar() @end(table) The technical details of Tektronix emulation are presented in section @ref<-tekem>. @newpage() @subsection(COMMANDS FOR FILE TRANSFER) MS-Kermit's SEND, GET, and RECEIVE invoke the Kermit file transfer protocol for error-@|checked transmission of files between MS-Kermit and another Kermit program on the other end of the connection. There are also commands for "raw" transfer of files (no error checking) with systems that don't have Kermit programs: LOG SESSION (for capturing text files on your PC) and TRANSMIT (for uploading text files to the remote system). The LOG TRANSACTION command opens a file to record the status, time, date, names, sizes of each file transfer. During file transfer, MS-Kermit normally displays its progress on the screen as shown in Figure @ref<-msftscreen>. The items in the right-hand column are updated more or less at random. The percent done is always filled in when sending files, and when receiving if the other Kermit sends the file's size in a special file-attribute packet. The number of retries indicates how many times Kermit had to correct transmission errors. Several other file transfer display format options are also available; see SET DISPLAY. @begin(figure) @bar() @blankspace(1) @begin Kermit-MS: V@value<-msversion> @value<-msdate> File name: FOT. KBytes transferred: 7 Percent transferred: 52% Sending: In progress Number of packets: 74 Packet length: 93 Number of retries: 2 Last error: None Last warning: None @end @caption(MS-Kermit File Transfer Display Screen) @tag<-msftscreen> @bar() @end(figure) Although MS-Kermit makes no distinction between text and binary files@index, most other Kermit programs do. Therefore, before you attempt to transfer binary files with another type of system (say, a VAX, or an IBM mainframe), be sure to give the appropriate command -- usually SET FILE TYPE BINARY -- to the Kermit on the remote end. Kermit-MS itself neither has nor needs the command SET FILE TYPE, because the MS-DOS format for text files is exactly the same as Kermit's text-file transfer format, which means that MS-Kermit never needs to convert file data, no matter whether it be text or binary. File transfers involving floppy disks will be slow and noisy. Hard disks are much faster (and quieter), and RAM disks faster still (and totally silent)@index. But if you store new files on a RAM disk, be sure to move them to a real disk before turning off your PC. Before attempting to transfer files to the PC, make sure you have enough room on the selected device. Kermit does not provide a way for you to change disks during a file transfer. However, the Kermit protocol will help you out a little bit by attempting to prevent transfer of files that are too big to fit in the available space. As of version @q<2.31>, MS-Kermit supports "file attributes@index@index" exchange, and if the other Kermit supports this option too, then the receiving program will check free disk space before letting the transfer proceed. MS-Kermit allows a margin of 6 percent inflation upon reception, because file construction differs markedly between systems. A multiple-file transfer can even skip automatically past files that are too big, allowing the little ones to pass though. Other attributes exchanged by MS-Kermit include the file's creation date and time, and the system of origin. When two Kermit programs both have attribute capability, then files will be stored with the same timestamp on the receiving system as they had on the sending system. Since exchange of attributes is a new feature to MS-Kermit, and a relatively scarce one elsewhere, it is possible that two Kermit programs might misunderstand each other because of differing interpretations by the programmers, and this could prevent otherwise normal file transfers from taking place. An escape clause is provided by the command SET ATTRIBUTES OFF, which makes MS-Kermit forget that it has attribute capability. You may record the progress of a file transfer in a log file by issuing the command LOG TRANSACTIONS. @Subheading @index Syntax: @q @i{filespec1} [@i(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 server or interactive mode; in the latter case, you should already have given it a RECEIVE command and escaped back to your PC. S is a special non-unique abbreviation for SEND. @i(filespec1) may contain the @index wildcard characters @qq<*> to match zero or more characters within a field, and/or @qq<#> (first position) or @qq (elsewhere) to match any single character (a question mark in first position gives you a help message). If @i{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 @i{filespec1} specifies a single file, you may direct Kermit-MS to send that file with a different name, given in @i{filespec2}, as in: @example(Kermit-MS>@ux[send foo.bar framus.widget]) @i(filespec2) begins with the first nonblank character after @i(filespec1) and ends with the carriage return; thus it may contain blanks or other unusual characters that may be appropriate on the target machine. The alphabetic case of text in @i is preserved in transmission, so if case matters on the target system, be sure to type @i appropriately. If the SEND command is specified by itself on the command line, then you will be prompted separately for the name of the file to send, and the name to send it under: @Begin(Example) Kermit-MS>@ux(send) Local Source File: @ux(c:\stuff\xcom1.txt) Remote Destination File: @ux(com1.txt) @End(Example) If a file can't be opened for read access, the message "Unable to find file" will be shown or else the standard MS-DOS recovery procedures will take place: @Begin(Example) Not ready error reading drive A Abort, Retry, Ignore? @End(Example) Kermit remains active even if you select "Abort" (DOS's word, not ours). Files will be sent with their MS-DOS filename and filetype (for instance @q, no device or pathname). Special characters in the file name are not converted. If there is no filetype, then only the name will be sent, without the terminating dot. Each file is sent as is, with no conversions done on the data, except for possibly stopping at 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 displayed on your screen as the transfer begins. Packet, retry, and other counts will be displayed along with informational messages during the transfer, in the style specified by SET DISPLAY. If the file is successfully transferred, you will see @qq, otherwise there will be an error message. When the specified operation is done, the program will sound a beep. @index@Index Several single-character commands may be given while a file transfer is in progress: @Begin(Description,leftmargin +6,indent -4) @q(^X)@\(Control-X) Stop sending the current file and go on to the next one, if any. @q(^Z)@\Stop sending this file, and don't send any further files. @q(^C)@\Return to Kermit-MS command level immediately without sending any kind of notification to the remote system. (@q<^Z> or even @q<^E> is preferable.) @q(^E)@\Like @q(^C), but send an Error packet to the remote Kermit in an attempt to bring it back to server or interactive command level. @q(CR)@\Simulate a timeout: resend the current packet, or NAK the expected one. @End(Description) Control-X, Control-Z, and Control-E send the proper protocol messages to the remote Kermit to bring it gracefully to the desired state. Control-C leaves the remote Kermit in whatever state it happens to be in, possibly retransmitting its last packet over and over, up to its retry limit. You should only have to use Control-C in dire emergencies (the remote Kermit is stuck, the remote system crashed, etc), or at those times when you realize that you have given a file transfer command to Kermit-MS without first having told the remote Kermit about it. MS-Kermit does not have a built-in mechanism for sending an entire directory structure, but this may still be done using command files. A program called XSEND@index, distributed along with MS-Kermit, will construct such a command file automatically. @Subheading @Index[RECEIVE Command] Syntax: @q The RECEIVE command tells Kermit-MS to receive a file or file group from the other system. The file is stored under the name it was transmitted with, except that any illegal characters are translated to X's. 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. The RECEIVE command is intended for situations where the file name and sending operation originates at the other side; GET originates the request from our side and asks the server to perform the operation. R is a special non-unique abbreviation for RECEIVE. If the optional filespec is provided, incoming files will be stored under that name. If the filespec is really just a path@index(PATH) then files are stored where the path indicates. If it is an actual filename the first incoming file is renamed and any additional files either overwrite the first (if FILE WARNING is OFF) or are renamed slightly from the filespec (digits are added to the end of the main filename part before the dot and extension) if FILE WARNING is ON (the default). The filespec may include any combination of the following fields: @begin @i@\Store the file on the designated device, in the current directory for that device. If no device designator is given, store it on the current default device. @i@\Store the file in the designated directory on the current disk. If no path given, store the file in the current directory. @i@\Store the file under the name given. If no name is given, store it under the name it was sent under, converted, if necessary, to suit DOS conventions, and modified, if SET WARNING ON, to avoid overwriting any file of the same name in the same directory. @end @Index If an incoming file does not arrive in its entirety, Kermit-MS will normally discard it and 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 on the disk. @index@Index The same single-character commands are available as during SEND: @Begin(Description,leftmargin +6,indent -4) @q(^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. @q(^Z)@\Request that the remote Kermit terminate the entire transfer; this is also an optional feature that may or may not be supported by the remote Kermit. @q(^C), @q(^E), and @q(CR) operate in the same way as they do during SEND. In this case, @q(^E) should always do what @q(^Z) is supposed to do. @End(Description) If WARNING is OFF and you type @q(^X) or @q(^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, old files with the same name as incoming files will not survive. @i(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. @subsection(Hints for Transferring Large Files) During a prolonged file transfer session, things can go wrong that are beyond Kermit's control. The longer the session, the greater the probability it will be fatally interrupted. But you can take a few precautions: @begin Make sure there is sufficient disk space at the receiving end. If possible, first run a disk utility (such as CHKDSK) to clean out any bad disk blocks. If you are using a telephone connection, make sure your session won't be interrupted by call waiting, people picking up other extensions, etc. Don't attempt to transfer a single file of many megabytes over a telephone connection. The longer the call, the greater the chance of disconnection (carrier loss). Although it's a bother, it may save time in the long run to break the file up into smaller pieces, transfer the pieces, and then recombine on the other end. SET INCOMPLETE KEEP on the receiving end, so that if the transfer fails, then the partial file will be retained. Then chop the part that wasn't transferred into a separate file, reconnect, and send it. Then join the pieces together. @end Consider moving truly massive amounts of data on magnetic media. "Never understimate the bandwidth of a station wagon full of magnetic tapes!" (or diskettes). @subsection(Commands for Raw Uploading and Downloading) MS-Kermit can be used to send files to, or capture files from, remote systems that do not have Kermit programs available. No error checking or correction is done, so the results can very likely contain corrupted characters, spurts of noise, gaps, or extraneous system messages or prompts. The command for uploading is TRANSMIT, and for downloading LOG SESSION. To minimize loss of data during these operations, be sure to SET the FLOW-CONTROL@index and HANDSHAKE parameters to match the characteristics of the system on the other end. @subheading @index Syntax: @q(TRANSMIT @i [@i]) The TRANSMIT command provides a basic raw upload (export) facility to send straight ASCII text files to the host without packets, error checking, or retransmissions, but using all the currently selected communication parameters for flow control, parity, etc. Information is read from the disk file a line at a time, sent out the serial port, and the command waits for a single character prompt (normally linefeed) from the host before sending the next file line. A disk file line ends with carriage-@|return-@|linefeed (CRLF), but only the carriage return is sent, just as you only type carriage return at the end of a line, not CR and LF. Most remote systems will echo the CR and then also supply a LF, which indicates that they have processed the line and are ready for another one. Setting the prompt to binary zero, @q<\0>, makes the TRANSMIT command proceed without waiting for a prompt. Pressing the local Return key simulates arrival of a prompt character. Typically, before using this command to upload a file, you would start a text editor (preferably a line-oriented, rather than full-screen, editor) on the remote host and put it into text insertion mode. When the file has been completely transmitted, you would manually enter the required sequence for getting the editor out of text insertion mode, and then make any necessary corrections by hand. Here's an example for VAX/VMS: @begin @tabclear()@tabset(2.75inches) Kermit-MS>@ux@\@i Kermit-MS>@ux@\@i $ @ux@\@i *@ux@\@i @ux<^]c>@\@i Kermit-MS>@ux@\@i ...@\@i Kermit-MS>@ux@\@i @ux<^Z>@\@i *@ux@\@i $ @end If transmission appears to be stuck, you can wake it up by typing a carriage return on the keyboard. You can cancel the TRANSMIT command by typing a Control-C. Control-Z's or other control characters in the file may have adverse effects on the host. For this reason, you should use TRANSMIT only for files that contain 7-bit printing ASCII characters, spaces, tabs, carriage returns, linefeeds, and possibly formfeeds. @subheading(The LOG SESSION Command) @index(LOG SESSION) Syntax: @q(LOG SESSION )[@i] The LOG SESSION command lets you copy the characters that appear on your screen during CONNECT into the specified file on the PC. You can use this command to download files by displaying (usually with a command like TYPE) the file on the remote system while logging is in effect. Example: @begin(example) @tabclear()@tabset(2.75inch) Kermit-MS>@ux@\@i Kermit-MS>@ux(connect)@\@i $ @ux(type foo.bar)@\@i(Give this command, but don't type CR yet.) @ux(^]c)@\@i(Escape back.) Kermit-MS>@ux(log session foo.bar)@\@i(Start logging.) Kermit-MS>@ux(connect)@\@i(Connect back.) @\@i(Now type the carriage return.) This is the file FOO.BAR.@\@i(The file is displayed on your screen) Blah blah ...@\@i(and captured into PC file) FOO.BAR. $ @\@i(The prompt is captured too.) @ux(^]c)@\@i(When done, escape back) Kermit-MS>@ux(close session)@\@i(and close the log file.) @end(example) The PC file @q(FOO.BAR) now contains a (possibly mutilated) copy of the remote computer's @q(FOO.BAR) file. It probably has the remote system's prompt at the end, which you can edit out. The session log can also be used to record typescripts, editing sessions, Tektronix graphics output, or any other output from, or dialog with, the remote computer. During terminal emulation, the LOG command records all the characters that arrive from the remote host in the specified file, including escape sequences, with any input character translations applied according to SET TRANSLATION INPUT. If you have SET LOCAL-ECHO ON, the characters you type will also be recorded. Logging may be suspended and resumed within a terminal session with the CONNECT escape-@|level commands Q and R. The log file will be composed of 7-bit ASCII bytes if (a) PARITY@index is other than NONE, or (b) DISPLAY is SET to 7. If DISPLAY is 8 and PARITY is NONE, or if DEBUG is ON, then the log will contain 8-bit bytes. You may LOG SESSION PRN to cause the logging information to be printed directly on your printer@index. Any escape sequences that are sent to the screen are also sent to the printer. If you want to record information without imbedded escape sequences, use the screen dump feature, invoked by the CONNECT escape-@|level command F, which is described under the CONNECT command. A session log cannot be played back directly on the PC from the log file. To relive the session, you must transfer it to the remote system and display it in "binary mode" (e.g. cat in Unix) while CONNECTed. @subsection(Kermit Server Commands) Kermit-MS can act as a Kermit server, and can also interact with other Kermit servers. Normally, the remote Kermit is put into server mode. Then the local Kermit becomes a "client", and may issue repeated commands to the server without having to connect and escape back repeatedly. Servers can not only transfer files, but can also provide a variety of file management functions. The SERVER command puts MS-Kermit into server mode, and the DISABLE and ENABLE commands modify the behavior of the server. Kermit servers respond only to information sent as Kermit protocol packets and not to ordinary CONNECT-mode commands. When MS-Kermit is the client, it uses the SEND command (described above) to send files to a server, the GET command (@i(not) RECEIVE) to get files from a server, the REMOTE commands to invoke the file management functions of the server, and the BYE, FINISH, or LOGOUT commands to shut down the server. The MS-Kermit server can also be returned to interactive mode by typing Ctrl-C or Ctrl-Break on the PC's console keyboard; if the SERVER command was issued from a command file, execution of the command file will resume with the next command after SERVER. @subheading @index Syntax: SERVER [timeout] Kermit-MS is capable of acting as a full-fledged Kermit server for users coming in through one of the communication ports or a local area network. To put Kermit-MS into server mode, first issue any desired SET commands to select and configure the desired port, then DISABLE any undesired functions, and then type the SERVER command. Kermit-MS will await all further instructions from the client Kermit on the other end of the connection, which may be hardwired, or connected through a network or autoanswer modem. In the following example, a Kermit server is set up for dialing in: @Begin(Example) Kermit-MS>@ux(set port 1) Kermit-MS>@ux(set speed 1200) Kermit-MS>@ux Kermit-MS>@ux(connect) @ux OK @ux<^]c> Kermit-MS>@ux(set server timeout 0) Kermit-MS>@ux(set warning on) Kermit-MS>@ux(disable all) Kermit-MS>@ux(server) @End(Example) Before putting Kermit in server mode in this case it was necessary to connect to the modem (in this example, a Hayes) and put it into autoanswer mode by typing the ATS0=1 command@index. Since Kermit packets typically start with a Control-A character check the modem's manual to ensure that character is not a modem command signal; some brands regard Control-A as a hangup request! Note the command SET SERVER TIMEOUT 0. This disables the MS-Kermit server's normal behavior of timing out periodically and sending a NAK packet while waiting for a connection. This might be necessary with certain modems or PBXs that can be taken out of answer mode if they receive any characters from the PC before a call is received. An optional timeout value can be specified to exit server mode automatically at a certain time. The timeout can be expressed as a number, meaning seconds from now, or as the @q form, in 24-hour time of day. Both forms recognize times greater than 12 hours from now as being in the past. For instance, if you want to run a Kermit server for an hour, and then have it exit so that another program can run, use a command file like: @begin set port 1 ; Use COM1 set speed 2400 ; at 2400 bps. disable all ; Only allow file transfers in current directory. server 3600 ; Be a server for 3600 seconds = 1 hour. exit ; Exit when done. @end @begin MS-Kermit @value<-msversion> server mode supports the following requests: @end @begin @tabclear()@tabset(1.5inches,3.5inches,5.5inches) SEND @\REMOTE CWD (CD) @\REMOTE MESSAGE GET @\REMOTE DELETE @\REMOTE SEND FINISH@\REMOTE DIRECTORY@\REMOTE SPACE BYE @\REMOTE HELP @\REMOTE TYPE LOGOUT@\REMOTE HOST @\REMOTE WHO @\REMOTE LOGIN @end REMOTE CWD (CD) can be used to change both directories and devices. The REMOTE MESSAGE command accepts a one line message on the command line which will be displayed on the operator's console. An MS-Kermit Server can DISABLE recognition of selected REMOTE commands to help reduce accidents. @begin @i The method used for most of the REMOTE commands is to invoke a task with the user's command line, redirect standard output to a temporary file, @q<$KERMIT$.TMP>, send that file back to the remote end, and then delete the file. Sufficient space must be available to store this file. To service DOS commands or user tasks @q must be located on the DOS PATH. @i Any of these DOS tasks or programs may encounter an error, and in that case, DOS will generally put the familiar "Abort, Retry, Ignore?" message on the server's screen, and will wait for an answer from the keyboard. This will hang the server until a human comes to the keyboard and gives a response. The same thing will happen when any program is invoked that interacts with the real console. DISABLE ALL seems to avoid most unpleasant situations of this kind. @end @index For local network operation with NetBios, the SET PORT NET command (with no node name) must be issued before the SERVER command. MS-Kermit then becomes a network-wide server, and other client Kermits can start a network session with it by using the name of the Kermit Server, which is shown on the server's screen when SET PORT NET is given. The Kermit Server accepts connections from other Kermits, but only one at a time. There may be many Kermit Servers active on the network simultaneously because each has a unique node name. Operations are exactly the same as with serial port usage and the session (equivalent to a dialed phone connection) is maintained between the pair until too many timeouts occur, or the client Kermit issues a HANGUP command, exits to DOS, or SETs PORT NET to another node. In the latter cases, the server remains available for use by other client Kermits. If a client Kermit issues the BYE or FINISH command, the network server is shut down (unless it was started with FIN disabled). @Subheading @index@index For security purposes, it may be desirable to leave your PC in Kermit server mode so that it can be dialed in to, but with certain functions unavailable to those who dial in. The DISABLE and ENABLE commands provide this control. The DISABLE and ENABLE commands affect the following functions, with the effect of DISABLEs noted: @begin CWD@\(CD) Changing of directories, disabled entirely. DEL@\Deletion of files confined to current directory. DIR@\Production of directory listings confined to current directory. FIN@\Shutting down the server (applies also to BYE) disabled entirely. GET@\Getting files from the server confined to current directory. HOST@\Execution of all REMOTE HOST (DOS) commands disabled entirely. SEND@\Forces files sent to server into current directory. SPACE@\Asking the server for a disk space report, disabled. TYPE@\REMOTE TYPE files confined to current directory. ALL@\All of the above. TEK@\Automatic invocation of Tektronix graphics mode by host commands. This function is not related to server mode, and is not included in the ALL term. @end For reasons which should be obvious, the Kermit server does not provide a REMOTE ENABLE command! @Subheading Syntax: @q The GET command requests a Kermit server to send the file or file group specified by @i. This command can be used only when Kermit-MS has a Kermit server active on the other end of the connection. This usually means that you have CONNECTed to the other system, logged in, run Kermit there, issued the SERVER command, and escaped back (e.g. @qq<^]C>) to the local Kermit-MS. In the case of LAN operation, a Kermit server must be running somewhere on the network. 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: @Begin(Example) Kermit-MS>@ux(get) Remote Source File: @ux(com1 txt) Local Destination File: @ux(a:xcom1.txt) @End(Example) The local file name may contain a device field, and/or a directory specification. Device and directory specifications in the local destination file name work the same way as in the RECEIVE command. The multiline GET command is provided so that the distinction between the two files is always clear, which would not otherwise be the case if the foreign filename had spaces in it. 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, including spaces. If the string needs to begin with a question mark (?) then use a sharp sign (#) instead to avoid Kermit's help message; it will be transmitted as a question mark. Once the file transfer begins, the GET command behaves exactly like the RECEIVE command. @i If the remote filespec is to contain a semicolon, @i the GET command is being issued from a TAKE command file, you must prefix the semicolon with a backslash. Otherwise, all characters beginning with the semicolon will be ignored: @example @subsection(Commands for Controlling Remote Kermit Servers) The BYE, FINISH, and LOGOUT commands allow you to shut down a remote Kermit server: @Begin(Description,leftmargin +8,indent -8,group,blanklines hinge) @q@\When communicating with a remote Kermit server, use the BYE command to shut down the server, log out its job, and exit locally from Kermit-MS to DOS. On local area networks, BYE also terminates the network session. @q@\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. On local area nets, FINISH shuts down the MS-Kermit server, but in a way that allows it to be restarted as if no interruption had occurred. @q@\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 or use another connection without having to restart MS-Kermit. @End(Description) @subHeading The REMOTE keyword is a prefix for a number of commands. It indicates that the command is to be performed by a remote Kermit server. Not all Kermit servers are capable of executing all of 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, if any, to your screen. Here are the REMOTE commands that Kermit-MS may issue: @begin @q[@i]@\(Also REMOTE CD) Ask the server to Change your Working Directory on the remote host, that is, the default source and destination area for file transfer and management. You will be prompted for a password, which will not echo as you type it. If you do not supply a password (i.e. 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. @q@i@\Ask the server to delete the specified file or files on the remote system. In response, the server may display a list of the files that were or were not successfully deleted. @q[@i]@\Ask the server to display a directory listing of the specified files. If no files are specified, then the list should include all files in the current working directory. @q@\Ask the server to list the services it provides. @q[@i]@\Ask the server to send the command to the remote system's command processor for execution. @q@i@\Send the command to the remote Kermit for interpretation as a Kermit command in the remote Kermit server's own command syntax. @q@i@\Password and account are always solicted via prompts. A carriage return response corresponds to an empty entry. REMOTE LOGIN applies only to a remote Kermit server and not to a remote operating system; an MS Kermit server does not understand the command. @q@i@\Send the one line text message to be displayed on the Server's screen. @q[@i]@\Ask the server to provide a brief summary of disk usage in the specified area on the remote host or, if none specified, the default or current area. @q@i@\Ask the server to display the contents of the specified remote file or files on your screen. @q(REMOTE WHO [@i])@\Ask the server to list actively logged on users; optional who-spec qualifies the list and uses the syntax of the server system. @end @Subheading @index Syntax: @q @i{filespec} @i(address) The MAIL command is a very close relative of Kermit's SEND command. Mail sends a file, or file group, to a Kermit server with instructions (in an Attribute packet) to submit the file(s) to the host's Mailer utility rather than store them on disk. To round out a mail request a field following the filename is required, and into it we place the address to which the files are to be mailed. Mail addresses vary substantially, but several common forms are "username", "username@q<@@>host", and "host@q<::>username". The MAIL command will work only if the Kermit server understands it, otherwise the mail request will be rejected before any files are sent. Kermit-MS can send mail but it cannot receive it, because MS-DOS does not have a mail facility. When sending, there is no way to transmit any fields other than the recipient's address and the message body; fields like subject and cc are not supported. @subsection @index@index @label<-mslogcmd> @begin Syntax: @q(LOG {PACKET, SESSION, TRANSACTION} )[@i] @q(CLOSE {PACKET, SESSION, TRANSACTION}) @end The LOG command tells MS-Kermit to record the terminal session, file transfer transactions, or the file transfer protocol packets themselves in a log file. If the log file already exists then new material is appended to it. Open log files may be closed (and the associated logging disabled) using the CLOSE command. Open log files are also closed when you EXIT from Kermit. LOG SESSION is used to record your terminal emulation typescript. It was described above, in the section on file transfer. @subheading(The LOG TRANSACTION Command) @index(LOG TRANSACTION) Syntax: @q(LOG TRANSACTION )[@i] The Transaction log is a file recording a pair of text lines describing each file transfer (SEND, GET, RECEIVE, or some REMOTE commands). The lines indicate the local filename (and remote name if different), the time and date of the start of the transfer, the number of bytes transferred, and the status of the transfer. New entries are always appended to old to prevent loss of records. The default filename is @q. The command SHOW LOGGING displays the current names and which logs are active. The command CLOSE TRANSACTION will voluntarily terminate this class of log; otherwise, it will be closed automatically when Kermit exits. @subheading(The LOG PACKETS Command) @index(LOG PACKETS) Syntax: @q(LOG PACKETS )[@i] The packet log is for diagnostic purposes and records each Kermit protocol packet sent and received in printable format. Control characters are written as caret-letter and characters with the high bit set are shown as their 7-bit part preceeded by a tilde. The default filename is @q. If you experience difficulty with file transfers the packet log is valuable in discovering who said what to whom, even though a copy of the Kermit book is needed to unravel the meaning of each character in a packet. @newpage() @Subsection @label(-msset) @begin Syntax: @q @end The SET command establishes or modifies parameters for file transfer or terminal connection. You can examine their values with the SHOW or STATUS commands. The following SET commands are available in Kermit-MS: @blankspace(1) @Begin(Format,spread 0,need 5) @tabclear()@tabset(2.0inches) @>ALARM@\ Set alarm clock time, for IF ALARM testing @>ATTRIBUTES@\ Controls whether MS-Kermit uses Attribute packets @>BAUD@\ Communications port line speed (synonym for SPEED) @>BELL@\ Whether to beep at the end of a transaction @>BLOCK-CHECK-TYPE@\ Level of error checking for file transfer @>COUNT@\ Variable for TAKE file and macro IF COUNT testing @>DEBUG@\ Display packet contents during file transfer @>DEFAULT-DISK@\ Default disk drive for file i/o @>DELAY@\ Wait number seconds before Sending a file @>DESTINATION@\ Default destination device for incoming files @>DISPLAY@\ For selecting the type of file transfer display @>DUMP@\ Screen dump file (or device) name @>END-OF-LINE@\ Packet termination character @>EOF@\ Method for determining or marking end of file @>ERRORLEVEL@\ Value returned to DOS Batch files @>ESCAPE@\ Escape character for CONNECT @>FLOW-CONTROL@\ Enable or disable XON/XOFF @>HANDSHAKE@\ Half-duplex line turnaround option @>INCOMPLETE@\ What to do with an incompletely received file @>INPUT@\ Behavior of INPUT command for scripts @>KEY@\ Specify key redefinitions @>LOCAL-ECHO@\ Specify which computer does the echoing during CONNECT @>MODE-LINE@\ Whether to display a mode line during terminal emulation @>PARITY@\ Character parity to use @>PORT@\ Select a communications port @>PROMPT@\ Change the "@q(Kermit-MS>)" prompt to something else @>RECEIVE@\ Request remote Kermit to use specified parameters @>REMOTE@\ For running Kermit-MS interactively from back port @>RETRY@\ Packet retransmission threshold @>SEND@\ Use the specified parameters during file transfer @>SERVER@\ Parameters for server mode (command wait timeout) @>SPEED@\ Communications port line speed (synonym for BAUD) @>TAKE-ECHO@\ Control echoing of commands from TAKE files @>TERMINAL@\ Emulation and parameters @>TIMER@\ Enable/disable timeouts during file transfer @>TRANSLATION@\ Enable/disable/specify conversion of arriving characters @>WARNING@\ Specify how to handle filename collisions @End(format) The SET commands are now described in detail, in alphabetical order. @Subheading Syntax: @q @Index The alarm is a timer, like an alarm clock, available for testing by IF ALARM statements. The alarm time is given as seconds from the present or as a 24-hour specific time of day. Both need to be within 12 hours of the present to avoid being mistaken for times in the past. SHOW SCRIPT displays the current alarm setting. @Subheading Syntax: @q @Index Disables or enables use of Kermit file Attribute protocol packets, which contain the size, time, and date of files transferred using the Kermit protocol. This command is a safety feature so that a small misunderstanding with another Kermit cannot block transfers. SHOW FILE tells whether attributes are on or off; they are normally ON. @Subheading Syntax: @q Synonym for SET SPEED (q.v.). @Subheading @Index Syntax: @q Specifies whether the bell (beeper) should sound upon completion of a file transfer operation. Normally ON. @Subheading @Index@index@index Syntax: @q Selects the error detection method: a 1-character 6-bit checksum (the normal case), a 2-character 12-bit checksum, or a 3-character 16-bit cyclic redundancy check (CRC). If the other Kermit program is not capable of type 2 or 3 checking methods, automatic fallback to type 1 will occur. The more secure type 2 and 3 block checks take essentially no more execution time than the simple 1 character checksum. SET BLOCK 3 is a stronger check than SET BLOCK 2. SET BLOCK 2 or 3 is recommended for use with long packets (see below), noisy communication lines, binary (8-bit data) files, and text files containing critical data (budgets, grades, etc). @Subheading Syntax: @q @Index Set the value of the script COUNT variable to be between 0 and 65535. COUNT is used with IF COUNT to construct counted loops in script TAKE files and macros. Each active TAKE file or macro uses a private version of COUNT. The default value is zero, and the SHOW SCRIPT command displays the current value (meaningful only when given within a TAKE file or macro). @Subheading @Index Syntax: @q With DEBUG PACKET, Kermit will display the actual packets on your screen during file transfer. With the normal file transfer display, regular-length packets sent and received are displayed in fixed-size slots. The display of extended-length packets, however (see SET RECEIVE PACKET-LENGTH), tends to overlap. If this bothers you, then also SET DISPLAY SERIAL, or LOG the packets rather than displaying them. With DEBUG SESSION, during terminal emulation (on the IBM PC, Rainbow, and a few others), control characters are displayed in uparrow (@qq<^>) notation and characters with the 8th bit set are preceded by the tilde (@qq<~>) sign, and your session log (if any) will record 8-bit bytes, rather than 7-bit ASCII, regardless of SET DISPLAY or SET PARITY. Character translation (SET TRANSLATION INPUT) is not done during session debugging. The effect of SET DEBUG SESSION during terminal connection can be disconcerting, but it gives you a convenient line monitor equivalent to a specialized device that costs several thousand dollars, and it can prove very handy for tracking down data communication problems. SET DEBUG ON turns on both SESSION and PACKET debugging, and SET DEBUG OFF turns them both off. @subheading Syntax: @q Specify the default disk drive to use for file transfer, directory listings, and so forth. Equivalent to typing the DOS command for changing disks (@q, @q, etc). Affects Kermit and all inferior processes, but when you exit from Kermit, you will still have the same default disk as when you entered. As a convenience, a directory may be specified with or without the drive to change one or the other or both. This command is a synonym for CWD (CD). @subheading Syntax: @q Wait the specified number of seconds before starting a file transfer. Intended for use when the other side needs appreciable time to become ready, such as rearranging cables, changing programs, etc., or when MS-DOS Kermit is the remote Kermit (e.g. after CTTY COM1, SET REMOTE ON). The @i is 0 to 63 seconds, normally 0. @Subheading Syntax: @q @index SET DESTINATION PRINTER will cause incoming files to be sent directly to the printer; SCREEN will send output normally destined for the disk to the screen. The normal destination is DISK. SET DESTINATION affects only files transferred with SEND, GET, or RECEIVE; it cannot be used to reroute the output from REMOTE server commands. @Subheading @index Syntax: @q During file transfer, MS-DOS Kermit's regular display is a formatted screen whose fields are randomly updated with file names, packet numbers, error counts, percent done, error messages, and so forth, as shown in Figure @ref<-msftscreen>. 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 (which, currently at least, is equivalent to SET DISPLAY QUIET); this suppresses the file transfer display screen, so that the display won't interfere with the file transfer itself. You can also use this command to suppress the display in local mode, in case you are using a system that allows you to do other work while file transfer proceeds in the background. @index@index@Index@index If you have your PC connected to a speaking device (a common practice for visually impaired people), or you are logging the display screen to a printer (using DOS @q<^P> or @q[@w{kermit > prn}]), the random nature of the regular display will make the results of little use. SET DISPLAY SERIAL is provided for this purpose; it causes the program to report progress "serially" on the screen. In serial mode, error messages are preceeded with the word "Error" and repeat messages with the word "Retry". Packets are numbered as dots with every tenth being a plus sign. The packet display is automatically broken across lines at every 70th packet. The serial display makes much more sense when spoken than does the regular display. The serial display does not show the percent and kilobytes transferred. It is the default display style for generic MS-DOS Kermit; REGULAR is the default for all others. The last two parameters, 7-BIT and 8-BIT, control the size of characters sent to the screen during terminal emulation. 7-BIT is the default and includes all ASCII characters. 8-BIT is useful with national and line drawing characters@index. @Subheading @index@index Syntax: @q@i(filespec) On those systems that support this feature, change the file or device name of the screen dump file. The normal file name is @q. See the section on terminal emulation for details about screen dumps. If the specified file already exists then new material is appended to old. If you want to start a new screen dump file, delete the old one first. @subheading(SET END-OF-LINE) Syntax: @q(SET END-OF-LINE )@i{number} If the remote system needs packets to be terminated by anything other than carriage return, specify the decimal value, 0-31, of the desired ASCII character. Equivalent to SET SEND END-OF-LINE (SET END-OF-LINE is kept only for historical reasons, and the parameter really should be called END-OF-PACKET anyway.) @subheading(SET EOF) @Index(End Of File) Syntax: @q(SET EOF {CTRL-Z, NOCTRL-Z}) Controls how the end of file is handled. CTRL-Z specifies a Control-Z character should be appended to the end of an incoming file. Certain MS-DOS text editors and other applications require files to be in this format. For outbound files, treat the first Control-Z as the end of the local file, and do not send it or any subsequent characters. NOCTRL-Z is the default; incoming files are stored, and MS-DOS files are sent, exactly as is, in their entirety. Use SHOW FILE to see the current SET EOF status. @Subheading Syntax: @q @Index Forces the DOS "errorlevel" variable to a given value. This is used in scripts when other controls or tests determine that the cumulative errorlevel reported to DOS Batch when Kermit exits needs to be modified. The number can be 0 to 255 decimal. @Subheading @Index Syntax: @q Specify the control character you want to use to "escape" from remote connections back to Kermit-MS. On most systems the default is @qq(^]) (Control-@|Rightbracket), which was chosen because it is a character you would otherwise rarely type. The @i is entered literally after SET ESCAPE or in backslash number form (@q<\29>), and should be chosen from the ASCII control range. It is not possible to use non-ASCII characters (like function keys) for this purpose (but see SET KEY for a way around this restriction). @Subheading @Index@index Syntax: @q Specify the full duplex flow control to be done on the currently selected port. The options are XON/XOFF and NONE. The specified type of flow control will be done during both terminal emulation and file transfer. By default, XON/XOFF flow control is selected. XON/XOFF should not be used on half-duplex (local echo) connections, or when the other system does not support it. If XON/XOFF is used, HANDSHAKE should be set to NONE. @Subheading @Index Syntax: @q, BELL, CR, LF, NONE, XOFF, XON}> Specify any half-@|duplex line turnaround handshake character to be used during file transfer on the currently selected port. The CODE @i form allows any ASCII character to be specified by its decimal ASCII code. Handshake is NONE by default; if set to other than NONE, then FLOW-CONTROL should be set to NONE. In operation the handshake character is sought at the end of each received packet, following the normal END-OF-LINE character, but is not sent for outgoing packets. @Subheading @Index(Incomplete File Disposition) Syntax: @q Specifies what to do with files that arrive incompletely: discard them or keep them. They are normally discarded. @Subheading @Index Syntax: @q This command is described in Section @ref<-msscp>, SCRIPTS. @Subheading @Index(Key Redefinition) Syntax: @q@* @ @ @i @q {ON, OFF, CLEAR} @begin @i The format and functions of this command have changed substantially since version @q<2.29B> and earlier. The changes were made in order to allow key redefinition to work on a wider variety of systems and keyboards without customization of the program source code for each configuration. See section @ref<-msdiffs> for further details. @end Typical uses of SET KEY: @begin You're used to having the ESC key in the upper left corner of the keyboard, but your new PC keyboard has an accent grave (@qq<`>) there. You can use SET KEY to make the accent key transmit an ESC, and you can assign accent grave to some other key. You send a lot of electronic mail, and always sign it the same way. You can put your "signature" on a single key to save yourself a lot of repetitive typing. You must set up your PC's function keys or numeric keypad to work properly with a host application. You have trouble with Kermit's 2-character escape sequences (like Ctrl-@q<]> C), and you want to assign these functions to single keys, like F10. @end The SET KEY command does these things and more, and SHOW KEY gives us assistance. A key can be defined to: @begin(itemize,spread 0) send a single character other than what it would normally send, send a string of multiple characters, invoke a CONNECT-mode Kermit action verb, send itself again. @end(itemize) SET KEY specifies that when the designated key is struck during terminal emulation, the specified character or string is sent or the specified Kermit action verb is performed. Key definitions operate only during CONNECT, not at @q(Kermit-MS>) or DOS command level. The key-@|specifier is the identification of the key expressed in system-@|dependent terms. This can be a letter, such as Q for the key which produces an uppercase Q, or the numeric ASCII value of the letter in backslash notation (e.g. @qq<\81>), or else the numerical "scan code" observed by the system when the key is pressed (e.g. "\3856" for Ctrl-Alt-Shift-Q on an IBM PC). Material printed on keycaps is not necessarily a guide to what the key-@|specifier should be. When the word CLEAR is used in place of a key-@|specifier, all key definitions are cleared and then any built-in definitions are restored. A string definition is one or more characters, including 8-bit values expressed in backslash form, such as @begin(example) SET KEY \315 directory\13 @r[IBM F1 key sends @qq"directory"] SET KEY S X @r[S key sends upper case X (a mean trick)] SET KEY T \27[m @r ESC [ m SET KEY \2336 {del }xxx @rdel @r<"> SET KEY \324 \Kexit @r(F10 escapes back to) Kermit-MS> @r(prompt.) @end(example) The string begins with the first non-spacing character following the key identification and continues until the end of line, exclusive of any trailing spaces. If a semicolon comment is used and the definition is given in a TAKE file, the line ends at the last non-spacing character before the semicolon. Curly braces, @q<{>@value@q<}>, can be use to delimit the string in case you want the definition to include trailing spaces. All text after the closing bracket is ignored. This manual does not contain a list of all the scan codes for all the keys on all the keyboards on all the PCs supported by MS-Kermit -- that would be a manual in itself. Rather, in order to obtain the key-@|specifier for the SET KEY command, you must type a SHOW KEY command and then press the desired key or key combination. This will report a scan code that you can use as the key specifier in a SET KEY command. To do this for many keys is a laborious process, so you should collect all your SET KEY commands into a file, which you can TAKE, or put them in your @q@index(MSKERMIT.INI) file. If you enter SET KEY by itself, with no key specifier, the command will prompt you to press the selected key and again 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 @q<\nnn>, a backslash followed by a 1- to 4-digit number corresponding to the ASCII value of the desired character. Where an ASCII digit follows directly after a backslash number, confusion can be avoided by placing curly braces @q<{}> around the backslashed number; thus, @q<\{27}5> represents the two ASCII characters ESC and 5. Here is an example of the use of SET KEY to assign ESC (ASCII 27) to the accent grave key. First the user gets the key-specifier for the key: @begin Kermit-MS>@ux Push key to be shown (? shows all): @ux<`> ASCII char: ` \96 decimal is defined as Self, no translation. Free space: 129 key and 100 string definitions, 837 string characters. @end The free space report says that 129 more keys may be redefined, and up to 100 of them may have multi-character strings assigned to them (as opposed to single characters), and that there are 837 bytes left for these strings, in total. Confident that there is enough space left for a new key definition, the user proceeds: @begin Kermit-MS>@ux Push key to be defined: @ux<`> Enter new definition: @ux<\27> @end Once a key definition is constructed and tested, it may be entered on a single line in a command file (such as @q@index(MSKERMIT.INI)): @example To prevent accidents, SET KEY shows the current definition before asking for a new one; enter a Control-C to keep the current definition, or a carriage return to undefine the key, or a query mark @q<(?)> to see available choices. The keyboard can be restored to its startup state, that is all redefinitions removed and all built-in defitions restored, by using the keyword CLEAR in place of the key identification: @example[SET KEY CLEAR] Undefined keys which do not send ASCII characters are trapped by the keyboard translator and are rejected; a beep results from using an undefined non-ASCII key. @index SET KEY OFF directs MS-Kermit to read keycodes from DOS, rather than BIOS, so that console drivers like @q that operate at the DOS level may be used during Kermit CONNECT sessions. This would also apply to any special keyboard replacements that come with DOS-level drivers. SET KEY ON turns key definition back on, and returns Kermit to processing keystrokes at the BIOS level. @subheading An action verb is the shorthand expression for a named Kermit procedure, such as "generate the proper sequence for a left arrow," "show status," "send a BREAK," and others; verbs are complex actions and each verb has a name. In a key definition the verb name is preceeded by backslash K (@q<\K>) to avoid being confused with a string. Verbs and strings cannot be used together on a key. @begin SET KEY \331 \Klfarr SET KEY \2349 \Kexit @end makes the IBM keyboard left arrow key execute the verb named @q which sends the proper escape sequence for a VT102 left arrow key (which changes depending on the internal state of the VT102). The leading @q<\K> identifies the definition as a Kermit verb, so no string can start as @q<\K> or as @q<\{K> in upper or lower case (use @q<\92K>). The second example has Alt-X invoking the Leave-Connect-Mode verb "exit" (same as Kermit escape character @qq(^]) followed by C). Each system has its own list of verbs and predefined keys. Table @ref<-kverbs> shows those available for the IBM PC family (there are also some additional verbs for reassigning Heath or VT100 function keys, see section @ref<-mslayout>). The SET KEY command shows the list of available verbs when a query mark @q<(?)> is given as a definition. SHOW KEY displays all currently defined keys or individually selected ones; SHOW KEY can be executed only interactively. @begin
@bar() @blankspace(1) @begin @tabclear()@tabset(1.5inches) @ux(Verb)@\@ux(Meaning) \Kupscn@\Roll up (back) to previous screen \Kdnscn@\Roll down (forward) to next screen \Khomscn@\Roll up to top of screen memory \Kendscn@\Roll down to end of screen memory (current position) \Kupone@\Roll screen up one line \Kdnone@\Roll screen down one line \Kprtscn@\Print the current screen \Kdump@\Append the current screen to dump file \Kholdscrn@\Toggle hold screen mode \Klogoff@\Turn off session logging \Klogon@\Turn on session logging \Ktermtype@\Toggle terminal type \Kreset@\Reset terminal emulator to initial state \Kmodeline@\Toggle modeline off/on \Kbreak@\Send a BREAK signal \Klbreak@\Send a "long BREAK" signal \Khangup@\Drop DTR so modem will hang up phone \Knull@\Send a null (ASCII 0) \Kdos@\"Push" to DOS \Khelp@\Display CONNECT help message \Kstatus@\Display STATUS message \Kterminals@\Invoke user-defined macro TERMINALS, if any \Kterminalr@\Invoke user-defined macro TERMINALR, if any \Kexit@\Escape back from CONNECT mode \Kgold,\Kpf1@\VT102 keypad function key PF1 \Kpf2..\Kpf4@\VT102 keypad function keys \Kkp0..\Kkp9@\VT102 keypad numeric keys \Kkpdot,\Kkpminus,\Kkpcoma,\Kkpenter@ @ @ Other VT102 keypad keys \Kuparr,\Kdnarr,\Klfarr,\Krtarr@ @ @ VT102 cursor (arrow) keys @end @caption(Kermit-MS Verbs for the IBM PC Family) @tag(-kverbs) @bar() @end(table) Some systems have preset key definitions when Kermit first begins (those for the IBM PC are shown in section @ref<-mslayout>). You can find out what they are on your system by typing SHOW KEY, and then question mark on the next line. You may supplement or change the predefined keys with SET KEY commands typed interactively or in @q or other command files. @index@index@index The MS-Kermit CONNECT command may be used in conjunction with certain console drivers that do their own key redefinitions. Since MS-Kermit intercepts keystrokes at the BIOS level, drivers like @q which work at the DOS level will have no effect during CONNECT, even though they work at MS-Kermit command level. Other drivers, like SuperKey and ProKey, work at the BIOS level, and their key assignments will remain effective during Kermit terminal sessions, and additional Kermit SET KEY assignments may be made "on top" of them. @Subheading @Index Syntax: @q 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. @subheading(SET MODE-LINE) @index Syntax: @q On systems, like the IBM PC family, which are capable of displaying a status, or "mode" line on the 25th (or bottom) line during terminal connection, disable or enable this function. This command has no effect on systems that do not display a mode line during connect. The mode line shows several important facts about the connection, like which port is being used, the transmission speed and parity, the current escape character, etc. When the mode line is enabled, it may be turned on and off using the CONNECT escape-level command M or the Kermit verb "modeline". The mode line occupies the 25th line of those systems that have such a thing, and is not affected by scrolling (on some systems that have large screens, the mode line should appear on whatever the bottom line is, e.g. the 43rd). When emulating a VT102 or Heath-19, Kermit will allow the host to address the 25th line directly using cursor positioning commands. If this happens, Kermit will remove its mode line and relinquish control of the 25th line to the host (as if you had typed SET MODE OFF). When the Tektronix, or no terminal at all, is being emulated, the 25th line (if any) is available for scrolling. If the mode line is disabled by an application or by the command SET MODE OFF then the only way to revive Kermit's mode line display is to give the command SET MODE ON. @Subheading @Index Syntax: @q Specify the character parity to be used on the currently selected port. You will need to SET PARITY to ODD, EVEN, MARK, or possibly SPACE when communicating with a system, or over a network, or through modems, concentrators, multiplexers, or front ends that require or impose character parity on the communication line. For instance, most IBM mainframe computers use EVEN or MARK parity; @index(Telenet)Telenet normally uses MARK parity. If you neglect to SET PARITY when the communications equipment requires it, the symptom may be that terminal emulation works (well or maybe only partially), but file transfer or script INPUT commands do not work at all. NONE means that no parity processing is done, and the 8th bit of each character can be used for data when transmitting binary files. This is the normal case. If parity is other than none, then there will be 7 data bits (use of parity with 8 data bits is not supported). @Index@Index If you have set parity to ODD, EVEN, MARK, or SPACE, then Kermit-MS will request that binary files be transferred using 8th-bit-@|prefixing. If the other Kermit knows how to do 8th-bit-@|prefixing (this is an optional feature of the Kermit protocol, and some implementations of Kermit don't have it), then 8-bit binary 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 reduces Kermit's file transfer efficiency without providing additional error detection. The SET PARITY command is provided only to allow Kermit to adapt to conditions where parity is required, or 8-bit transmission is otherwise thwarted. If parity is in use, then the display during terminal emulation, as well as any session log, will be 7-bit ASCII, unless you have SET DEBUG ON (q.v.). There may be situations in which you require 7-bit ASCII with no parity during terminal emulation, but still want to force 8th bit prefixing during file transfer. To accomplish this, SET PARITY SPACE. @Index The INPUT and TRANSMIT commands use 7 or 8 bits if parity@index is NONE, according to the SET DISPLAY command, and this may upset recognition of received characters when the host unexpectedly sends them with its own parity. @i The SET PARITY command has no effect on a port used for printing. @indexThis is because printing is done by DOS, not Kermit. Since Kermit clears hardware parity on COM1 at startup, it is not recommended that COM1 be used for a serial printer, unless the printer works with no parity. @Subheading Syntax: @q], @~ UB-NET1 [@i]}> 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. Subsequent SET SPEED, PARITY, HANDSHAKE, FLOW, and LOCAL-ECHO commands will apply to this port only -- each port remembers its own parameters, so that you may set them for each port and then switch between ports conveniently with the SET PORT command. SET @w(PORT 1) selects COM1, SET @w(PORT 2) selects COM2. All versions default to port 1, except for the IBM PCjr, which uses port 2 if its internal modem is installed. Additionally, COM3 and COM4@index are supported for IBM PC/AT's and PS/2's, as explained in Section @ref<-msports>. SET PORT BIOS@i, on machines which support it, instructs Kermit to do serial port input and output by Bios calls rather than going directly to the hardware (@i is a digit between 1 and 4). The most important use is allowing selected network packages to intercept such Bios calls and relay the characters across the network. @index In "generic" MS-DOS Kermit, the following alternate forms allow you to experiment with device names or numbers until you find the communication port: @example(SET PORT {DEVICE, FILE-HANDLE}) Just type a carriage return after either of these commands, and you will be prompted for a device name or a numeric port-handle. Keep trying till you find one that works. File-@|handle 3, the system auxillary device, is conventional on many machines, as are device names COM1, COM2, and AUX. MS-Kermit for the IBM PC family is able to operate over local area networks through the NetBIOS interface. The command @example(SET PORT NET [@i]) @index@index redirects communications the LAN board installed in the local computer and the associated NetBIOS emulator software, if active, rather than the serial port or the COM device driver. It installs a unique Kermit node name in the local LAN, so that other nodes can refer to it when files are transferred or terminal emulation is done. This name is displayed when you give the SET PORT NET command. The server should use SET PORT NET, and the client should use SET PORT NAME @i, specifying the server's name, e.g. @q. Note that alphabetic case is significant in node names! Both the regular serial port and a network connection can be kept alive simultaneously; clearly, only one can be used at a time under MS-DOS. MS-DOS 3.x is not required for Kermit network usage, but most LANS do need DOS 3.1 or later for conventional file server work. Kermit needs only the NetBIOS emulator network software. @index SET PORT UB-NET1 is implemented on the IBM PC version of Kermit to allow connection to Ungermann-Bass Net One LAN NETCI interface and behaves similarly to the NetBIOS method. @subheading Syntax: @q(SET PROMPT [@i]) This command allows you to change the MS-DOS Kermit program's prompt. The string may be enclosed in curly braces. Control characters like ESC can be included as backslashed numbers like @qq<\27>. @index@q and similar console drivers can be programmed through this command to get a boldface, inverse, and/or blinking prompt. The prompt string must be less than 128 characters. If the string is omitted (missing) Kermit's original prompt of @qq(Kermit-MS>) is restored. @Subheading[SET RECEIVE] Syntax: @q(SET RECEIVE @i[parameter] @i[value]) This command lets you modify the ways in which MS-Kermit asks the other Kermit to behave. That is, it controls the file transfer protocol options for packets sent to MS-Kermit by the other Kermit. The parameters and values you specify in the SET RECEIVE command are sent to the other Kermit during initial negotiations. Numbers may be specified as ordinary decimal numbers (74), or in backslash notation (\x03F). @Begin(Description,leftmargin +8,indent -8,group,blanklines hinge) @q@i@\The ASCII value of terminating character to look for on incoming packets. Normally carriage return. Use this command if the other Kermit is terminating its packets with some other control character. @begin(multiple) @q@i@\Ask the remote Kermit to use the specified maximum length for packets that it sends to Kermit-MS. The normal length is 94 bytes. Use this command to shorten packets if the communication line is noisy or terminal buffers somewhere along the path are too small. Shorter packets decrease the probability that a particular packet will be corrupted, and will reduce the retransmission overhead when corruption occurs, but will increase the file transfer throughput. @index If a length greater than 94 is specified, a protocol option called "long packets" will be used, provided the other Kermit also supports it. Kermit-MS can receive extended-@|length packets up to 1000 bytes long. Long Packets can improve efficiency by reducing the per-packet overhead for a file, but they will not be used unless you issue this command. Before using this option, ensure that the equipment on the communications pathway can absorb a long packet, and that the connection is clean (retransmission of long packets is expensive!). You should also SET BLOCK-CHECK 2 or 3 for more reliable error checking. @end(multiple) @q@i@\Ask the remote Kermit to use the given control character (expressed as a decimal number 0-31, or 127) for interpacket padding. Kermit-MS should never require any padding. @q@i@\Ask the remote Kermit to insert the given number of padding characters before each packet it sends. MS-Kermit never needs padding, but this mechanism might be required to keep some intervening communication equipment happy. @q@i@\If the remote Kermit will be marking the beginning of packets with a control character other than Control-A, use this command to tell Kermit-MS about it (the number should be the decimal ASCII value of a control character). This will be necessary only if the hosts or communication equipment involved cannot pass a Control-A through as data, or if some piece of communication equipment is echoing packets back at you. @q@i@\Ask the remote Kermit to time out and retransmit after the given number of seconds if a packet expected from Kermit-MS has not arrived. Use this command to change the other Kermit's normal timeout interval. @End(Description) @Subheading[SET REMOTE] Syntax: @q(SET REMOTE {ON, OFF}) SET REMOTE ON removes the file transfer display (as if you had given the command SET DISPLAY QUIET). It should be used when you are running Kermit-MS in remote mode when coming in from another PC through the Kermit-MS's "back port", to which the console has been reassigned using the DOS CTTY@index command, e.g. @example It is necessary to issue the SET REMOTE ON command because (a) Kermit-MS has no way of knowing that its console has been redirected, and (b) when the console is the same as the port, the file transfer display will interfere with the file transfer itself. SET REMOTE OFF returns the file transfer display to its preferred style (REGULAR or SERIAL). When you SET REMOTE ON, you might also want to SET DELAY 5 or thereabouts, to allow yourself time to escape back to the local system before MS-Kermit starts sending packets. On the IBM PC, CTTY CON returns control to the normal keyboard and screen (other systems may use other device names, e.g. SCRN). See section @ref<-msctty> for further details about remote operation. If you are using a port other than COM1 on the remote MS-Kermit, you must give it an appropriate SET PORT command. @i: During CTTY console redirection, many programs still output to the real screen and require input from the real keyboard and will hang the system until keyboard requests are satisfied. @Subheading[SET RETRY] Syntax: @q(SET RETRY @i[number]) Sets the number of times a packet is retransmitted before the protocol gives up. The number of retries can be between 1 and 63, and is 5 by default. This is an especially useful parameter when the communications line is noisy or the remote host is very busy. The initial packet of a file exchange is given three times as many retries to allow both systems to become ready. @Subheading[SET SEND] Syntax: @q(SET SEND @i[parameter] @i[value]) The SET SEND command is used primarily to override negotiated protocol options, or to establish them before they are negotiated. @Begin(Description,leftmargin +8,indent -8,group,blanklines hinge) @q@i@\ASCII value of packet terminator to put on outbound packets. Normally carriage return. Use this command if the other Kermit needs its packets terminated with a nonstandard control character. @q@i@\Use this as the maximum length for outbound packets, regardless of what the other Kermit asks for. Normally, you would use this command only to send shorter packets than the other Kermit requests, because you know something the other Kermit doesn't know, e.g. there's a device on the communication path with small buffers. @q@i@\Use the specified control character for interpacket padding. Some hosts may require some padding characters (normally NUL or DEL) before a packet, and certain front ends or other communication equipment may need certain control characters to put them in the right modes. The number is the ASCII decimal value of the padding character, (0 - 31, or 127). @q@i@\How many copies of the pad character to send before each packet, normally zero. @q@i@\How many milliseconds to pause before sending each packet, 0-127, normally zero. This may help half-duplex or slow systems prepare for reception of our packet. Padding characters are sent only after the time limit expires. @q@i@\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 @qq(#) characters (the normal control prefix) as data. @q@i@\Mark the beginning of outbound packets with some control character other than Control-A. This will be necessary if the remote host or the communication channel cannot accept a Control-A as data, or if it echoes back your packets. The remote host must have been given the corresponding SET RECEIVE START-@|OF-@|PACKET command. @q@i@\Change Kermit-MS's normal timeout interval; this command is effective only if TIMER is set to be ON; it is normally ON, with a default interval of 13 seconds. @End(Description) @Subheading[SET SERVER] Syntax: @q Specify how often the MS-DOS Kermit server should send NAK packets while waiting for commands. These NAK packets are used to recover from deadlocks that might occur when the other Kermit sends an initial packet which is lost, but does not have the capability to time out and retransmit it. These NAKs can be supressed entirely by specifying a value of zero. This may be necessary to avoid interfering with certain modems or PBXs that go into originate mode when they receive input from the PC, when in fact you want the device to be in answer mode. @Subheading[SET SPEED] Syntax: @q @Index@Index Set the transmission speed (in bits per second, commonly called @i) of the currently selected terminal communications port to 300, 1200, 1800, 2400, 4800, 9600, or other common speed, and on the IBM PC family, higher speeds including 19200, 38400, 57600, and 115200. Both connected systems, as well as any intervening communication equipment, must be able to support the specified transmission speed, and both systems should be set to the same speed. Some implementations do not support the SET SPEED command. But Kermit-MS leaves the current communication port settings alone unless you issue explicit SET commands to change them, so you may use MODE or other DOS programs to establish the desired settings before running Kermit. On certain systems, when you first run Kermit after powering the system up, you may get a message "Unrecognized baud rate". This means that Kermit tried to read the baud rate from the port and none was set. Simply use SET SPEED (if available) or the DOS MODE command to set the desired baud rate. SET BAUD is a synonym for SET SPEED. @Subheading @Index(Command Files) Syntax: @q Specifies whether screen display should occur during implicit or explicit TAKE operations on @q(MSKERMIT.INI)@index(MSKERMIT.INI) or other Kermit-MS command files, and during evaluation of macro definitions by the DO command. Handy for finding errors in TAKE files or macro definitions. @Subheading(SET TERMINAL) @Index[Terminal Settings]@Index[SET TERMINAL] Syntax: @q(SET TERMINAL {@i, @i [@i]}) This command controls most aspects of terminal emulation. Most of the parameters are only settable (or meaningful) on the IBM PC family and compatibles. (Programmers who are proficient on other MS-DOS systems are invited to fill in these functions for those systems and send the results back to Columbia.) On other systems, built-in setup modes or DOS commands can be used to accomplish the same functions. The first group of parameters tells which kind of terminal to emulate. When Kermit-MS uses its built-in software for emulation, incoming characters are examined for screen control commands (escape sequences) specific to that terminal, and if encountered, the commands are executed on the PC screen. @Begin(Description,leftmargin +8,indent -8) @q@\Act as a dumb terminal. All incoming characters will be sent to the screen "bare", as-is, through DOS. If you have loaded a device driver into DOS for the @q device, such as @q@index(ANSI.SYS), then that driver will be able to interpret the codes itself. Many non-IBM systems have their own screen control code interpreter built into DOS or firmware, or available as a loadable device driver. @q@\The DEC VT-52 terminal. @q@\The Heath/Zenith-19 terminal (H19), which supports all the VT52 commands, plus line and character insert/delete editing functions, an ANSI mode, and a 25th line. @q@index@\The DEC VT102 (ANSI) terminal, which is the same as the VT100 but also supports line/character insert/delete editing functions and ANSI printer controls. @q@\A Tektronix 4010 graphics terminal@index. Currently only available on IBM, TI, and Victor PCs. On the IBM family, Kermit automatically senses and adapts to the CGA, EGA, Monochrome, Hercules, or ATT style board. @end On the IBM family, you may "toggle" among the supported terminal emulations by typing Alt-Minus. The specific escape sequences supported by Kermit for each of these terminal types are listed in section @ref(-termcodes). Note that when a Kermit program includes Tektronix emulation, this can be invoked automatically while in character mode (VT102, VT52, or Heath emulation) when the emulator receives certain escape sequences. This can be turned off using the DISABLE TEK command. The remaining SET TERMINAL commands specify setup options for the selected terminal: @begin(description,leftmargin +8,indent -8, group, blanklines hinge) @q@\UK displays @qq<#> (ASCII 35, number sign) as a pound sterling sign, US displays @qq<#> as @qq<#>. ALTERNATE-ROM maps accent grave and the lowercase letters to be national characters in the IBM video adapter. That is, character codes of 60h to 7Ah (accent grave, lower case a-z) are mapped to codes 80h to 9Ah. The SET TERMINAL CHARACTER-SET command applies only during VT100/102 emulation. @q@\Clears the screen, so that a subsequent CONNECT command shows a blank screen. The action taken is identical to Kermit's @q<\Kreset> verb. @begin @q [, @i [, @i]]>@\Several numbers, applied in left to right sequence, separated by commas or spaces: @begin 0@\Reset the colors to normal intensity white characters on a black background and use the "no-snow" mode on the IBM Color Graphics Adapter (CGA). 1@\High intensity foreground 10@\Request fast screen updating for use on the IBM Mono, EGA, or VGA (usually sensed and set internally by Kermit), and some non-IBM CGAs. 3@i@\Foreground color 4@i@\Background color @end where @i is a single digit from 0 to 7, which is the sum of the desired colors: @begin 1@\Red 2@\Green 4@\Blue @end Example: "SET TERMINAL COLOR 0 1 37 44" on an IBM CGA would produce bold white characters on a blue field with no snow. The snow removal business has to do with whether the program should synchronize with vertical retrace when updating screen memory. This is necessary with certain color adaptors (like the CGA) and unnecessary for others (like the EGA). @end @q@\Sets the cursor rendition to your preference. Note that on some early IBM PCs and compatibles, the cursor may not be restored correctly after escaping back from CONNECT because of a bug in the early IBM BIOS. @q@\Controls the direction of screen display during CONNECT. You may use Right-to-Left for Hebrew or Arabic, provided you have the appropriate character sets loaded. @q@\Turns electronic keyclick ON or OFF. If your keyboard has a mechanical clicker (as IBM boards do), you may not notice the effect of this command. @q@\Manually selects the kind of display adapter for Tektronix graphics. AUTO-SENSING is the default, VGA means 640x480x16 colors, and ATT encompasses the ATT 6300 series, Olivetti M24/M28, DEC VAXmate II, and the Toshiba T3100 in 640x400 b/w (see Table @ref<-mstekda>). @q@\Controls whether the bell should be sounded when the cursor passes column 72 near the right screen margin; wider displays set the bell 8 columns from the right edge. @q@\ON sends a carriage-return-linefeed combination (CRLF) when you type carriage return (CR) during terminal emulation. OFF (default) just sends a CR when you type CR. Useful in conjunction with SET LOCAL-ECHO ON when CONNECTing two PC's back-to-back. @q@\ON unrolls the screen to the bottom before adding new material if the screen had been rolled back, e.g. by Ctrl-PgUp. ROLL OFF (the default) displays new material on the current screen, possibly overwriting old material. @q@\NORMAL means dark background, light characters. REVERSE means light background, dark characters. @q(TAB {AT @i, CLEAR AT @i, CLEAR ALL})@\Sets tab stops@index or clears one or all tab stops; @i is the numeric position of the tab to be set or cleared. By default, tabs are every 8 spaces, at positions 9, 17, 25, etc. Only meaningful when emulating a terminal that has settable tabs (the VT52 doesn't really but the emulator can set them anyway). More than one tabstop may be specified by separating column numbers with commas, spaces, or tabs. You may also use the notation "@i@q<:>@i" to specify regularly spaced tabs across the screen, where @i is the initial tab position, and @i is the spacing between tabs. 132 columns are supported. @q@\ ON automatically breaks screen lines (by inserting a CRLF) when they reach the right margin. OFF disables wrapping -- if a line is too long, the excess characters go off the screen. WRAP is OFF by default, since most hosts format lines to fit on your screen. @end @Subheading(SET TIMER) @Index[Timeout] Syntax: @q(SET TIMER {ON, OFF}) This command enables or disables the timer that is used during file transfer to break deadlocks that occur when expected packets do not arrive. By default, the timer is ON. If the other Kermit is providing timeouts, you can safely turn the timer OFF to avoid unnecessary retransmissions that occur when two timers go off simultaneously. @Subheading @Index Syntax: @q @i}> This command provides multi-language support (and perhaps other special effects) during CONNECT, and during execution of the INPUT, OUTPUT, PAUSE, and TRANSMIT script commands, but not during file transfer or at MS-Kermit command level. A character that arrives at the communication port (@i) will be translated to another character (@i) before display on the screen. As many as 256 characters may have translations specified concurrently. But to see characters with ASCII values higher than 127, you must also SET DISPLAY 8 and SET PARITY NONE. SET TRANSLATION INPUT ON enables translation (the keyword INPUT is required to allow future translation mechanisms). OFF disables the translation and is the default. So even if you have set up a translation table, you must SET TRANSLATION INPUT ON before it will take effect. SHOW TRANSLATION tells whether translation is OFF or ON, and displays any current table entries. Translation table entries are made by specifying byte pairs in ASCII or numeric backslash form: @Example(SET TRANS INPUT @q<\3> @q<\13>) converts incoming ASCII ETX characters (decimal 3) to ASCII CR (decimal 13). 8-bit values are allowed, and refer to characters in the "upper half" of the PC's character set, either the ROM characters supplied with the PC or else substitutions provided by a special device driver. @index A more practical example shows how the user of a German PC could use the SET TRANSLATION and SET KEY commands to make the PC's umlaut-a key (key code 132) send a left curly brace (@qq({), ASCII 123), and to display incoming curly braces as umlaut-a's: @begin SET KEY \d132 \d123 SET TRANS INP { \d132 @end (This example applies to the IBM PC German keyboard, and assumes the German keyboard driver, KEYBGR, has been loaded. This is usually done in @q.) @Subheading @Index@index(Warning) Syntax: @q Specify what to do when an incoming file is about to be stored under the same name as an existing file in the target device and directory. 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) any existing one. If OFF, the pre-@|existing file is destroyed, even if the incoming file does not arrive completely. WARNING is ON by default as a safety measure, and the current setting may be observed in the SHOW FILE display. The new name is formed by adding numbers to the part of the name before the dot. For instance, @q becomes @q, @q becomes @q, etc. If the name already has eight characters, then digits replace the rightmost characters. @subsection[The STATUS and SHOW Commands] The values of MS-Kermit options that can be SET, DEFINEd, ENABLEd, or DISABLEd can be displayed using the STATUS or SHOW commands. @subheading[The STATUS Command] Syntax: @q(STATUS) The STATUS command displays the values of the current SET options on a single screen. There are no operands for the STATUS command. Use the SHOW command to see logically-grouped settings, e.g. SHOW COMMUNICATIONS, SHOW TERMINAL. @subheading[The SHOW Command] Syntax: @q(SHOW )@i(option) The SHOW command is used for displaying communication parameters, protocol settings, macro definitions, key redefinitions, file transfer statistics, translations, and other common groupings. @begin(description,leftmargin +8, indent -8,group,blanklines hinge) @q(SHOW COMMUNICATIONS)@\displays the settings of the current serial port (port, speed, parity, echo, etc) and the status of modem signals Carrier Detect, Data Set (modem) Ready, and Clear To Send. @q(SHOW FILE)@\displays the file transfer control settings, such as the current path, file discard, attributes packets on/off, warning, end-of-file convention, etc. @q(SHOW KEY)@\allows you to determine a key's identification code and what it will send in CONNECT mode, most useful for obtaining the identification of a key when SET KEY commands will be placed in a TAKE file. This command can be done only interactively (use a @q to see all defined keys). Refer to the SET KEY description for details. @q(SHOW LOGGING)@\Displays the names of the session, packet, and transaction logs, and tells whether logging is in effect. @q(SHOW MACROS [macroname])@\displays the definitions of all currently defined macros, as well as the amount of space left for new macro definitions. A macro name, or abbreviation, can be included to restrict the list, e.g. SHOW MACRO IBM will display the definition of the IBM macro, and SHOW MACRO X will list the definitions of all macros whose names begin with X. @index @q(SHOW MODEM)@\displays the status of the modem signals DSR (dataset ready, modem tells the PC that it is turned on and in data mode), CTS (clear to send, modem grants the PC permission to send data), and CD (carrier detect, local modem tells the PC that it is connected to the remote modem). The results may be misleading if your asynchronous adapter, or the connector or cable that is attached to it, is strapped to supply these modem signals itself. @q(SHOW PROTOCOL)@\displays the values of the Kermit protocol-related parameters, including all the SET SEND and SET RECEIVE parameters, plus whether the timer, attribute packets, and logging are enabled. @q(SHOW SCRIPTS)@\displays the script-related variables. @q(SHOW SERVER)@\displays which server functions are enabled and disabled. @q(SHOW STATISTICS)@\displays counts of characters sent and received during file transfers, for both the most recent transfer and the entire session, and an estimate of the average baud rate while sending and listening. @q(SHOW TERMINAL)@\displays the terminal settings, which terminal is being emulated, the tab stops, etc. @q(SHOW TRANSLATION)@\displays the entries in the 256 byte input translation table. Values are expressed numerically to avoid confusion with different display adapters, and the command shows only entries for which input and output codes differ. @end(description) @section @label<-msmacros> Like TAKE files, macros provide a way of collecting many commands into a single command. The difference between a macro and a TAKE file is that Kermit keeps all its macro definitions in memory, and can execute them as many times as you like, without having to look them up on disk, whereas every time you issue a TAKE command, Kermit has to access a disk. But@value you can have as many TAKE command files as you like, and they can be as long as you want, whereas MS-Kermit's memory for storing macro definitions is limited. You can put macro definitions and DO commands for them in TAKE files, or for that matter, you can put TAKE commands in macro definitions. There is a limit of 25 simultaneously active TAKE files plus active macros; a TAKE file or macro remains active if the last item invokes another TAKE or macro command. Active here means Kermit is reading commands from them, not just storing them for later. @subheading @index[DEFINE]@index[Macro]@index[Command Macro] Syntax: @q(DEFINE @i[macro-name] [@i(command) [, @i(command) [, ...]]]) Kermit-MS command macros are constructed with the DEFINE command. Any Kermit-MS commands may be included. Example: @begin(example) define telenet set parity mark, set speed 1200, connect @end(example) A macro can be undefined by typing an empty DEFINE command for it, like @example(define telenet) A macro definition may be up to 255 character long. This example shows a long definition in which lines are continued with hyphenation: @begin define setup set port 1, set speed 19200, set parity even,- set flow none, set handshake xon, set local-echo on,- set timer on, set terminal color 1 31 45,- set warning on, set incomplete keep, connect @end Longer definitions can be accomplished by "chaining." Example: @begin define setup set port 1, set speed 19200, set par even, do setup2 define setup2 set flo no, set handsh xon, set local on, do setup3 define setup3 set timer on, set terminal color 1 31 45, do setup4 define setup4 set warning on, set incomplete keep, connect @end DO SETUP or just SETUP will invoke all of these commands. Commas are used to separate commands in macro definitions; carriage returns (@q<\13>) cannot be used. When control or other special characters are needed in a macro they may be expressed in backslash number form, @q<\>@i. The SHOW MACROS command displays the values of currently defined macros, and tells how much space is left for further definitions. The definition of the macro is entered literally; variables are not evaluated (see ASSIGN, below). @Subheading @index[DO Command] Syntax: @q([DO] @i[macro-name] [@i]) A Kermit-MS macro is invoked using the DO command. For instance, Kermit-MS comes with a predefined macro to allow convenient setup for IBM mainframe line-mode communications; to invoke it, you would type DO IBM. The IBM macro is defined as "set timer on, set local-echo on, set parity mark, handshake xon, set flow none". You can use the DEFINE command to redefine this macro or remove the definition altogether. There is no automatic way to undo the effect of a macro. If you need to accomplish this effect, you should define another macro for that purpose. For instance, to undo the effect of "do ibm" so that you could connect to, say, a DEC VAX, you could: @begin(example,leftmargin +2) def vax set parity none, set handshake none, set flow xon/xoff,- set timer off, set local-echo off @end(example) Then you can "do ibm" whenever you want to use the IBM system, and "do vax" whenever you want to use the VAX. If you wish to view the macro expansion whenever you issue a DO command, you can SET TAKE-ECHO ON. As a convenience the word DO may be omitted. However, when question-mark help is sought at the Kermit prompt, only the main keyword help table will be shown. If you want to see the available macros, type "do ?" or SHOW MACROS. Use of DO is recommended for overall clarity unless a favorite macro is executed frequently. @Subheading @index[Variables, substitution] Macros can use substitution variables similar to those of DOS Batch. The name of a substitution variable is of the form "@q<\%>@i", where the single character is a digit or a letter or other 8-bit character whose ASCII value is 48 decimal or larger; upper and lower case letters are considered to be the same character. A substitution variable is defined as a string of text by the DEFINE command (the variables are in fact macros) and Kermit replaces occurrences of the variable name with that text, hence the word "substitution". For example, @begin Kermit-MS>@ux Kermit-MS>@ux @end yields the display: @begin I wonder if this is substituted material or not. @end Another example: @begin Kermit-MS>@ux @end Then @begin Kermit-MS>@ux(\%c) @end is equivalent to @begin Kermit-MS>@ux(set port com1) Kermit-MS>@ux(set speed 9600) Kermit-MS>@ux(set parity even) Kermit-MS>@ux(connect) @end The special subset of substitution variables, @q(\%1 .. \%9), is similar to the DOS Batch variable set @q(%1 .. %9). The DO command can accept arguments after the macro name and the individual words in the arguments become the definitions of @q(\%1), etc, for up to nine words, in order. For example, given the following definition@index: @begin def dial ATDT\%1\13,input 30 CONNECT,connect,in Login:,out \%2\13 @end the following command can be used to dial any phone number: @begin Kermit-MS>@ux @end The word DO may be omitted, as in: @begin Kermit-MS>@ux(dial 555-1212 myname) @end This command automatically assigns the value "555-1212" to variable the @q(\%1) and "myname" to @q(\%2), and uses these values while dialing the phone and logging into the host system. If fewer than nine words are seen the remaining variables are not changed. For example, if the line above was busy, you could dial a different number and omit the username because it will be remembered from last time. If it is desired to assign multiple words to a single variable, they can be grouped in braces, for example @begin Kermit-MS>@ux @end Substitution variables can reference other substitution variables in their definitions. Care is needed to prevent circular definitions, but even those are detected by Kermit. Subtle circular executions could cause Kermit to go into an endless loop; if you think this is happening, type a Control-C to interrupt the process. To clarify matters, the definition string of a variable is substituted for the variable's name when the name is observed in a left to right scan of a command. For example, @begin Kermit-MS>@ux(define \%a echo This is \%b example: \%b.) Kermit-MS>@ux(define \%b a mac\%c expansion) Kermit-MS>@ux(define \%c ro string) Kermit-MS>@ux(\%a) @end displays: @begin This is a macro string expansion example: a macro string expansion. @end If this example is entered manually then when the final @q(\%a) is typed the command line is immediately replaced with the fully expanded command and more input is solicited (such as a carriage return). Try it. Check the variable definitions with the SHOW MACRO command. A variable can be undefined (deleted) by defining it as an empty string: @begin Kermit-MS>@ux(define \%c) @end DOS batch file arguments may be transformed into Kermit variables. Suppose file @q holds the line: @example Invoking the Batch file by: @example(C>@ux[test one two]) results in creating Kermit variables @q<\%1> with definition of "one" and @q<\%a> with definition "two". The doubled percent symbols in the Batch file are needed to compensate for one of them being consumed by the DOS Batch processor. @q<%1> is the first Batch argument word, @q<%2> is the second word. The syntax @q<\%%1> is converted by Batch to be @q<\%1> when seen by Kermit, without further substitution by Batch. @subheading @index Syntax: @q The DEFINE command does not evaluate the definition. For instance, the command @example simply defines the variable @q<\%a> to be @qq<\%1>, not the current @i of @q<\%1> -- if @q<\%1> changes, then so does @q<\%a>. To copy the @i of one variable to another, use the ASSIGN command: @example This copies the value of @q<\%1> to @q<\%a>, so that if @q<\%1> changes, @q<\%a> will retain the previous value. Example: @begin Kermit-MS>@ux Kermit-MS>@ux Kermit-MS>@ux foo foo Kermit-MS>@ux Kermit-MS>@ux Kermit-MS>@ux new new Kermit-MS>@ux new foo @end @section @label<-msscp> @index