File MSR310.DOC    A list of items new to MS-DOS Kermit v3.10     2 March 1991

FILE TRANSFER CHANGES

1.  New command REMOTE PRINT <filespec> <optional-printer-parameters>.  This
    is taken from the Kermit book and means send the local file to the remote
    Kermit's printer with optional printer parameters (spaces permitted).
    The remote Kermit can be in server mode or receive mode.  The command is
    now supported on MS-DOS Kermit servers by receiving the file(s) to DOS
    filename PRN; optional parameters are ignored.  The ENABLE and DISABLE
    commands now have PRINT as a new option.

2.  Follow the lead of C-Kermit 5A and attempt simple correction of Parity on
    the communications line during packet transfers.  Parity will be shifted
    to EVEN, ODD, or MARK by the detector, in addition to the older warning
    about removing the high bit on characters. The first four packet
    characters determine the parity.  Any change becomes permanent.  SPACE
    parity cannot be distinguished from NONE, and so 8-bit data when
    transferred over a 7-bit SPACE parity connection will result in fatal
    checksum errors.

3.  Add two new commands:

        SET SEND DOUBLE-CHAR <number between 0 and 255>

    which sends this character twice in a row in outgoing packets.  The
    doubling occurs as packet bytes are being sent to the communications
    channel and hence does not occur during packet construction.  This
    accommodates communications devices which need doubling to let through a
    single copy.  The doubling does not appear in the packet log.  Padding
    characters are not affected by this command since padding is to be
    discarded at the other end anyway.

        SET RECEIVE IGNORE-CHAR <number between 0 and 255>

    which ignores this character in received packets.  This accommodates
    communications devices which may insert a character into a stream, such
    as a Line Feed inserted before a Carriage Return, or after every "n"
    characters.  The ignored character will not appear in the packet log.
    Note that NUL (0) and DEL (127) are normally ignored even without this
    command.

4.  Add alternative command syntax: SET FILE COLLISION means the same as
    older SET FILE WARNING and SET FILE COLLISION DISCARD is the same as SET
    FILE COLLISION NO-SUPERSEDE.

5.  Add command REMOTE SET FILE COLLISION UPDATE, meaning the file receiver
    on the other side should process incoming files with conflicting names as
    "updates" (whose meaning is system dependent) to existing files with the
    same names.  The MS-DOS Kermit server does not recognize the command.

