home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / archives / msk315.zip / MSK315.DOC next >
Text File  |  1997-09-17  |  49KB  |  1,217 lines

  1. CHANGES AND UPDATES TO MS-DOS KERMIT 3.15
  2.  
  3. This file lists the changes and corrections in each Beta pre-release of
  4. MS-DOS Kermit 3.15, in reverse chronological order.
  5.  
  6. The following Appendices are included at the end of this file:
  7.  
  8. APPENDIX I:   LATIN-2 COMPOSE SEQUENCES
  9. APPENDIX II:  MS-DOS KERMIT AND PPP
  10. APPENDIX III: MEMORY MANAGEMENT
  11.  
  12. ____________________________________________
  13. Preliminary Final Release, 15 September 1997
  14.  
  15. Beta 25 with Beta notice removed and new date, code freezed.  IBM PC and
  16. compatibles only.  Accompanying text files still need to be updated.
  17.  
  18. FILENAME       SIZE   DESCRIPTION       
  19.  
  20. MSK315.EXE   251768   Full-featured version
  21. MSR315.PCH      325   Initial patch for full-featured version
  22. MSK315M.EXE  199356   Medium version: no networks, serial connections only
  23. MSRM315.PCH     317   Patch for medium version
  24. MSK315N.EXE  164312   Lite version I: networks included, no terminal emulator 
  25. MSRN315.PCH     327   Initial patch for Lite version I
  26. MSK315L.EXE  113414   Lite version II: no terminal emulator or networks
  27. MSRL315.PCH     310   Initial patch for Lite version II
  28.  
  29. _________________________
  30. Beta 25, 6 September 1997
  31.  
  32. New commands:
  33.  
  34. SET INPUT FILTER-ECHO { ON, OFF }
  35.    When ON (which is the default), only printable characters and controls
  36.    are sent to the screen when INPUT ECHO is ON.  When OFF, all incoming
  37.    characters (except NUL and DEL, which are discarded) are passed to the
  38.    screen, the idea being that a console driver (such as ANSI.SYS) will
  39.    process them and format the screen nicely -- this only works if the
  40.    escape and control sequences coming from the host are recognized by the
  41.    console driver; remember, MS-DOS Kermit's terminal emulator is NOT
  42.    active during INPUT commands.
  43.  
  44. Bugs fixed:
  45.  
  46.  . IF NUMERIC did not work for unsigned numbers longer than one digit.
  47.  
  48.  . \frpad() and flpad() ignored a blank third argument and used the closing
  49.    paren instead.
  50.  
  51.  . Array elements could not be assigned, e.g. by READ.
  52.  
  53.  . Writing an empty array element into a file could cause MSK or DOS to crash.
  54.  
  55.  . Assigning \%x variables inside SWITCH statement didn't work.
  56.  
  57.  . SERVER <time> was broken; if a timeout value was given, it did not work
  58.    until and unless some packets were exchanged.
  59.  
  60.  . S, I, and A packets and/or their ACKs could be sent that were longer than
  61.    the requested size; conversely, incoming packets that were longer than the
  62.    requested size could be rejected even when the actual buffer was long
  63.    enough to accommodate them.  Both conditions have been corrected.  This
  64.    problem was evident only when very short packet lengths were requested.
  65.  
  66. ____________________
  67. Beta 24, 15 Aug 1997
  68.  
  69. The following bugs were fixed:
  70.  
  71.  . Host-directed printing would not stop if the stop-printing sequence
  72.    was <ESC><CSI>4i, rather than simply <ESC>[4i or <CSI>4i.
  73.  
  74.  . Under certain conditions, an overlong Kermit data packet could be sent.
  75.  
  76. ___________________
  77. Beta 23, 3 Aug 1997
  78.  
  79. ANSI terminal emulation modified to allow use of the 25th line by
  80. direct cursor addressing and by scrolling.
  81.  
  82. DG 217 emulation added.  Does not support UNIX mode.
  83.  
  84. ____________________
  85. Beta 21, 19 May 1997
  86.  
  87. The status-line clock now can show elapsed time for the current connection
  88. via SET TERMINAL CLOCK { ON, OFF, ELAPSED-TIME }.  ON shows time of day,
  89. ELAPSED-TIME shows elapsed time.  Also the clock sampling and display
  90. mechanism were adjusted to prevent flickering in Windows, and so now
  91. is ON by default for both DOS and Windows 3.x.  The elapsed-time clock can
  92. also be set back to 0 with the new RESET CLOCK command.
  93.  
  94. New \Kdebug Kverb added, to toggle SET DEBUG SESSION while in CONNECT
  95. mode, and assigned to Alt-d by default.  This removes the necessity to
  96. escape back, SET DEBUG SESSION, and reconnect to get terminal-screen
  97. debugging, and then escape back, SET DEBUG OFF, and reconnect to turn it
  98. off again.
  99.  
  100. \Kreset (reset the terminal emulator) assigned to Alt-r for compatibility with
  101. Kermit 95.  It is also still on Alt-=, as before.
  102.  
  103. Additional TCP/IP stack monitoring and debugging facilities (refer to Beta 10
  104. description below).  SET TCP/IP DEBUG ON now adds a performance meter to the
  105. CONNECT-mode status line.  Regular TCP/IP debugging material is displayed on
  106. the terminal screen by default, or if you have a transaction log active, it is
  107. written to the log instead.  But in both cases, the new fields are shown in
  108. the status line:
  109.  
  110.   nnnnR = Number of microseconds to Receive an IP packet.
  111.   nnnnT = Number of microseconds to Transmit an IP packet.
  112.  
  113. The packet times are displayed when a packet is transmitted, so the R field
  114. represents the most recent reception.  Smaller numbers mean fewer cpu cycles
  115. devoted to packet movement between Kermit and the LAN adapter; small is good.
  116.  
  117. The most precise numbers occur when using Novell ODI drivers.  Packet drivers
  118. produce spuriously tiny reception values, because most of the board work
  119. occurs before Kermit is notified (and hence before Kermit can time the
  120. reception process).  In the case of reception Kermit measures the time between
  121. being first asked for a buffer and when the LAN driver finally reports the
  122. buffer is filled.  For transmission, Kermit initiates events and the time is
  123. between Kermit's initial command to the LAN driver to transmit a buffer and
  124. the LAN driver's final reply that it has done so.  The important point is the
  125. times measure Kermit to/from LAN driver events.
  126.  
  127. ______________________
  128. Beta 20, 23 April 1997
  129.  
  130. Another adjustment to DHCP material to make sure the server ident field is not
  131. created spontaneously.  And to stop any misunderstandings about "time since
  132. boot" the client secs field is forced to 0 in all packets.  Plus protection
  133. against endless retries on rejected IP lease renewals; needs testing.
  134.  
  135. ______________________
  136. Beta 19, 13 April 1997
  137.  
  138. Changes to DHCP client operation.  Xander Jansen pointed out that some new
  139. small-office routers, such as the 700 series from Cisco, have changed their
  140. expectation of what a DHCP client must say to gain service.  The prevailing
  141. formal rules were in RFC1541 and nearby documents.  Brand-new RFCs 2131 and
  142. 2132 (April 1997) describe a method which is in direct contradiction to RFCs
  143. 1541 1533.  When testing MS-DOS Kermit 3.15 Beta 18 against the small router,
  144. Xander found the router rejected the client.  In Beta 19, the DHCP support was
  145. changed to be compatible with both ways of being a DHCP client, trying first
  146. the RFC2132/2133 method and if that is rejected then the RFC1541 method.
  147.  
  148. SHOW COMMUNICATIONS now distinguishes DHCP from BOOTP.
  149.  
  150. _________________________
  151. Beta 18, 14 February 1997
  152.  
  153. Corrections:
  154.  
  155.  . Long-standing bug of being unable to delete characters via CSI P which are
  156.    within four columns of the left margin while in 132 column video mode.
  157.  
  158.  . Bug introduced into beta 17 while adding \f(filespec). This forced the
  159.    requested filename pattern to be prepended as a path to individual
  160.    filenames of an incoming GET request, resulting in failure to find the
  161.    files.
  162.  
  163. Changes:
  164.  
  165.  . Modify the VT100 terminal ident from very long standing vanilla ESC ? 1 c
  166.    to be ESC ? 1; 0 c to satisfy some string matching style remote
  167.    programs.  Similarly use ESC ? 6; 0 c for VT102.
  168.  
  169. ________________________
  170. Beta 17, 9 February 1997
  171.  
  172. Beta 17 fixes the following bugs:
  173.  
  174.  . A TAKE file once opened was never closed.
  175.  
  176.  . Macro argument variables, \%0..\%9, were not removed after the last nested
  177.    macro exited and thus collided with possible non-macro use of the same
  178.    variable names.
  179.  
  180.  . A harmless message occurred if a macro expected several arguments and fewer
  181.    were provided on the invocation line.
  182.  
  183.  . A correction for Data General terminal emulation to clear video attributes
  184.    adversely affected VTxxx emulations, leading to unwanted underlining, etc,
  185.    after an erasure operation. This occurred only in Beta 16.
  186.  
  187.  . SET KEY definitions involving a macro name were not parsed properly in a
  188.    few annoying cases.
  189.  
  190. And adds the following new feature:
  191.  
  192.  . New variable \v(filespec) shows the filename pattern most recently used for
  193.    sending or receiving files. It may contain wild cards and paths, depending
  194.    on what the user typed.
  195.  
  196. ________________________
  197. Beta 16, 6 February 1997
  198.  
  199. In this issue we try to resolve known problems with the INPUT
  200. command.  Some coding errors were discovered and fixed.
  201.  
  202. The length of SET KEY definitions is down to 150 bytes maximum, because
  203. borrowing a longer buffer causes internal interference (MSK 3.15 Beta 15
  204. introduced the much longer buffer (borrowed)).  A consequence of that
  205. interference was loss of ability to invoke macros within key definitions
  206.  
  207. Finally, an undiscovered omission in Data General terminal emulation
  208. was pointed out by Jeff Altman: underlining was not turned off when a Form
  209. Feed command arrived.
  210.  
  211. ________________________
  212. Beta 15, 3 February 1997
  213.  
  214. Key definitions can now be up to 1K in length.  The previous maximum length
  215. was 127 bytes.
  216.  
  217. Some glitches fixed in the INTRO screen.
  218.  
  219. There is now a new SET PARITY option.  It is mostly untested, so testing is
  220. needed by those in a position to test it:
  221.  
  222.   SET PARITY { EVEN, ODD, MARK, SPACE, NONE }
  223.  
  224. behave as before: SET PARITY none establishes 8 data bits, no parity; the
  225. others 7 data bits and 1 parity bit.  The new option is:
  226.  
  227.   SET PARITY HARDWARE { EVEN, ODD, MARK, SPACE }
  228.  
  229. When this command is given, MS-DOS Kermit uses 8 data bits and 1 parity bit,
  230. and parity is handled by the hardware (i.e. the UART).  This feature is added
  231. for the benefit of certain devices that can only communicate with 8 data bits
  232. and one parity bit, and should not be used except when absolutely necessary,
  233. since hardware checking of parity is a great deal less intelligent and
  234. tolerant than the normal software handling done by MS-DOS Kermit itself.
  235. SET PARITY HARDWARE works only on real serial ports; not on BIOS ports,
  236. FOSSIL ports, or network connections.
  237.  
  238. _______________________
  239. Beta 14, 27 January 1997
  240.  
  241. New REGET command.  REGET is to GET as RESEND is to SEND: file transfer
  242. recovery of interrupted binary-mode transfers, in this case when downloading
  243. from a Kermit server.  Works only when Kermit's FILE TYPE is BINARY.
  244.  
  245. \v(date) format changed to "27 Jan 1997" for compatibility with C-Kermit.
  246. Language-independent numeric (Julian) dates are available as \v(ndate), as
  247. always.
  248.  
  249. The new CONNECT-mode status-line clock (with blinking colon) is turned off
  250. when running under Windows, even in a full-screen DOS box), to stop flickering
  251. of the display caused by Windows recovering from a polling DOS call to get the
  252. time of day.
  253.  
  254. The CONNECT-mode status line is now refreshed to show the proper printing
  255. status if a printer is unavailable, rather than leaving a ghost "PRN"
  256. indication if printing has been terminated.
  257.  
  258. _______________________
  259. Beta 13, 4 January 1997
  260.  
  261. SET KEY syntax simplified; curly braces no longer required when mixing
  262. Kverbs, Kmacros, and text strings except to resolve ambiguities or to
  263. preserve leading and/or trailing whitespace.  Thus:
  264.  
  265.   set key \315 \kkp4\kkp5 foo \kkp6
  266.  
  267. is now a legal definition, resulting in those three verbs being seen at
  268. keypress time, and the embedded string is sent in the middle of them.  The
  269. old, more complicated syntax, is still accepted.
  270.  
  271. _________________________
  272. Beta 12, 26 December 1996
  273.  
  274. A timer-related problem was fixed that could cause MS-DOS Kermit to block
  275. (hang) on a TCP/IP connection for up to a minute or more if a sent packet
  276. were lost while slowly sending tiny packets. This problem was most
  277. frequently observed in Telnet terminal sessions, while typing.
  278.  
  279. IF commands containing variables were being overevaluated; e.g.:
  280.  
  281.   if = \%i 4 decrement \%i
  282.  
  283. Such statements now work again.
  284.  
  285. The following command-related changes were made for compatibility with
  286. C-Kermit 6.0:
  287.  
  288.  . The LOCAL command now works with macro names as well as \%x variable 
  289.    names.  So, for example:
  290.  
  291.      LOCAL FOO BAR \%A
  292.  
  293.    declares three local variables, foo, bar, and \%a.  FOO and BAR are macro
  294.    names, which can be used either as "local subroutines" or as long-named
  295.    variables accessible via the \m(name) construction.
  296.  
  297.  . The LOCAL command can now be used not only in macro definitions, but also
  298.    in command files.  This allows construction of portable command procedures
  299.    with private data, without danger of conflict with variable names already
  300.    in use by other procedures.
  301.  
  302.  . MSLEEP added as a synonym for MPAUSE (millisecond sleep).
  303.  
  304. (There was no open Beta 11)
  305.  
  306. _________________________
  307. Beta 10, 18 December 1996
  308.  
  309. New items:
  310.  
  311.  . Add built-in Cyrillic support for the terminal emulator:
  312.    SET TERMINAL CHARACTER-SET { CYRILLIC-ISO, KOI8, SHORT-KOI },
  313.    SET TERMINAL CODE-PAGE CP866.  Previously this was done with command
  314.    files (lots of SET TRANSLATE INPUT and SET KEY commands), but that did
  315.    not work well with ISO 2022 character-set designation and invocation
  316.    (G0, G1, G2, G3 switching, VT220 line-drawing characters, etc).
  317.  
  318.  . Modify commands ASSIGN, DEFINE, UNDEFINE, _ASSIGN, and _DEFINE for the
  319.    syntax expressing array names.  Each permits expressions and variables
  320.    within the [index] field.  Assign, define, and undefine do not permit
  321.    substitution in the spelling of the array name of \&<character>; _assign
  322.    and _define do permit it.
  323.  
  324.  . Add keyword IF to the list for command CHECK.  CHECK IF reports that
  325.    extended IF statements are present.
  326.  
  327.  . Add UNDEFINE variable/macro to undefine an item. This is the same as the
  328.    DEFINE command with no definition text.
  329.  
  330.  . Add XECHO string to display the string without the leading CR/LF.
  331.  
  332.  . Add variable \v(connection) which always returns string "local".
  333.  
  334.  . Add function \fbasename(filename) which returns the filename without
  335.    its drive letter and path prefix.
  336.  
  337.  . Keyboard definitions to invoke named macros had used definitions of the
  338.    form {\kmacro-name}. The surrounding curly braces are no longer required,
  339.    but they may be used with older material.  This also means the syntax for
  340.    specifying keyboard "verbs" and macros is now the same.
  341.  
  342. Corrections:
  343.  
  344.  . SET KEY \xxx {\Kmacroname} was broken in earlier betas.
  345.  
  346.  . DEC User Defined Keys returned illegally and crashed the program.
  347.  
  348.  . Correct a small bug with processing DEC Sixel graphics.
  349.  
  350.  . SET PRINTER to a file which could not be opened crashed the program.
  351.  
  352.  . LOCAL list of \%<char> variables failed to skip items in the list which
  353.    were not of the form \%<char>.
  354.  
  355.  . Revise the TCP/IP protocol stack code to be less agressive in sending long
  356.    groups of packets but more agressive in responding to network
  357.    congestion.  The result should be fast transfers with fewer packets lost
  358.    from too many packets per second on the wire.
  359.  
  360.  . Add code to catch errors of delivering TCP/IP packets from the LAN adapter
  361.    driver to Kermit. The error of interest is when a packet buffer is
  362.    allocated from Kermit but the LAN driver fails to signal that the buffer
  363.    has been filled with a new packet.  Failures are visible when command SET
  364.    TCP DEBUG ON is given, and they may be made invisible but recorded in the
  365.    Transaction log if command LOG TRANSACTION filename is stated.
  366.  
  367.  . Included in the TCP debug information are arriving ARP broadcasts (good for
  368.    testing if the LAN adapter is still receiving) and IP packet transit time
  369.    details. For specialists, the timing details appear as lines like this
  370.    example, where fields are:
  371.  
  372.      time=2093 rtt=1 avg=0 std_dev=1 s->rto=5
  373.  
  374.    time since the TCP stack started, current IP packet round trip time (rtt),
  375.    smoothed average rtt, standard deviation of the difference, and the round
  376.    trip timeout, all in units of Bios clock ticks (18.2 of them per
  377.    second). Message "Failed to put packet on wire" is written if the lan
  378.    adapter is unable to perform a transmission requests; Kermit retries the
  379.    attempt.
  380.  
  381.  . Add a test for Control-C or Control-BREAK being typed while waiting for a
  382.    TCP byte stream to be delivered to the remote host.  This is an attempt to
  383.    break free of waiting while Kermit file transfer packets are held back
  384.    because TCP is waiting for an ACK to previously sent material.  Such waits
  385.    can be several minutes in bad cases.  This test is of limited usefulness.
  386.  
  387.  . Fill in a Reverse ARP request field which is normally empty and ignored but
  388.    might be looked at anyway.
  389.  
  390.  . Fixed a problem which crashes the program when going between text and
  391.    graphics screens when neither extended nor expanded memory is used to
  392.    preserve the graphics screen.
  393.    
  394.  . Time-of-day clock added to status line, with blinking colon.  If this
  395.    produces any unwanted effects, use "set term clock off" to disable it.
  396.  
  397. (Beta 9 was skipped)
  398. _________________________
  399. Beta 8, 10 September 1996
  400.  
  401. New items:
  402.  
  403.  . Add keyboard verbs \Ksession1 through \Ksession6 to select 
  404.    a particular Telnet session of the six available (versus the 
  405.    \Knextsession toggle). These new verbs are not preassigned
  406.    to keys.
  407.  
  408. Fixes:
  409.  
  410.  . Current directory, as shown in prompt, was over-evaluated.
  411.  
  412.  . Bug with UDKs fixed.
  413.  
  414.  . \v(drive) value had a spurious null character on the end.
  415.  
  416.  . SET PRINTER problems displayed gibberish rather than a proper 
  417.    error message.   
  418.  
  419.  . No Ping response was generated for SLIP connections.
  420.  
  421.  . SHOW SESSIONS did not wait for a confirming Enter key.
  422.  
  423.  . \v(input) lost its text.
  424.  
  425.  . Invoking macros within macros which used END to leave had
  426.    confused the END command.
  427.  
  428. ------------------------
  429. Beta 7, 7 September 1996
  430.  
  431. New items:
  432.  
  433. Modify assign/define/undefine/_assign/_define for array name syntax.  All
  434. permit expressions and variables within the [index] field.  Assign, define,
  435. and undefine do not permit substitution in the array name of \&<character>;
  436. _assign and _define do permit it.
  437.  
  438. Add keyword IF to the list for CHECK.  CHECK IF always succeeds, indicating
  439. the script programming language is present.
  440.  
  441. Add UNDEFINE variable/macro to undefine an item.  This is the same as the
  442. DEFINE command with no definition text.
  443.  
  444. Add XECHO <string> to display the <string> without adding CR/LF.
  445.  
  446. Add variable \v(connection) which always returns string "local".
  447.  
  448. Add function \fbasename(filename) which returns the filename without is drive
  449. letter and path prefix.
  450.  
  451. Corrections:
  452.  
  453. DEC User Defined Keys returned illegally, could crash program.
  454.  
  455. SET PRINTER to a file which could not be opened crashed the program.
  456.  
  457. LOCAL list of \%<char> variables failed to skip non-\%<char> items in the list.
  458.  
  459. ------------------------
  460. Beta 6, 2 September 1996:
  461.  
  462. Bug fixes:
  463.  
  464.  . END/POP statement acted too strongly and exited all macros rather
  465.    than just the current macro.
  466.  
  467.  . Consecutive spaces in strings were collapsed to single spaces,
  468.    such as ECHO 1 2   3   showed 1 2 3, and INPUT 10 {WORD   WORD}
  469.    expected only a single space.
  470.  
  471.  . Declaration of arrays of size 14 eventually led to memory corruption.
  472.  
  473.  . INPUT ignored bytes read during preceeding script commands, such
  474.    as PAUSE or OUTPUT.
  475.  
  476. -----------------------
  477. Beta 5, 27 August 1996:
  478.  
  479. New commands:
  480.  
  481. NOPUSH
  482.   Hidden, one-way command, prevents PUSH/RUN
  483.  
  484. SET TERMINAL ESCAPE-CHARACTER {ENABLED, DISABLED}
  485.   Determines whether the Connect mode escape character, normally Control-],
  486.   is an escape or is sent to the host as an ordinary character.
  487.  
  488. Added TCP keepalive probes when using a TCP passive open (Listen).  Times out
  489. a session after about 100 seconds of no response to a series of five probes.
  490.  
  491. Fixed bugs with arrays having more than 14 elements.
  492.  
  493. -----------------------
  494. Beta 4, 19 August 1996:
  495.  
  496.  o Correct bug of losing the first two characters of the first argument
  497.    word in the DIAL command.
  498.  o Add new command SET TERMINAL CR-DISPLAY {Normal, CR-LF}, default is
  499.    normal.  The alternative adds a Line Feed after each received Carriage
  500.    return.
  501.  o Correct bugs in INPUT and MINPUT.
  502.  o Adds three new commands: SWITCH, MOVE, and RETRIEVE.
  503.  
  504.    SWITCH <variable-name> {
  505.      :label1, command, command, ... BREAK
  506.      :label2, command, command, ... BREAK
  507.      :label3, command, command, ... BREAK
  508.      ...
  509.      :DEFAULT, command, command, ...
  510.    }
  511.  
  512. This is similar to the C-language switch statement, and identical to the
  513. switch statement in C-Kermit 6.0 Beta.  Like both, it can be nested.  Example:
  514.  
  515. SWITCH \v(nday) {
  516.   :0, echo Sunday, break
  517.   :1, echo Monday, break
  518.   :2, echo Tuesday, break
  519.   :3, echo Wednesday, break
  520.   :4, echo Thursday, break
  521.   :5, echo Friday, break
  522.   :6, echo Saturday, break
  523.   :default, echo When did the week get more than 7 days?
  524. }
  525.  
  526. The MOVE command is just like SEND, except that after sending the file
  527. succesfully, MS-DOS Kermit deletes its copy.  Thus the file is actually moved
  528. from your PC to the other computer, rather than copied.
  529.  
  530. The RETRIEVE command, to be sent by a client to a server, is just like GET
  531. except that it tells the server to delete each file after -- and if and only
  532. if -- it has been sent successfully.  Thus it is like MOVE, but in the other
  533. direction.  Requires a server on the other end that understands this command.
  534. As of yet, only MS-DOS Kermit qualifies.  The next beta edit of C-Kermit will
  535. have this feature too (both ends, server and client).
  536.  
  537. -----------------------
  538. Beta 3, 11 August 1996:
  539.  
  540. Correction to DHCP lease renewal procedure.
  541.  
  542. -------------------------------------------------
  543. Second (unnumbered) test version, 11 August 1996:
  544.  
  545. Corrections to reported bugs:
  546.  o STOP <digit> string now properly displays the string.  The DIAL command
  547.    uses this syntax when the dialing script is not found.
  548.  o SET PROMPT allows \numbers again.
  549.  o INPUT <timeout> single-byte no longer hangs in an infinite loop.
  550.  o MINPUT <timeout> {string} {another string} ... 
  551.    now properly recognizes each string.
  552.  o \v(minput) now properly reports the index of the string matched by MINPUT.
  553.  o Loss of modem Carrier Detect may now be recognized promptly during file 
  554.    transfers, but the changes are untested.  Probably more work is needed.
  555.  o \$(DOS Environment variable) now finds both uppercase and lower case
  556.    variables, but not mixed case variables.  Windows 3.1x creates variable
  557.    "windir" in lower case, as can be observed within the DOS box, so this is
  558.    a way for MS-DOS Kermit to check whether it is running under Windows 3.x.
  559.  
  560. Additional features:
  561.  o \fchecksum(string) yields the decimal value of the 32-bit unsigned sum
  562.    of the code values of each byte in string, e.g. \fcheck(ABCD) = 266.
  563.  o SET TCP ADDRESS has new option, DHCP, as a synomym for BOOTP.
  564.  o SET TCP ADDRESS DHCP or BOOTP  both try DHCP negotiation and accept
  565.    the first response of possibly many, whether DHCP or Bootp responses.
  566.    Special note for users of Novell's DHCPSRVR.NLM server v2.0: 
  567.    use  SET TCP BROADCAST 255.255.255.255  to avoid a bug in that server
  568.    which is triggered by using a directed broadcast address.
  569.  
  570. Question on a requested enhancement:
  571.    TCP/IP SOCKS support requires a choice of authentication mechanism.
  572.    People asking for SOCKS support need to tell us which mechanism they 
  573.    require since one needs to be written into the code. The two choices are
  574.    no authentication and plaintext username/password, neither of which
  575.    provides any security, and the latter is a big security hole.
  576.  
  577. --------------------------------
  578. First (unnumbered) test version, 18 July 1996:
  579.  
  580. ERROR CORRECTIONS
  581.  
  582. 1. All patches issued for MS-DOS Kermit version 3.14 are incorporated into
  583.    version 3.15
  584.  
  585. 2. Unpatchable problem with ARP affecting some remote hosts is fixed in
  586.    version 3.15
  587.  
  588. 3. Unpatchable bug which prevented communications between LAN adapters from
  589.    the same vendor (the first three octets of the hardware address were the
  590.    same), fixed in version 3.15
  591.  
  592. 4. Correction of a fatal bug when using internal TCP/IP over ARCnet ODI
  593.    drivers.
  594.  
  595. 5. Failure to act upon 8-bit control codes SS2 and SS3 in VT220/320 terminal
  596.    emulation, even though their 7-bit equivalents were implemented.
  597.  
  598. FILE TRANSFER IMPROVEMENTS
  599.  
  600. Kermit file transfer protocol and TCP/IP internal protocol stack:
  601.  
  602. 1. Dynamic Kermit packet retry timing, based on measured round trip times.
  603.    This should provide faster recovery from lost packets.
  604.  
  605. 2. Congestion avoidance strategy during packet transmission.  Both (1) and
  606.    (2) are directly from TCP/IP rules and procedures by Van Jacobson.  This
  607.    should improve performance on busy comms lines of all kinds.
  608.  
  609. 3. Improved timing of IP packets within the internal TCP/IP stack, to deal
  610.    with today's steadily deteriorating Internet performance.
  611.  
  612. 4. Improvement of TCP keepalive probe detection techniques, to keep Telnet
  613.    connections alive forever even if no user activity occurs.
  614.  
  615. 5. Optional announcement in Kermit packets of the kind of operating system
  616.    so that two alike systems would exchange files in BINARY mode
  617.    automatically, and without filename conversion.  The new command:
  618.  
  619.      SET TRANSFER MODE { AUTOMATIC, MANUAL }
  620.  
  621.    controls this feature, with the default being MANUAL for no announcement.
  622.    If the "sysid" mode is used it overrides user choice of binary or text
  623.    mode file transfers when like systems converse.  Works with C-Kermit
  624.    16.0.192 (in Beta), Kermit 95 1.1.5 or later, IBM Mainframe Kermit 4.3.2
  625.    (soon to be announced), and of course MS-DOS Kermit 3.15 itself.
  626.  
  627. 6. Automatic recognition of Kermit packets while in terminal emulation
  628.    mode.  See next section.
  629.  
  630. TERMINAL EMULATION IMPROVEMENTS
  631.  
  632. 1. Kermit can now use extended memory (raw memory above 1MB) in place of
  633.    expanded memory for screen rollback space. The command below has been
  634.    enhanced to include choices EXTENDED and EXPANDED.
  635.  
  636.      SET TERMINAL EXPANDED-MEMORY { OFF, EXPANDED, EXTENDED, ON }
  637.  
  638.    The default is ON, which means try expanded memory first, and if that
  639.    fails then try extended.  With Extended in use Kermit does not need an
  640.    expanded memory page frame (located in UMB memory).  The default ON
  641.    results in operation the same as for version 3.14 of MS-DOS Kermit.
  642.  
  643. 2. Automatic recognition of incoming Kermit packets while in terminal
  644.    emulation mode.  The new command:
  645.  
  646.      SET TERMINAL AUTODOWNLOAD { ON, OFF } 
  647.  
  648.    controls this feature, with the default being ON.  When the remote host
  649.    sends a Kermit "I" or "S" packet to initiate a file transfer in either
  650.    direction (via a SEND or GET command) then MS-DOS Kermit switches to file
  651.    transfer mode, performs the file transfer, then returns to CONNECT mode.
  652.  
  653.    To download a file, just tell the remote Kermit to send it, e.g. (for
  654.    C-Kermit on the remote end):
  655.  
  656.      kermit -s <filespec>          ; To download in text mode
  657.      kermit -is <filespec>         ; To download in binary mode
  658.  
  659.    or (at the Kermit prompt):
  660.  
  661.      C-Kermit> set file type text  ; (or "binary")
  662.      C-Kermit> send <filespec>
  663.  
  664.    To upload a file, tell the remote Kermit to GET it, e.g.:
  665.  
  666.      kermit -g <pc-filespec>       ; To upload in text mode 
  667.      kermit -ig <pc-filespec>      ; To upload in binary mode 
  668.  
  669.    or:
  670.  
  671.      C-Kermit> set file type text  ; (or "binary")
  672.      C-Kermit> get <pc-filespec>
  673.  
  674. 3. The Compose Key (verb \Kcompose, assigned by default to Alt-c) now
  675.    works not only for Latin-1 (Western European) character sets, but also
  676.    Latin-1 (Eastern European) character sets.  Latin-2 compose sequences
  677.    are accepted when your local code page is CP852 and your terminal
  678.    character-set is Latin-2; otherwise, Latin-1 sequences are used, as
  679.    before.  See Appendix I.
  680.  
  681. SCRIPT PROGRAMMING IMPROVEMENTS
  682.  
  683. 1. New command functions, \fname(arguments):
  684.  
  685.    \frindex(pattern,string,position)
  686.      Right Index.  Returns 1-based position of first occurrence of pattern in
  687.      string, looking from right to left, starting "position" bytes from from
  688.      the right (default position is 0).  Returns 0 if pattern not found.
  689.  
  690.    \feval(math expression)
  691.      Returns numerical result of a math expression.
  692.      Numbers are 32-bit signed integers in calculations.
  693.      Math operators are:
  694.  
  695.        +, -, *, /  Add, subtract, multiply, divide
  696.        + and - are also unary operators
  697.  
  698.        %  modulo, remainder
  699.        ^  exponent, to power of 
  700.        !  factorial
  701.        ~  logical bit-wise NOT, one's complement
  702.        &  bit-wise AND 
  703.        |  bit-wise OR
  704.        #  bit-wise Exclusive-OR 
  705.        @  Greatest Common Divisor 
  706.       ( ) Clustering symbols, to 8 deep.
  707.  
  708.    \fipaddr(string)
  709.      Returns IP address in dotted decimal form found within string.  Can
  710.      be used with \v(input) to obtain IP address during SLIP login.
  711.  
  712.    \ftod2secs(hh:mm:ss)
  713.      Converts hours:minutes:seconds to seconds.
  714.  
  715.    \fverify(pattern, string, offset)
  716.      Checks that all characters in string are in pattern, starting search at
  717.      offset of string.  Returns 0 if all match, else 1-based position of first
  718.      mismatch in string.
  719.  
  720.    Function names may be abbreviated to uniqueness, such as \fmin().
  721.  
  722. 2. Mathmatical expressions, such as (1992+3*3-5), can be used almost
  723.    everywhere to represent a single numercial value.  The rules of what 
  724.    is an expression are the same as for \feval() and follow common usage.
  725.    If spaces occur then use ( ) around the entire expression.
  726.  
  727.    Numbers can be expressed as implicit decimal, 1996, or have a base
  728.    associated with them such as \x1b for hexadecimal (27 dec).  Numbers 
  729.    may be signed and results are retained to 32-bits.
  730.  
  731.    Single byte numerical values, \x1b, are permitted in text strings and
  732.    represent one byte.  To use backslash as itself double it, \\.  Note 
  733.    that a number may terminate from its value filling a byte.  For example:
  734.  
  735.      ECHO testing \12345   
  736.  
  737.    produces:
  738.  
  739.      testing {45  
  740.  
  741.    because \123 makes a full byte (visually a left curly brace).
  742.  
  743. 3. To assist the CD, DIR, and RUN commands single byte \number conversion no
  744.    longer occurs.  Thus one may now safely say CD \4DOS.
  745.  
  746. 4. Command word spelling may be composed on the fly from substitution
  747.    variables, such as 
  748.  
  749.     define \%a minal
  750.     set ter\%a type vt320
  751.  
  752.    This concept is extended to spelling of \function names, labels,
  753.    and even the names of substitution variables themselves.
  754.  
  755. 5. Substitution variables now support the notion of arrays of strings:
  756.  
  757.    DECLARE \&<char>[size]
  758.      Allocates space for "size" number of strings. If size is 0 then the
  759.      structure becomes undefined.
  760.  
  761.    \&<char>[index]
  762.      Is member index of the array <char>.  Use DEFINE or ASSIGN to create the
  763.      array member.  Index starts at 1 and should not exceed the declared
  764.      "size."  Strings are limited in length to 1KB which is the limit of a
  765.      Kermit command. Not all members need be created, only the ones you
  766.      wish. An empty definition removes that member.
  767.  
  768. 6. Multiple match patterns for script INPUT statements, via new command
  769.  
  770.        MINPUT <optional timeout> pattern1 patttern2 pattern3...
  771.  
  772.    This behaves the same as INPUT except each of the patterns is examined
  773.    and the first match terminates the command.  Patterns containing spaces
  774.    should be placed within curly braces, e.g. {three word pattern}.  The
  775.    pattern which is matched is revealed in new variable \v(minput): 1
  776.    if the first one was matched, two if the second, and so on, or 0 if
  777.    none were matched.
  778.  
  779.      NOTE: For compatibility with C-Kermit, the optional timeout in the
  780.      MINPUT, INPUT, and REINPUT commands, should always be included.
  781.  
  782. 7. New variables:
  783.  
  784.    \v(instatus)
  785.      Status of most recent INPUT or MINPUT command:
  786.       -1 for not initialized yet
  787.        0 for success
  788.        1 for timed out
  789.        2 for user level Control-C interrupt
  790.        4 for connection lost
  791.  
  792.    \v(minput)
  793.      Shows which search pattern was matched by the MINPUT command, which
  794.      is a script INPUT command with one or more match patterns.  The 
  795.      variable is 0 if no match was obtained.
  796.  
  797.     \v(return)
  798.      The text string given by a "RETURN string" command. See RETURN below.
  799.  
  800.     \v(input)
  801.      This is the contents of the INPUT command buffer, but with two changes
  802.      from version 3.14.  Now \v(input) is the entire buffer rather than up to
  803.      the first Carriage Return, and control codes are retained intact (and
  804.      thus are invisble). To see the control codes visually use command
  805.      SHOW SCRIPT where controls are displayed in "caret-character" notation
  806.      such that null is ^@, 1 is ^A, 2 is ^B and so on.
  807.  
  808. 8. Program control functions FOR, WHILE, XIF, ELSE.  They are:
  809.  
  810.      FOR <variable-name> <start> <end> <increment> { <command>, ... }
  811.  
  812.      WHILE <logical-test> { <command>, ... }
  813.  
  814.      XIF <logical-test> { <command>, ... } ELSE { <command>, ... }
  815.  
  816.      IF <logical-test> <command>
  817.      ELSE <command>
  818.  
  819.    where:
  820.  
  821.    <variable-name> 
  822.      Is a substitution variable, \%<character>, which holds the loop index;
  823.      <start>, <end>, and <increment> are numbers, and yes, loops can run
  824.      backward by using negative increments.
  825.  
  826.    <command>
  827.      Is any MS-DOS Kermit command.
  828.  
  829.    { <command>, ... }
  830.      Is curly braces surrounding one or more Kermit commands, with commands
  831.      separated by commas to represent end of line, or multiple lines of Kermit
  832.      commands where the physical end of line acts automatically as a command
  833.      terminator.  A side effect of this is commands using { will be continued
  834.      automatically by the next line until a closing } is encountered; each
  835.      input line will have a comma prepended.
  836.  
  837.    <logical-test> is any of the IF statement tests.
  838.  
  839.    XIF may have the ELSE word in the middle of a command line, but ELSE must
  840.    not be a separate command line. Only the IF statement uses ELSE as a
  841.    separate command line (see below).
  842.  
  843.    The IF statement has been extended to allow an optional second line of ELSE
  844.    Kermit command.  ELSE must be at the start of the next line rather than on
  845.    the same line as the IF main body.
  846.  
  847.    BREAK terminates a FOR or WHILE loop. Control resumes at the next outer
  848.    statement, if any.
  849.  
  850.    CONTINUE continues FOR and WHILE statements the at the bottom, skipping
  851.    statements between itself and the bottom of the loop.
  852.  
  853.    These statements may be nested.
  854.  
  855. 9. RETURN string
  856.  
  857.     Used by macros to return "string" to new variable \v(return) and then
  858.     terminate the macro. Termination is otherwise the same as by POP or END.
  859.  
  860. 10. SETENV name=string
  861.  
  862.     Puts NAME=string into the DOS master environment.
  863.     Example script sequence:
  864.     input 10 Your IP number today is
  865.     input 10 Please record it now.
  866.     setenv myip=\fipaddr(\v(input))
  867.  
  868.     where the remote machine sends "Your IP number today is 123.111.222.123.
  869.     Please record it now." The DOS master enviroment would have the new
  870.     line "MYIP=123.111.222.123" at the end.
  871.  
  872.     Note that changing the master environment does not affect the copy
  873.     existing within Kermit nor any processes launched while in Kermit.
  874.  
  875. 11. Local variables
  876.  
  877. In macros, you can declare any \%x (x = any letter) variable to be local to
  878. the macro.  Syntax:
  879.  
  880.   LOCAL <variable-name> [ <variable-name> [ ... ] ]
  881.  
  882. APPENDIX I: LATIN-2 COMPOSE SEQUENCES
  883.  
  884. Accented Letters.
  885. Enter in the desired case (upper or lower).
  886. Key 1 (K1) and Key 2 (K2) can be entered in either order.
  887.  
  888. Character Name          K1   K2
  889.  
  890. A acute                 A    '
  891. A breve                 A    %
  892. A circumflex            A    ^
  893. A diaeresis             A    "
  894. A ogonek                A    =
  895. C acute                 C    '
  896. C caron                 C    &
  897. C cedilla               C    ,
  898. D caron                 D    &
  899. D stroke                D    -
  900. E acute                 E    '
  901. E caron                 E    &
  902. E diaeresis             E    "
  903. E ogonek                E    =
  904. I acute                 I    '
  905. I circumflex            I    ^
  906. L acute                 L    '
  907. L caron                 L    &
  908. L with stroke           L    /
  909. N acute                 N    '
  910. N caron                 N    &
  911. O acute                 O    '
  912. O circumflex            O    ^
  913. O diaeresis             O    "
  914. O double acute          O    #
  915. R acute                 R    '
  916. R caron                 R    &
  917. S acute                 S    '
  918. S caron                 S    &
  919. S cedilla               S    ,
  920. T caron                 T    &
  921. T cedilla               T    ,
  922. U acute                 U    '
  923. U diaeresis             U    "
  924. U double acute          U    #
  925. U ring                  U    *
  926. Y acute                 Y    '
  927. Z acute                 Z    '
  928. Z caron                 Z    &
  929. Z dot above             Z    .
  930.  
  931. ss (German sharp s)     s    s  (lowercase only)
  932.  
  933. Accents and special characters; enter K1 and K2 in the order shown:
  934.  
  935. Character Name          K1   K2
  936.  
  937. Acute accent            '    '   (two apostrophes)
  938. Breve                   %    %   (two percent signs)
  939. Caron                   &    &   (two ampersands)
  940. Cedilla                 ,    ,   (two commas)
  941. Currency sign           X    0   (or X O, or x 0, or x o)
  942. Degree sign             0    ^   (zero and circumflex)
  943. Diaeresis               :    :   (two colons)
  944. Division sign           -    :   (hyphen and colon)
  945. Dot above               .    .   (two periods)
  946. Double acute            #    #   (two number or pound signs)
  947. Multiplication sign     X    X   (or x x)
  948. Ogonek                  =    =   (two equal signs)
  949. Paragraph sign          S    !   (or S 0 or S O, upper or lower case)
  950. Soft hyphen             -    -   (two hyphens)
  951.  
  952. APPENDIX II: MS-DOS KERMIT AND PPP
  953.  
  954. Here is a brief description of how to set up and use MERIT's PPP driver
  955. PPP.EXE (available in the Crynwr Collection of Packet Drivers).  The
  956. documentation available for PPP.EXE is not very clear, hence this note.
  957.  
  958.   NOTE: We have not tested every variety and version of DOS PPP software.
  959.   The version discussed here is University of Michigan Merit Network PPP
  960.   1.9.49 Beta, which seems to work satisfactorily, and which can be obtained
  961.   with anonymous from kermit.columbia.edu, directory packet-drivers/ppp.
  962.   Other versions might be available from the master site:
  963.  
  964.     ftp://merit.edu/pub/ppp/pc/etherppp.zip
  965.  
  966.   We do not necessarily recommend any version besides the 1.9.49 one, which
  967.   has been tested successfully.
  968.  
  969. Note that the term "EtherPPP" is often used to refer to the Merit PPP driver,
  970. because that is the name of ZIP file in which is it is packaged.
  971.  
  972. First, install PPP on your PC.
  973.  
  974. Step 1: Download the SLIP files IN BINARY MODE to your PC's KERMIT
  975.         directory (wherever you keep MS-DOS Kermit).
  976.  
  977. Step 2: In AUTOEXEC.BAT or elsewhere add a line like the following, which
  978.         specifies the path of the Merit PPP configuration file, CONFIG.PPP.
  979.  
  980.           SET CONFIG.PPP=C:\PPP
  981.  
  982. Step 3: Edit the sample CONFIG.PPP file, which looks like this:
  983.  
  984.       ppp trace 0
  985.       ppp pap user myusername mypassword
  986.       ppp pap timeout 20
  987.       ppp quick
  988.       ppp lcp open
  989.  
  990.         Replace "myusername" and "mypassword" with your own PPP username and
  991.         password.
  992.  
  993. Step 4: Create a STARTPPP.BAT file in your KERMIT directory.
  994.  
  995. STARTPPP.BAT starts PPP.EXE and it contains one line that looks like this:
  996.  
  997. ppp /c 1 /s 57600 /d none /k 6 /v 1
  998.  
  999. When we run it MERIT's PPP driver starts up on the existing telphone
  1000. connection.  The parameters are as follows; replace them by parameters that
  1001. are appropriate to your setup:
  1002.  
  1003.   /d none
  1004.      No dialing by the driver; use the connection that's already there.
  1005.  
  1006.   /k 6
  1007.      Present a SLIP interface to the TCP/IP stack (rather than an Ethernet
  1008.      interface).  NOTE: "/k 6" is important.  The driver must be configured
  1009.      as a SLIP driver, not an Ethernet driver, or else the TCP/IP stack will
  1010.      falsely believe that it should be doing broadcasts such as ARP.
  1011.  
  1012.   /v 1       
  1013.      Be verbose (so you can see error messages)
  1014.  
  1015.   /c 1
  1016.      Use COM1.  Replace this by "/c 2" if you are using COM2, etc.
  1017.  
  1018.   /s 57600
  1019.      Set the speed of the given COM port to 57600 bps.  Replace this by
  1020.      the highest speed that can be used with your modem.
  1021.  
  1022. Once PPP is installed, you won't need to repeat the steps above.
  1023.  
  1024. Now to make a PPP connection, there are three major steps:
  1025.  
  1026.  1. Use Kermit to dial up your Internet Service Provider (ISP).
  1027.  2. Start PPP on the connection from Step 1.
  1028.  3. Have Kermit make TCP/IP connections over the PPP connection from Step 2.
  1029.  
  1030. Begin by using MS-DOS Kermit ot dial up the terminal server at your Internet
  1031. Service Provider and tell it who you are and what protocol you wish to use
  1032. over the line.  A Kermit script works well for this, but the example below is
  1033. typed by hand (MS-Kermit> is Kermit's prompt, you don't type it):
  1034.  
  1035.   MS-Kermit> set port 1
  1036.   MS-Kermit> set speed 57600
  1037.   MS-Kermit> set flow rts/cts
  1038.   MS-Kermit> connect
  1039.  
  1040. If you are using port 2 or other port, then specify that instead of port 1.
  1041. You can use other speeds too, but obviously the higher the better -- use the
  1042. highest one that works with your modem.  Use the same port and speed as you
  1043. have specified in STARTPPP.BAT.
  1044.  
  1045. Now make the phone call.  In this example we type "ATDT" followed by the phone
  1046. number, and then press the Enter key (of course there are also other ways to
  1047. make Kermit dial the phone, but all that is covered elsewhere):
  1048.  
  1049.   atdt73456
  1050.  
  1051. A few seconds later you should get back a message from the modem:
  1052.  
  1053.   CONNECT 57600/LAPM
  1054.  
  1055. If instead it says BUSY or NO CARRIER, etc, then try again later.
  1056.  
  1057. Now you should see a message from your ISP.  If you don't see anything, try
  1058. pressing the Enter key one or more times.  Here is an example showing the
  1059. dialog at Utah State University:
  1060.  
  1061.   Welcome to the USU modem pools.
  1062.  
  1063.   Enter: vms, library, telnet, or your PPP (or SLIP) username.
  1064.   nb1 login: jrd-ppp
  1065.   Password: xxxxxxx
  1066.  
  1067.   Enabled IPCP address negotiation for jrd-ppp-ppp
  1068.   Added interface jrd-ppp-ppp for IPX
  1069.   Packet mode enabled
  1070.   ~}#A!}!} } }8}!}$}%}"}&} } } } }%}&}$U}$}'}"}(}"3ó~
  1071.  
  1072. NOTE: Other service providers will have different dialogs.  Some services
  1073. are "PPP-only" and you will not get any kind of recognizable greeting or
  1074. prompt -- instead you will get either garbage (similar to the last line in
  1075. the example above), or nothing at all -- just a blank screen.  In that case,
  1076. there is no way to log in "by hand"; instead the user ID and password will
  1077. be sent by PPP.EXE itself (after you start it), from your CONFIG.PPP file.
  1078.  
  1079. Now return to the MS-Kermit> prompt by pressing ALT-x, and EXIT from
  1080. MS-DOS Kermit.
  1081.  
  1082. Now that the PPP connection is running on the remote side we need to perform
  1083. step two: start PPP on our client machine and tell Kermit the current IP
  1084. address.  After the driver finishes negotiating with the remote side it
  1085. displays the current IP number for us; we write it down and then tell Kermit
  1086. to use it.
  1087.  
  1088. Step 1: Start Kermit again.
  1089.  
  1090. Step 2: At the MS-Kermit> prompt, type "run startppp.bat" (and press Enter).
  1091.         You should see something like this:
  1092.  
  1093.   C>ppp /c 1 /s 57600 /d none /k 6 /v 1
  1094.   PPP: version 1.9.49 beta
  1095.   PPP command line parameters:
  1096.       --class=6 --int=0x60
  1097.       --com=1 --irq=4 --base=0x3F8
  1098.       --speed=57600 --hard=0 --fifo=1 --quit=0
  1099.       --dial='none'
  1100.   16650A detected
  1101.  
  1102.   IP address set to 129.123.246.5
  1103.  
  1104. Step 3: Now you see what your IP address is.  Tell Kermit what it is:
  1105.  
  1106.   MS-Kermit> set tcp add 129.123.246.5
  1107.  
  1108. Step 4: Now you can make a Telnet connection to any host on the Internet:
  1109.  
  1110.   MS-Kermit> set port tcp xyzcorp.com
  1111.   MS-Kermit> connect
  1112.  
  1113. When the session has completed the phone line might be disconnected by the
  1114. remote end.  If it isn't then you can make another Telnet connection, or you
  1115. can just exit from Kermit but in this case you should use the Packet Driver
  1116. support program TERMIN to terminate the connection.  After Kermit puts you
  1117. back at the DOS prompt, just type:
  1118.  
  1119.   termin 0x60
  1120.  
  1121. APPENDIX III: MEMORY MANAGEMENT
  1122.  
  1123.   (*** Reconcile this with section 19 of KERMIT.BWR ***)
  1124.  
  1125. MS-DOS Kermit can use large amounts of memory to store the terminal emulator
  1126. screen rollback buffer, Telnet session controls, and graphics mode screens.
  1127. Where these items are stored is up to you and thus you need to be aware of the
  1128. selection process.  There are three choices:
  1129.  
  1130.  1. Conventional memory (lower 640K).  Advantages: easy, no extra work
  1131.     needed, can work everywhere.  Disadvantages: Conventional memory is
  1132.     limited and precious; the amount of rollback screens is limited by
  1133.     available conventional memory; ability to run DOS commands or programs
  1134.     under Kermit is limited, etc.
  1135.  
  1136.  2. Expanded memory (EMS).  Any or all memory you might have installed
  1137.     beyond 1MB, accessed through a 64KB chunk (Upper Memory Blocks, UMB) in
  1138.     Conventional memory.  This is the fastest "extra-memory" option, but
  1139.     requires Requires a memory manager and configuration thereof by the
  1140.     user, which can be confusing and risky.  dedicating 64KB of conventional
  1141.     memory.
  1142.  
  1143.  3. Extended memory (XMS).  Any or all memory you might have installed
  1144.     beyond 1MB, accessed "directly".  Slower than EMS but does not require
  1145.     the 64K UMB in Conventional Memory.
  1146.  
  1147. OVERVIEW
  1148.  
  1149. If the computer is running just DOS (by itself) and has no memory management
  1150. facility loaded, then Kermit stores its large buffers in conventional memory
  1151. Today almost all PCs use some form of memory management software, including
  1152. that provided by Microsoft Windows 3.1, 95 and NT.  EMM386.EXE is a familiar
  1153. manager from Microsoft; QEMM/386 is one from Quarterdeck.  With a memory
  1154. manager Kermit can use memory above 1MB to hold these buffers.
  1155. Memory above 1MB is commonly either extended or expanded memory.
  1156.  
  1157. EXTENDED MEMORY
  1158.  
  1159. Extended is provided by memory managers but can be slower to access than
  1160. expanded memory (which can be deselected by the user).
  1161.  
  1162. EXPANDED MEMORY
  1163.  
  1164. Expanded memory is in two pieces, one large piece above 1MB and a 64KB piece
  1165. in Upper Memory Blocks (UMB, between 640KB and 1MB).  Expanded memory needs
  1166. to be controlled by the user.  For example, EMM386.EXE provides expanded
  1167. memory unless the phrase NOEMS is used on its command line.  Windows
  1168. provides both automatically.  QEMM provides expanded memory upon request
  1169. when configuring the machine; its "stealth" mode requires it.  Expanded
  1170. memory provides faster access than extended memory, but it costs that 64KB
  1171. area in UMB.
  1172.  
  1173. Placement of the expanded memory 64KB working area can be left to the memory
  1174. manager or more wisely it can be located by the user in a safe UMB location.
  1175. Please see the instructions of your memory manager about details of placement,
  1176. but the common control is phrase FRAME=d000 or similar keyword.  Do not
  1177. located it below C000 (video space) nor on an existing BIOS nor on shared
  1178. memory clients (often network adapters).  In the end configuring memory is a
  1179. responsiblity of the user.
  1180.  
  1181. MEMORY MANAGEMENT IN WINDOWS
  1182.  
  1183. (this needs to be filled in -- presumably users do not -- and most should
  1184. not -- mess with memory configuation in Windows, esp Win95 and NT -- and so
  1185. which kind of ex****ed memory do they get and what should they tell Kermit?)
  1186.  
  1187. MEMORY MANAGEMENT AND MS-DOS KERMIT
  1188.  
  1189. Kermit's choices of memory are decided by finding if a memory manager is
  1190. active.  If there is none then conventional memory is used.  With a memory
  1191. manager MS-DOS Kermit relies upon command SET TERMINAL EXPANDED-MEMORY
  1192. <setting> to make a selection.  We may review the choice by giving command
  1193. SHOW TERMINAL and viewing the setting of the EXPANDED-MEMORY line.
  1194.  
  1195. The SET TERMINAL EXPANDED-MEMORY command has four choices: OFF, EXPANDED,
  1196. EXTENDED, ON.  These correspond to use conventional memory, use expanded, use
  1197. extended, or ON to try first expanded and if not successful then use extended
  1198. memory.  The default is OFF, and a better choice for many people today is ON.
  1199. The choice may be changed at any time but existing buffers will be lost by the
  1200. change.
  1201.  
  1202. Please be aware that locating the largest buffer, the screen rollback area, in
  1203. conventional memory very quickly exhausts that memory.  Each screen consumes
  1204. about 4KB, so saving say 100 screens uses 400KB and that's not enough to let
  1205. Kermit use command.com for some commands.  The default number of saved screens
  1206. is 10, and the number can be changed by DOS Environment command SET
  1207. KERMIT=ROLL number-of-screens.
  1208.  
  1209. Our recommendation is use a memory manager and enable expanded or extended
  1210. memory usage by Kermit, by adding line
  1211.  
  1212.   SET TERMINAL EXPANDED-MEMORY ON
  1213.  
  1214. to your MSCUSTOM.INI file.
  1215.  
  1216. (End)
  1217.