Changes and updates to MS-DOS Kermit v3.15, as compared to v3.14 ----------------------------------- Second test version, 11 August 1996: Corrections to reported bugs: o STOP string now properly displays the string. The DIAL command uses this syntax when the dialing script is not found. o SET PROMPT allows \numbers again. o INPUT single-byte no longer hangs in an infinite loop. o MINPUT {string} {another string} ... now properly recognizes each string. o \v(minput) now properly reports the index of the string matched by MINPUT. o Loss of modem Carrier Detect may now be recognized promptly during file transfers, but the changes are untested. Probably more work is needed. o \$(DOS Environment variable) now finds both uppercase and lower case variables, but not mixed case variables. Windows 3.1x creates variable "windir" in lower case, as can be observed within the DOS box, so this is a way for MS-DOS Kermit to check whether it is running under Windows 3.x. Additional features: o \fchecksum(string) yields the decimal value of the 32-bit unsigned sum of the code values of each byte in string, e.g. \fcheck(ABCD) = 266. o SET TCP ADDRESS has new option, DHCP, as a synomym for BOOTP. o SET TCP ADDRESS DHCP or BOOTP both try DHCP negotiation and accept the first response of possibly many, whether DHCP or Bootp responses. Special note for users of Novell's DHCPSRVR.NLM server v2.0: use SET TCP BROADCAST 255.255.255.255 to avoid a bug in that server which is triggered by using a directed broadcast address. Question on a requested enhancement: TCP/IP SOCKS support requires a choice of authentication mechanism. People asking for SOCKS support need to tell us which mechanism they require since one needs to be written into the code. The two choices are no authentication and plaintext username/password, neither of which provides any security, and the latter is a big security hole. -------------------------------- First test version, 18 July 1996: ERROR CORRECTIONS 1. All patches issued for MS-DOS Kermit version 3.14 are incorporated into version 3.15 2. Unpatchable problem with ARP affecting some remote hosts is fixed in version 3.15 3. Unpatchable bug which prevented communications between LAN adapters from the same vendor (the first three octets of the hardware address were the same), fixed in version 3.15 4. Correction of a fatal bug when using internal TCP/IP over ARCnet ODI drivers. 5. Failure to act upon 8-bit control codes SS2 and SS3 in VT220/320 terminal emulation, even though their 7-bit equivalents were implemented. FILE TRANSFER IMPROVEMENTS Kermit file transfer protocol and TCP/IP internal protocol stack: 1. Dynamic Kermit packet retry timing, based on measured round trip times. This should provide faster recovery from lost packets. 2. Congestion avoidance strategy during packet transmission. Both (1) and (2) are directly from TCP/IP rules and procedures by Van Jacobson. This should improve performance on busy comms lines of all kinds. 3. Improved timing of IP packets within the internal TCP/IP stack, to deal with today's steadily deteriorating Internet performance. 4. Improvement of TCP keepalive probe detection techniques, to keep Telnet connections alive forever even if no user activity occurs. 5. Optional announcement in Kermit packets of the kind of operating system so that two alike systems would exchange files in BINARY mode automatically, and without filename conversion. The new command: SET TRANSFER MODE { AUTOMATIC, MANUAL } controls this feature, with the default being MANUAL for no announcement. If the "sysid" mode is used it overrides user choice of binary or text mode file transfers when like systems converse. Works with C-Kermit 16.0.192 (in Beta), Kermit 95 1.1.5 or later, IBM Mainframe Kermit 4.3.2 (soon to be announced), and of course MS-DOS Kermit 3.15 itself. 6. Automatic recognition of Kermit packets while in terminal emulation mode. See next section. TERMINAL EMULATION IMPROVEMENTS 1. Kermit can now use extended memory (raw memory above 1MB) in place of expanded memory for screen rollback space. The command below has been enhanced to include choices EXTENDED and EXPANDED. SET TERMINAL EXPANDED-MEMORY { OFF, EXPANDED, EXTENDED, ON } The default is ON, which means try expanded memory first, and if that fails then try extended. With Extended in use Kermit does not need an expanded memory page frame (located in UMB memory). The default ON results in operation the same as for version 3.14 of MS-DOS Kermit. 2. Automatic recognition of incoming Kermit packets while in terminal emulation mode. The new command: SET TERMINAL AUTODOWNLOAD { ON, OFF } controls this feature, with the default being ON. When the remote host sends a Kermit "I" or "S" packet to initiate a file transfer in either direction (via a SEND or GET command) then MS-DOS Kermit switches to file transfer mode, performs the file transfer, then returns to CONNECT mode. To download a file, just tell the remote Kermit to send it, e.g. (for C-Kermit on the remote end): kermit -s ; To download in text mode kermit -is ; To download in binary mode or (at the Kermit prompt): C-Kermit> set file type text ; (or "binary") C-Kermit> send To upload a file, tell the remote Kermit to GET it, e.g.: kermit -g ; To upload in text mode kermit -ig ; To upload in binary mode or: C-Kermit> set file type text ; (or "binary") C-Kermit> get 3. The Compose Key (verb \Kcompose, assigned by default to Alt-c) now works not only for Latin-1 (Western European) character sets, but also Latin-1 (Eastern European) character sets. Latin-2 compose sequences are accepted when your local code page is CP852 and your terminal character-set is Latin-2; otherwise, Latin-1 sequences are used, as before. See Appendix I. SCRIPT PROGRAMMING IMPROVEMENTS 1. New command functions, \fname(arguments): \frindex(pattern,string,position) Right Index. Returns 1-based position of first occurrence of pattern in string, looking from right to left, starting "position" bytes from from the right (default position is 0). Returns 0 if pattern not found. \feval(math expression) Returns numerical result of a math expression. Numbers are 32-bit signed integers in calculations. Math operators are: +, -, *, / Add, subtract, multiply, divide + and - are also unary operators % modulo, remainder ^ exponent, to power of ! factorial ~ logical bit-wise NOT, one's complement & bit-wise AND | bit-wise OR # bit-wise Exclusive-OR @ Greatest Common Divisor ( ) Clustering symbols, to 8 deep. \fipaddr(string) Returns IP address in dotted decimal form found within string. Can be used with \v(input) to obtain IP address during SLIP login. \ftod2secs(hh:mm:ss) Converts hours:minutes:seconds to seconds. \fverify(pattern, string, offset) Checks that all characters in string are in pattern, starting search at offset of string. Returns 0 if all match, else 1-based position of first mismatch in string. Function names may be abbreviated to uniqueness, such as \fmin(). 2. Mathmatical expressions, such as (1992+3*3-5), can be used almost everywhere to represent a single numercial value. The rules of what is an expression are the same as for \feval() and follow common usage. If spaces occur then use ( ) around the entire expression. Numbers can be expressed as implicit decimal, 1996, or have a base associated with them such as \x1b for hexadecimal (27 dec). Numbers may be signed and results are retained to 32-bits. Single byte numerical values, \x1b, are permitted in text strings and represent one byte. To use backslash as itself double it, \\. Note that a number may terminate from its value filling a byte. For example: ECHO testing \12345 produces: testing {45 because \123 makes a full byte (visually a left curly brace). 3. To assist the CD, DIR, and RUN commands single byte \number conversion no longer occurs. Thus one may now safely say CD \4DOS. 4. Command word spelling may be composed on the fly from substitution variables, such as define \%a minal set ter\%a type vt320 This concept is extended to spelling of \function names, labels, and even the names of substitution variables themselves. 5. Substitution variables now support the notion of arrays of strings: DECLARE \&[size] Allocates space for "size" number of strings. If size is 0 then the structure becomes undefined. \&[index] Is member index of the array . Use DEFINE or ASSIGN to create the array member. Index starts at 1 and should not exceed the declared "size." Strings are limited in length to 1KB which is the limit of a Kermit command. Not all members need be created, only the ones you wish. An empty definition removes that member. 6. Multiple match patterns for script INPUT statements, via new command MINPUT pattern1 patttern2 pattern3... This behaves the same as INPUT except each of the patterns is examined and the first match terminates the command. Patterns containing spaces should be placed within curly braces, e.g. {three word pattern}. The pattern which is matched is revealed in new variable \v(minput): 1 if the first one was matched, two if the second, and so on, or 0 if none were matched. NOTE: For compatibility with C-Kermit, the optional timeout in the MINPUT, INPUT, and REINPUT commands, should always be included. 7. New variables: \v(instatus) Status of most recent INPUT or MINPUT command: -1 for not initialized yet 0 for success 1 for timed out 2 for user level Control-C interrupt 4 for connection lost \v(minput) Shows which search pattern was matched by the MINPUT command, which is a script INPUT command with one or more match patterns. The variable is 0 if no match was obtained. \v(return) The text string given by a "RETURN string" command. See RETURN below. \v(input) This is the contents of the INPUT command buffer, but with two changes from version 3.14. Now \v(input) is the entire buffer rather than up to the first Carriage Return, and control codes are retained intact (and thus are invisble). To see the control codes visually use command SHOW SCRIPT where controls are displayed in "caret-character" notation such that null is ^@, 1 is ^A, 2 is ^B and so on. 8. Program control functions FOR, WHILE, XIF, ELSE. They are: FOR { , ... } WHILE { , ... } XIF { , ... } ELSE { , ... } IF ELSE where: Is a substitution variable, \%, which holds the loop index; , , and are numbers, and yes, loops can run backward by using negative increments. Is any MS-DOS Kermit command. { , ... } Is curly braces surrounding one or more Kermit commands, with commands separated by commas to represent end of line, or multiple lines of Kermit commands where the physical end of line acts automatically as a command terminator. A side effect of this is commands using { will be continued automatically by the next line until a closing } is encountered; each input line will have a comma prepended. is any of the IF statement tests. XIF may have the ELSE word in the middle of a command line, but ELSE must not be a separate command line. Only the IF statement uses ELSE as a separate command line (see below). The IF statement has been extended to allow an optional second line of ELSE Kermit command. ELSE must be at the start of the next line rather than on the same line as the IF main body. BREAK terminates a FOR or WHILE loop. Control resumes at the next outer statement, if any. CONTINUE continues FOR and WHILE statements the at the bottom, skipping statements between itself and the bottom of the loop. These statements may be nested. 9. RETURN string Used by macros to return "string" to new variable \v(return) and then terminate the macro. Termination is otherwise the same as by POP or END. 10. SETENV name=string Puts NAME=string into the DOS master environment. Example script sequence: input 10 Your IP number today is input 10 Please record it now. setenv myip=\fipaddr(\v(input)) where the remote machine sends "Your IP number today is 123.111.222.123. Please record it now." The DOS master enviroment would have the new line "MYIP=123.111.222.123" at the end. Note that changing the master environment does not affect the copy existing within Kermit nor any processes launched while in Kermit. APPENDIX I: LATIN-2 COMPOSE SEQUENCES Accented Letters. Enter in the desired case (upper or lower). Key 1 (K1) and Key 2 (K2) can be entered in either order. Character Name K1 K2 A acute A ' A breve A % A circumflex A ^ A diaeresis A " A ogonek A = C acute C ' C caron C & C cedilla C , D caron D & D stroke D - E acute E ' E caron E & E diaeresis E " E ogonek E = I acute I ' I circumflex I ^ L acute L ' L caron L & L with stroke L / N acute N ' N caron N & O acute O ' O circumflex O ^ O diaeresis O " O double acute O # R acute R ' R caron R & S acute S ' S caron S & S cedilla S , T caron T & T cedilla T , U acute U ' U diaeresis U " U double acute U # U ring U * Y acute Y ' Z acute Z ' Z caron Z & Z dot above Z . ss (German sharp s) s s (lowercase only) Accents and special characters; enter K1 and K2 in the order shown: Character Name K1 K2 Acute accent ' ' (two apostrophes) Breve % % (two percent signs) Caron & & (two ampersands) Cedilla , , (two commas) Currency sign X 0 (or X O, or x 0, or x o) Degree sign 0 ^ (zero and circumflex) Diaeresis : : (two colons) Division sign - : (hyphen and colon) Dot above . . (two periods) Double acute # # (two number or pound signs) Multiplication sign X X (or x x) Ogonek = = (two equal signs) Paragraph sign S ! (or S 0 or S O, upper or lower case) Soft hyphen - - (two hyphens) (End)