6.  Accommodate the Cyrillic character set of Code Page 866 ("Alternative
    Cyrillic") as much as possible.  The command SET TRANSFER CHARACTER-SET
    has the new option CYRILLIC (ISO 8859-5, the Latin/Cyrillic Alphabet), and
    if selected will force the FILE CHARACTER-SET to be CP866.  Similarly, if
    the FILE CHARACTER-SET is selected to be the new option CP866 then it will
    force the TRANSFER CHARACTER-SET to be CYRILLIC.  Warnings are issued for
    both cases.

    When sending a text file with TRANSFER CHARACTER-SET CYRILLIC the file
    attributes packet will send "I6/144" for the file character-set
    identification (the "C" attribute) and translation will be done between
    ISO 8859-5 on the wire and CP866 (Alternative Cyrillic) in the machine.

    The reason for the coupling of commands is that CP866 has many Cryillic
    characters in the right (high bit set) section which have no equivalents
    in other Kermit character sets and regular Code Pages.  Hence, when CP866
    or CYRILLIC is selected there can be no translation of characters between
    CP866 and either the other (Western European) Code Pages or the LATIN1
    character set.

    If a file arrives with an attributes packet indicating a Cyrillic transfer
    character set but the local machine is not adjusted for CP866 then CP866
    is forced for this file. The active Code Page indictor reverts to the
    real Code Page value after the file transfer has completed successfully
    or not.

    For terminal emulation SET TERMINAL CHARACTER-SET TRANSPARENT will prevent
    unwanted translations and also convert the C1 controls area into printable
    characters found in CP866.  If the host uses Alternative Cyrillic as a
    terminal character set and the PC has CP866 as its active code page, all
    will work correctly.  If the host uses some other Cyrillic character set,
    MS-DOS Kermit can translate it into CP866 if it is given the appropriate
    set of SET TRANSLATE INPUT commands.

7.  Modify the action of the BYE and LOGOUT commands from an MS-DOS Kermit
    client.  Previously these would complete successfully whether or not the
    server host sent an Error packet.  A Kermit server can send an Error
    packet response if BYE has been Disabled or if it doesn't understand the
    BYE command.  To keep things rational MS-DOS Kermit now stays active if
    an Error packet is received for these commands.  Script writers may want
    to issue an extra command to EXIT Kermit regardless.  An MS-DOS Kermit
    server returns an ACK with a message that the command is disabled, it
    logs out the user, it hangs up the connection. If BYE is disabled the
    server waits for another customer, if it is enabled the serving Kermit
    exits to DOS.

8.  On the formatted file transfer screen add " of n" to the Window slots
    line, where n is the maximum number negotiated between Kermits.

9.  Add more flexibility to the REMOTE LOGIN <username password account>
    command so it can be stated on one line, particularly for Take files, and
    yet retain the ability to use embedded spaces in all three fields.  To
    use embedded spaces, surround the quantity with curly braces, {..}. An
    example is a username of "my name" and a password of "no show":

        REM LOGIN {my name} {my spaced password}

    The account name is omitted in this example.  Kermit will prompt for the
    items only if nothing is specified after the word LOGIN.

10. During file transfers pressing either Control-Q or just Q sends an XON
    code to the other side, regardless of our flow control setting. This
    is to manually free a host blocked by a stray XOFF. File msscom.asm

SCRIPT, MACRO, TAKE FILE CHANGES

1.  In the command WAIT <timeout> \CD \CTS \DSR, let the backslash character
    be optional, to merge syntax with C-Kermit 5A.

2.  Slightly revise script INPUT and REINPUT command sensing of timeouts by
    examining elapsed time after, rather than before, reading each serial port
    character. This might cure complaints of REINPUT 0 reporting premature
    FAIL status.

3.  Significant change to \%n variables defined as macro arguments.  For each
    macro invocation first save variables \%0 through \%9, clear \%0..\%9,
    then define \%0 to be the name of the macro being invoked and \%1..\%9 as
    the arguments to the macro.  When the macro exits restore the previous
    \%0..\%9 variables.

    This process nests naturally, and ARGC still represents one plus the
    number of macro arguments.  C-Kermit 5A and MS-DOS Kermit 3.10 are now in
    agreement on these items.  Previously \%0 was not affected by macro
    invocation and \%1..\%9 were not saved and restored around the macro.
    The new behavior may affect scripts written in the past.

    TAKE commands do not create a new set of \%<digit> variables.

    For example,

        MS-Kermit> DEFINE xxx Set term VT302,take x.tak,connect
        MS-Kermit> xxx A B C
        where file x.tak holds
                echo \%0 \%1 \%2 \%3

        This displays "XXX A B C" and then enters Connect mode as a VT320
        terminal.

    Some basic concepts:

    - Intrinsic (built-in) commands do not affect the \%0..\%9 variables,
      but user-created commands (macros) do create a private version of
      \%0..\%9.  TAKE is an intrinsic command.

    - To be a command, the keyword -- intrinsic or macro -- must be the first
      word at the Kermit prompt.  Commas in macros start a fresh command line
      even though the Kermit prompt is usually not displayed on the screen
      while within a macro.

      Thus in the definition below of macro "test":

        DEFINE test echo \%0 \%1,mywords,echo test mywords \%1

      there are three commands (they start at the effective Kermit prompt):

        echo TEST <first argument><carriage return>

        mywords<carriage return>  (whatever the macro "mywords" is defined as)

        echo test mywords <first argument to test><carriage return>

      The argument to this last ECHO command is the simple text "test mywords"
      plus the first argument to "test".  In the text neither test nor mywords 
      is replaced by its definition, and ECHO is an intrinsic command.

    - String substitution variables, \%<character> and \v(variable), are
      always immediately replaced by their definition string no matter where
      they are used outside of a DEFINE command.

    - ASSIGN is similar to DEFINE except that whereas DEFINE uses the
      definition text as a literal string ASSIGN first evaluates the text,
      i.e. it replaces \%<character> and \v(variable) items with their string,
      at the time the ASSIGN statement is executed.

    - Curly braces, {..}, may be used to group items into a single quantity.
      When they appear as part of a macro then as the macro is executed (DO)
      the top level braces are first removed and any commas outside of braces
      are changed to carriage return command terminators.  Many commands, such
      as ECHO, remove the top level braces before displaying a string.
      Commands requiring a word answer can employ braces to retain spaces as
      part of the word.

4.  Add a new element to command line variables, taken from C-Kermit 5A.
    Variables ARGC, COUNT, DATE, NDATE, DIRECTORY, ERRORLEVEL, KEYBOARD,
    PLATFORM, PROGRAM, SPEED, SYSTEM, STATUS, TIME, and VERSION can now be
    used in any context by employing a new notation for built-in variables:

        \v(variable)

    where "variable" is one of the words listed above.  A built-in variable,
    no matter where it occurs, is replaced by a text string representing its
    value.

    PLATFORM returns the machine name, such as IBM-PC, and SYSTEM returns
    the operating system name, MS-DOS, for MS-DOS Kermit.  PROGRAM returns
    MS-DOS_KERMIT.

    Examples:
        WRITE session \v(platform) has a \v(keyboard) key keyboard.

    writes to the session log the phrase "IBM-PC has a 101 key keyboard."

        ECHO The version number of this program is \v(version) today.
    displays:
        The version number of this program is 302 today.

    And DEFINE See ECHO \%0 - the arg is \v(\%1) here.
        See argc
    which displays
        SEE - the arg is 2 here.
        See version
    which displays
        SEE - the arg is 302 here.
 
    The expression \v(variable) is replaced by its ascii value.  This may be
    used in any command.  The current syntax of  IF = ARGC 2 ... is retained
    for compatibility purposes but in new scripts it should be replaced by
    IF = \v(argc) 2, etc.

    If the item within the parentheses is not one of the above variables, or
    a variable whose value evaluates to the name of a built-in variable, or
    a right parenthesis does not end the variable name, then the entire
    expression from \v( to the current point is discarded. Abbreviation of
    a \v(..) variable name is permitted. Examples of bad syntax: 
        ECHO testing \v(versions) stuff
    or
        ECHO testing \v(version stuff
    both of which display
        testing stuff

    Variable NDATE reports the date with all digits as YYYYMMDD for easier
    testing in scripts than DATE which reports in country dependent forms of
    MM-DD-YYYY, DD-MM-YYYY, or YYYY:MM:DD.  Variable STATUS reports the value
    of the Kermit internal status word; 0 is success, any other numeric is a
    failure. Most Kermit commands clear this word result before execution.
    The current values are listed below; "user intervention" may be added to
    other values.

     	Condition	     Status	Comment
	success			0	initial value for most commands
	send failure		1	includes OUTPUT and TRANSMIT commands
	receive failure		2	includes INPUT command timeout
	remote cmd failure	4	REMOTE command failed for any reason
	Take file failure	8	Take file not found
	general failure	       16	many causes
	user intervention     128	usually by typing Control-C

    Variable KEYBOARD is 88, 101, or 250, describing the number of keys on
    the keyboard so that Take files can be tailored to fit either 88
    (so-called Old AT) or 101 (so-called Enhanced) keyboards.  The
    determination of 88 or 101 is made at Kermit startup.  The IBM PC version
    also permits the value 250 if the LK250 keyboard is selected (SET KEY
    LK250) and external driver is present for the Digital keyboard.

    "?" help and <ESC> word completion is permitted with these items.

5.  Add command SHOW VARIABLES [\v(]name[)] which displays the strings
    associated with variables of the form \v(variable-name). Leading "\v("
    and trailing ")" may be omitted. SHOW VARIABLE with no argument shows
    all variables; abbreviations are allowed and show all matches.

6.  Add a feature suggested by John Klensin and Frank da Cruz, from C Kermit.
    New substitution variable notation \$(item)  means replace  \$(item)  by
    the string on the right hand side of the line starting as ITEM= in the
    DOS Environment. Any word may be used for ITEM. The replacement will be
    empty if either the string or the item is absent in the Environment.
    Leading and trailing spaces and tabs are removed from the string.
    Examples:
    	Echo \$(path)
    shows the string which occurs after "PATH=" in the Environment, such
    as C:\;C:\WP;C:\DOS.

    IF eq \$(video) CGA echo Upgrade to VGA 
    will show the string "Upgrade to VGA" if someone has provided the line
    VIDEO=CGA  in the Environment, perhaps by typing SET VIDEO=CGA or
    written there by a program.

    ASSIGN \%p \$(path)
    gives variable \%p the definition of the right hand side of PATH=.
    
    Semicolons occurring in \$(..) replacement strings will be treated as
    ordinary characters and will not start a comment. Comments starting
    with a semicolon are now restricted to ordinary Macros and Take files.

7.  Add two tests to the script IF statement. These are lexical comparisons
    between two words. The curly brace {..} operators are not usable here.

    IF LLT word1 word2 <command>
    	executes <command> if word1 has	fewer characters (after
    	removing leading spaces) than word2, or if at the first
    	character where the words differ word1 has a character
    	occurring earlier (less than) in the ascii collating sequence
    	than that in word 2.

    IF LGT word1 word2 <command>
    	opposite of above, for word1 longer than word2 or the first
    	differing character in word1 occurs later (greater than) that
    	in word2 in the ascii collating sequence.

    Combining these with IF EQUAL and the NOT modifier yields all logical
    comparison conditions, as shown in the table below. Case sensitivity
    of the tests is controlled by SET INPUT CASE {IGNORE, OBSERVE}, with
    IGNORE being the default; when case is observed uppercase letters are
    "less than" lower case letters.

    	Lexical Test		Kermit IF statement
       word1 =  word2		IF EQUAL word1 word2 ...
       word1 != word2		IF NOT EQUAL word1 word2 ...
       word1 <  word2		IF LLT word1 word2 ...
       word1 >  word2		IF LGT word1 word2 ...
       word1 => word2		IF NOT LLT word1 word2 ...
       word1 <= word2		IF NOT LGT word1 word2 ...

8.  Modify the action of pressing the Enter key while a script INPUT command
    is in progress.  Previously it meant "assume a match has occurred" so the
    script could progress.  Now it means "assume a timeout has occurred" and
    report a failure status.  People seem to prefer the latter approach.

9.  Add screen-clear command CLS to clear the screen at Kermit command
    level, especially for Take files and macros (Control-L does it by hand).

10. Add synomym
     	SET FILE DISPLAY {QUIET, REGULAR, SERIAL}
     meaning the same as SET DISPLAY {QUIET, REGULAR, SERIAL}.

TEXT TERMINAL EMULATION CHANGES

1.  Add command SET TERMINAL WIDTH {80, 132} to attempt to manually set the
    screen width in text terminal emulation mode.  Previously this could be
    done only by host commands CSI ? 3 h/l, etc, or outside of Kermit before
    startup.  The main STATUS display was revised slightly to accomodate
    showing the current screen width setting.  Screen width changes occur
    when the text terminal emulator resumes operation and utilize the same
    methods as if the host had issued the command: direct control of the
    display boards known to Kermit (listed below) or invoking files
    COLS80.BAT or COLS132.BAT if Kermit does not support the the display
    board directly.  The COLSxxx.BAT files should contain whatever DOS
    commands you normally use (e.g. MODE) to put your screen in 80 and 132
    column mode, respectively.

2.  Add recognition of IBM PC video boards STB VGA/EM Plus (Tseng 4000) and
    Everex Viewpoint EV-678 from Terry Kennedy, IBM XGA from Bert Tyler,
    Paradise Autoswitch from David Zielke of Duke University, and ATI VGA
    Wonder from Steve Wood.  The list of boards known to Kermit for switching
    between 80 and 132 columns is now:

        ATI EGA Wonder and VGA Wonder
        AT&T
        Everex Viewpoint EV-659, FVGA-673, EV-678, Micro Enhancer Deluxe
        IBM XGA
        Paradise AutoSwitch EGA Mono
        STB VGA/EM (Tseng TVGA)
        STB VGA/EM Plus (Tseng 4000), VGA/EM-16, VGA/EM-16 Plus
        Tseng Labs EVA board w/132-col kit installed
        Tseng Labs UltraPAK mono/Hercules with 132 column modes
        Video 7 VGA and Vega Deluxe with the 132X25.COM driver installed

3.  Add the following VT340 control sequence, DECSCPP, to change screen width:

        CSI Pn $ |              set columns per page (screen width)
                Pn              width
                0 or 80         80 columns
                132             132 columns

    In Kermit Pn values greater than 80 yield 132 columns, else 80 columns.
    This is equivalent to CSI ? 3 h/l (h for 132 columns, l for 80 columns).

4.  New option to the SET TERMINAL command:

        SET TERMINAL ARROW-KEYS {CURSOR, APPLICATION}

    It is worth remembering that Applications mode is supposed to be invoked
    by the host and not by the terminal user.  So, please do not make a host
    program dependent on Applications mode responses from the terminal unless
    it also invokes that mode; otherwise real terminals will not function.

5.  SET TERMINAL BELL {AUDIBLE, VISUAL, NONE} has the new option of NONE
    to simply ignore arriving Control-G characters. Peace & Quiet.

6.  Revise REPLAY filespec a little.  Previously at the end of the file any
    key would exit Connect mode.  Now all keys remain active so that screen
    dumping, screen rollback can function.  Alt-X and Control-C (emergency
    bailout) exit Connect mode.

7.  Extend the SET TERMINAL CHARACTER-SET command. After the character set
    one may optionally add phrases G0 G1 G2 G3. The meaning of these trailing
    character set storage areas is to attempt forcing the named set into the
    areas without reinitializing the overall character setup in place.
    Omitting these trailers invokes the normal character setup method.  G0
    may hold only 94 byte character sets.

    Examples:
        set term char latin1      puts Latin1 into G2 and G3
                                    and ASCII into G0 and G1
        set term char latin1 G1   puts Latin1 into G1, rest unchanged
        set term char Italian G3  puts Italian NRC into G3, rest unchanged

8.  Embellish the VT300 character set abilities by permitting National
    Replacement Character (NRC) sets to be "designated" by the host to a
    particular Gn set table, viz:

    Designator       Mnemonic       Description of Action
    ESC ( <ident>       SCS     Designates 94 byte character set <ident> to G0
    ESC ) <ident>       SCS     Designates 94 byte character set <ident> to G1
    ESC * <ident>       SCS     Designates 94 byte character set <ident> to G2
    ESC + <ident>       SCS     Designates 94 byte character set <ident> to G3

    where <ident> is:
        NRC country  <ident>            NRC country  <ident>
        British         A               Italian         Y
        Dutch           4               Norwegian/Danish ` (hex 60) or E or 6
        Finnish         5 or C          Portuguese      %6
        French          R               Spanish         Z
        French Canadian 9 or Q          Swedish         7 or H
        German          K               Swiss           =

    Example: ESC ) A  loads the British NRC set (A) into G1 (the ")" part).
    To load Latin1 into G1 use  ESC - A  because Latin1 is a 96-character set.
    NRCs are all 94 character sets (see ISO Standard 2022 for further
    elucidation).

    This embellishment does NOT turn on NRC operation in the Digital
    Equipment Corporation sense.  To follow DEC usage employ SET TERM
    CHARACTER-SET to choose the country and have the host enable or disable
    NRCs by sending CSI ? 42 h or CSI ? 42 l, respectively.

9.  Enhanced the command SET KEY {key-ident, OFF, ON, LK} to include the new
    option LK.  If stated LK means seek the matching DEC LK250 keyboard
    driver (external to Kermit) and use Bios key inputs; otherwise do not
    seek that driver.  It seems that a few PCs object to the legal driver
    sensing operation, so now the driver is ignored unless explicitly
    requested.

10. Add terminal type of VT100.  This performs identically to a VT102 except
    the response to the type inquiry from a host is ESC [ ? 1 c (a VT100).

11. Add terminal type of HONEYWELL to the emulator.  This is a VT100 with
    two special responses.  A received ENQ character, decimal 5, causes the
    emulator to send the 14 characters

        '7813  P GC  A' 03h

    and receipt of  ESC [ y  causes the emulator to send the 27 characters

        ESC '[8p  OT' 03h ESC '[y7813  P GC  A ' 03h

    where the quote marks (') above are not sent but are present so we can
    see the spaces which are sent; other spaces are for reading convenience.
    03h is Control-C, a binary value 3.  The terminal ident response is VT100.

        ESC `  (accent grave) clears screen and homes the cursor.

    These Honeywell VIP7809 emulation features are from Frank Dreano,
    dreano@trout.nosc.mil.

12. Add another host invocation control sequence to the text terminal
    emulator.  Reception of CSI Pn;...Pn ~ invokes a macro named PRODUCT, if
    it exists, and sets variables \%1, \%2, and so forth up to \%9 to be the
    ascii version of the numeric parameters Pn above.  Omitted parameters are
    taken to be zeros.  Only as many variables are set as numeric parameters,
    and script items ARGC and \v(argc) are one larger than this quantity.  If
    a macro called PRODUCT is not defined only the \%x items are changed.
    Connect mode is not reentered automatically if the macro exists.  This is
    very similar to TERMINALR and TERMINALS, except for the variable setting
    part.

    The PRODUCT macro is not invocable via key definition because of the
    needed parameters.  The idea behind PRODUCT is to permit a general macro
    which can test the parameters sent by the host and take local actions as
    necessary.

    The PRODUCT macro is intended as a systematic and standardized method for
    software developers to signal vendor-specific requests to a terminal
    emulator.  For example, the first two arguments could be a vendor code,
    the next two product-specific identification, and others could be
    information particular to that product. The leading identification part
    is to let the terminal emulator select one of several different routines
    (Kermit Take files or Macros).  Assignment of fields has not been fixed.

13. Modify the strategy for DEC Autoprint, CSI ? 5 (and 4) i  from printing
    each character as it arrives to printing display lines only as the cursor
    is moved off it by an autowrap or LF, FF, or VT (otherwise do not print
    the line).  Thanks to Michael Wolter for pointing out the problem.

14. Preserve the state of VTxxx terminal emulator printing around processing
    of DEC Set Conformance Level commands, e.g. CSI 63; 1 " p.  Tnx to Michael
    Wolter and John E. Davis.

15. Make a small change to the Self Test code, DECTST, CSI 2 ; Ps y (VT100)
    and CSI 4 ; Ps...; Ps y (VT320).  Do a terminal reset only if a Ps is 0 or
    1.  This is in the VT terminal emulator.  Ps values greater than 1 are for
    testing the terminal serial port, printer, and repeating the tests; they
    are ignored here. All cases move the cursor back to the main display.

15. Add synomyms
	SET TERMINAL DISPLAY {7-bit | 8-bit}
	SET TERMINAL BYTESIZE {7-bit | 8-bit}
     meaning the same as SET DISPLAY {7-bit | 8-bit}.

16. Add command  SET PRINTER filespec  to allow changing the destination of
    printer output while in Connect mode. Filespec defaults to PRN, DOS's
    name for the first printer. This facility can help capture text from
    the screen after character set translation and free of cursor steering
    commands and the like if SET PRINTER filename is stated and then in 
    Connect mode one toggles on local printing (keyboard verb \Kprtscn, tied
    to Control-PrtScn keys). XON/XOFF flow control, if available, is used
    around this "printer" output.

GRAPHICS TERMINAL EMULATION CHANGES

1.  Make the GIN mode crosshairs be full screen, by popular demand.  Revise
    BYPASS mode details to discard all terminal input from the host while
    Bypass mode is active, and to turn off Bypass when Kermit sends a control
    code.  Bypass mode is turned on when the host sends ESC ^X (enter Bypass
    mode) or ESC ^E (send status) or ESC ^Z (enter GIN crosshair mode).

2.  Modify the way characters are placed on Tektronix graphics screens from
    starting them at intervals of 8 PC screen dots across the screen to
    placing the lower left at the current drawing position (1 dot
    resolution).  Characters are 8x8 dots. The effect is better positioning
    accuracy along the x-axis; the y-axis already behaved the better way.

3.  Adjust Tektronix emulator slightly so that SET TERM CLEAR-SCREEN does a
    screen clear, using the existing character coloring to write all spaces,
    rather than doing a full reinitialization of the emulator. The text
    emulator is not affected.  Since ESC [ 30's; 40's m screen coloring
    command sets the fore and background color palette registers (7 and 0,
    resp) a screen clear manually or by receipt of ESC [ 2 J will use this
    palette.  A terminal reset restores the built-in default palette.

4.  Add internal support of Microsoft compatible mouse for Tektronix GIN mode
    crosshairs.  Both the regular cursor keys and the mouse can function
    together.  Pressing either mouse button is the same as pressing the Enter
    key.  The mouse driver must be active for Kermit to use it (include the
    line DEVICE=path\MOUSE.SYS in your CONFIG.SYS file for permanent
    residency, or give the DOS command MOUSE ON for temporary residency of
    the Microsoft mouse driver).  This addition suspends any active mouse
    menu programs such as DEFAULT.COM during Tektronix emulation, but they
    continue to run otherwise.  MS-DOS Kermit uses standard Interrupt 33h
    Microsoft mouse calls.

5.  Add command SET TERMINAL GRAPHICS CURSOR {ON, OFF}, default is ON.  This
    permits one to turn off the text cursor while in graphics (Tek) mode.
    The cursor is suppressed around almost all drawing and Sixel commands.

    The new text cursor symbol in Tektronix graphics mode is an 8x8 dot hollow
    box so we can see where we are.  The box is removed temporarily while
    generating a TIFF format screen dump (default keys Control-End).

6.  Add command SET TERMINAL GRAPHICS COLOR <color values> which is analogous
    to the text mode command SET TERM COLOR and uses the same color values.
    Two technical notes: the background color cannot be given bold
    attributes, and the colors are stored in DEC VT340 color palette slots 0
    (background) and 7 (foreground).

    Be wary of two side effects of colored graphics screens: most Print Screen
    programs will put a black dot on the printer paper if a dot is illuminated
    at all, and Sixel graphics normally add (OR) to the exiting dot coloring
    and hence the coloring may not be what was intended.  Resetting the 
    emulator restores the colors specified by these SET TERMINAL commands.

7.  Include additional Tek submode entry and exit commands of:
        ESC 1   enter Tek submode from text emulator and clear Tek screen;
                ignored if Tek mode is disabled.
        ESC 2   exit Tek submode from text emulator;
                ignored if acting as a full Tek terminal (SET TERM TEK).


KEYBOARD TRANSLATOR CHANGES (TERMINAL EMULATION)

1.  Add a facility to the keyboard translator.  Let key definition strings of
    the form {\Kverb other material} activate an existing macro or keyboard
    verb, or a succession of them.  If "verb" matches the name of a regular
    Kermit macro, execute the macro and stay on the Kermit command line; thus
    a CONNECT command is needed to return to Connect mode.  If the verb does
    not match either a macro name or an existing keyboard verb then do nothing
    and stay in Connect mode.  Be aware that searching tables for the name of
    the verb uses many cpu cycles and will reduce performance.
    Examples:

		SET KEY \316 {\{kmodeline}\{kdnarr}\{kdnarr}}

       Pressing the IBM PC "F2" key (code \316) toggles the modeline and then
       sends two down arrow sequences to the host. Notice the need to place
       curly braces around each "kverb" phrase to separate them properly.

                DEFINE Accumlate Receive, Connect
                SET KEY \315 {\Kaccmulate}

        Pressing the IBM PC "F1" key (code \315 above) makes the keyboard
        translator see string {\Kaccumlate}, verb "accumlate" is not in the
        predefined tables, and hence Kermit invokes the Macro named ACCMULATE.
        That Macro puts Kermit into file receive mode and when the file, or
        file group, transfer has been completed it returns to Connect mode.

                DEFINE WP Take wp30.ini, Connect
                SET KEY \316 {\Kwp}

        This makes IBM PC key "F2" invoke macro WP which in turn reads in
        and executes the contents of file WP30.INI. Kermit then returns to
        Connect mode. Nothing happens if the user has not defined Macro WP.

    Braces around the whole key definition are required so that the search
    for the verb name is done while executing in Connect mode rather than
    when defining the key. If the braces are omitted then only the predefined
    keyboard verbs are available; an error is reported if the verb is not one
    of these.

    Text sent to the host may precede and follow the \Kverb part. To avoid
    confusion "Kverb" itself, but not the "\", may be placed in braces too,
    such as:

        DEFINE Accumulate cd c:\junkmail,Receive,Connect
        SET KEY \315 {kermit\13\send foo.bar\13\{KAccumulate}exit\13}
        the pieces:   |_______________________||............||_____|
                          string to host          do Macro    string to host

    This sends the string "Kermit<carriage return>Send foo.bar<carriage ret>"
    to the host to invoke its Kermit and asks it to send file foo.bar.  It
    then invokes local Macro Accumulate to receive the file, and finally it
    sends the string "exit<carriage return>" to the host.  Braces around
    KAccumlate delimit it from the final string text.

    There is no host command which can invoke these macros; this protects the
    PC against stray garbage text and unauthorized commands from the host.

2.  Ensure that during terminal emulation, outgoing bytes of values greater
    than 9fh are not converted into 7-bit control form (ESC letter) under any
    circumstance.  Only bytes in the C1 control code area may be converted.

3.  Add DESQview support call to release the cpu timeslice when in Connect
    mode and no character is available from the serial port.


COMMUNICATIONS / SERIAL PORT CHANGES

1.  SET FLOW has a new option, RTS/CTS, for controlling sending and receiving
    of characters at the hardware level.  It is effective only for COM1..COM4
    (real UARTs); selecting SET FLOW RTS/CTS for other communications ports
    is the same as SET FLOW NONE.  It is effective only when SET DUPLEX is
    FULL, which is the default.  It works by lowering the modem status signal
    RTS when we wish to stop the host from sending characters to us, and the
    host can ask us to stop sending by lowering modem status signal CTS.

    As in the case of XON/XOFF, Kermit prevents a deadlock of being
    permanently held in the stopped state.  The algorithm is to wait for as
    long 10 seconds when a character needs to be sent and if Kermit is still
    being held it will ignore the hold, sound a beep in the PC's speaker,
    then send the character anyway.

2.  SET DUPLEX HALF has been modified very slightly to send the output
    character as above when blocked for too long.  Previously it would beep
    and discard the character.  Please notice that Half Duplex operation uses
    RTS and CTS differently than it is used in Full Duplex flow control.  The
    classical Half Duplex situation is the sender asserts RTS when it wishes
    to transmit and awaits permission via CTS being asserted by the modem.
    The sender unasserts RTS when it is finished sending and resumes
    listening.  Flow Control and Half Duplex should not be used together,
    but Kermit does not prevent one from trying it.

3.  The port address of serial ports COM1 through COM4 may now be given to
    Kermit as overrides (or, for COM3 and COM4, to activate them).  There are
    two ways:

    First, there are the new Kermit commands SET COMn value, such as:
        SET COM3 value
    "Value" is the port address, such as \x02f8 for COM3; notice the optional
    use of a hexadecimal number here.

    The second way is to use the DOS Environment line starting with KERMIT= to
    hold the phrase "COM3 value;" or "COM4 value;" (without the "" marks).
    Please double check the value to avoid systems conflicts (especially with
    disk drives).
    
    The IRQ value for COMx ports must still be 4 or 3, IRQ 4 for COM1 and COM3.
    It is permissable to have two serial ports sharing the same IRQ line,
    provided only one is active at a time. Kermit does testing to discover
    which IRQ, 4 or 3, is used by the selected serial port.

    The current list of commands recognized from the DOS Environment lines
    starting with KERMIT=  or  KERMIT0=  or  KERMIT1= etc are:
        COM1 value                      value is port address (no default)
        COM2 value                      value is port address (no default)
        COM3 value                      value is port address (no default)
        COM4 value                      value is port address (no default)
        ROLLBACK value                  value is number of screens (def 10)
        INPUT-BUFFER-LENGTH value       value is number of bytes (def 128)
                                        of the script INPUT command buffer
   These Environment lines are constructed with the DOS command SET, such as:

        C> SET KERMIT=ROLLBACK 35;COM3 \x02f8;INPUT 256;

   Upper and lower case are equivalent here.

4.  Modify the retry procedure to send a packet character to wait 60ms rather
    than 10ms between each of five attempts. This may help situations where
    a network device may be unresponsive for about 200ms between characters.

5.  Internal revisions to details of handling 75/1200 bps split speeds.
    Previously, filling the receiver buffer would cause an XOFF to be sent at
    1200 baud rather than at the correct 75 baud.  Now the XOFF character is
    sent at 75.  Thanks to Dan Norstedt for providing the split-speed code.


COMMUNICATIONS / NETWORKING CHANGES

1.  Incorporate support for Novell's TELAPI TCP/IP Telnet program. This
    is selected by command:

                SET PORT TELAPI nnn.nnn.nnn.nnn

    where nnn.nnn.nnn.nnn is the Internet address of the remote host, in
    decimal.

        Example: SET PORT TELAPI 129.123.1.11   (machine netlab.usu.edu)

    TELAPI is a component of the Novell package LAN WorkPlace for DOS.  At
    Utah State University it was run with the Novell (ex-Excelan) EXOS 205T
    Ethernet board (a smart multiprotocol board supporting TCP and NetWare
    IPX packets).  Novell Utility TSU.EXE is not required but may be used
    together with command SET PORT BIOS1.

    SET PORT TELAPI must not be confused with SET PORT NOVELL(NASI); they
    use very different communications methods.

    Notes on this new faciity:

     a) Hosts not on the local network will likely require their
        Internet address and the local gateway to be specified with utility
        ROUTE, such as:

                ROUTE ADD 128.59.39.2 129.123.1.254

        The first address is watsun.cc.columbia.edu, in New York City,
        and the second is that of a local gateway box (a cisco Inc router
        at Utah State University in Logan, Utah).

     b) The communications channel is opened in 8-bit-wide BINARY
        character-at-a-time mode, thus Unix hosts may require Line Feed
        (Control-J) as a line terminator.

     c) Included in this work is sending a BREAK signal as a Telnet
        "Interrupt Process" command.

     d) A status message is shown for 3 seconds if the connection cannot
        be established.

     e) Once an Internet number has been specified with SET PORT TELAPI it
        will be retained for subsequent SET PORT TELAPI commands.  Thus it
        need be stated only once.  SHOW COMMUNICATIONS will display the 
        number.

     f) The presence of the host can be checked by sending the two bytes
        \255\246, which is Telnet signal "Are You There?" (AYT), and to which
        the host is supposed to send back a bell or visible message.  This
        can be arranged easily by command SET KEY <key's ident here> \255\246
        if SET TRANSLATION KEYBOARD OFF is selected.  MS-DOS Kermit packets
        encode \255 value in other terms and thus AYT will not be invoked by
        packet data.  Character \255 is special in Telnet; it introduces
        Options negotiation.  To send \255 as data during terminal emulation
        and scripts (i.e., outside MS-DOS Kermit packets) it must be sent
        twice, as \255\255.  See TCP/IP documents RFC-854 and RFC-855 for
        Telnet specifications.
 
     g) TELAPI version 3.5 sometimes has trouble hanging up a connection.  It
        will attempt creating a new one for each new session and can exhaust
        its space (defaults to two of them) when an old one persists.  The
        only cure I know is to unload the TELAPI TSR (DOS command TELAPI -u)
        or reboot the machine.

     h) TELAPI uses Interrupt 14h with high numbered function calls.  Beware
        of using other Int 14h trapping programs simultaneously.

     i) Kermit uses only the Internet number form of addressing for TELAPI
        because the TCP "name resolver" (conversion of a name to a number)
        is not available directly with TELAPI.  Thus, full compliance with
        TCP/IP specs is not available to Kermit or other external terminal
        emulators using the TELAPI interface.  The full specs recommend using
        names and letting a separate group of machines, called Name Servers,
        provide the Internet number via TCP/IP methods.

2.  Add communications enhancement to using the Int 14h serial port
    interceptor TES from Interconnections Inc (distributed with Novell
    NetWare for VMS). The new command:

        SET PORT TES <optional host name>

    invokes TES and make a connection to the indicated host.  This competes
    with SET PORT BIOSn because they use some common operations. That is,
    either SET PORT TES or SET PORT BIOSn should not be used while the other
    is still active.

    <optional host name>        Action
        host-name       Connect to that host, and disconnect from a previous
                        TES host if such a connection were active.
           *            Show all available TES hosts but do not connect.
        nothing         Use the current TES host name to reestablish an
                        existing connection. Most useful when switching
                        between TES and a real serial port. If no host name
                        exists then a list of available hosts is shown.

    Keyboard verb \Knethold is used to invoke the TES command interpreter
    while in Connect mode (to revise connections usually), and HANGUP breaks
    an existing connection.  Sending a BREAK (ALT-B or \Kbreak) performs the
    same function for TES as \Knethold.  Use this function when manual control
    of sessions is desired, such as creating multiple sessions managed by
    TES rather than by Kermit.

    These new TES operations couple closely with version 2.x of TES and will
    not work with earlier ones.  Instead use SET PORT BIOS1 and the TES hot
    key with older TES's.  If the TES hot key is used then \Knethold may not
    be recognized; use the hot key again to control TES.  If the hot key has
    not been used then TES material is shown on the Connect mode screen.
    SHOW COMMUNICATIONS will show the current host name, as read back from
    TES itself.  The apparent serial port identifier on the Connect status
    line is the letter "I".

    Note that placing a connection on hold and later returning to it may
    require pressing the \knethold or \kbreak keys and typing RESUME to make
    the TES command interpreter return control to the data stream.  It's
    apparently a problem in the interpreter.

    If Kermit is exited completly then the active session is terminated, but
    held sessions are retained.  Thus, to preserve sessions after Kermit has
    exited use \knethold or \kbreak to get the TES command interpreter and
    place the connection on hold manually.  The session may be resumed as 
    above.

3.  Enhancements to SET PORT EBIOS for IBM LANACS.

    Let the baud rate and parity be set for either BIOSn or EBIOS ports so
    they will be transferred across the network to the LANACS server port.

    Initially they will show as "unknown" until set by the user.  In addition
    to the speed 8 data bits and no parity are presumed.  For EBIOS, the port
    being adjusted is really that on the asynchronous server; the local PC
    uses NetBios and EBIOS to simulate that remote port across the network.

    Add new optional final command argument of the EBIOS server port name:

        SET PORT EBIOS <local communication port, 1..4> <server port name>

    such as  SET PORT EBIOS 1 modem-2400

    If the server port name is omitted then the port name is taken from the
    EBIOS table on the client machine, such as resuming an old connection.

    This option removes the necessity of using the REDIRECT.EXE program, part
    of the LANACS package, because Kermit does a simple redirection of the
    selected local port to the named host port (and the name is presumed to
    be a unique one rather than a group name).  If another type of connection
    is desired then a) omit the sever port name in the SET PORT EBIOS command
    and b) perform the redirection with REDIRECT.EXE.  Each instance of SET
    PORT EBIOS <local coms port> uses its own port information of speed,
    parity, flow control, handshake, and local-echo.

End of MSR310.DOC.