Merge branch 'upstream' into test
[ckermit.git] / ckermit80.txt
diff --git a/ckermit80.txt b/ckermit80.txt
deleted file mode 100644 (file)
index 493338a..0000000
+++ /dev/null
@@ -1,10349 +0,0 @@
-
-                           C-Kermit 8.0 Update Notes
-
-   [ [1]Contents ] [ [2]C-Kermit ] [ [3]Kermit Home ]
-
-              Second Supplement to Using C-Kermit, Second Edition
-
-For C-Kermit 8.0
-
-   As of C-Kermit version: 8.0.211
-   Date of C-Kermit release: 10 April 2003
-   This file last updated: Sat Apr 10 16:36:11 2004
-
-     * IF YOU ARE READING A PLAIN-TEXT version of this document, note
-       that it is a plain-text dump of a Web page. You can visit the
-       original (and possibly more up-to-date) Web page here:
-  [4]http://www.columbia.edu/kermit/ckermit80.html
-     * If you are reading the HTML version of this file with a GUI Web
-       browser, the features added since C-Kermit 8.0.201 are shown in
-       red if your browser and monitor permit. Features that were new to
-       versions 8.0.200 and 201 are in black.
-
-Authors: Frank da Cruz and Christine M. Gianone
-Address: The Kermit Project
-         Columbia University
-         612 West 115th Street
-         New York NY 10025-7799
-         USA
-Fax:     +1 (212) 662-6442
-E-Mail:  [5]kermit-support@columbia.edu
-Web:     [6]http://www.columbia.edu/kermit/
-Or:      [7]http://www.kermit-project.org/
-Or:      [8]http://www.columbia.nyc.ny.us/kermit/
-     _________________________________________________________________
-
-  NOTICES
-
-   This document:
-          Copyright © 1997, 2002, Frank da Cruz and Christine M. Gianone.
-          All rights reserved.
-
-   Kermit 95:
-          Copyright © 1995, 2002, Trustees of Columbia University in the
-          City of New York. All rights reserved.
-
-   C-Kermit:
-          Copyright © 1985, 2002,
-          Trustees of Columbia University in the City of New York. All
-          rights reserved. See the C-Kermit [9]COPYING.TXT file or the
-          copyright text in the [10]ckcmai.c module for disclaimer and
-          permissions.
-
-   When Kerberos(TM) and/or SRP(TM) (Secure Remote Password) and/or
-          SSL/TLS protocol are included:
-          Portions Copyright © 1990, Massachusetts Institute of
-          Technology.
-          Portions Copyright © 1991, 1993 Regents of the University of
-          California.
-          Portions Copyright © 1991, 1992, 1993, 1994, 1995 by AT&T.
-          Portions Copyright © 1997, Stanford University.
-          Portions Copyright © 1995-1997, Eric Young
-          <eay@cryptosoft.com>.
-
-   For the full text of the third-party copyright notices, see
-   [11]Appendix V.
-     _________________________________________________________________
-
-  WHAT IS IN THIS FILE
-
-   This file lists changes made to C-Kermit since version 7.0 was
-   released in January 2000. Use this file as a supplement to:
-
-     * The second edition of [12]Using C-Kermit; and:
-     * The [13]C-Kermit 7.0 Update Notes. Also available in plain-text
-       form as [14]ckermit70.txt.
-
-   until the third edition of Using C-Kermit is published. We apologize
-   for the scattered documentation and will consolidate it when we are
-   able.
-     _________________________________________________________________
-
-   ADDITIONAL FILES Several other files accompany this new Kermit
-   release:
-
-   [15]ckututor.html
-          C-Kermit Tutorial (for Unix). Also distributed in Nroff form as
-          [16]ckuker.nr, the Unix C-Kermit manual page.
-
-   [17]security.htm
-          Discussion of Kermit's new authentication and encryption
-          features, updated for C-Kermit 8.0.
-
-   [18]telnet.htm
-          Detailed documentation of Kermit's Telnet client, updated for
-          C-Kermit 8.0.
-
-   [19]ftpscripts.html
-          Tutorial: Writing FTP automation scripts
-
-   [20]ckcbwr.html
-          Platform-independent C-Kermit hints and tips. Also distributed
-          in plain text form as [21]ckcbwr.txt
-
-   [22]ckubwr.html
-          Unix-specific C-Kermit hints and tips. Also distributed in
-          plain text form as [23]ckubwr.txt.
-
-   [24]ckvbwr.html
-          VMS-specific C-Kermit hints and tips. Also distributed in plain
-          text form as [25]ckvbwr.txt.
-
-   [26]ckuins.html
-          Unix C-Kermit installation instructions. Also distributed in
-          plain text form as [27]ckuins.txt.
-
-   [28]ckvins.html
-          VMS C-Kermit installation instructions. Also distributed in
-          plain text form as [29]ckvins.txt.
-
-   [30]ckccfg.html
-          Compile-time configuration options. Also distributed in plain
-          text form as [31]ckccfg.txt.
-
-   [32]ckcplm.html
-          C-Kermit Program Logic Manual. Also distributed in plain text
-          form as [33]ckcplm.txt.
-
-   [34]iksd.html
-          Internet Kermit Service Aministrators Guide for Unix.
-
-   [35]skermit.html
-          C-Kermit as an SSH Subsystem (SFTP server replacement).
-
-   [ [36]Top ] [ [37]C-Kermit ] [ [38]Kermit Home ]
-  __________________________________________________________________________
-
-CONTENTS
-
-     [39]0. WHAT'S NEW
-     [40]1. FIXES SINCE VERSION 7.0.196
-     [41]2. SSH AND HTTP 
-         [42]2.1. SSH Connections
-         [43]2.2. HTTP Connections
-            [44]2.2.1. HTTP Command Switches
-            [45]2.2.2. HTTP Action Commands
-            [46]2.2.3. HTTP Headers
-            [47]2.2.4. Secure HTTP Connections
-            [48]2.2.5. HTTP Variables
-            [49]2.2.6. The HTTP Command-Line Personality
-     [50]3. THE BUILT-IN FTP CLIENT
-         [51]3.1. Making and Managing FTP Connections
-            [52]3.1.1. Kermit Command-Line Options for FTP
-            [53]3.1.2. The FTP Command-Line Personality
-            [54]3.1.3. The FTP URL Interpreter
-            [55]3.1.4. Interactive FTP Session Establishment
-         [56]3.2. Making Secure FTP Connections
-         [57]3.3. Setting FTP Preferences
-         [58]3.4. Managing Directories and Files
-         [59]3.5. Uploading Files With FTP
-            [60]3.5.1. FTP PUT Switches
-            [61]3.5.2. Update Mode
-            [62]3.5.3. Recovery
-         [63]3.6. Downloading Files With FTP
-            [64]3.6.1. FTP GET Switches
-            [65]3.6.2. Filename Collisions
-            [66]3.6.3. Recovery
-         [67]3.7. Translating Character Sets
-            [68]3.7.1. Character Sets and Uploading
-            [69]3.7.2. Character Sets and Downloading
-         [70]3.8. FTP Command Shortcuts
-         [71]3.9. Dual Sessions
-         [72]3.10. Automating FTP Sessions
-            [73]3.10.1. FTP-Specific Variables and Functions
-            [74]3.10.2. Examples
-            [75]3.10.3. Automating Secure FTP Connections
-         [76]3.11. Advanced FTP Protocol Features  [77]4. FILE SCANNING
-    [78]5. FILE AND DIRECTORY NAMES CONTAINING SPACES
-    [79]6. OTHER COMMAND PARSING IMPROVEMENTS
-         [80]6.1. Grouping Macro Arguments
-         [81]6.2. Directory and File Name Completion
-         [82]6.3. Passing Arguments to Command Files
-         [83]6.4. More-Prompting
-         [84]6.5. Commas in Macro Definitions
-         [85]6.6. Arrow Keys
-    [86]7. NEW COMMANDS AND SWITCHES
-    [87]8. SCRIPTING IMPROVEMENTS
-         [88]8.1. Performance and Debugging
-         [89]8.2. Using Macros as Numeric Variables
-         [90]8.3. New IF Conditions
-         [91]8.4. The ON_UNKNOWN_COMMAND and ON_CD Macros
-         [92]8.5. The SHOW MACRO Command
-         [93]8.6. Arrays
-         [94]8.7. New or Improved Built-in Variables and Functions
-         [95]8.8. The RETURN and END Commands
-         [96]8.9. UNDEFINing Groups of Variables
-         [97]8.10. The INPUT and MINPUT Commands
-         [98]8.11. Learned Scripts
-         [99]8.12. Pattern Matching
-         [100]8.13. Dates and Times
-         [101]8.14. Trapping Keyboard Interruption
-    [102]9. S-EXPRESSIONS
-         [103]9.1. What is an S-Expression?
-         [104]9.2. Integer and Floating-Point-Arithmetic
-         [105]9.3. How to Use S-Expressions
-         [106]9.4. Summary of Built-in Constants and Operators
-         [107]9.5. Variables
-         [108]9.6. Assignments and Scope
-         [109]9.7. Conditional Expressions
-         [110]9.8. Extensibility
-         [111]9.9. Examples
-         [112]9.10. Differences from Algebraic Notation
-         [113]9.11.Differences from Lisp
-    [114]10. FILE TRANSFER
-    [115]11. MODEMS AND DIALING
-    [116]12. TERMINAL CONNECTION
-    [117]13. CHARACTER SETS
-    [118]14. DIALOUT FROM TELNET TERMINAL SERVERS
-    [119]15. COPING WITH BROKEN KERMIT PARTNERS
-    [120]16. NEW COMMAND-LINE OPTIONS
-    [121]17. LOGS
-
-   [ [122]Top ] [ [123]C-Kermit ] [ [124]Kermit Home ]
-  __________________________________________________________________________
-
-0. WHAT'S NEW
-
-   The Initialization and Customization Files
-          C-Kermit 8.0 now supports specification of the initialization
-          file name (path) in an environment variable, CKERMIT_INI. It
-          also relies far less than before on the initialization for
-          functioning. See [125]Section 5 of the Unix C-Kermit
-          [126]installation instructions for details. As of version
-          8.0.201, C-Kermit also executes your customization file (if you
-          have one) even if the initialization file was not found.
-          Previously, the customization file was executed by a TAKE
-          command in the initialization file (and it still is, if an
-          initialization is found).
-
-   Incompatible Changes
-          As always, we do our best to avoid changes that break existing
-          scripts. However, C-Kermit 8.0 does include a rather pervasive
-          syntax change that might alter the behavior of scripts that
-          depend on the previous behavior. As described in [127]Section
-          5, C-Kermit now accepts doublequotes in most contexts where you
-          previously had to use braces to group multiple words into a
-          single field, or to force inclusion of leading or trailing
-          blanks. Most noticeably, in C-Kermit 7.0 and earlier:
-
-  echo {this is a string}
-
-          would print:
-
-  this is a string
-
-          whereas:
-
-  echo "this is a string"
-
-          printed:
-
-  "this is a string"
-
-          In C-Kermit 8.0, both print:
-
-  this is a string
-
-          To force the doublequotes to be treated as part of the string,
-          use either of the following forms:
-
-  echo {"this is a string"}
-  echo ""this is a string""
-
-          Similarly, to force braces to be treated as part of the string:
-
-  echo "{this is a string}"
-  echo {{this is a string}}
-
-          Other incompatibilities:
-
-         1. Using the SET HOST command to make HTTP connections is no
-            longer supported. Instead, use the new HTTP OPEN command,
-            described in [128]Section 2.2.
-
-   C-Kermit 7.1 Alpha.01 (8 December 2000)
-
-     Its major new features are those listed in the [129]Table of
-          Contents: the FTP client, file scanning, command parsing and
-          scripting improvements, S-Expressions, and support for the
-          Telnet Com Port Option, plus wider availability of the
-          Kerberos, SSL/TLS, and SRP security options for secure Internet
-          connections.
-
-   C-Kermit 7.1.199 Alpha.02 (4 January 2001)
-
-          + C-Kermit now accepts [130]FTP, TELNET, and IKSD URLs as its
-            first command-line argument.
-          + Character-set translation added to the FTP client for
-            [131]filenames. 
-          + Optional [132]setting of date of incoming files by FTP [M]GET
-            from the server date.
-          + [133]FTP CHECK filename added to let FTP client check the
-            existence of a file on the server.
-          + [134]FTP GET /NAMELIST:filename added to get list of server
-            filenames into a local file.
-          + [135]FTP [M]PUT /SERVER-RENAME:template added to make server
-            rename a file as indicated by the template after it has
-            arrived completely.
-          + FTP [M]GET /SERVER-RENAME:template added to make server
-            rename a file as indicated by the template after it has been
-            sent completely.
-          + FTP [136]VDIRECTORY added for getting verbose directory
-            listings from TOPS-20.
-          + [137]FTP TYPE TENEX added for transferring 8-bit binary files
-            with PDP-10s.
-          + Added [138]automatic text/binary mode switching for FTP
-            [M]GET, based on filename patterns (e.g. *.zip, *.gz, *.exe
-            are binary; *.txt, *.c are text).
-          + [139]SET SEND I-PACKETS OFF added for coping with Kermit
-            servers that do not support I packets.
-          + A new option was added to [140]\fword() and \fsplit() for
-            parsing comma-separated lists that might contain empty
-            elements.
-          + Bug fixes including:
-               o {} or "" could not be used as expected to represent the
-                 empty string.
-               o ,- on a line by itself in a macro definition caused
-                 subsequent statements to be skipped.
-               o FTP [M]GET didn't work right if path segments were
-                 included in the filespec.
-               o FTP MGET, if interrupted, did not clear its file list.
-               o Various problems with FTP PUT /AS-NAME that nobody
-                 noticed.
-               o Some FTP messages and displays interfered with each
-                 other.
-               o Parsing of YESTERDAY, TODAY, and TOMORROW in date-time
-                 fields was broken.
-               o Automatic old-to-new dialing directory format conversion
-                 was broken on VMS.
-               o Various source-code portability problems fixed.
-          + Improvement of various HELP and SHOW messages.
-
-   C-Kermit 7.1.199 Alpha.04 (1 April 2001)
-
-          + Big changes:
-               o Changed default modem type from NONE to GENERIC.
-               o Generic dialing now sends no init string at all.
-               o Changed default terminal bytesize from 7 to 8.
-          + New features:
-               o SET SESSION-LOG TIMESTAMPED-TEXT for timestamped session
-                 log.
-          + New modem types:
-               o Conexant modem family
-               o Lucent VENUS chipset
-               o PCTel V.90 chipset
-               o Zoom V.90
-               o Zoom V.92
-          + FTP client:
-               o FTP OPEN /PASSIVE and /ACTIVE switches added.
-               o Now works with servers that that don't include path in
-                 NLST response.
-               o Fixed SEND /RECURSIVE not to follow symlinks (UNIX).
-               o SET FTP VERBOSE-MODE default is now OFF instead of ON.
-          + Kermit protocol:
-               o Fixed what I hope is the last "Receive window full"
-                 error.
-               o SET PREFIXING or SET CONTROL PREFIX now automatically
-                 sets CLEARCHANNEL OFF.
-               o Fixed incorrect report of number of files transferred at
-                 end of transfer.
-               o Fixed SEND /RECURSIVE not to follow symlinks (UNIX).
-          + UNIX:
-               o HTTP and shadow passwords enabled for SCO 5.0.6.
-               o Even with SET FILENAMES CONVERTED, spaces were still
-                 accepted in incoming filenames; now they are converted
-                 to underscores.
-               o Added support for compile-time mktemp()/mkstemp()
-                 selection.
-          + VMS:
-               o Session-log format for scripted sessions fixed.
-          + Scripting:
-               o Fixed \frdir() not to follow symlinks (UNIX).
-               o Fixed \fday() not to dump core for dates prior to 17 Mar
-                 1858.
-          + General:
-               o "Closing blah..." message upon exit could not be
-                 surpressed.
-               o Added /PAGE and /NOPAGE to DELETE switches.
-               o Added GO response for DELETE /ASK (delete all the rest
-                 without asking).
-               o Added GO response to "more?" prompt (for multi-page
-                 screen output).
-               o Updated HELP texts.
-
-   C-Kermit 7.1.199 Beta.01 (10 May 2001)
-
-          + FTP client verbosity adjustments.
-          + Bug with generic modem dialing pausing several secs fixed.
-          + SET HOST /USER:, SET LOGIN USERID, etc, fixed when given no
-            user ID.
-          + A couple \v(dm_blah) dial modifier variables added.
-          + "--version" command-line switch added.
-          + Fixed NetBSD serial-port DTR handling.
-          + Lots of syntax cleanups for Flexelint and gcc -Wall.
-          + Fixed modem-type aliases to not take precedence over real
-            names.
-          + Fixed funny treatment of doublequotes by ECHO command.
-          + Enabled SET SESSION-LOG for VMS and other non-UNIX platorms.
-          + Fixed changing direction in command history buffer.
-          + Fixed handling of IKSD URLs.
-          + Made sure DELETE prints a message if it got any errors.
-
-   C-Kermit 8.0.200 Beta.02 (28 June 2001)
-
-          + Major version number increased from 7 to 8.
-          + [141]SSH command.
-          + More-consistent Kermit protocol defaults.
-          + CONNECT idle timeout and action selection.
-          + CONNECT status variable.
-          + A way to allocate more space for filename lists.
-          + Pseudoterminal handler fixed for late-model Linuxes.
-          + Command-line option -dd for timestamped debug log.
-          + Download directory now works for external protocols too.
-          + GREP /COUNT:variable.
-          + SET ATTRIBUTE RECORD-FORMAT { OFF, ON }.
-          + Bug fixes.
-
-   C-Kermit 8.0.200 Beta.03 (9 Sep 2001)
-
-          + [142]HTTP 1.1 connections and scripting
-          + [143]ON_CTRLC macro for trapping Ctrl-C in scripts
-          + [144]Date-time parsing improvements, timezones, comparison,
-            arithmetic
-          + [145]Pattern-matching improvements
-          + FTP improvements
-          + SET EXIT HANGUP { ON, OFF }
-          + SET FILE EOF { CTRL-Z, LENGTH }
-          + ASK[Q] /TIMEOUT
-          + Bug fixes
-          + New platforms
-
-   C-Kermit 8.0.200 Beta.04 (16 Nov 2001)
-
-          + [146]New Unix man page
-          + [147]New Unix installation instructions
-          + SET TELOPT policies are now enforced on non-Telnet ports if
-            the server begins Telnet negotiations.
-          + SET TERMINAL IDLE-ACTION { TELNET-NOP, TELNET-AYT }.
-          + UUCP lockfile creation race condition fixed.
-          + Dialout, modem signals, hangup, hardware flow control, etc,
-            tested extensively on many platforms, numerous problems
-            fixed.
-          + Improved hints when dialing fails.
-          + SET STOP-BITS 2 can now be given without SET FLOW HARDWARE.
-          + Major improvements in RFC 2217 Telnet Com-Port Control.
-          + Improved ability to REDIAL a modem server port.
-          + kermit -h now shows the command name in the usage usage
-            string.
-          + kermit -h now shows ALL command-line options.
-          + kermit -s blah, where blah is a symlink, now works.
-          + --noperms command-line option = SET ATTRIBUTE PERMISSIONS
-            OFF.
-          + HTTP and HTTPS URLs now supported on the command line.
-          + An http command-line personality is now available.
-          + Initialization file streamlined to load faster, anachronisms
-            removed.
-          + Updated NEWS, INTRO, HELP text, SHOW commands. In particular,
-            see SHOW COMM, HELP SET LINE, HELP WAIT.
-          + Date/time arithmetic routines converted from floating-point
-            to integer arithmetic (internally) for greater accuracy and
-            portability.
-          + Quoted strings containing commas no longer break macro
-            execution.
-          + Dynamic Kermit file-transfer timeouts are now much more
-            aggressive.
-          + New "hot keys" to turn debug.log on/off during file transfer.
-          + Improved hints when file transfer fails.
-          + FTP CD orientation messages are now printed.
-          + -R now accepted on the FTP command line to request Recursion.
-          + -m allows Active or Passive mode to be chosen on the FTP
-            command line.
-          + -dd on the FTP command line creates a timestamped debug.log.
-          + FTP command-line security options filled in.
-          + Improved automatic text/binary mode switching for MGET.
-          + Removed spurious error messages that sometimes occur during
-            MGET.
-          + DIRECTORY, GREP, TYPE, HEAD, and TAIL now have a /OUTPUT:file
-            option.
-          + TYPE /NUMBER adds line numbers.
-          + CAT = TYPE /NOPAGE; MORE = TYPE /PAGE.
-          + GETOK ?-help fixed.
-          + \v(timestamp) (= "\v(ndate) \v(time)")
-          + \v(hour) (hour of the day, 0-23)
-          + \funix2dospath() converts a UNIX path (/) to a DOS one (\).
-          + \fdos2unixpath() converts a DOS (Windows, OS/2) path to a
-            UNIX one.
-          + \fkeywordval() parses name=value pair, allows macro keyword
-            parameters.
-          + We now make every attempt to not write passwords to the
-            debug.log.
-          + New Certficate Authority certificates file, includes the
-            Kermit Project at Columbia University so you can access our
-            IKSD securely.
-          + Secure targets improved and better documented in Unix
-            makefile.
-          + All Linux (libc and glibc) builds consolidated under "make
-            linux".
-          + HP-UX makefile targets now have consistent names.
-          + New aix50 and aix51 targets added.
-
-   C-Kermit 8.0.200 Final (12 Dec 2001)
-
-          + Remote/local-mode confusion on some platforms introduced in
-            Beta.04, fixed.
-          + Many of the makefile targets adjusted, new ones added.
-          + New "make install" target should please most people.
-          + New command: SHOW IKSD.
-          + FTP over TLS.
-          + Last-minute touchups to text messages, HELP text, etc.
-          + Enable modem-signal reading for SCO OSR5 and Unixware 7.
-          + Special superfast TRANSMIT /BINARY /NOECHO /NOWAIT mode
-            added.
-          + Fixed PBX dialing in unmarked-area-code case.
-          + Improved SHOW COMMUNICATIONS tells lockfile directory,
-            typical dialout device name.
-          + Some FTP OPEN command parsing problems fixed.
-          + Some errors in date arithmetic fixed.
-          + New command: SET TERMINAL AUTODOWNLOAD { ..., ERROR { STOP,
-            CONTINUE } }
-          + New command: HELP FIREWALL.
-          + SET MODEM HANGUP-METHOD DTR added as synomym for RS232-SIGNAL
-          + Support for secure URL protocols added: telnets:, ftps:,
-            https:.
-
-   C-Kermit 8.0.201 (8 Feb 2002)
-
-          + Installability as an [148]SSH v2 Subsystem.
-          + [149]SET LOCUS command.
-          + [150]L-versions of CD, DIR, DELETE, MKDIR, etc, to force
-            local execution.
-          + [151]USER and ACCOUNT added as synonyms for FTP USER and FTP
-            ACCOUNT.
-          + [152]SHOW VARIABLES now accepts a list of variables.
-          + Rudimentary support for [153]Caller ID when receiving phone
-            calls.
-          + Up/Down [154]Arrow-key navigation of command history buffer.
-          + [155]Automatic execution of customization file if init file
-            is missing.
-
-   C-Kermit 8.0.206 Beta.01 (11 Oct 2002)
-
-        New commands:
-
-               o ORIENTATION lists location-related variables and their
-                 values.
-               o KCD changes to special directories by their symbolic
-                 names ("kcd ?" for a list).
-               o SET CD HOME path to specify home directory for CD and
-                 KCD commands.
-               o CONTINUE given at top level is equivalent to END --
-                 handy when PROMPT'ed out of a script, to continue the
-                 script.
-
-        New switches or operands for existing commands:
-
-               o GETOK /TIMEOUT
-               o ASK, ASKQ, GETOK /QUIET (suppresses error message on
-                 timeout)
-               o COPY /APPEND now allows concatenating multiple source
-                 files into one dest file.
-               o SET TCP { HTTP-PROXY, SOCKS-SERVER } /USER, /PASSWORD.
-               o DIRECTORY command now accepts multiple filespecs, e.g.
-                 "dir a b c".
-
-        SET QUIET ON now also applies to:
-
-               o SET HOST connection progress messages.
-               o "Press the X or E key to cancel" file-transfer message.
-               o REMOTE CD response.
-               o REMOTE LOGIN response.
-
-        Improvements and new features:
-
-               o Numerous FTP client fixes and new features, listed
-                 below.
-               o C-Kermit, when in remote mode at the end of a file
-                 transfer, now prints a one-line "where" message. Control
-                 with SET TRANSFER REPORT.
-               o Unix makefile "install" target now creates an UNINSTALL
-                 script.
-               o Improved operation and performance on RFC 2217 Telnet
-                 connections.
-               o Improved CONNECT (interactive terminal connection)
-                 performance.
-               o HELP text updated for many commands.
-
-        New or fixed makefile targets:
-
-               o Solaris 9 (several variations)
-               o Concurrent PowerMAX
-               o Mac OS X 10.2
-               o FreeBSD 1.0
-               o FreeBSD 4.6, 5.0
-               o AIX 5.2, 5.3
-
-        Bugs fixed (general):
-
-               o Failure to run in VMS Batch fixed.
-               o LDIRECTORY fixed to run Kermit's built-in DIRECTORY
-                 command rather than an external one.
-               o Fixed Solaris and other SVORPOSIX builds to find out
-                 their full hostnames rather than just the "uname -n"
-                 name.
-               o Fixed some problems matching strings that start with
-                 ".".
-               o Fixed some problems matching pattern that contain
-                 {a,b,c} lists.
-               o Fixed erroneous reporting of text-mode reception as
-                 binary when sender did not report the file size
-                 (cosmetic only).
-               o Many problems with SWITCH statements fixed.
-               o Fixed SET OPTIONS DIRECTORY /DOTFILES to work for server
-                 too.
-               o Fixed DELETE to print an error message if the file was
-                 not found.
-               o Fixed SET CONTROL UNPREFIX ALL and SET PREFIXING NONE to
-                 do the same thing.
-               o Fixed bugs executing macros from within the ON_EXIT
-                 macro.
-               o \fday() and \fnday() fixed for dates prior to 17 Nov
-                 1858.
-               o Serial speed-changing bug in Linux fixed.
-               o "Unbalanced braces" script parsing errors when using
-                 \{number} fixed.
-               o "if defined \v(name)" fixed to behave as described in
-                 the book.
-               o Fixed Problems caused by LOCAL variables whose names are
-                 left substrings of macro names.
-               o The INPUT command was fixed to honor the PARITY setting.
-               o Fixed bug with COPY to existing file that is longer than
-                 source file.
-               o REINPUT command failed to strip braces/quotes around its
-                 target string.
-               o Network directory lookups didn't work for SSH
-                 connections.
-               o REMOTE SET { FILE, TRANSFER } CHARACTER-SET fixed.
-               o Closed some holes whereby an incompletely received file
-                 was not deleted when SET FILE INCOMPLETE is DISCARD,
-                 e.g. when the Kermit is hung up upon.
-               o SET XFER CHARACTER-SET TRANSPARENT fixed to do the same
-                 as SET XFER TRANSLATION OFF.
-               o SET HOST PTY (e.g. SSH) connection fixed to pass along
-                 window-size changes.
-               o C-Kermit search path for TAKE files was accidentally
-                 disabled.
-
-        FTP client bugs fixed:
-
-               o Character set translation was broken on little-endian
-                 (e.g. PC) architectures.
-               o FTP PUT /SERVER-RENAME:, /RENAME-TO:, /MOVE-TO: switches
-                 were sticky.
-               o Make SET TRANSFER MODE MANUAL apply to FTP.
-               o Make SET FILE INCOMPLETE { KEEP, DISCARD } apply to FTP.
-               o FTP MGET /UPDATE handled equal times incorrectly.
-               o FTP MGET /RECOVER fixed to ignore file dates, use only
-                 size.
-               o FTP MGET /RECOVER sometimes downloaded files it didn't
-                 need to.
-               o FTP downloads with TRANSFER DISPLAY BRIEF could give
-                 misleading error messages.
-               o FTP MGET temp file not deleted if FTP DEBUG set to OFF
-                 after it was ON.
-               o LOCUS not switched back when FTP connection is lost.
-               o Set incoming file date even if it was not completely
-                 received.
-               o FTP MGET sent SIZE and MDTM commands even when it didn't
-                 have to.
-               o FTP MGET sent SIZE and MDTM commands even when it knew
-                 they wouldn't work.
-               o FTP MGET failed if no files were selected for download.
-               o FTP MGET a* b* c* would fail to get any c*'s if no b*'s
-                 existed.
-               o Big problems canceling MGET with Ctrl-C.
-               o Some extraneous LOCUS dialogs squelched.
-               o Some inconsistencies in SET FTP FILENAMES AUTO fixed.
-               o Fixed file-descriptor pileup after multiple MGETs when
-                 using mkstemp().
-               o Fixed "mget foo", where foo is a directory name.
-
-        FTP improvements:
-
-               o New [156]FTP protocol features added (FEAT, MLSD).
-               o FTP MGET /RECURSIVE now works as expected if server
-                 supports MLSD.
-               o FTP MGET /DATES-DIFFER to download if local and remote
-                 file dates differ.
-               o FTP DATES default changed to ON.
-               o FTP MPUT, MGET /EXCEPT now allows up to 64 patterns (up
-                 from 8).
-               o Top-level SITE and PASSIVE commands added for
-                 convenience.
-               o MGET /COLLISION:APPEND /AS-NAME:newfile *.* puts all
-                 remote files into one local file.
-               o SET FTP SERVER-TIME-OFFSET for when server has wrong
-                 timezone set.
-               o Allow for alternative server interpretations of [M]MPUT
-                 /UNIQUE.
-               o SET FTP ANONOMOUS-PASSWORD lets you specify the default
-                 anonymous password.
-               o Allow "GET /RECURSIVE path/file" to force local
-                 subdirectory creation.
-               o SET FTP DISPLAY is like SET TRANSFER DISPLAY but applies
-                 only to FTP.
-               o FTP { ENABLE, DISABLE } new-protocol-feature-name.
-               o FTP MGET /NODOTFILES.
-               o Debug log now records FTP commands and responses in
-                 grep-able format.
-
-   [ [157]Top ] [ [158]Contents ] [ [159]C-Kermit ] [ [160]Kermit Home ]
-  __________________________________________________________________________
-
-1. FIXES SINCE VERSION 7.0.196 First, the changes from 7.0.196 to 7.0.197...
-Source and makefile tweaks to get successful builds on platforms that were not
-available in time for the 7.0 release:
-
-     * 4.2BSD
-     * 4.3BSD
-     * AIX 4.3
-     * AT&T 3B2 and 3B20
-     * BeOS 4.5
-     * CLIX
-     * Interactive UNIX System V/386 R3.2 V4.1.1
-     * OS-9/68000
-     * OSF/1 1.3.
-     * PS/2 AIX 1.2.1
-     * SCO OSR5.0.x
-     * SCO Xenix 2.3.4
-     * SINIX 5.41/Intel
-     * Stratus FTX
-     * Stratus VOS
-     * SunOS 4.1 with X.25
-     * Ultrix 4.2
-     * Unixware 2.0
-
-   There were no functional changes from 196 to 197.
-
-   Fixes applied after C-Kermit 7.0.197 was released:
-
-   Source code: Big flexelint and "gcc -Wall" audit and cleanup.
-
-   Configuration:
-     * Solaris RTS/CTS (hardware flow control) didn't work.
-     * BSDI RTS/CTS worked only in one direction.
-     * FreeBSD 4.0 with ncurses 5.0 broke interactive command parsing.
-     * QNX-32 build lacked -DBIGBUFOK so couldn't execute big macros.
-
-   Connections:
-     * SET HOST /PTY didn't work on some platforms.
-     * Broken SET HOST /USER:xxx /PASSWORD:yyy /ACCOUNT:zzz switches
-       fixed.
-     * Transparent printing was broken in Unix.
-     * ANSWER 0 (wait forever) didn't work.
-     * Some problems in Multitech modem command strings.
-     * Spurious "?Sorry, can't condition console terminal" errors.
-     * Disabling modem command strings by setting them to nothing broke
-       dialing.
-     * SET DIAL TIMEOUT value was usually ignored.
-     * SET DIAL METHOD PULSE didn't work.
-     * Certain modem commands, if changed, not refreshed if modem type
-       changed.
-     * SET SESSION-LOG command was missing from VMS.
-     * VMS session log format fixed for scripts.
-     * HANGUP by dropping DTR didn't work in NetBSD.
-     * SET FLOW /AUTO versus SET FLOW confusion fixed.
-     * Spurious secondary Solaris lockfile removed.
-     * SCO OSR5 DTR On/Off hangup.
-     * UUCP lockfile race condition.
-
-   Commands and scripts:
-     * Missing CAUTIOUS and FAST commands restored.
-     * Broken PTY command in late-model Linuxes fixed (API changed).
-     * Fixed off-by-one error in command recall when switching direction.
-     * Fixed recall of commands that contain '?'.
-     * COPY /SWAP-BYTES didn't work on some architectures.
-     * Various combinations of COPY switches didn't work.
-     * Various problems with COPY or RENAME with a directory name as
-       target.
-     * SHIFT didn't decrement \v(argc) if used within IF, ELSE, or SWITCH
-       block.
-     * SHIFT didn't affect the \%* variable.
-     * Divide by zero improperly handled in some \function()s.
-     * Problems with RETURN from right-recursive functions.
-     * FSEEK /LINE \%c LAST didn't work if already at end.
-     * Some buffer vulnerabilities and potential memory leaks were
-       discovered and fixed.
-     * \frdirectory() fixed not to follow symbolic links.
-     * SET EXIT WARNING OFF fixed to work when EXIT given in a script.
-     * Missing DELETE and MKDIR error message fixed.
-     * \fday() core dump for ancient dates fixed.
-
-   File transfer:
-     * SEND /COMMAND was broken.
-     * CRECEIVE was broken (but RECEIVE /COMMAND was OK).
-     * Quoting wildcard chars in filenames didn't work.
-     * Problems canceling streaming file transfers with X or Z.
-     * Problems shifting between streaming and windowing file transfer.
-     * Non-FULL file-transfer displays erroneously said STREAMING when
-       not.
-     * An active SEND-LIST prevented GET from working.
-     * SET SERVER GET-PATH interpretation of relative names like "." was
-       wrong.
-     * The MAIL command was broken.
-     * "kermit -s *" might have skipped some files.
-     * Transaction log entries were not made for external protocol
-       transfers.
-     * File count report fixed to show number of files actually
-       transferred.
-     * Fixed filename conversion to convert spaces to underscores.
-     * Made SET PREFIXING / SET CONTROL PREFIX also adjust CLEARCHANNEL.
-     * More "Receive window full" errors fixed.
-     * Broken terminal buffering after curses display in Solaris fixed.
-     * SET FILE INCOMPLETE DISCARD did not work in all cases.
-     * Packet log changed to reformat the start-of-packet character
-       printably.
-     * Dynamic timeouts could grow ridiculously large.
-
-   Character sets:
-     * Hebrew-7 translations missed the letter Tav.
-     * C1 area of CP1252 was ignored.
-     * SET TRANSFER CHARACTER-SET TRANSPARENT could give garbage
-       translations.
-     * TRANSLATE might not work on Little Endian architectures.
-     * Insufficient range checking in certain TRANSLATE operations.
-
-   The following bugs in C-Kermit 8.0.200 were fixed in 8.0.201:
-
-     * An obscure path through the code could cause the Unix version of
-       C-Kermit to dump core during its startup sequence. This happened
-       to only one person, but now it's fixed.
-     * When C-Kermit 8.0 is in Kermit server mode and the client says
-       "get blah", where blah (on the server) is a symlink rather than a
-       real file, the server unreasonably refused to send the linked-to
-       file.
-     * When C-Kermit is an FTP client and says "get foo/bar" (i.e. a
-       filename that includes one or more path segments), it failed to
-       accept the incoming file (this happened only with GET, not MGET).
-     * Array references should be case insensitive but only lowercase
-       array letters were accepted.
-     * SHOW VARIABLES dumped core on \v(sexpression) and \v(svalue).
-     * Spurious refusals of remote directory listings if the remote
-       server's date was set in the past.
-     * In AIX, and maybe elsewhere too, Kermit's COPY command always
-       failed with "Source and destination are the same file" when the
-       destination file didn't exist.
-     * The VMS version of C-Kermit did not work in Batch or when SPAWN'd.
-       To compound the problem, it also pretty much ignored the -B and -z
-       command-line options, whose purpose is to work around such
-       problems.
-     * C-Kermit 8.0 could not be built on IRIX 5.x.
-     * The C-Kermit 8.0 build for QNX6 said it was an "(unknown
-       version)".
-
-   Other fixes are listed in the [161]previous section.
-
-   [ [162]Top ] [ [163]Contents ] [ [164]C-Kermit ] [ [165]Kermit Home ]
-  __________________________________________________________________________
-
-2. SSH AND HTTP
-
-  2.1. SSH Connections
-
-     This section does not apply to [166]Kermit 95 2.0, which has its
-     own built-in SSH client, which is documented [167]SEPARATELY. 
-
-   On most UNIX platforms, C-Kermit can make SSH (Secure SHell)
-   connection by running the external SSH command or program through its
-   pseudoterminal interface. The command is:
-
-   SSH text
-          Tells Kermit to start the external SSH client, passing the
-          given text to it on the command line. Normally the text is just
-          the hostname, but it can be anything else that is acceptable to
-          the ssh client. If the command succeeds, the connection is made
-          and Kermit automatically enters CONNECT (terminal) mode. You
-          can use the SSH command to make a connection to any host that
-          has an SSH server.
-
-   Kermit's SSH command gives you all the features of Kermit on an SSH
-   connection: command language, file transfer, character-set
-   translation, scripting, and all the rest. By default, C-Kermit invokes
-   SSH with "-e none", which disables the ssh escape character and makes
-   the connection transparent for purposes of file transfer. You can,
-   however, change the SSH invocation to whatever else you might need (an
-   explicit path, additional command-line arguments, etc) with:
-
-   SET SSH COMMAND text
-          Specifies the system command that Kermit's SSH command should
-          use to invoke the external SSH client. Use this command to
-          supply a specific path or alternative name, or to include
-          different or more command-line options.
-
-   In most cases, these connections work quite well. They can be scripted
-   like any other connection, and file transfer goes as fast as, or
-   faster than, on a regular Telnet connection. In some cases, however,
-   the underlying pseudoterminal driver is a limiting factor, resulting
-   in slow or failed file transfers. Sometimes you can work around such
-   problems by reducing the Kermit packet length. Note that Kermit does
-   not consider SSH connections to be reliable, so it does not offer to
-   use streaming in Kermit protocol transfers (but you can force it with
-   SET RELIABLE or SET STREAMING if you wish).
-
-   The SSH command is like the TELNET command: it enters CONNECT mode
-   automatically when the connection is made. Therefore, to script an SSH
-   connection, use:
-
-  set host /pty ssh -e none [ other-options ] host
-  if fail ...
-
-   to make the connection.
-
-   Here's a sequence that can be used to make a connection to a given
-   host using Telnet if the host accepts it, otherwise SSH:
-
-  if not defined \%1 exit 1 Usage: \%0 host
-  set quiet on
-  set host \%1 23 /telnet
-  if fail {
-      set host /pty ssh -l \m(user) -e none \%1
-      if fail exit 1 \%1: Telnet and SSH both fail
-      echo SSH connection to \%1 successful
-  } else {
-      echo Telnet connection to \%1 successful
-  }
-
-   In SSH v2, it is possible to make an SSH connection direct to a Kermit
-   server system if the host administrator has configured the SSH server
-   to allow this; [168]CLICK HERE for details.
-
-   Since Kermit uses external ssh client software, and since there are
-   different ssh clients (and different releases of each one), the exact
-   command to be used to make an SSH/Kermit connection can vary. Here is
-   the command for the OpenSSH 3.0.2p1 client:
-
-set host /pipe ssh -e none [ -l username ] -T -s hostname kermit
-
-   Example:
-
-set host /pipe ssh -e none -l olga -T -s hq.xyzcorp.com kermit
-
-   The SSH client might or might not prompt you for a password or other
-   information before it makes the connection; this depends on your SSH
-   configuration (your public and private keys, your authorized hosts
-   file, etc). Here's a brief synopsis of the OpenSSH client command
-   syntax ("man ssh" for details):
-
-   -e none
-          This tells the SSH client to use no escape character. Since we
-          will be transferring files across the connection, we don't want
-          the connection to suddenly block because some character in the
-          data.
-
-   -l username
-          This is the username on the remote host. You can omit the -l
-          option and its argument if your local and remote usernames are
-          the same. If they are different, you must supply the remote
-          username.
-
-   -T
-          This tells the SSH client to tell the SSH server not to
-          allocate a pseudoterminal. We are not making a terminal
-          connection, we don't need a terminal, and in fact if a terminal
-          were allocated on the remote end, the connection would not
-          work.
-
-   -s ... kermit
-          This tells the SSH client to tell the SSH server to start the
-          specified subsystem ("kermit") once the connection is made. The
-          subsystem name comes after the hostname.
-
-   hostname
-          The IP host name or address of the desired host.
-
-   You might want to include other or additional ssh command-line
-   options; "man ssh" explains what they are. Here are some examples for
-   the OpenSSH 3.0.2p1 client:
-
-   -oClearAllForwardings yes
-   -oForwardAgent no
-   -oForwardX11 no
-   -oFallbackToRsh no
-          These ensure that a secure connection is used and that the
-          connection used for file transfer is not also used for
-          forwarding other things that might be specified in the
-          ssh_config file.
-
-   -oProtocol 2
-          (i.e. SSH v2) Ensures that the negotiated protocol supports
-          subsystems.
-
-   Once you have an SSH connection to a Kermit server, it's just like any
-   other connection to a Kermit server (and very similar to a connection
-   to an FTP server). You give the client file transfer and management
-   commands for the server, and the server executes them. Of course you
-   can also give the client any other commands you wish.
-
-   [ [169]SSH Kermit Server Subsystem ] [ [170]Kermit 95 Built-in SSH
-   Client ]
-     _________________________________________________________________
-
-  2.2. HTTP Connections
-
-   Hypertext Transfer Protocol, or HTTP, is the application protocol of
-   the World Wide Web (WWW), used between Web browsers (clients) and Web
-   servers. It allows a client to get files from websites, upload files
-   to websites, delete files from websites, get information about website
-   directories and files, and interact with server-side CGI scripts.
-   C-Kermit includes an HTTP client capable of both clear-text and secure
-   HTTP connections, that can do all these tasks and can be automated
-   through the Kermit scripting language.
-
-   Although C-Kermit 7.0 could make HTTP connections to Web servers, it
-   could do so only when no other connection was open, and the procedure
-   was somewhat awkward. C-Kermit 8.0 improves matters by:
-
-     * Allowing an HTTP connection to be open at the same time as a
-       regular SET LINE or SET HOST connection, and also at the same time
-       as an FTP connection ([171]Section 3);
-     * Upgrading the HTTP protocol level from 1.0 to 1.1, thus allowing
-       for persistent connections, in which a series of commands can be
-       sent on the same connection, rather than only one as in HTTP 1.0
-       (and C-Kermit 7.0);
-     * Providing for "one-shot" URL-driven HTTP operations such as GET or
-       PUT.
-     * Providing a distinct HTTP command-line personality.
-
-   Persistent HTTP connections are managed with the following commands:
-
-   HTTP [ switches ] OPEN [ security-options ] host-or-url [ port ] 
-          Opens a persistent connection to the specified host (IP host
-          name or address) on the specified port. If any switches
-          (options, listed in the next section) are included, their
-          values are saved and used for all subsequent HTTP action
-          commands on the same connection. If no port is specified, HTTP
-          (80) is used. A Uniform Resource Locator (URL, [172]RFC 1738)
-          can be given instead of a hostname (or address) and port (but
-          the URL can not include a directory/file path). The security
-          options are explained [173]below. The HTTP OPEN command
-          replaces the C-Kermit 7.0 SET HOST hostname HTTP command, which
-          no longer works with HTTP GET and related commands.
-
-   HTTP CLOSE
-          Closes any open HTTP connection and clears any saved switch
-          values.
-
-   A URL starts with a protocol name, which must be http or https in this
-   case; optionally includes a username and password; and must contain a
-   host name or address:
-
-  protocol://[user[.password]]@host[:port][URI]
-
-   HTTP is Hypertext Transfer Protocol. HTTPS is the secure (SSL/TLS)
-   version of HTTP. The TCP service port is derived from the protocol
-   prefix (so normally the ":port" field is omitted). Thus the URL
-   protocol name specifies a default TCP service port and the URL user
-   and password fields can take the place of the /USER and /PASSWORD
-   switches ([174]Section 2.2.1). The optional URI is a "compact string
-   of characters for identifying an abstract or physical resource"
-   ([175]RFC 2396), such as a file. It must begin with a slash (/); if
-   the URI is omitted, "/" is supplied. Examples:
-
-   http open http://www.columbia.edu/
-          Equivalent to http open www.columbia.edu or http open
-          www.columbia.edu http.
-
-   http open https://olga.secret@www1.xyzcorp.com/
-          Equivalent to http /user:olga /pass:secret open
-          www1.xyzcorp.com https.
-
-   Persistence is accomplished unilaterally by C-Kermit 8.0. An HTTP 1.0
-   server closes the connection after each action. Although HTTP 1.1
-   allows multiple actions on the same connection, an HTTP 1.1 server
-   tends to close the connection if it is idle for more than a few
-   seconds, to defend itself against denial-of-service attacks. But when
-   you use Kermit's HTTP OPEN command to create a connection, Kermit
-   reopens it automatically (if necessary) for each HTTP action until you
-   close it with HTTP CLOSE, regardless of the server's HTTP protocol
-   version, or how many times it closes the connection.
-
-   Firewalls can be negotiated through proxies with the following
-   commands:
-
-   SET TCP HTTP-PROXY [ host[:port] ]
-          If a host (by hostname or IP address) is specified, Kermit uses
-          it as a proxy server when attempting outgoing TCP connections
-          -- not only HTTP connections, but all TCP/IP connections,
-          Telnet and FTP included. This allows Kermit to adapt to the
-          HTTP firewall penetration method (as opposed to other methods
-          such as SOCKS4). If no hostname or ip-address is specified, any
-          previously specified Proxy server is removed. If no port number
-          is specified, the "http" service is used. This command must be
-          given before the HTTP OPEN command if a proxy is to be used or
-          canceled.
-
-   HTTP [ switches ] CONNECT host[:port]
-          Instructs the HTTP server to act as a proxy, establishing a
-          connection to the specified host (IP hostname or address) on
-          the given port (80 = HTTP by default) and to redirect all data
-          transmitted between Kermit and itself to the given host for the
-          life of the connection. This command is to be used only for
-          debugging HTTP proxy connections. If a proxy connection is
-          required, instruct Kermit to use the proxy with the SET TCP
-          HTTP-PROXY command.
-
-    2.2.1. HTTP Command Switches
-
-   HTTP switches, like all other switches, are optional. When HTTP
-   switches are included with the HTTP OPEN command, they apply
-   automatically to this and all subsequent HTTP actions (GET, PUT, ...)
-   on the same connection until an HTTP CLOSE command is given. So if you
-   include switches (or the equivalent URL fields, such as user and
-   password) in the HTTP OPEN command, you can omit them from subsequent
-   commands on the same connection. If the connection has closed since
-   your last command, it is automatically reopened with the same options.
-
-   If you include switches with an HTTP action command (such as GET or
-   PUT), they apply only to that command.
-
-   /USER:name
-          To be used in case a page requires a username for access. The
-          username is sent with page requests. If it is given with the
-          OPEN command it is saved until needed. If a username is
-          included in a URL, it overrides the username given in the
-          switch. CAUTION: Username and password (and all other
-          information, including credit card numbers and other material
-          that you might prefer to protect from public view) are sent
-          across the network in clear text on regular HTTP connections,
-          but authentication is performed securely on HTTPS connections.
-
-   /PASSWORD:text
-          To be used in case a web page requires a password for access.
-          The password is sent with page requests. If it is given with
-          the OPEN command it is saved until needed. If a password is
-          given in a URL, it overrides the one given here. CAUTION: (same
-          as for /USER:).
-
-   /AGENT:user-agent
-          Identifies the client to the server. Overrides the default
-          agent string, which is "C-Kermit" (for C-Kermit) or "Kermit-95"
-          (for Kermit 95).
-
-   /ARRAY:array-designator
-          Tells Kermit to store the response headers in the given array,
-          one line per element. The array need not be declared in
-          advance. Example: /array:&a.
-
-   /TOSCREEN
-          Tells Kermit to display any response text on the screen. It
-          applies independently of the output file specification; thus it
-          is possible to have the server response go to the screen, a
-          file, both, or neither.
-
-   /HEADER:header-item(s)
-          Used for specifying any optional headers to be sent with HTTP
-          requests.
-
-  /HEADER:tag:value
-
-          To send more than one header, use braces for grouping:
-
-  /HEADER:{{tag:value}{tag:value}...}
-
-          For a list of valid tags and value formats see [176]RFC 2616,
-          "Hypertext Transfer Protocol -- HTTP/1.1". A maximum of eight
-          headers may be specified.
-
-    2.2.2. HTTP Action Commands
-
-   HTTP actions can occur within a persistent connection, or they can be
-   self-contained ("connectionless"). A persistent HTTP connection begins
-   with an HTTP OPEN command, followed by zero or more HTTP action
-   commands, and is terminated with an HTTP CLOSE command:
-
-  http open www.columbia.edu
-  if failure stop 1 HTTP OPEN failed: \v(http_message)
-  http get kermit/index.html
-  if failure stop 1 HTTP GET failed: \v(http_message)
-  (more actions possible here...)
-  http close
-
-   A self-contained HTTP action occurs when a URL is given instead of a
-   remote file name to an HTTP action command. In this case, Kermit makes
-   the HTTP connection, takes the action, and then closes the connection.
-   If an HTTP connection was already open, it is closed silently and
-   automatically.
-
-  http get http://www.columbia.edu/kermit/index.html
-
-   Kermit's HTTP action commands are as follows. Switches may be included
-   with any of these to override switch (or default) values given in the
-   HTTP OPEN command.
-
-   HTTP [ switches ] GET remote-filename [ local-filename ]
-          Retrieves the named file from the server specified in the most
-          recent HTTP OPEN command for which a corresponding HTTP CLOSE
-          command has not been given. The filename may not include
-          wildcards (HTTP protocol does not support them). If no HTTP
-          OPEN command is in effect, this form of the HTTP GET command
-          fails. The default local filename is the same as the remote
-          name, but with any pathname stripped. For example, the command
-          http get kermit/index.html stores the file in the current local
-          directory as index.html. If the /HEADERS: switch is included,
-          information about the file is also stored in the specified
-          array (explained in [177]Section 2.2.3). All files are
-          transferred in binary mode. HTTP does not provide for
-          record-format or character-set conversion.
-
-   HTTP [ switches ] GET url [ local-filename ]
-          When HTTP GET is given a URL rather than a filename, Kermit
-          opens a connection to the designated server (closing any
-          previously open HTTP connection), gets the file, and then
-          closes the connection. If the URL does not include a filename,
-          index.html is supplied. This is the self-contained one-step
-          "connectionless" method for getting a file from a Web server.
-          The data is not interpreted; HTTP GET is like "lynx -source"
-          rather than "lynx -dump".
-
-   In the remaining HTTP action commands, the distinction between a
-   remote filename and a URL are the same as in the HTTP GET command.
-
-   HTTP [ switches ] HEAD remote-filename-or-url [ local-filename ]
-          Like GET except without actually getting the file; instead it
-          retrieves only the headers. If the /ARRAY: or /TOSCREEN switch
-          is included, there is no default local output filename but you
-          can still specify one. If neither of these switches is
-          included, the default local filename is the same as the remote
-          filename, but with any path stripped and with ".head" appended.
-          The HEAD command can be used in a script with the /ARRAY:
-          switch to retrieve information about the requested resource to
-          determine whether the resource should actually be retrieved
-          with a subsequent GET request.
-
-   HTTP [ switches ] INDEX remote-directory-or-url [ local-filename ]
-          Asks the server to send a listing of the files in the given
-          server directory. This command is not supported by most Web
-          servers. Even when it is supported, there is no standard format
-          for the listing.
-
-   HTTP [ switches ] POST [ /MIME-TYPE:type ] source-file
-          remote-path-or-url [ result-file ]
-          Sends data to a process running on the remote host; the result
-          is usually an HTML file but could be anything. The data to be
-          posted must be read from a local file (the source-file). If a
-          result file is specified, Kermit stores the server's response
-          in it.
-
-   HTTP [ switches ] PUT [ MIME-TYPE:type ] local-file [
-          remote-file-or-url [ result-file ] ]
-          Uploads a local file to the server. Only the name of a single
-          file can be given; wildcards (and group transfers) are not
-          supported by HTTP protocol. If no remote filename is given, the
-          file is sent with the same name as the local file, but with any
-          pathname stripped.
-
-   HTTP [ switches ] DELETE remote-file-or-url [ local-result-file ]
-          Asks the server to delete the specified single file. If a
-          result file is specified, it will contain any response data
-          returned by the server.
-
-   Note the limitations of HTTP protocol compared to (say) FTP or Kermit.
-   There is no command for changing directories, no standard way to get
-   file or directory lists, no way to transfer file groups by using
-   wildcard notation, etc, and therefore no good way to (say) fetch all
-   pages, descend through subdirectories, perform automatic updates, etc.
-   There is no assurrance a connection will stay open and, as noted,
-   there is no provision for data conversion between unlike platforms.
-   The data's MIME headers can be used for postprocessing.
-
-    2.2.3. HTTP Headers
-
-   Each HTTP request and response contains a set of name/value pairs
-   called headers. HTTP headers are specified in [178]RFC 2616. For
-   example, an HTTP GET request for /index.html on www.columbia.edu
-   contains the following headers:
-
-  GET /index.html HTTP/1.1
-  Host: www.columbia.edu:80
-  User-agent: C-Kermit 8.0
-  Authorization: Basic base64-encoded-username-password
-
-   These might be followed by any others specified with a /HEADERS:
-   switch:
-
-  Accept: image/gif, image/x-xbitmap, image/jpeg, *.*
-  Accept-Encoding: gzip
-  Accept-Language: en
-  Accept-Charset: iso-8859-1,utf-8
-  Cookie: cookie-data
-
-   The server sends back a short report about the file prior to sending
-   the file contents. Example:
-
-  HTTP/1.1 200 OK
-  Date: Fri, 24 Aug 2001 21:09:39 GMT
-  Server: Apache/1.3.4 (Unix)
-  Last-Modified: Mon, 06 Aug 2001 21:16:13 GMT
-  ETag: "1fa137-10d7-3b6f091d"
-  Accept-Ranges: bytes
-  Content-Length: 4311
-  Content-Type: text/html
-
-   If you want to have this information available to a Kermit script you
-   can use the /ARRAY switch to have Kermit put it in array, one line per
-   array element. Example:
-
-  set exit warning off
-  http open www.columbia.edu
-  if fail exit 1 Can't reach server
-  http /array:&a get /index.html
-  if fail exit 1 Can't get file
-  echo Header lines: \fdim(&a)
-  for \%i 1 \fdim(&a) 1 {
-      echo \%i. \&a[\%i]
-  }
-
-   Note that the "Date:" item is the current date and time; the
-   "Last-Modifed:" item is the file's modification date and time. An
-   example showing how to use this information is presented in
-   [179]Section 8.13.7.
-
-    2.2.4. Secure HTTP Connections
-
-   SSL/TLS (Secure Sockets Layer / Transport Layer Security) is the
-   protocol used to secure HTTP, SMTP, and other Internet applications.
-   See the [180]C-Kermit Reference Section 5.4 for an introduction to
-   SSL/TLS. To make a secure HTTP connection, you need:
-
-    1. A secure client (a version of C-Kermit or Kermit 95 with SSL/TLS
-       security built in). Type "check ssl" at the Kermit prompt to make
-       sure you have it.
-    2. A secure server to connect to.
-    3. The CA Root Certificate used to authenticate the server to the
-       client. (see [181]Section 15 of the security reference for an
-       introduction to certificates).
-
-   And you must make a connection to the secure HTTP port: service name
-   HTTPS, port number 443 (as opposed to service HTTP, port 80). You can
-   also make secure connections to other ports by including the /TLS or
-   /SSL switch with the HTTP OPEN command, if the host supports SSL/TLS
-   on the given port:
-
-   The quality of the SSL/TLS connection depends on the cipher suite.
-   There are several possibilities:
-
-   Anonymous cipher suite:
-          If an anonymous cipher suite is negotiated, the connection is
-          encrypted but there is no authentication. This connection is
-          subject to a Man-In-The-Middle (MITM) attack.
-
-   X.509 certificate on the server:
-          When you connect to certain secure servers, an X.509
-          certificate is returned. This certificate is issued to a
-          special hostname, something like www1.xyzcorp.com or
-          wwws.xyzcorp.com (rather than the normal www.xyzcorp.com). It
-          is signed by the host's Certificate Authority (CA). If the host
-          certificate is configured on the client, it can be used to
-          verify the certificate received from the server. If the
-          certificate it verified as authentic, a check is made to ensure
-          it has not expired and it was issued to the host you were
-          attempting to connect to. If you had asked to connect to (say)
-          www.xyzcorp.com but were given a certificate for
-          www1.xyzcorp.com, you would be prompted for permission to
-          continue.
-
-          If the verification succeeded, the connection would be
-          encrypted with one-way (server-to-client) authentication. This
-          connection is not subject to a MITM attack.
-
-          If a username and password are transmitted over this
-          connection, they are not subject to interception. However, the
-          standard risks associated with passing the password to the host
-          for verification apply; for example, if the host has been
-          compromised, the password will be compromised.
-
-   X.509 client certificate:
-          If a connection has been established with an X.509 server
-          certificate, the server can ask the client to send a
-          certificate of its own. This certificate must be verified
-          against a CA Root certificate. The certificate itself (or
-          subject info from the certificate) is used to determine the
-          authorization for the client, and if successful, the username
-          and password need not be sent to the server.
-
-   Kerberos 5:
-          Instead of using X.509 certifcates, Kerberos 5 can be used to
-          perform the authentication and key exchange. In this situation,
-          there is mutual authentication between the client and server.
-          The Kerberos 5 principal is used by the server to look up the
-          appropriate authorization data. There is no need to send
-          username and password.
-
-   An HTTP connection is made with the HTTP OPEN command:
-
-   HTTP [ switches ] OPEN [ { /SSL, /TLS } ] host [ port ] 
-          If /SSL or /TLS switches are included (these are synonyms), or
-          if the service is HTTPS or the port is 443, a secure connection
-          is attempted using the current authentication settings; see
-          HELP SET AUTHENTICATION for details ([182]Section 6.2 of the
-          security reference). If the no /SSL or /TLS switch is included
-          but the port is 443 or the service is HTTPS, a secure
-          connection is attempted. If an /SSL or /TLS switch is included
-          but a port is not specified, an SSL/TLS connection is attempted
-          on the default port (80).
-
-   Certificates are covered in the separate [183]Kermit Security
-   Reference for C-Kermit 8.0. You should let Kermit know to verify
-   certificates with the SET AUTHENTICATION TLS command. For example:
-
-   SET AUTHENTICATION TLS CRL-DIR directory
-          Specifies a directory that contains certificate revocation
-          files where each file is named by the hash of the certificate
-          that has been revoked.
-
-   SET AUTHENTICATION TLS CRL-FILE filename
-          Specifies a file that contains a list of certificate
-          revocations.
-
-   SET AUTHENTICATION TLS VERIFY-DIR directory
-          Specifies a directory that contains root CA certificate files
-          used to verify the certificate chains presented by the peer.
-          Each file is named by a hash of the certificate.
-
-   SET AUTHENTICATION TLS VERIFY-FILE filename
-          Specifies a file that contains root CA certificates to be used
-          for verifying certificate chains.
-
-   SET AUTHENTICATION TLS VERIFY OFF
-          Tells Kermit not to require a certificate and accept any
-          certificate that is presented regardless of whether it is
-          valid.
-
-   There are many other options; see the security document for details.
-
-   Now suppose you need need to fetch the file denoted by the following
-   URL:
-
-  https://myuserid:mypassword@wwws.xyzcorp.com/clients/info/secret.html
-
-   Once you have set up the handling of certificates as desired, you can
-   use the following Kermit commands:
-
-  http /user:myuserid /password:mypassword open www1.xyzcorp.com https
-  if success {
-      http get /clients/info/secret.html
-      http close
-  }
-
-   As another example, let's say that you have a web form you need to
-   populate with three fields: red,white and blue.
-
-  <FORM ACTION="http://www.xyzcorp.com/cgi-bin/form.cgi" METHOD="POST">
-  <INPUT NAME="Red">
-  <INPUT NAME="White">
-  <INPUT NAME="Blue">
-  </FORM>
-
-   You can handle this with the HTTP POST command. The data to be posted
-   is stored in the local file data.txt.
-
-  Red=seven stripes&White=six stripes&Blue=fifty stars
-
-   and the response from the server will be stored into response.txt.
-
-  http open www.xyzcorp.com http
-  if success {
-    http /array:c post data.txt /cgi-bin/form.cgi response.txt
-    http close
-  }
-
-   In this scenario, the Common Gateway Interface (CGI) sends a response
-   whether it succeeds or fails in a script-dependent manner. The script
-   can either report success and enclose the response data; or it might
-   send a 302 Found error which indicates that the "Location:" header
-   should be used to determine the URL at which the data can be found.
-
-    2.2.5. HTTP Variables
-
-   \v(http_code)
-          The HTTP protocol code number of the most recent server reply,
-          e.g. 404 for "not found".
-
-   \v(http_connected)
-          1 when an HTTP connection is open, 0 when there is no HTTP
-          connection.
-
-   \v(http_host)
-          If an HTTP connection is open, the hostname:port, e.g.
-          www.columbia.edu:80; otherwise, empty.
-
-   \v(http_message)
-          Server error message, if any, from most recent HTTP command.
-
-   \v(http_security)
-          A list of the security parameters and values for the current
-          connection, if any. Empty if the connection is not to a secure
-          server, or there is no connection.
-
-   To display all the HTTP variables at once, type SHOW VAR HTTP:
-
-  C-Kermit> http open www.columbia.edu
-  C-Kermit> http get lkjlkjlkjlkj 
-  C-Kermit> sho var http
-   \v(http_code) = 404
-   \v(http_connected) = 1
-   \v(http_host) = www.columbia.edu:80
-   \v(http_message) = Not Found
-   \v(http_security) = NULL
-  C-Kermit>
-
-    2.2.6. The HTTP Command-Line Personality
-
-   If you invoke C-Kermit with the name "http" or "https", you can use a
-   special set of HTTP-specific command-line options. You can do this by
-   creating a symbolic linke "http" or "https" to the C-Kermit 8.0
-   executable, or by having a separate copy of it called "http" or
-   "https". Here's the usage message ("http -h"):
-
-  Usage: ./http host [ options... ]
-   -h             This message.
-   -d             Debug to debug.log.
-   -S             Stay (issue command prompt when done).
-   -Y             Do not execute Kermit initialization file.
-   -q             Quiet (suppress most messages).
-   -u name        Username.
-   -P password    Password.
-   -g pathname    Get remote pathname.
-   -p pathname    Put remote pathname.
-   -H pathname    Head remote pathname.
-   -l pathname    Local path for -g, -p, and -H.
-   -z opt[=value] Security options...
-      cert=file   Client certificate file
-      certsok     Accept all certificates
-      key=file    Client private key file
-      secure      Use SSL
-      verify=n    0 = none, 1 = peer , 2 = certificate required
-
-   The "host" argument is the name of a Web host, e.g. www.columbia.edu.
-   The action options are -p, -g, and -H. If you give an action option,
-   Kermit does the action and then exits. If you give a host without an
-   action option, Kermit makes an HTTP connection to the host and then
-   gives you the C-Kermit prompt. Here's a simple example that fetches a
-   publicly readable Web page:
-
-  http www.columbia.edu -g kermit/index.html
-
-   If you need to access a website for which a username and password are
-   required, you can supply them on the command line with -u and -P. If
-   you include a username but omit the password, Kermit prompts you for
-   it:
-
-  http www.columbia.edu -u olga -p kermit/index.html -l index.html
-  Password:
-
-   Note that when PUT'ing files to websites, you have to supply both the
-   -p (remote pathname) and -l (local path) options.
-
-   If your version of Kermit is built with SSL/TLS security, you can also
-   use the -z option to make secure HTTP (https) connections.
-
-   Finally, as noted in [184]Section 16, you can also give a URL instead
-   of a host name and options.
-
-   [ [185]Top ] [ [186]Contents ] [ [187]C-Kermit Home ] [ [188]Kermit
-   Home ]
-  __________________________________________________________________________
-
-3. THE BUILT-IN FTP CLIENT
-
-     3.1.  [189]Making and Managing FTP Connections
-     3.2.  [190]Making Secure FTP Connections
-     3.3.  [191]Setting FTP Preferences
-     3.4.  [192]Managing Directories and Files
-     3.5.  [193]Uploading Files With FTP
-     3.6.  [194]Downloading Files With FTP
-     3.7.  [195]Translating Character Sets
-     3.8.  [196]FTP Command Shortcuts
-     3.9.  [197]Dual Sessions
-     3.10. [198]Automating FTP Sessions
-     3.11. [199]Advanced FTP Protocol Features
-
-   Earlier versions of C-Kermit and K95 included an FTP command, but it
-   simply invoked an external FTP client. Now, by popular demand, Kermit
-   includes its own built-in FTP client that offers the following
-   advantages over traditional FTP clients (and its previous interface to
-   them):
-
-     * Any of Kermit's built-in [200]security methods can be used to
-       establish and conduct secure FTP sessions with [201]FTP servers
-       that support these methods. (Security modules can be subject to
-       export restrictions.)
-     * Kermit's FTP client uses "passive mode" by default to avoid
-       blockage by firewalls and network address translators. Of course
-       active mode can be chosen too when needed.
-     * [202]Character sets can be translated as part of the transfer
-       process even when the FTP server does not support character-set
-       translation, including to/from the new Internet standard
-       international character set, [203]Unicode UTF-8. This includes
-       both the file's name and (for text files only) its contents.
-     * All of C-Kermit's [204]file-selection mechanisms are available:
-       size, date, name patterns and lists, exception lists, etc.
-     * [205]Atomic file movement capabilities are provided (delete, move,
-       or rename files automatically after successful transfer).
-     * The correct file type, "ascii" (i.e. text) or binary, is chosen
-       automatically for each file (explained in [206]Section 4), and any
-       mixture of text and binary files can be sent in a single
-       operation, even across platforms.
-     * Update mode ("don't bother transferring files that didn't change
-       since last time") and recovery (resumption of an interrupted
-       transfer from the point of failure) are available in both
-       directions.
-     * When uploading files from UNIX to UNIX, the file's permissions can
-       be preserved if desired.
-     * Recursive directory-tree PUTs are supported between any two
-       platforms that have tree-structured file systems. Recursive GETs
-       are supported between like platforms if the server cooperates and
-       between like or unlike platforms if the server supports MLSD
-       ([207]Section 3.11).
-     * When receiving files, all of Kermit's file collision actions are
-       available: backup, update, refuse, rename, etc.
-     * Multi-file transfers can be interrupted on a per-file basis,
-       automatically skipping to the next file.
-     * FTP sessions are [208]fully scriptable.
-     * An entire FTP session (connect, login, CD, upload or download,
-       logout) can be specified on the command line without using a
-       script.
-     * All of Kermit's logging options and formats are available to keep
-       an accurate and complete record of each connection and file
-       transfer, and to aid in troubleshooting.
-     * All of Kermit's file-transfer display options are available
-       (fullscreen, brief, CRT, serial, none).
-
-   And best of all:
-     * Kermit doesn't give you those annoying per-file prompts every time
-       you start a multi-file transfer without remembering to give a
-       "prompt" command first :-).
-
-   [ [209]Top ] [ [210]FTP Top ] [ [211]FTP Client Overview ] [ [212]FTP
-   Script Tutorial ] [ [213]C-Kermit Home ] [ [214]Kermit Home ]
-     _________________________________________________________________
-
-  3.1. Making and Managing FTP Connections
-
-   Each copy of Kermit can have one FTP connection open at a time. FTP
-   connections are independent of regular terminal connections; a
-   terminal connection (serial or network via SET LINE, DIAL, SET HOST,
-   TELNET, etc) may be, but need not be, open at the same time as an FTP
-   connection, and terminal connections can also be closed, and new
-   connections opened, without interfering with the FTP connection (and
-   vice versa). Thus, for example, Kermit can have an FTP connection and
-   a TELNET connection open to the same host simultaneously, using the
-   TELNET connection (e.g.) to send mail or take other desired actions as
-   various FTP actions complete. Of course, each copy of Kermit can do
-   only one thing at a time, so it can't (for example) transfer a file
-   with FTP and another file with Kermit protocol simultaneously.
-
-   A Kermit FTP session can be established by [215]command-line options,
-   by [216]URL, or by [217]interactive commands.
-
-    3.1.1. Kermit Command-Line Options for FTP
-
-   The new command-line option '-9' (sorry, we're out of letters) can be
-   used when starting C-Kermit, telling it to make an FTP connection:
-
-  kermit -9 hostname
-
-   or if a non-default FTP port is needed:
-
-  kermit -9 hostname:port
-
-   You can also specify the username on the command line with the -M ("My
-   User ID") option that was already there for other connection types:
-
-  kermit -9 hostname -M olga
-
-   If you specify the username on the command line, Kermit uses it when
-   making the connection and does not prompt you for it (but it does
-   prompt you for the password if one is required).
-
-   Once the connection is made, you get the regular Kermit prompt, and
-   can give interactive commands such as the ones described below. When
-   you give a BYE command, Kermit closes the session and exits, just as a
-   regular FTP client would do. If you don't want Kermit to exit when you
-   give a BYE command, include the -S ("Stay") option on the command
-   line.
-
-   Other Kermit command-line options that are not specific to non-FTP
-   connections should affect the FTP session in the expected ways; for
-   example, -i and -T force binary and text mode transfers, respectively.
-
-   File transfers can not be initiated on the "kermit -9" command line;
-   for that you need to use Kermit's FTP personality (next section) or
-   you can use URLs ([218]Section 3.1.3).
-     _________________________________________________________________
-
-    3.1.2. The FTP Command-Line Personality
-
-   If you want to replace your regular FTP client with C-Kermit, you can
-   make a link called "ftp" to the C-Kermit binary (or you can store a
-   copy of the C-Kermit binary under the name "ftp"). When C-Kermit is
-   invoked with a program name of "ftp" (or "FTP", case doesn't matter),
-   it assumes the command-line personality of the regular FTP client:
-
-  ftp [ options ] hostname [ port ]
-
-   In this case the options are like those of a regular FTP client:
-
-  -d  Debug: enables debug messages and creates a debug.log file.
-  -n  No autologin: Kermit should not send your user ID automatically.
-  -t  Packet trace: accepted but is treated the same as -d.
-  -v  Verbose: accepted but ignored (operation is verbose by default).
-  -i  Not interactive: accepted but ignored.
-
-   and the hostname can also be a URL (explained in [219]Section 3.1.3).
-   To specify a non-default TCP port for the FTP server, include the port
-   number or name after the hostname.
-
-   There are also some bonus options that allow you to execute an entire
-   FTP session from the shell command line, as long as you don't include
-   the -n option. These are not available with regular FTP clients, and
-   at least one of these options (-g) conflicts with UNIX ftp (where -g
-   means "no globbing", which does not apply to Kermit), and some of them
-   (like the options above) also conflict with regular Kermit
-   command-line options:
-
-  -m mode      = "passive" (default) or "active"
-  -Y            Don't execute the Kermit initialization file [1]
-  -q            Quiet, suppresses all but error messages [1]
-  -S            Stay, don't exit automatically [1]
-  -A            Autologin anonymously [2]
-  -u name       Username for autologin [2] (synonym: -M [1])
-  -P password   Password for autologin (see cautions below) [2]
-  -D directory  cd after autologin [2]
-  -b            Binary mode [2]
-  -a            Text ("ascii") mode [2] (synonym: -T [1])
-  -R            Recursive (works with -p) [4]
-  -p files      Files to put (upload) after autologin [2] (synonym: -s [1])
-  -g files      Files to get (download) after autologin [3]
-
-   [1] Same as Kermit, not available in regular FTP clients.
-   [2] Conflicts with Kermit, not available in regular FTP clients.
-   [3] Same as Kermit, conflicts with regular FTP clients.
-   [4] Conflicts with Kermit, available in some FTP clients.
-
-   Fancier options such as restart, character-set translation, filename
-   collision selection, automatic move/rename/delete, etc, are not
-   available from the command line; for these you can use the commands
-   described in the following sections. The -R option might also work
-   with -g (GET) but that depends on the server.
-
-   The following security options are also available, explained in
-   [220]Section 3.2:
-
-  -k realm      Kerberos 4 realm [4]
-  -f            Kerberos 5 credentials forwarding [4]
-  -x            autoencryption mode [4]
-  -c cipher     SRP cipher type [4]
-  -H hash       SRP encryption hash [4]
-  -z option     Security options [4]
-
-   If you include -A or specify a name of "anonymous" or "ftp", you are
-   logged in anonymously and, in the absence of -P, Kermit automatically
-   supplies a password of "user@host", where "user" is your local user
-   ID, and "host" is the hostname of the computer where Kermit is
-   running. If you do not include -p or -g, Kermit enters command mode so
-   you can type commands or execute them from a script.
-
-   If you include -p or -g, Kermit attempts to transfer the specified
-   files and then exits automatically at the end of the transfer unless
-   you also included -S (Stay). It uses the "brief" file transfer display
-   (one line per file) unless you include the -q option to suppress it.
-
-   When uploading files with -p, Kermit switches automatically between
-   text and binary mode for each file.
-
-   When downloading, you can either specify a particular mode (text or
-   binary) to be used for all the files, or you can let Kermit select the
-   type for each file automatically, based on its name (see [221]Sections
-   3.5 and [222]3.6 for greater detail). In UNIX be sure to quote any
-   wildcard characters to prevent the shell from expanding them, as shown
-   in the examples just below. Filename collisions are handled according
-   Kermit's FILE COLLISION setting (if specified in your Kermit
-   customization file; otherwise the default, which is BACKUP).
-
-   It should go without saying that the -P option should be used with
-   caution. In addition to the well-known risks of transmitting plaintext
-   passwords over the Internet, in this case the password also echos to
-   the screen if you type it, and can be seen in ps and w listings that
-   show the user's currently active command and command-line arguments.
-   Thus command-line FTP sessions are most appropriate for secure or
-   anonymous connections (those that do not require passwords).
-
-   Here's an example in which you download the latest C-Kermit "tarball"
-   from the Columbia University FTP archive:
-
-  ftp -A kermit.columbia.edu -bg kermit/archives/ckermit.tar.gz
-
-   This assumes that "ftp" is a symbolic link to C-Kermit. It logs you in
-   anonymously and gets the ckermit.tar.gz file in binary mode from the
-   kermit/archives directory.
-
-   Here's a slightly more ambitious example that illustrates CD'ing to
-   the desired server directory to get a group of files in text mode (in
-   this case the C-Kermit source files):
-
-  ftp -A kermit.columbia.edu -D kermit/f -ag "ck[cuw]*.[cwh]" makefile
-
-   In this case we CD to the kermit/f directory so we don't have to
-   include it in each file specification, and we quote the ck[cuw]*.[cwh]
-   specification so the shell doesn't expand it, since we have to pass it
-   as-is to the server. Note also that the quotes don't go around the
-   entire file list; only around each file specification that needs to be
-   quoted.
-
-   Here's one more example, that uploads a debug log file in binary mode
-   to the Kermit incoming directory (as we might ask you to do when
-   following up on a problem report):
-
-  ftp -A kermit.columbia.edu -D kermit/incoming -bp debug.log
-
-   In this case the -D option is required to tell the server where to put
-   the incoming file.
-
-   Unless the -Y option is included, your Kermit initialization file
-   (.mykermrc in UNIX, K95.INI in Windows) is executed before the command
-   line options, so you can set any FTP-related preferences there, as
-   described in the subsequent sections.
-     _________________________________________________________________
-
-    3.1.3. The FTP URL Interpreter
-
-   If Kermit is invoked with either its regular personality (as "kermit")
-          or its FTP personality (as "ftp"), you can also give a URL
-          (Universal Resource Locator) instead of a hostname and options,
-          with or without a username and password:
-          ftp ftp://user:password@host/path
-          ftp ftp://user@host/path
-          ftp ftp://@host/path   (or ftp://:@host/path)
-          ftp ftp://host/path
-          kermit ftp://host/path
-
-   If the FTP personality is used, the service must be "ftp". In all
-   cases, a hostname or address must be included. If a user is included
-   but no password, you are prompted for the password. If a path
-   (filename) is included:
-     * If "@" is included without a user, Kermit prompts for the username
-       and password.
-     * If no user and no "@" are included, "anonymous" is used.
-     * GET is assumed.
-
-   If no path (and no action options) are included, an interactive FTP
-          session is started, as in this example:
-          ftp ftp://kermit.columbia.edu
-
-   If a path is included, but a username is not included, "anonymous" is
-   used and an appropriate user@host password is supplied automatically.
-   If authentication is successful, Kermit attempts to GET the file
-   indicated by the path or, if the path is the name of a directory, it
-   asks the server for a directory listing. In both cases, Kermit
-   disconnects from the server and exits after the operation is complete
-   (unless you have included the -S option on the command line).
-
-   Here's an example that gets a listing of the Kermit directory at the
-          Kermit ftp site:
-          ftp ftp://kermit.columbia.edu/kermit/
-
-   This example gets the top-level READ.ME file from the same directory:
-          ftp ftp://kermit.columbia.edu/kermit/READ.ME
-
-   Here's the same example, but requesting a text-mode transfer:
-          ftp -T ftp://kermit.columbia.edu/kermit/READ.ME
-          This illustrates that you can mix command-line options and URLs
-          if you desire.
-
-   Here's an example that logs in as a (fictitious) real user to get a
-          file:
-          ftp ftp://olga@ftp.xyzcorp.com/resume.txt
-          The password is not included, so Kermit prompts for it.
-
-   This scheme allows Kermit to be used as the FTP helper of other
-   applications, such as Web browsers, with all its advantages over other
-   FTP clients (especially the ones that are built in to most Web
-   browsers), e.g. that it can be given wildcards, and it can pick text
-   and binary mode automatically for each file.
-
-   HINT: suppose somebody sends you an FTP URL in email, or you see it in
-   some text. If your terminal screen supports copy/paste, copy the url,
-   and then at the shell prompt type "kermit", a space, and then paste
-   the URL, e.g.:
-
-  $ kermit ftp://alpha.greenie.net/pub/mgetty/source/1.1/mgetty1.1.27-O
-
-   "$ is the shell prompt; the part you type is underlined, the rest is
-   pasted in. Kermit does the rest.
-     _________________________________________________________________
-
-    3.1.4. Interactive FTP Session Establishment
-
-   As you read this and the following sections, bear in mind that any
-   command that can be given at the prompt can also be used in a script
-   program. Kermit's script programming language is the same as its
-   interactive command language. [223]CLICK HERE if you would like to
-   learn a bit more about script writing.
-
-   An FTP session is established with the FTP OPEN command:
-
-   FTP [ OPEN ] [ { /SSL, /TLS } ] hostname [ switches ] [ port ]
-          Opens an FTP connection to the given host on the given port
-          and, if FTP AUTOLOGIN is ON, also logs you in to the server,
-          prompting for username and password if necessary. If no port is
-          specified, the regular FTP protocol port (21) is used. The OPEN
-          keyword is optional (unless the hostname conflicts with one of
-          the FTP command keywords, which you can list by typing "ftp
-          ?").
-
-   The hostname can be an IP host name, numeric IP address, or if you
-   have a network directory active (SET NETWORK DIRECTORY; see Chapter 6
-   of [224]Using C-Kermit), an entry name in the directory. In the latter
-   case, if the given hostname matches exactly one entry, the associated
-   name or address is used; if it matches more than one, Kermit cycles
-   through them until one is found that can be opened; if it matches
-   none, then the hostname is used as-is. If a directory is active but
-   you want to bypass directory lookup, include an "=" sign at the
-   beginning of the hostname, and/or use a numeric IP address.
-
-   When an FTP connection is opened, the default file-transfer mode is
-   set to binary if the client and server platforms are alike (e.g. both
-   of them are some kind of UNIX), and to text ("ascii") if they are not
-   alike. This has no particular effect for uploading since Kermit
-   automatically switches between text and binary mode for each file, but
-   might be important for downloading. The connection is also set to
-   Stream mode and File structure. Record- or page-oriented file
-   transfers are not supported by C-Kermit's FTP client.
-
-   The optional FTP OPEN switches are:
-
-   /ANONYMOUS
-          Logs you in anonymously, automatically supplying username
-          "anonymous" and user@host as the password, based on your local
-          user and host names.
-
-   /NOLOGIN
-
-          Overrides SET FTP AUTOLOGIN ON for this connection only.
-
-   /USER:name
-          Uses the given username to log you in, thus avoiding the Name:
-          prompt.
-          Overrides SET FTP AUTOLOGIN OFF for this connection only.
-
-   /PASSWORD:text
-          Uses the given text as your password, thus avoiding the
-          Password: prompt. This switch is not recommended for use in
-          script files, which would be a security risk.
-
-   /ACCOUNT:text
-          Uses the given text as your account (or secondary password,
-          depending on the requirements of the server; most servers do
-          not require or accept an account name). If an account is not
-          supplied, you are not prompted for one.
-
-   /PASSIVE
-          Opens the connection in passive mode. Passive mode is the
-          default in Kermit's FTP client, unlike in most others, since it
-          works better through firewalls. The /PASSIVE and /ACTIVE
-          switches apply only to the connection that is being opened, and
-          do not affect the global FTP PASSIVE-MODE setting.
-
-   /ACTIVE
-          Opens the connection in active mode. Use this switch if the
-          server does not support passive mode, or use the command SET
-          FTP PASSIVE-MODE OFF.
-
-   /NOINIT
-          Added in C-Kermit 8.0.201.   Tells C-Kermit not to send REST,
-          STRU, FEAT, and MODE commands to the server when the connection
-          is opened, since these have been reported to cause confusion in
-          certain servers.
-
-   When a username or password is missing, a prompt is issued at the
-   controlling terminal and you must type the response; the response can
-   not be scripted. Use the switches to avoid prompts, or one of the
-   secure authentication methods described in the next section, or see
-   [225]SET FTP AUTOLOGIN and the [226]FTP USER and similar commands
-   described later in this section.
-
-   Examples:
-
-  ftp open kermit.columbia.edu /anonymous  ; Open and log in anonymously
-  ftp kermit.columbia.edu /anonymous       ; The OPEN keyword can be omitted
-  ftp xyzcorp.com                          ; Open and maybe prompt for username
-  ftp xyzcorp.com /user:olga               ; Open and log in as olga
-  ftp testing.abccorp.com 449              ; Specify a special TCP port number
-  ftp testing.abccorp.com /user:olaf /password:secret 449
-
-   The FTP OPEN command succeeds if a connection was opened to the server
-   (even if the given username and password were not valid) and fails
-   otherwise (see [227]Section 3.8 for details).
-
-   When your FTP session is complete, you can terminate it as follows:
-
-   FTP BYE
-          Closes the FTP connection if one was open. The FTP prefix can
-          be omitted if no other connection is open at the same time (see
-          [228]Section 3.8 for details). If a connection log is active,
-          an FTP record is written to it. If Kermit was started with the
-          -9 command-line option or with its FTP command-line
-          personality, and the -S (Stay) option was not given, AND there
-          is no other active connection, the FTP BYE command also exits,
-          just as it does on a regular FTP client. Synonyms: FTP CLOSE,
-          FTP QUIT (but if the FTP prefix is omitted from QUIT, this
-          becomes the regular Kermit QUIT command, which is equivalent to
-          EXIT; i.e. it closes the connection and exits from Kermit).
-
-   The following commands can be used to achieve greater control over the
-   connection and login process:
-
-   SET FTP ANONYMOUS-PASSWORD text
-          Allows you to choose the password text to be sent automatically
-          by Kermit when you open an FTP connection with the /ANONYMOUS
-          switch.
-
-   SET FTP AUTOLOGIN { ON, OFF }
-          If you give this command prior to opening an FTP connection, it
-          controls whether Kermit tries to log you in automatically as
-          part of the connection process. Normally ON, which means the
-          username and password are sent automatically (and prompted for
-          if they are not yet known). When OFF, FTP OPEN connects to the
-          server without logging in. OFF is equivalent to the -n
-          command-line option when using Kermit's FTP command-line
-          personality.
-
-   FTP USER name [ password [ account ] ]
-          Used to log in to an FTP server to which a connection has been
-          made without autologin, or when autologin failed. If the
-          password is furnished on the command line, it is used;
-          otherwise you are prompted for a password. An account may also
-          be furnished if required by the server; it is not required by
-          Kermit and is not prompted for if omitted. Synonyms: USER, FTP
-          LOGIN.
-
-   FTP ACCOUNT text
-          Sends an account name to a server that supports accounts. If
-          the server does not support accounts, an error response occurs.
-          If the server does support accounts, the account is accepted if
-          it is valid and rejected if it is not. The account might be
-          used for charging purposes or it might be a secondary password,
-          or it might be used for any other purpose, such as an access
-          password for a particular disk. Servers that support accounts
-          might or might not allow or require the account to be sent
-          prior to login; usually it is sent after login, if at all.
-          Synonym: ACCOUNT.
-
-   Example:
-
-set ftp autologin off                  ; One thing at a time please
-ftp xyzcorp.com                        ; Try to make the connection
-if fail exit 1 FTP connection failed   ; Check that it was made
-ftp user olga secret                   ; Now log in to the server
-if fail exit 1 FTP login failed        ; Check that it worked
-ftp account 103896854                  ; Login OK - send account
-if fail echo WARNING - FTP ACCT failed ; Warn if problem
-...                                    ; (have session here)
-bye                                    ; Log out and disconnect
-
-   The following commands are used to control or get information about
-   the FTP connection. Any particular FTP server does not necessarily
-   support all of them.
-
-   FTP RESET
-          Terminates a user session but leaves the connection open,
-          allowing a new login via FTP USER.
-
-   FTP IDLE [ number ]
-          Most FTP servers automatically log you out and and disconnect
-          your session if there has been no activity for a certain amount
-          of time. Use this command to ask the server to set its idle
-          limit to the given number of seconds. Omit the number to ask
-          the server to inform you of its current idle limit.
-
-   FTP STATUS [ filename ]
-          Asks the FTP server to send information about the current
-          session. The result is a free-format report that might include
-          server identification, username and login time, FTP protocol
-          settings, and file-transfer statistics. If a filename is given,
-          the server is supposed to send detailed information about the
-          file.
-
-   FTP SYSTEM
-          Asks the FTP server to identify its operating system (Listed in
-          Internet Assigned Numbers, Operating System Names). Examples:
-          UNIX, VMS, VM/CMS, WINDOWS-NT. Unfortunately many variations
-          are allowed (e.g. LINUX-2.0, LINUX-2.2, FREEBSD, ULTRIX, etc,
-          instead of UNIX; WINDOWS-NT-3, WINDOWS-NT-3.5, WINDOWS-NT-3.51,
-          WINDOWS-NT-4, etc). The report might also include other
-          information like "Type L8", "Type I", or "Type A", indicating
-          the file-transfer mode.
-
-   FTP HELP [ keyword [ keyword [ ... ] ]
-          Asks the server to list the commands it supports. The response
-          is usually cryptic, listing FTP command mnemonics, not the
-          commands used by the client (since the server has no way of
-          knowing anything about the client's user interface). For
-          example, the PUT command is STOR in FTP protocol. If a keyword
-          is given, which should be an FTP protocol command,
-          slightly-more- detailed help is given about the corresponding
-          command (if the FTP server supports this feature). Examples:
-          "ftp help", "ftp help stor".
-
-   FTP SITE text
-          (Advanced) Sends an FTP SITE (site-specific) command. Usually
-          this means that the FTP server is asked to run an external
-          command with the given arguments. You might be able to find out
-          what SITE commands are available by sending "ftp help site" to
-          the server, but in general the availability of and response to
-          SITE commands is (not surprisingly) site specific.
-
-   FTP QUOTE text
-          (Advanced) Sends an FTP command in FTP protocol format. Use
-          this command to send commands to the server that the FTP client
-          might not know about.
-
-   SHOW FTP
-          Lists client (Kermit) FTP settings and information. Also SHOW
-          CONNECTION, SHOW COMMUNICATIONS.
-
-   HELP FTP [ keyword ]
-          Asks Kermit to list and describe its built-in FTP commands.
-
-   HELP SET FTP [ keyword ]
-          Asks Kermit to list and describe its built-in SET FTP commands.
-
-   [ [229]Top ] [ [230]FTP Top ] [ [231]C-Kermit Home ] [ [232]Kermit
-   Home ]
-     _________________________________________________________________
-
-  3.2. Making Secure FTP Connections
-
-   Also see: [233]Accessing IBM Information Exchange with Kermit.
-
-   In the previous section, you can see several examples of traditional
-   insecure authentication: username and password sent across the network
-   in clear text. Of course this is bad practice on at least two counts:
-   (1) storing passwords in files (such as script files) gives access to
-   the target systems to anybody who can obtain read access to your
-   scripts; and (2) sending this information over the network leaves it
-   open to interception by network sniffers or compromised hosts.
-
-   Because of the increasing need for security on the Internet, FTP
-   servers are beginning to appear that offer secure forms of
-   authentication, in which no information is sent over the network that
-   would allow anyone who intercepts it to usurp your identity and gain
-   your access rights.
-
-   Kermit provides an equivalent form of FTP security for each type of
-   IETF standard security implemented in Telnet. These include
-   GSSAPI-KERBEROS5, KERBEROS4, Secure Remote Password (SRP), and
-   Transport Layer Security (SSL and TLS). It does not presently include
-   SSL tunneling nor any form of SSH v1 or v2. When Kermit is built with
-   the necessary libraries, secure FTP connections are attempted by
-   default, in which all connections are authenticated and the command
-   and data channels are private.
-
-   The use of authentication and encryption for FTP connections can be
-   adjusted with the commands listed below, which are available only if
-   your version of Kermit was built with the corresponding security
-   options and libraries:
-
-   SET FTP AUTHTYPE { AUTOMATIC, GSSAPI-KRB5, KERBEROS4, SRP, SSL, TLS }
-          Specifies an ordered list of authentication methods to be
-          attempted when AUTOAUTHENTICATION is ON. The default list is:
-          GSSAPI-KRB5, SRP, KERBEROS_V4, TLS, SSL. If none of the
-          selected methods are supported by the server, an insecure login
-          is used as a fallback. Note, by the way, that SSL or TLS can be
-          used to secure an anonymous connection.
-
-   SET FTP AUTOAUTHENTICATION { ON, OFF }
-          Tells whether authentication should be negotiated by the FTP
-          OPEN command. Default is ON. Use SET FTP AUTOAUTHENTICATION OFF
-          to force a clear-text, unencrypted connection to FTP servers
-          (such as the one at the Kermit FTP site) that normally would
-          try to negotiate secure authentication and encryption.
-
-   SET FTP AUTOENCRYPTION { ON, OFF }
-          Tells whether encryption (privacy) should be negotiated by the
-          FTP OPEN command, which can happen only if secure
-          authentication is also negotiated. Default is ON.
-
-   SET FTP AUTOLOGIN { ON, OFF }
-          Tells Kermit whether to try logging in automatically when you
-          make an FTP connection, as opposed to letting you do it "by
-          hand" with the FTP USER command.
-
-   SET FTP COMMAND-PROTECTION-LEVEL { CLEAR, CONFIDENTIAL, PRIVATE, SAFE
-          }
-          Determines the level of protection applied to the command
-          channel:
-
-  CLEAR         Data is sent in plaintext and not protected against tampering.
-  CONFIDENTIAL  Data is encrypted but not protected against tampering.
-  PRIVATE       Data is encrypted and is protected against tampering.
-  SAFE          Data is sent in plaintext but protected against tampering.
-
-          The default is PRIVATE.
-
-   SET FTP CREDENTIAL-FORWARDING { ON, OFF }
-          Tells whether end-user credentials are to be forwarded to the
-          server if supported by the authentication method (GSSAPI-KRB5
-          only). This is often required to allow access to distributed
-          file systems (e.g. AFS.)
-
-   SET FTP DATA-PROTECTION-LEVEL { CLEAR, CONFIDENTIAL, PRIVATE, SAFE }
-          Tells what level of protection is applied to subsequent data
-          channels. The meanings of the protection-level keywords are the
-          same as for SET FTP COMMAND-PROTECTION-LEVEL. The default is
-          PRIVATE.
-
-   SET FTP SRP CIPHER name
-          Specifies the cipher to be used for encryption when SRP
-          authentication is in use. The list of possible choices is
-          computed based on the capabilities of the local SRP library and
-          includes NONE plus zero or more of the following:
-
-  BLOWFISH_ECB        CAST5_ECB          DES_ECB          DES3_ECB
-  BLOWFISH_CBC        CAST5_CBC          DES_CBC          DES3_CBC
-  BLOWFISH_CFB64      CAST5_CFB64        DES_CFB64        DES3_CFB64
-  BLOWFISH_OFB64      CAST5_OFB64        DES_OFB64        DES3_OFB64
-
-          The default is DES3_ECB.
-
-   SET FTP SRP HASH name
-          Specifies the hash to be used for data protection when SRP
-          authentication is in use. The choices are MD5 and SHA. The
-          default is SHA.
-
-   Command-line options:
-
-   -k name
-          Specifies the realm to be used with Kerberos 4 authentication
-          (= SET AUTH K4 REALM name).
-
-   -f
-          Enables forwarding of Kerberos 5 credentials to the host when
-          using GSSAPI authentication (= SET AUTH K5 FORWARDABLE ON).
-
-   -x
-          Enables autoencryption (= SET FTP AUTOENCRYPTION ON).
-
-   -c cipher
-          Specifies the kind of cipher to be used for encryption with SRP
-          authentication. Equivalent to SET FTP SRP CIPHER, with the same
-          choices. If this option is not given, CAST5_CBC is used.
-
-   -H hash
-          Specifies the hash to be used for encryption with SRP
-          authentication. Equivalent to SET FTP SRP HASH, with the same
-          choices. If this option is not given, SHA is used.
-
-   -z debug
-          Turns on SSL/TLS debugging.
-
-   -z secure
-          Requires secure connection.
-
-   -z certsok
-          Says to accept all certificates without checking validity.
-
-   -z verify=n
-          Sets certificate verification mode to the given number, n:
-            0 = no verification
-            1 = verify certificate if presented
-            2 = require verification of certificate
-
-   -z cert=filename
-          Specifies a file containing a client certificate to be
-          presented to the FTP server.
-
-   -z key=filename
-          Specifies a file containing a private key matching the client
-          certificate.
-
-   -z !krb4
-          (nokrb4) Disables the use of Kerberos 4.
-
-   -z !gss
-   -z nogss
-          Disables the use of GSSAPI - Kerberos 5.
-
-   -z !srp
-   -z nosrp
-          Disables use of SRP.
-
-   -z !ssl
-   -z nossl
-          Disables the use of SSL.
-
-   -z !tls
-   -z notls
-          Disables the use of TLS.
-
-   Caution: If your FTP connection is secured via AUTH TLS, it is not
-   possible to interrupt a file transfer. This is a limitation of all
-   known FTP servers that support AUTH TLS.
-
-   Note that when using certain security methods, such as SSL or TLS, you
-   may be prompted to confirm or verify certain actions or conditions,
-   for example, whether to accept self-signed certificates. This can
-   interfere with unattended operation of scripts; see [234]Section 3.10.
-
-   [ [235]Top ] [ [236]FTP Top ] [ [237]C-Kermit Home ] [ [238]Kermit
-   Home ]
-     _________________________________________________________________
-
-   3.3. Setting FTP Preferences FTP preferences can be set globally and
-   persistently with the commands in the following sections; many of
-   these can also be overridden on a per-command basis with switches that
-   have the same name.
-
-    3.3.1. Logs, Messages, and Other Feedback
-
-   You can control the amount of feedback received from your FTP session
-   with the commands in this section. First, you can create a log of your
-   FTP transfers with the following commands:
-
-   SET TRANSACTION-LOG { VERBOSE, FTP, BRIEF }
-          Selects the log format. VERBOSE is the default, and is
-          described in [239]the manual. FTP chooses a WU-FTPD format, the
-          same as is used by the popular FTP server. BRIEF creates
-          per-file records in comma-separated-list format. For greater
-          detail, see [240]Section 4.17 of the [241]C-Kermit 7.0 Update
-          Notes.
-
-   LOG TRANSACTIONS filename
-          Records FTP (or Kermit, or any other protocol) uploads and
-          downloads in the given file using the format selected by the
-          most recent SET TRANSACTION-LOG command, if any, or else the
-          default format.
-
-   FTP screen messages and displays are controlled by the following
-   commands:
-
-   SET TRANSFER DISPLAY { FULLSCREEN, CRT, SERIAL, BRIEF, NONE, OFF }
-          FTP transfers use Kermit's normal file-transfer display styles.
-          Use this command to choose the desired format; the default on
-          most platforms is FULLSCREEN. The display is automatically
-          disabled if Kermit is running in the background or in batch.
-          BRIEF is always used for command-line initiated transfers
-          (unless suppressed by -q). While a file-transfer is in
-          progress, you can interrupt it in the normal Kermit way by
-          typing one of the following keys or key combinations:
-            X - Cancel current file but go on to the next one (if any).
-            Z - Cancel the entire transfer.   Ctrl-L or Ctrl-W - Refresh
-          the file-transfer display (if any).
-
-   SET FTP DISPLAY { FULLSCREEN, CRT, SERIAL, BRIEF, NONE, OFF }
-          Like SET TRANSFER DISPLAY, but applies only to FTP connections,
-          and does not affect Kermit- or other protocol file transfers.
-
-   SET QUIET { ON, OFF }
-          This command applies to Kermit in general, not just FTP. OFF by
-          default; when ON, it surpresses most messages from most
-          commands as well as the file-transfer display.
-
-   SET FTP PROGRESS-MESSAGES { ON, OFF }
-          Tells whether Kermit should print locally-generated feedback
-          messages for each non-file-transfer command. ON by default.
-
-   SET FTP VERBOSE-MODE { ON, OFF }
-          Tells whether to display all responses from the FTP server. OFF
-          by default. This shows all responses to all commands, except
-          when the file-transfer display is active, and unless you have
-          SET QUIET ON. When OFF, responses are shown only for commands
-          such as FTP PWD whose purpose is to display a response.
-
-   SET FTP DEBUG { ON, OFF }
-          Tells whether local client debugging information should be
-          displayed. OFF by default. When ON, the commands that are sent
-          to the server are shown, as well as its responses (even if
-          VERBOSE-MODE is OFF), plus additional informational messages
-          are printed regarding the progress of secure operations. Also,
-          the temporary file created by the [242]MGET command is not
-          deleted so you can see what's in it.
-
-   Set all of these to OFF when silent running is desired.
-
-    3.3.2. Operational Preferences
-
-   FTP DISABLE new-protocol-feature-name
-   FTP ENABLE new-protocol-feature-name
-          Explained in [243]Section 3.11.
-
-   SET FTP AUTOLOGIN { ON, OFF }
-          If you give this command prior to opening an FTP connection, it
-          controls whether Kermit tries to log you in automatically as
-          part of the connection process. Normally ON, which means the
-          username and password are sent automatically (and prompted for
-          if they are not yet known). When OFF, FTP OPEN connects to the
-          server without logging in. OFF is equivalent to the -n
-          command-line option when using Kermit's FTP command-line
-          personality. See [244]Section 3.1.4 for usage.
-
-   SET FTP PASSIVE-MODE { ON, OFF }
-          ON by default, to avoid random TCP port assignment for data
-          connections, which can prevent FTP protocol from working
-          through firewalls and network address translators (for more on
-          these topics, see the [245]Kermit security reference. Set to
-          OFF in case the FTP server does not support passive mode, or in
-          case the client has problems with it (it has been observed, for
-          example, that when using passive mode, the SCO XENIX 2.3.4
-          TCP/IP stack hangs in the connect() call forever). Synonyms:
-          PASSIVE [ ON ], PASSIVE OFF, PASV [ ON ], PASV OFF.
-
-   SET FTP SEND-PORT-COMMANDS { ON, OFF }
-          This command determines whether the FTP client sends a new PORT
-          command to the server when accepting incoming data connections
-          (as when not using passive mode.) When PASSIVE-MODE is OFF and
-          SET SEND-PORT is OFF, the port that was originally specified is
-          reused. This is the default behavior for normal FTP clients but
-          it is not compatible with many firewalls.
-
-   SET FTP CHARACTER-SET-TRANSLATION { ON, OFF }
-          Whether to translate character sets when transferring files
-          with FTP (explained in [246]Section 3.7). OFF by default.
-
-   SET FTP SERVER-CHARACTER-SET name
-          Tells Kermit the character set used by the FTP server, UTF-8 by
-          default ([247]Section 3.7).
-
-   SET FTP SERVER-TIME-OFFSET delta-time
-          Tells Kermit to apply the given [248]delta time to file
-          timestamps provided by the server for its files; for use when
-          (for example) the server does not have its timezone set
-          correctly.
-
-   SET FTP ERROR-ACTION { PROCEED, QUIT }
-          When transferring a group of files with FTP, and an error
-          occurs with one of the files, Kermit normally goes on the next
-          file. Use SET FTP ERROR-ACTION to QUIT to make Kermit stop the
-          transfer immediately and fail if an error occurs with any
-          single file in the group. Example: you have given Kermit a list
-          of files to send, and one of the files can not be found, or
-          read permission is denied. Note that cancelling a file by
-          typing 'X' during transfer is not considered an error (if you
-          want to cancel the entire transfer, type 'Z' or Ctrl-C).
-
-   SET FTP PERMISSIONS { AUTO, ON, OFF }
-          When uploading files with PUT or MPUT, this tells whether
-          Kermit should send each file's permissions. The default is OFF,
-          which means not to send permissions, in which case the uploaded
-          file's permissions are set by the FTP server according to its
-          own criteria. ON means to send them, AUTO means to send them
-          only if the client (Kermit) and server are on like platforms
-          (e.g. both UNIX). This command has no effect when downloading,
-          since the FTP protocol does not include a way for the server to
-          inform the client of a file's permissions. Also see [249]FTP
-          PUT /PERMISSIONS. Note that setting permissions after uploading
-          is likely to work (correctly or at all) only when the client
-          and server platforms are alike (e.g. both of them are some form
-          of UNIX). Also note that Windows files don't have permissions.
-          Also see [250]FTP CHMOD.
-
-   SET FTP DATES { ON, OFF }
-          When downloading files with GET or MGET, this tells whether
-          Kermit should try to set the received file's date from the
-          server's date. FTP DATES is ON by default. Note, however, that
-          FTP protocol does not allow date preservation when uploading.
-          So at best, SET FTP DATES ON can work only when downloading,
-          and then only when the server agrees to furnish file dates.
-
-   SET FTP FILENAMES { AUTO, CONVERTED, LITERAL }
-          When uploading (sending) files, this tells whether to convert
-          outbound filenames to "common form". This means allowing only
-          one period in a name, uppercasing any lowercase letters,
-          replacing spaces by underscores, etc. AUTOMATIC is the default,
-          meaning LITERAL when client and server are the same type of
-          system (e.g. UNIX) and CONVERTED otherwise. Special case: if
-          the setting is AUTOMATIC and the client is not UNIX and the
-          server identifies itself as UNIX, Kermit uses a less-strict
-          form of conversion, in which lowercase letters are not
-          uppercased and the filename can contain any number of periods,
-          but spaces are still converted to underscore. When receiving,
-          conversion generally means to change all-uppercase names to
-          lowercase and spaces to underscore.
-
-   SET FTP UNIQUE-SERVER-NAMES { ON, OFF }
-          Applies only to uploads. Tells the server to create new, unique
-          names for incoming files that have the same names as existing
-          files. OFF by default, in which case the server overwrites
-          existing files with new files of the same name. When ON, the
-          server uses its own built-in method for creating new names for
-          incoming files; for example, appending a period (.) and a
-          number to the name. CAUTION: Use this option only if you do not
-          need to refer to the file after it is uploaded, since FTP
-          protocol provides no mechanism for the client to find out what
-          name was assigned by the server.
-
-   SET FTP COLLISION { ... }
-          When downloading, what to do if an incoming file has the same
-          name as an existing file. Options are the same as for SET FILE
-          COLLISION. If this command is not given, Kermit's regular FILE
-          COLLISION setting is used. If this command is given, it
-          overrides the FILE COLLISION setting for FTP transfers only.
-          See [251]Section 3.6.2 for details.
-
-   SET FTP TYPE { TEXT, BINARY, TENEX }
-          Changes the default transfer mode. When sending (uploading)
-          files, this command has no effect unless you disable automatic
-          text/binary mode switching ([252]Section 4) with SET FILE SCAN
-          OFF or SET TRANSFER MODE MANUAL. When receiving (downloading)
-          files, this command establishes the transfer mode to be used
-          when a filename does not match any of Kermit's text or binary
-          filename patterns, unless you use SET FTP
-          GET-FILETYPE-SWITCHING or SET TRANSFER MODE MANUAL to disable
-          automatic switching, in which case, this command establishes
-          the transfer mode for all downloaded files. In all cases,
-          however, the FTP TYPE can be overridden in any GET or PUT
-          command by including a /TEXT (/ASCII), /BINARY, or /TENEX
-          switch. The FTP TYPE is independent of the Kermit FILE TYPE
-          setting. TENEX is used for sending 8-bit binary files to 36-bit
-          platforms such as TOPS-10, TOPS-20, and TENEX, and getting them
-          back again. Synonym: ASCII = TEXT. Note: there is also an FTP
-          TYPE command, which does what SET FTP TYPE does but also sends
-          a TYPE command to the server immediately if the given type is
-          different from the current one.
-
-   If you want want specific FTP preference settings to be in effect for
-   all your Kermit FTP sessions, put the desired SET FTP commands in your
-   Kermit customization file (~/.mykermrc in UNIX, K95CUSTOM.INI in
-   Windows).
-
-   [ [253]Top ] [ [254]FTP Top ] [ [255]C-Kermit Home ] [ [256]Kermit
-   Home ]
-     _________________________________________________________________
-
-  3.4. Managing Directories and Files
-
-   In Kermit, commands for directory and file management can refer to:
-
-     * The local computer
-     * A remote computer when you have a connection to a Kermit server or
-       IKSD.
-     * A remote computer when you have a connection to an FTP server.
-
-   (There can also be an HTTP connection, but the commands in this
-   section don't apply to HTTP connections.)
-
-   Thus in general, each such command comes in three forms:
-
-    1. With no prefix in C-Kermit 8.0.200, it refers to the local
-       computer (CD, DIR, etc). In C-Kermit 8.0.201 and later, however,
-       the "locus" switches to automatically to the remote FTP server
-       when you make an FTP connection (see the SET LOCUS description
-       [257]Section 7); thus C-Kermit 8.0.201 acts almost exactly like a
-       regular FTP client when it has an FTP connection, yet still acts
-       like itself on other kinds of connections.
-    2. With the REMOTE prefix, it is for a Kermit server (REMOTE CD,
-       REMOTE DIR).
-    3. With the FTP prefix, it's for an FTP server (FTP CD, FTP DIR).
-    4. Also see [258]Section 3.8, which explains "R-commands" and
-       "L-commands".
-
-   Kermit's FTP file and directory management commands are as follows.
-   When an R-command is included in the Synonyms list, be sure to read
-   [259]Section 3.8 about rules for use of R-commands.
-
-   FTP CD [ directory ]
-          Tells the FTP server to change its default (working) directory
-          to the one given, which usually must be expressed in the syntax
-          of the server platform (UNIX, VMS, etc). If the directory is
-          not specified, the result depends on the FTP server -- it might
-          complain that the command is illegal, or it might change to
-          your original login directory. Synonyms: FTP CWD (Change
-          Wording Directory); RCD.
-
-   FTP CDUP
-          Tells the FTP server to change its default (working) directory
-          to the parent directory of its current one (equivalent to
-          "cd .." in UNIX, or "cd [-]" in VMS). Synonyms: RCDUP, FTP UP.
-
-   FTP PWD
-          Asks the FTP server to report ("print") its current working
-          directory. Synonym: RPWD.
-
-   FTP MKDIR directory
-          Asks the FTP server to create the directory whose name is
-          given. In general, the name must be in the syntax of the
-          server's file system, and it must be either absolute (a full
-          pathname) or relative to the server's current (working)
-          directory. This command fails if the directory can't be created
-          for any reason, including that it exists already. Synonym:
-          RMKDIR.
-
-   FTP RMDIR directory
-          Asks the FTP server to remove the directory whose name is
-          given. The rules are the same as for MKDIR, plus in most cases,
-          the server will not remove any directory unless it is empty.
-          Synonym: RRMDIR.
-
-   FTP DIRECTORY [ filespec ] [ redirectors ]
-          Tells the FTP server to send a directory listing of the
-          specified files. If no filespec is given, the server lists all
-          files in its current working directory. The results are in
-          whatever format the server chooses to send them. You can use
-          UNIX-like redirectors to send the listing to a file or a
-          pipeline, exactly as with the regular Kermit client/server
-          REMOTE DIRECTORY command ([260]Using C-Kermit, Chapter 11).
-          Synonym: RDIRECTORY. Examples:
-
-    ftp dir                           ; Show listing of all files on screen
-    ftp dir *.txt                     ; List *.txt files on screen
-    ftp dir *.txt > somefile          ; Put listing in somefile
-    ftp dir *.txt >> somefile         ; Append listing to somefile
-    ftp dir *.txt | sort > somefile   ; Put sorted listing in somefile
-    ftp dir | more                    ; Runs list through "more"
-    ftp dir | sort | more             ; Runs list through "sort" and "more"
-
-   FTP VDIRECTORY [ filespec ] [ redirectors ]
-          "Verbose" directory. This is an alternative FTP DIRECTORY
-          command primarily for use with DECSYSTEM-20 (TOPS-20) FTP
-          servers, which send only filenames when given a DIRECTORY
-          command; the VDIRECTORY command makes them also send file
-          sizes, dates, and attributes.
-
-   FTP CHECK filespec
-          Asks the FTP server whether the given file exists or, if the
-          filespec contains wildcards, if any files match, and this
-          command succeeds or fails accordingly.
-
-   FTP MODTIME filename
-          Asks the FTP server, via the not-yet-standard FTP MDTM command,
-          to send the modification date and time of the given file. The
-          response should be a numeric string in the format:
-          yyyymmddhhmmssxxxxx... where yyyy is the year, mm is the month,
-          dd is the day, hh is the hour (0-23), mm is the minute, ss is
-          the second, and xxx... is the optional fraction of the second
-          (0 or more digits). The date and time is expressed in UTC (GMT,
-          Zulu, Zero-Meridian). The result is available programmatically
-          in the [261]\v(ftp_message) variable, and is understandable by
-          Kermit's date-time switches and functions. For example, suppose
-          we want to upload all local files that are newer than a
-          particular file on the server:
-
-  C-Kermit> ftp modtime signpost
-  C-Kermit> echo \v(ftp_message)
-  20010807113542.014
-  C-Kermit> ftp mput /after:\v(ftp_message)GMT *
-
-          Note that we must append "GMT" to the date-time string to let
-          the /AFTER switch know the time is GMT rather than local.
-
-   FTP SIZE filename
-          Asks the FTP server to send the size (in bytes) of the given
-          file. The result might vary depending on whether the current
-          FTP TYPE is binary or text ("ascii"). For a reliable byte
-          count, do FTP TYPE BINARY first. The result is available
-          programmatically in the [262]\v(ftp_message) variable.
-
-   FTP CHMOD permissions filename
-          Tells the FTP server to set the permissions (protection) of the
-          given file to the ones given. The permissions and filename must
-          be given in whatever syntax is required by the server. Example
-          (for a UNIX-based FTP server):
-
-  ftp chmod 664 oofa.txt
-
-          Not all servers support this command. For non-UNIX-based
-          servers, you might need to use FTP QUOTE or FTP SITE and the
-          appropriate platform-specific FTP server command.
-
-   FTP UMASK [ number ]
-          This command is probably specific to UNIX-based servers; it
-          sets the UNIX "umask", which is the default permissions mask
-          for new (in this case, incoming) files. Crudely put, the UNIX
-          umask is an octal representation of a binary number in in which
-          a 1 bit stands for a permission bit that must be 0, and a 0 bit
-          stands for a permission bit that can be 0 or 1 depending on
-          other factors, such as the permissions of the parent directory.
-          Example: "umask 007" requires that new files are created
-          without read/write/execute world permission. If the number is
-          not specified, the server's current umask is reported.
-
-   FTP RENAME filename newname
-          Asks the FTP server to rename the file whose name is "filename"
-          to "newname". Works only for one file; can not be used with
-          wildcards. The server's interpretation of "newname" can vary
-          (in some cases it must be a filename, in others perhaps it can
-          also be a directory name, in which case if the filename denote
-          a regular file, the file might be moved to the given
-          directory). Some servers might allow files to be renamed
-          ("moved") between physical disks or partitions, others might
-          not. Synonym: RRENAME.
-
-   FTP DELETE [ switches ] filespec [ filespec [ ... ] ]
-          Tells the FTP server to delete the file or files listed. Each
-          file specification may, but need not, contain wildcard
-          characters to match multiple files. File specifications and
-          wildcard syntax must be those of the server. Any file
-          specifications that contain spaces must be enclosed in braces
-          or doublequotes. FTP DELETE switches are:
-
- /ERROR-ACTION:  /FILENAMES:     /NOBACKUPFILES  /QUIET
- /EXCEPT:        /LARGER-THAN:   /NODOTFILES     /NOPAGE
- /PAGE           /RECURSIVE      /SMALLER-THAN:
-
-          When used with FTP DELETE, the /RECURSIVE switch deletes files
-          but not directories, and furthermore depends on the server
-          providing recursive file lists, which is not the normal
-          behavior. For further details, see the decriptions of these
-          switches in [263]Section 3.6. Synonyms: FTP MDELETE (Kermit
-          makes no distinction between DELETE and MDELETE); RDELETE.
-
-   FTP TYPE { TEXT, BINARY, TENEX }
-          Tells the FTP server to change its file-transfer type to the
-          one given, immediately. See [264]SET FTP TYPE for details.
-
-   [ [265]Top ] [ [266]FTP Top ] [ [267]C-Kermit Home ] [ [268]Kermit
-   Home ]
-     _________________________________________________________________
-
-  3.5. Uploading Files With FTP
-
-   Uploading means sending files from the client (Kermit) to the FTP
-   server. The basic command for uploading files with FTP is PUT:
-
-   FTP PUT [ switches ] [ filespec [ as-name ] ]
-          Uploads (sends) the file or files that match the file
-          specification, which may include wildcards, to the server. If
-          no filespec is given, the names of files to send are taken from
-          the /LISTFILE: file, if any, otherwise from the SEND-LIST, if
-          any. Unless you go out of your way to prevent it, Kermit
-          determines the transfer mode (text or binary) for each file
-          automatically, and switches automatically on a per-file basis.
-          If an as-name is given, the file is sent under that name
-          instead of its own (if an as-name is given with a wildcard
-          filespec, the result is a bit more complicated, and is
-          explained later in this section).
-
-   Unlike normal FTP clients, Kermit does not prompt you by default (or
-   at all) for each file; it just sends them, just as it does with Kermit
-   protocol. The filespec can be a literal filename or a Kermit pattern,
-   described in:
-
-  [269]http://www.columbia.edu/kermit/ckermit70.html#x4.9
-
-   Kermit patterns are equivalent to C-Shell patterns and provide a fair
-   amount of flexibility in selecting which files to send, which is
-   augmented by the file-selection switches presented in [270]Section
-   3.5.1.
-
-   FTP MPUT [ switches ] filespec [ filespec [ ... ] ]
-          FTP MPUT is just like FTP PUT except it allows you to give more
-          than one file specification, and it does not allow an as-name
-          in the file list. However, as-names can be given to either PUT
-          or MPUT with the /AS-NAME: switch.
-
-   If a PUT or MPUT command results in one file being uploaded, it
-   succeeds if the file is uploaded completely and fails otherwise. If
-   more than one file is selected for upload, success or failure depends
-   on the [271]FTP ERROR-ACTION setting; if it is PROCEED (the default
-   setting), then the [M]PUT command succeeds if at least one of the
-   files was completely uploaded, and fails otherwise, If FTP
-   ERROR-ACTION is QUIT, the [M]PUT command succeeds if all selected
-   files were uploaded successfully, and fails if any file failed.
-
-   FTP uploads may be interrupted just like Kermit uploads. While the
-   transfer is in progress, type:
-
-  X to interrupt the current file and go on to the next file.
-  Z to cancel the current file and all remaining files.
-  ^C (Control-C): Like Z, but might act more quickly.
-
-   MPUT may be used as in regular FTP clients, but it is not required to
-   send multiple files; in Kermit it is required only if you want to give
-   multiple file specifications. Examples:
-
-  ftp put oofa.txt               ; Send a single file oofa.txt
-  ftp put oofa.txt budget.txt    ; Send single file oofa.txt as budget.txt
-  ftp put *.txt                  ; Send all *.txt files
-  ftp mput *.txt                 ; Send all *.txt files (same as "put *.txt")
-  ftp mput *.txt foo.bar         ; Send all *.txt files plus foo.bar
-
-   The distinction between PUT and MPUT is important only when more than
-   one filespec is given, just like the distinction between Kermit SEND
-   and MSEND:
-
-  ftp put oofa.txt budget.txt    ; Send oofa.txt AS budget.txt
-  ftp mput oofa.txt budget.txt   ; Send oofa.txt AND budget.txt
-
-   If the source file specification includes any path segments, for
-   example:
-
-  put /tmp/oofa.txt
-  put subdir/another/andanother/oofa.txt
-
-   the path portion is stripped from the filename that is sent to the
-   server. However, if an as-name contains a path, it is retained.
-   Examples:
-
-  ftp put /usr/doc/oofa.txt      ; Send as "oofa.txt".
-  ftp put oofa.txt /tmp/oofa.txt ; Send as "/tmp/oofa.txt"
-
-   The latter example sends the file oofa.txt from your current local
-   directory to the server's /tmp directory. This works only if the
-   server uses the same directory notation that you used in the as-name
-   AND the given directory already exists on the server AND if you have
-   write access to it.
-
-   Use caution when uploading from a case-sensitive file system, such as
-   UNIX, to a file system that is not case sensitive, such as Windows or
-   VMS. If you have two files in UNIX, AA and aa and upload both of them,
-   the second one will overwrite the first. The only way around this
-   provided by FTP protocol is its "unique server names" feature (SET FTP
-   UNIQUE-SERVER-NAMES or the /UNIQUE switch described below).
-     _________________________________________________________________
-
-    3.5.1. FTP PUT Switches
-
-   FTP PUT and MPUT are similar in format and behavior to the regular
-   Kermit SEND and MSEND commands, and they allow most of the same
-   optional switches:
-
-C-Kermit>ftp put ? Filename, or switch, one of the following:
- /after:                 /larger-than:           /rename-to:
- /array:                 /listfile:              /server-character-set:
- /as-name:               /local-character-set:   /server-rename-to:
- /before:                /move-to:               /simulate
- /binary                 /nobackupfiles          /smaller-than:
- /command                /nodotfiles             /tenex
- /delete                 /nofollowlinks          /text
- /dotfiles               /not-after:             /transparent
- /error-action:          /not-before:            /type:
- /except:                /permissions:           /update
- /filenames:             /quiet                  /unique-server-names
- /filter:                /recover
- /followlinks            /recursive
-
-   Since most of these switches are common to Kermit's SEND and MSEND
-   commands, they described only briefly here. For greater detail see:
-
-     [272]http://www.columbia.edu/kermit/ckermit70.html#x1.5 (explanation
-   of switches)
-     [273]http://www.columbia.edu/kermit/ckermit70.html#x4.7
-   (file-transfer switches)
-
-   First the file-selection switches:
-
-   /AFTER:date-time
-   /BEFORE:date-time
-   /NOT-AFTER:date-time
-   /NOT-BEFORE:date-time
-          Only send those files modified on or after or before the given
-          date and time. These switches can be combined to select files
-          modified between two date/times. Various date-time formats are
-          accepted; if the date-time contains spaces, it must be enclosed
-          in braces or doublequotes. See
-          [274]http://www.columbia.edu/kermit/ckermit70.html#x1.6 and
-          [275]Section 8.13 of this document for details about date-time
-          formats. Examples:
-
-  ftp put /after:{1 jan 2000 0:00:00} *
-  ftp put /after:-5days *
-
-   /LARGER-THAN:number
-   /SMALLER-THAN:number
-          Only send files larger (smaller) than the given number of bytes
-          (octets). These switches can be combined to select files in a
-          certain size range.
-
-   /TYPE:{TEXT,BINARY}
-          Only send files that are the given type, which is determined
-          for each file just before sending it by file scanning. BINARY
-          includes TENEX; if you have included a /TENEX switch, or
-          previously given a [SET] FTP TYPE TENEX command, binary files
-          are sent in TENEX, rather than BINARY mode.
-
-   /[NO]DOTFILES
-          [Don't] include files whose names begin with dot (.). By
-          default, such files are not included unless your filespec
-          explicitly mentions them.
-
-   /NOBACKUPFILES
-          Don't include files whose names end with .~nnn~, where nnn is a
-          number, e.g. oofa.txt.~27~. These are backup files created by
-          Kermit, EMACS, and other applications. By default, backup files
-          are included.
-
-   /NOFOLLOWLINKS
-          (UNIX only) Skip over symbolic links rather than following them
-          (default). This applies to wildcard and/or recursive [M]PUTs;
-          if a single filename is given, and it happens to be a symbolic
-          link, the file it points to is sent.
-
-   /FOLLOWLINKS
-          (UNIX only) Always follow (resolve) symbolic links, even in
-          wildcard or recursive [M]PUTs. Use with caution. Watch out for
-          circular links, endless loops, etc.
-
-   /EXCEPT:pattern
-          Exception list -- don't send files whose names match the given
-          pattern. See [276]Section 1.5.4 of the [277]C-Kermit 7.0 Update
-          Notes for details. If you want to exclude a directory from a
-          recursive [M]PUT, use /EXCEPT:{dirname/*}.
-
-   /RECURSIVE
-          Sends the desired files from the current (or given) directory,
-          plus all directories beneath it, including empty directories,
-          replicating the directory structure on the server. No special
-          capabilities are required in the server, but of course your
-          login ID on the server must have the appropriate access and
-          permission to create directories. Recursive PUTs work not only
-          between like platforms (e.g. UNIX to UNIX) but also between
-          unlike ones (e.g. UNIX to VMS or Windows), in which case
-          text-file format differences are handled by Kermit's automatic
-          text/binary mode switching ([278]Section 4) and character-set
-          translation ([279]Section 3.7). Synonym: /SUBDIRECTORIES.
-
-   /UPDATE
-          Send only files that have changed since last time ([280]Section
-          3.5.2).
-
-   /ARRAY:arrayname
-          The "file" to be sent is an array, or a segment of one, rather
-          than a real file. In this case the other selection switches
-          don't apply. The array contents are sent in text mode, and each
-          array element is treated as a line. Example:
-
-  ftp put /as-name:array.txt /array:&a
-
-          (or, to send a segment of the array, /array:&a[100:199]). If
-          you don't include an /AS-NAME, a name of "_array_x_" is used
-          (where x is the array letter). If you include this switch, most
-          other switches are meaningless and ignored.
-
-   /COMMAND
-          The "file" to be sent is the standard output of a command,
-          rather than a real file. It is sent in text or binary mode
-          according to the prevailing FTP TYPE, which can be overridden
-          with a /TEXT or /BINARY switch. Example: Example:
-
-  ftp put /command /as-name:{userlist} {finger | sort -r}
-
-   /LISTFILE:filename
-          Tells Kermit to obtain the list of files to be sent from the
-          file whose name is given. This file must contain one file
-          specification (which may be wild) per line. If the list
-          includes files from different directories, such as a recursive
-          listing of a directory tree, the paths are recreated on the
-          server (if possible) if you include the /RECURSIVE switch;
-          otherwise all the files are sent to the current directory on
-          the server.
-
-   Now the other switches:
-
-   /AS-NAME:text
-          If a single file is being sent, send it with the given text as
-          its name. If multiple files are being sent, the text must be a
-          template that includes variables such as \v(filename),
-          \v(filenumber), \v(ntime), to allow dynamic creation of each
-          name. The same applies to the as-name field of the FTP PUT
-          command. If this switch is not included (and an as-name is not
-          included as the second filename to PUT), each file is sent with
-          its own name.
-
-   /BINARY
-   /TEXT
-   /TENEX
-          Forces this upload to take place in the given mode, regardless
-          of the current FTP TYPE setting, and without automatic
-          text/binary switching. /ASCII is a synonym for /TEXT.
-
-   /FILTER:command
-          Specifies that the file(s) is/are to be passed through the
-          given command or pipeline on their way to the server. Example:
-
-  ftp put /binary /filter:{gzip -c \v(filename)} /as-name:\v(filename).gz *
-
-   /TRANSPARENT
-   /LOCAL-CHARACTER-SET:name
-   /SERVER-CHARACTER-SET:name
-          Character-set translation for text files, explained in
-          [281]Section 3.7.
-
-   /ERROR-ACTION:{PROCEED,QUIT}
-          Overrides the prevailing [282]FTP ERROR-ACTION for the duration
-          of this PUT or MPUT command only.
-
-   /RECOVER
-          Resume an interrupted transfer where from the point of
-          interruption (explained in [283]Section 3.5.2). Synonym:
-          /RESTART.
-
-   /DELETE
-          Tells Kermit to delete each source file immediately after, and
-          only if, it has been uploaded completely and successfully.
-          This, in effect, moves the file from the client to the server.
-
-   /MOVE-TO:directory
-          Tells Kermit to move each source file to the named local
-          directory after, and only if, it has been uploaded completely
-          and successfully.
-
-   /RENAME-TO:template
-          Tells Kermit to rename each (local) source file according to
-          the given template after, and only if, it has been uploaded
-          completely and successfully. The template works as in /AS-NAME.
-
-   /SERVER-RENAME-TO:template
-          Tells Kermit to ask the server to rename each file according to
-          the given template as soon as, and only if, it has been
-          received completely and successfully. The template works as in
-          /AS-NAME. Requires write and rename access on the server, so
-          doesn't usually work with (e.g.) anonymous uploads to public
-          incoming areas where the permissions don't allow renaming.
-          Examples:
-
-        ftp mput /server-rename:\v(filename).ok *
-                Appends ".ok" to each filename on the server when it's
-                finished uploading.
-
-        ftp mput /as-name:\v(filename).tmp /server-rename:\v(filename) *
-                This is the reverse of the previous example; it uses a
-                temporary name while uploading is in progress and reverts
-                the file to its real name when uploading is complete.
-
-        ftp mput /as-name:\v(filename)
-                /server-rename:../final/\v(filename) *
-                Moves the file from the working directory to a final
-                directory when the upload is complete, but in this case
-                you have to know the pathname syntax of the server. If
-                the rename fails, the [M]PUT command fails according to
-                the [284]FTP ERROR-ACTION selection.
-
-   /FILENAMES:{AUTOMATIC,CONVERTED,LITERAL}
-          Overrides the [285]FTP FILENAMES setting for this upload only.
-
-   /PERMISSIONS:{ON,OFF}
-          Overrides the [286]FTP PERMISSIONS setting for this upload
-          only.
-
-   /UNIQUE
-          Tells Kermit to tell the server to give [287]unique names to
-          incoming files that would otherwise overwrite existing files
-          that have the same name. This switch conflicts with /UPDATE,
-          /RECOVER, /PERMISSIONS, and /SERVER-RENAME since the client has
-          no way of knowing the name assigned by the server.
-
-   /QUIET
-          Don't display file-transfer progress or statistics.
-
-   /SIMULATE
-          Shows which files would be sent without actually sending them.
-          Useful (for example) with /UPDATE (next section). The results
-          are shown in the file-transfer display (if it is not disabled)
-          and in the transaction log (if one is active). Hint: use SET
-          TRANSFER DISPLAY BRIEF.
-     _________________________________________________________________
-
-    3.5.2. Update Mode
-
-   When you include the /UPDATE switch, this means to skip sending any
-   file that already exists on the server if the local file's
-   modification date/time is not later than that of the corresponding
-   file on the server. Here is a typical application for update mode:
-   Suppose that on Computer A, you maintain a large set of files (say, a
-   collection of Web pages and graphics images, or the source files for a
-   software application), and you need to keep a parallel copy on another
-   Computer, B. Of course you could upload the entire collection every
-   day:
-
-  cd source-directory
-  ftp computerb.xyzcorp.com
-  ( authentication details... )
-  ftp cd target-directory
-  ftp put [ switches ] *
-
-   But if the total size is large or the network slow, this would be
-   unnecessarily time-consuming. Worse, if other users or sites had to
-   update whenever new files appeared in B's directory, this would cause
-   them unnecessary work. By including the /UPDATE switch:
-
-  ftp put /update [ other-switches ] *
-
-   only those files that changed since last time are uploaded. Here's how
-   it works. For each local file that is selected for uploading:
-
-     * The remote filename is determined in the normal way, according to
-       the [288]FTP FILENAMES setting, /FILENAMES switch, or the as-name,
-       if any.
-     * Kermit sends an MDTM (modification time) command for the
-       corresponding remote filename to the server.
-     * If the server does not understand the MDTM command, the file is
-       sent.
-     * If the server can't find a file with the given name, the file is
-       sent.
-     * If the local file's modification time is later than that of the
-       remote file, the file is sent.
-     * Otherwise -- the remote file exists but its modification time is
-       equal to or earlier than that of the local file -- the file is
-       skipped.
-
-   All time comparisons take place in Coordinated Universal Time
-   (UTC)([289]1), also known as GMT or Zulu time: Timezone 0; standard
-   time, without daylight savings.
-
-     WARNING: Some FTP servers, such as Novell NWFTPD.NLM, ignore or
-     misimplement the FTP specification and send local time rather than
-     UTC.
-
-   Update mode is useful only when always used in the same direction.
-   When you upload (PUT) a file with FTP, the destination file receives
-   the current timestamp on the server's computer, not the original
-   file's timestamp ([290]2). If you try to FTP PUT /UPDATE the same file
-   again, it will be skipped (as expected) since the remote copy is
-   newer. However, if you try to FTP GET /UPDATE the same file
-   ([291]Section 3.6), it will be transferred for the same reason.
-
-   To check the availability of PUT /UPDATE on a particular connection,
-   issue an FTP MODTIME command for a file that is known to exist on the
-   server. If it succeeds, PUT /UPDATE should work and in that case, you
-   can run a procedure like the one above every day: the first time, it
-   sends all the files; after that, it sends only the ones that changed.
-   If a transaction log is active, a notation is included for any files
-   that are skipped.
-
-   Notes:
-    1. Why is Coordinated Universal Time abbreviated UTC? From the
-       [292]National Institute of Standards and Technology FAQ: "In 1970
-       the Coordinated Universal Time system was devised by an
-       international advisory group of technical experts within the
-       International Telecommunication Union (ITU). The ITU felt it was
-       best to designate a single abbreviation for use in all languages
-       in order to minimize confusion. Since unanimous agreement could
-       not be achieved on using either the English word order, CUT, or
-       the French word order, TUC, the acronym UTC was chosen as a
-       compromise."
-    2. The Kermit FTP client is unusual in that, when downloading only,
-       it can set the received file's date from the file's date on the
-       server, but this should not affect the update feature. When
-       uploading to an FTP server, however, there is no mechanism for the
-       client to set the date of the uploaded file on the server.
-     _________________________________________________________________
-
-    3.5.3 Recovery
-
-   Suppose that while you are uploading a large file over a slow
-   connection, the connection is lost before the entire file is
-   transferred. With most FTP clients, you would have to start over, thus
-   resending the portion of the file that was sent already, and that is
-   already on the server. But Kermit's /RECOVER switch (Synonym:
-   /RESTART) lets you continue an interrupted transfer from the point of
-   failure, thus transferring only the part that wasn't sent already. The
-   prerequisites for recovery are:
-
-     * The transfer must be in BINARY mode, or else the client and server
-       must reside on like systems (e.g. both on some form of UNIX).
-     * The FTP server must support the SIZE command.
-
-   Here's how it works. When you include the /RECOVER switch:
-
-     * Kermit checks for conflicting switches, such as /UPDATE and
-       /UNIQUE; if /RECOVER is given with these switches an error occurs.
-       If /RECOVER is given in other circumstances where it could serve
-       no useful purpose (e.g. with arrays, pipes, or filters), it is
-       ignored.
-
-   If the switch is accepted, then for each selected file:
-
-     * If it is not binary (determined by scanning) and the client and
-       server are not on like platforms, recovery is canceled (the entire
-       file is sent). Otherwise:
-     * A SIZE command is sent for the file (using its remote name). If
-       the reply indicates the file was not found, or the SIZE command
-       was not understood, or any other kind of error, recovery is
-       canceled. Otherwise:
-     * A MDTM (modification time) command is sent for the file. If a
-       valid reply is received, and the modification time of the local
-       file is later than that of the remote file, recovery is canceled.
-       Otherwise:
-     * If the sizes of the two files are identical, the file is not sent.
-       Otherwise:
-     * Kermit seeks to the recovery spot in the local file, tells the
-       server to APPEND the data which is about to arrive to the remote
-       file, and then sends the data starting at the recovery point.
-
-   To safeguard file integrity, recovery is not attempted unless all the
-   preconditions are met. For the widest possible usefulness, APPEND is
-   used rather than RESTART. For stream transfers (the only kind that
-   Kermit supports) the results are the same.
-
-   By design, the /RECOVER switch can be included with any FTP PUT or
-   MPUT command, even if it specifies a group of files. This allows you
-   to resume an interrupted batch transfer from where it left off. The
-   files that were already completely sent are skipped, the file that was
-   interrupted is recovered, and the remaining files are uploaded.
-
-   By the way, it doesn't matter how the original partial file was
-   uploaded -- FTP, Kermit, Zmodem, etc: as long as the preconditions are
-   met, it can be recovered with FTP PUT /RECOVER, or for that matter
-   also using Kermit protocol and SEND /RECOVER.
-
-   A word of caution, however, when the original upload was in text mode
-   with character-set translation ([293]Section 3.7):
-
-     * If the original upload involved a translation from one single-byte
-       character set to another (e.g. Code Page 850 to Latin-1), recovery
-       is safe if you specify the same translations for the recovery. If
-       you don't, the resulting file will contain a mixture of character
-       sets.
-     * If the original upload involved a translation that changed the
-       size of the file (e.g. from an alphabetic Code Page or Latin
-       Alphabet to Unicode, or vice versa), recovery is NOT safe, even if
-       you specify the same translations.
-
-   Kermit has no way of knowing anything about the previous upload. As a
-   safeguard, an error occurs if you include /RECOVER and also specify a
-   character-set of UCS2 or UTF8, since recovery can't possibly work in
-   that situation. Otherwise, it's up to you to avoid unsafe recovery
-   operations.
-
-   [ [294]Top ] [ [295]FTP Top ] [ [296]C-Kermit Home ] [ [297]Kermit
-   Home ]
-     _________________________________________________________________
-
-  3.6. Downloading Files With FTP
-
-   Although uploading files with Kermit's FTP client is just as easy and
-   flexible as sending files with Kermit protocol, the same is not always
-   true for downloading because FTP servers lack some of the capabilities
-   of a Kermit server:
-
-     * If you want to get more than one file, you have to use MGET, not
-       GET, since the underlying FTP protocol is different in the two
-       cases. Kermit can't "autodetect" which one you mean, as it can
-       with PUT and MPUT, since it can't be expected to know the wildcard
-       syntax of the remote platform and/or FTP server (the same is true
-       for all other FTP clients). To complicate matters, FTP protocol
-       now includes two underlying mechanisms (NLST and MLSD) for
-       accomplishing MGET operations and, as explained in [298]Section
-       3.11, the two behave differently.
-     * Automatic text-binary mode switching is not done by the server. It
-       can be done by the client (Kermit), but in this case it is not
-       based on a file scan (since there is no way for Kermit prescan a
-       server file), but rather on the filename, using C-Kermit 7.0
-       [299]filename patterns.
-     * Some options that are available with FTP PUT can not be used with
-       FTP [M]GET or don't work the same way:
-         /PERMISSIONS (FTP protocol has no mechanism for this).
-         /[NOT-]BEFORE, /[NOT-]AFTER (because of the timezone problem).
-         /RECOVER works only in binary mode.   /RECURSIVE has limited
-       utility.
-
-   The commands for downloading are:
-
-   SET FILE DOWNLOAD-DIRECTORY [ directory ]
-          As with Kermit transfers, this command, if given, tells
-          C-Kermit where to store incoming files in the absence of a
-          specific as-name. If not given, incoming files are stored as
-          indicated by the as-name, if any, otherwise in the current
-          directory, just as with Kermit transfers. The more verbose
-          transfer display formats give the full pathname of each
-          received file, and, in case you have trouble finding a
-          downloaded file afterwards, its full path is also listed in the
-          transaction log (if you kept one), and you can also ask Kermit
-          where it went with the [300]WHERE command.
-
-   SET FTP GET-FILETYPE-SWITCHING { ON, OFF }
-          ON by default, causing Kermit to switch automatically into text
-          or binary mode for each file based on whether its name matches
-          a text pattern or binary pattern. Set this OFF, or use a /TEXT,
-          /BINARY, or /TENEX switch to defeat this feature. Use SHOW
-          PATTERNS to see the current pattern list.
-
-   [ FTP ] GET [ switches ] filename [ as-name ]
-          Asks the server to send the given file, and if it comes, stores
-          it locally under the given as-name, if any, otherwise under its
-          original name (modified according to the selected filename
-          conversion option), in your download directory, if you have
-          specified one, otherwise in the directory indicated in the
-          as-name, if any, otherwise in your current directory. If you
-          accidentally use a wildcard in the filename ("get *.txt") the
-          server will reply with a message like "File not found" (unless
-          there is a file whose name actually is "*.txt"). If FTP
-          GET-FILETYPE-SWITCHING is ON, and in the absence of any GET
-          switches to override it, the file is transferred in binary mode
-          if it matches any of Kermit's binary name patterns, and in text
-          mode if it matches any of Kermit's text name patterns, and in
-          the prevailing FTP TYPE if it matches none of these patterns.
-
-   [ FTP ] MGET [ switches ] filespec [ filespec [ filespec [ ... ] ] ]
-          Like GET, but for multiple files. One or more file
-          specifications can be given, and any or all (or none) of them
-          can contain wildcards or can be directory names. The file list
-          may not include an as-name, but you can still give one with the
-          /AS-NAME: switch.
-
-   In both the FTP GET and MGET commands, any filenames that contain
-   spaces must be enclosed in braces or doublequotes (see [301]Section 5
-   for details).
-
-   FTP downloads may be interrupted just like Kermit transfers. While the
-   transfer is in progress, type:
-
-     * X to interrupt the current file and go on to the next file.
-     * Z (or Control-C) to cancel the current file and all remaining
-       files.
-
-   Before proceeding, a brief word about temporary files. In FTP
-   protocol, the MGET command works by requesting a file list from the
-   server, and then (internally) issuing a GET command (FTP RETR protocol
-   directive) for each file. The file list returned by the server can be
-   any size at all, so in case it is huge, we don't store it in memory;
-   instead we put it in a temporary file. For troubleshooting purposes,
-   you should be aware of two points:
-
-    1. The location of the temporary file is chosen according the TMP or
-       TEMP environment variables. If neither of these variables is
-       defined, you might need to define it. In case there is not enough
-       space on the indicated disk or partition for the server's file
-       list, you might need to either clean up the temporary area, or
-       redefine the environment variable to indicate a different area
-       that has sufficient space.
-    2. If you want to look at the list yourself, use SET FTP DEBUG ON.
-       This tells Kermit to (a) give you the full pathname of the
-       temporary file at the end of each MGET command, and (b) not to
-       delete it, as it normally does.
-     _________________________________________________________________
-
-    3.6.1. FTP GET Switches
-
-   The following switches are available with FTP GET and MGET:
-
-   /TEXT
-          Specifies a text-mode transfer. Overrides the global FTP TYPE
-          setting and filename pattern-matching for the duration of the
-          current command only, All files are downloaded in text mode.
-          Synonym: /ASCII.
-
-   /BINARY
-          Specifies a binary-mode transfer. Overrides the global FTP TYPE
-          setting and filename pattern-matching for the duration of the
-          current command only. All files are downloaded in binary mode.
-
-   /TENEX
-          Like /BINARY but specifies a special binary transfer mode to be
-          used when getting 8-bit binary files from a 36-bit platform
-          such as TOPS-10, TOPS-20, or TENEX. All files are downloaded in
-          the special binary mode.
-
-   /RECOVER
-          This instructs Kermit to try to recover an incomplete download
-          from the point of failure. Works only in binary mode, and only
-          if the server supports the (not-yet-standard) FTP "REST"
-          directive. See [302]Section 3.6.3 for details. Synonym:
-          /RESTART.
-
-   /FILENAMES:{CONVERTED,LITERAL}
-          Overrides the [303]FTP FILENAMES (filename conversion) setting
-          for this download only, forcing incoming filenames to be either
-          converted or taken literally.
-
-   /AS-NAME:text
-          For GET, this is equivalent to giving an as-name after the
-          filename. For MGET, this is the only way to specify alternative
-          names for the incoming files. With MGET, the /AS-NAME text
-          should (must) contain a Kermit variable, usually \v(filename)
-          or \v(filenumber). Example:
-
-  mget /text /as-name:\v(filename).new *.c
-
-          This gets all ".c" files and stores them with "
-
-          .new" appended to their names. See the [304]C-Kermit 7.0 Update
-          Notes for details.
-
-   /COMMAND
-          This specifies that the incoming file is to be written to the
-          standard input of a command, rather than to a file. The command
-          name is the as-name from the GET command or the /AS-NAME
-          argument. If you need to refer to the incoming file's name in
-          the command, use \v(filename). See the description of the
-          regular Kermit [305]GET /COMMAND command for details and
-          examples.
-
-   /QUIET
-          Transfers the files quietly; don't put up a file-transfer
-          display.
-
-   /ERROR-ACTION:{QUIT,PROCEED}
-          This switch affects only MGET. If an error occurs with a
-          particular file, this tells whether to go on to the next file
-          (PROCEED) or to stop right away and fail (QUIT). The default is
-          PROCEED.
-
-   The file selection switches are:
-
-   /EXCEPT:{pattern} or /EXCEPT:{{pattern}{pattern}{...}}
-          Exception list for MGET; skip downloading any file whose name
-          matches any of the given patterns (when using the second
-          format, up to 64 patterns may be specified). [306]CLICK HERE
-          for syntax details.
-
-   /SMALLER-THAN:number
-          Download only files whose size is smaller than the given number
-          of bytes (octets). Requires that the FTP server support the
-          SIZE or MLSD directive.
-
-   /LARGER-THAN:number
-          Download only files whose size is greater than the given number
-          of bytes. Requires that the FTP server support the SIZE or MLSD
-          directive.
-
-   /NOBACKUPFILES
-          During MGET, don't download any files whose names end with
-          backup suffixes (.~n~ where n is a number).
-
-   /NODOTFILES
-          During MGET, don't download any files whose names begin with
-          period (.). Equivalent to /EXCEPT:{.*}.
-
-   /LISTFILE:local-filename
-          The given file contains a list of files to GET, one per line.
-          Filenames in the listfile can contain wildcard characters in
-          the syntax of the server. There is no limit on the number of
-          lines in the listfile.
-
-   /NAMELIST:local-filename
-          If this switch is given, then instead of actually retrieving
-          the selected files, the GET command retrieves a list of the
-          names of the files that would be retrieved, and places it in
-          the specifed file. The resulting file is an ordinary text file,
-          with one filename per line, suitable for reading by a person,
-          or processing by a computer program, including Kermit itself
-          (FOPEN / FREAD / FWRITE / FCLOSE), and as /FILELIST: file. If
-          the filename is omitted or given as "-" (dash, hyphen), the
-          list goes to the screen. NOTE: if you want a copy of the
-          complete list sent by the server, use SET FTP DEBUG ON, perform
-          an MGET, and the temporary file containing the list will be
-          kept rather than deleted (and Kermit tells you its name).
-
-   /UPDATE, /COLLISION:keyword
-          Explained in [307]Section 3.6.2.
-
-   /RECURSIVE
-          This means to try to download an entire directory tree, rather
-          than just files from a particular directory. In fact, FTP
-          protocol does not provide a method to request a recursive
-          download (unless the server supports MLSD; see [308]Section
-          3.11), so this works only if the FTP server does it anyway,
-          without being asked, as some do. In this case, Kermit detects
-          that names in the returned file list contain directory
-          separators, and therefore attempts to create the needed
-          directories as the files arrive. But this can work only if the
-          server is on the same kind of platform as the client, so the
-          pathname syntax can be recognized, and also because the server
-          does not switch between text and binary mode, which would be
-          vital for cross-platform transfers. Use with caution. Synonym:
-          /SUBDIRECTORIES.
-
-          Even when the server does not provide recursive file lists,
-          [M]GET /RECURSIVE forces Kermit to replicate any directory
-          structure implied or expressed by the server's file list. For
-          example:
-
-  get somepath/somefile
-
-          Gets the file named somefile from the server's somepath
-          directory and puts it Kermit's current (or download) directory,
-          whereas:
-
-  get /recursive somepath/somefile
-
-          creates the path locally and then puts the file in it.
-          Similarly for MGET:
-
-  mget */data/*
-
-          downloads all the files in all the data subdirectories of all
-          the subdirectories of the server's current directory and stores
-          them locally in Kermit's current (or download) directory,
-          whereas:
-
-  mget /recursive */data/*
-
-          re-creates the server's directory structure locally.
-
-   The FTP protocol does not include explicit mechanisms for recursion,
-   so Kermit builds upon what is available. Although an Internet draft
-   describes a mechanism ("MLSD") that would allow protocol-driven
-   recursion, similar to Kermit's File Attribute packets (circa 1984), it
-   has not yet attained RFC or standard status, and servers are not yet
-   widely available that offer this feature. In the meantime, the
-   effectiveness of MGET /RECURSIVE depends on the FTP server
-   implementation. If the server returns a recursive list in response to
-   the standard NLST command (whose behavior is ill-defined), Kermit's
-   FTP MGET /RECURSIVE command uses it to re-create the remote directory
-   tree locally. If the server supports MLSD, C-Kermit 8.0.206 and Kermit
-   95 2.1 and later are able to sense it automatically and use it, as
-   described below in [309]Section 3.11.
-
-   The /BEFORE:, /AFTER:, /NOT-BEFORE:, and /NOT-AFTER: switches are not
-   available for downloading because of the confusion with timezones.
-   Would the given times be in the local timezone, the server's timezone,
-   or GMT? The FTP server's directory listings show its own local times
-   but since we don't know what timezone the server is in, there's no way
-   to reconcile our local times with the server's. Similarly,
-   /PERMISSIONS can't be preserved in downloads because FTP protocol
-   provides no means of querying the server for a file's permission.
-
-   Source-file disposition switches:
-
-   /DELETE
-          Each file that is downloaded successfully is to be deleted from
-          the server. Requires the appropriate file access rights on the
-          server.
-
-   /SERVER-RENAME-TO:template
-          Asks the server to rename each (remote) source file immediately
-          after, and only if, it is sent correctly. See [310]PUT
-          /SERVER-RENAME-TO: for details.
-
-   Destination-file disposition switches:
-
-   /TO-SCREEN
-          Displays the incoming file on the screen rather than storing it
-          on disk. If this switch is given, the /RENAME-TO and /MOVE-TO
-          switches are ignored, the file-transfer display is suppressed,
-          and the given file(s) is/are shown on the screen. Can be used
-          with /FILTER, e.g.
-
-  get /text /to-screen /filter:more oofa.txt
-
-          In fact, you should always use /TO-SCREEN with /FILTER or
-          /COMMAND when the command would result in displaying the
-          incoming file on the screen; otherwise C-Kermit would have no
-          way of knowing to suppress its file transfer display (since it
-          can't be expected to know what the command or filter does).
-
-   /RENAME-TO:template
-          Each file that is downloaded is to be renamed as indicated if
-          and only if it was received completely and without error. The
-          template can be literal text or can contain variables that are
-          evaluated for each file. For MGET, the text must contain
-          variables; for GET it can be a literal string. The \v(filename)
-          variable contains the name of the current file, so:
-
-  ftp mget /rename-to:\v(filename).ok *
-
-          causes each file that is successfully downloaded to have ".ok"
-          appended to its name. For details see [311]Section 4.1 of the
-          [312]C-Kermit 7.0 Update Notes.
-
-   /MOVE-TO:text
-          Just like /RENAME-TO:, except the text denotes the name of a
-          directory to which successfully downloaded files are to be
-          moved. If the directory does not exist, it is created.
-
-   The file transfer display does not show the /MOVE-TO or /RENAME-TO
-   value, since the incoming file has not yet been moved or renamed.
-     _________________________________________________________________
-
-    3.6.2. Filename Collisions
-
-   What should happen if an incoming file has the same name as an
-   existing file in the same directory? By default, Kermit's FILE
-   COLLISION setting applies: BACKUP, RENAME, UPDATE, DISCARD, etc, as
-   described in [313]Using C-Kermit. Kermit's default FILE COLLISION
-   setting is BACKUP (rename the existing file and store the incoming
-   file under its own name) and therefore this is also the default FTP
-   collision action.
-
-   The name under which an incoming file is to be stored is determined as
-   follows:
-
-     * If an as-name was given, the as-name is used. Otherwise:
-     * If the client and server platforms are alike or [314]FTP FILENAMES
-       is set to LITERAL (or the /FILENAMES:LITERAL switch was given for
-       this download), the incoming filename is used literally.
-       Otherwise:
-     * The incoming filename is converted to a form that is friendly to
-       the local platform. For UNIX, for example, incoming filenames that
-       are all uppercase (as they might be from, say, VMS or an IBM
-       mainframe) are converted to lowercase.
-
-   If the resulting name coincides with the name of a local file that
-   already exists, we have a filename collision. Collisions are handled
-   according to the currently selected collision action:
-
-   SET FTP COLLISION { BACKUP, RENAME, UPDATE, DISCARD, APPEND, OVERWRITE
-          }
-          This establishes a filename collision for FTP, separate from
-          the Kermit one. The initial FTP collision setting is inherited
-          from Kermit's FILE COLLISION setting when the first FTP command
-          is given, but subsequent changes to Kermit's FILE COLLISION
-          setting do not affect the FTP COLLISION setting. SHOW FTP tells
-          the current FTP COLLISION setting.
-
-   FTP GET /COLLISION:{BACKUP,RENAME,UPDATE,DISCARD,APPEND,OVERWRITE}
-          Overrides the current FTP COLLISION action for this download
-          only.
-
-   FTP GET /UPDATE
-          This is equivalent to GET /COLLISION:UPDATE, and is included
-          for symmetry with PUT /UPDATE
-
-   FTP GET /UPDATE and /COLLISION:UPDATE mean to download only those
-   files whose modification dates on the server are later than those on
-   the client. Date-time comparisons are done in Coordinated Universal
-   Time (UTC, GMT, ZULU). The command:
-
-     FTP MGET /COLLISION:APPEND /AS-NAME:newfilename *.*
-
-   Downloads all matching remote files into a single local file (in
-   whatever order the server sends them).
-     _________________________________________________________________
-
-    3.6.3. Recovery
-
-   Recovery is available for downloads too, but there are some
-   differences from the uploading case described in [315]Section 3.5.3:
-
-     * The transfer must be in BINARY mode. It can not be in text mode,
-       even if the FTP server is on the same kind of platform as Kermit,
-       and even if there is no character-set translation. The original
-       download must also have been in binary mode.
-     * The FTP server must support the REST ("restart") directive.
-       Unfortunately, this is not a standard command; at this writing, it
-       is described only in an Internet Draft, not an RFC or Internet
-       Standard, but nevertheless it is found in several popular FTP
-       servers, such as [316]ProFTPD.
-
-   Here's how download recovery works:
-
-     * Kermit checks for conflicting switches, such as /UPDATE, /COMMAND,
-       or /FILTER. If /RECOVER is given with these switches an error
-       occurs.
-     * The prevailing transfer mode (SET FTP TYPE) must be BINARY. If it
-       is not, the /BINARY switch must have been included with the FTP
-       [M]GET command.
-
-   If the /RECOVER switch is accepted, then for each selected file:
-
-     * A SIZE command is sent for the file (using its remote name). If
-       the reply indicates the file was not found, or the SIZE command
-       was not understood, or any other kind of error, recovery is
-       canceled (i.e. the entire file is downloaded).
-     * If the sizes of the two files are identical, the file is not sent.
-       Otherwise:
-     * Kermit sends the REST directive to the server, indicating the size
-       of the local file. If the server responds affirmatively, Kermit
-       opens the local file in append mode and appends the incoming data
-       to it. Otherwise, recovery is canceled and the entire file is
-       downloaded.
-
-   The /RECOVER switch can be included with any FTP GET or MGET command,
-   even if it specifies a group of files. This lets you resume an
-   interrupted batch transfer from where it left off. The files that were
-   already completely sent are skipped, the file that was interrupted is
-   recovered, and the remaining files are uploaded. BUT... unlike with
-   uploading, where this can be done with any mixture of text and binary
-   files, when downloading, it can only be done if all the files are
-   binary.
-
-   It doesn't matter how the original partial file was downloaded -- FTP,
-   Kermit, HTTP, Zmodem, etc: as long as the preconditions are met, it
-   can be recovered with FTP [M]GET /RECOVER, or for that matter also
-   with GET /RECOVER (using Kermit protocol).
-
-   [ [317]Top ] [ [318]FTP Top ] [ [319]C-Kermit Home ] [ [320]Kermit
-   Home ]
-     _________________________________________________________________
-
-  3.7. Translating Character Sets
-
-   A possibly unique feature of Kermit's FTP client is its ability to
-   convert character sets when transferring files in text mode,
-   independent of the capabilites of the FTP server, as well as to
-   translate the character sets of filenames regardless of transfer mode.
-   For compatibility with existing FTP clients, and because there is a
-   certain performance penalty, Kermit won't do this unless you ask for
-   it. If you enable this feature, you need to inform Kermit of the
-   character set (to be) used on the server and in some cases (explained
-   below) also the local file character set. This discussion assumes you
-   know a bit about character sets (as you must if you have to use them);
-   see Chapter 16 of [321]Using C-Kermit for a detailed treatment. The
-   Kermit commands for FTP character-set conversion are:
-
-   SET FTP CHARACTER-SET-TRANSLATION { ON, OFF }
-          Whether to translate character sets when transferring text
-          files with FTP. OFF by default. Set this to ON to enable
-          character-set translation for subsequent FTP uploads and
-          downloads.
-
-   SET FTP SERVER-CHARACTER-SET [322]name
-          Text character set (to be) used by the server. Most FTP servers
-          are ignorant of character sets, so all translations are done
-          unilaterally by Kermit's FTP client. This means that when
-          downloading files, you must know in advance the character-set
-          used in the files you are downloading (and in their names).
-          When uploading, you must specify the character-set to which
-          local filenames and text-file contents are to be translated for
-          transmission to the server. If you SET FTP
-          CHARACTER-SET-TRANSLATION ON but do not specify an FTP
-          SERVER-CHARACTER-SET, [323]UTF8 is used, since this is the new
-          Internet standard international character set; it is upwards
-          compatible with ASCII and it encompasses most written languages
-          and therefore does not favor any particular group of people, as
-          any other default would do. If you SET FTP SERVER-CHARACTER-SET
-          to something (anything) when FTP CHARACTER-SET TRANSLATION is
-          OFF, this also sets the latter ON.
-
-   SET FILE CHARACTER-SET [324]name
-          This is the regular Kermit (non-FTP-specific) command for
-          identifying the character set (to be) used in local text files
-          and filenames.
-
-   TO REITERATE: If you SET FTP CHARACTER-SET TRANSLATION ON but do not
-   specify an FTP SERVER-CHARACTER-SET, outbound text files are converted
-   to UTF-8 and inbound text files are assumed to be UTF-8. If this is
-   not appropriate, be sure to also specify the desired FTP
-   SERVER-CHARACTER-SET.
-
-   You can use "special" (non-ASCII) characters in filenames in all the
-   client / server file management commands (FTP MKDIR, RMDIR, DIRECTORY,
-   VDIRECTORY, DELETE, etc), and also in file-transfer commands. When
-   giving commands such as FTP DIR (RDIR) and FTP PWD (RPWD), the reply
-   is translated too, so you can read it. In this example, the client and
-   server use entirely different codes to represent the special
-   characters of German:
-
-  C-Kermit> ftp xyzcorp.de /anonymous
-  C-Kermit> set ftp server-character-set latin1
-  C-Kermit> set file character-set german
-  C-Kermit> rcd Städte
-  C-Kermit> rpwd
-  "/pub/ftp/Städte is current directory"
-  C-Kermit> rdir
-  -rw-rw----  1 olaf     54018 Jan  6 17:58 Adenbüttel.txt
-  -rw-rw----  1 ursula     373 Jan  5 15:19 Aßlar.txt
-  -rw-rw----  1 gisbert    482 Jan  5 15:20 Blowatz.txt
-  -rw-rw----  1 gudrun     124 Jan  5 15:19 Böblingen.txt
-  -rw-rw----  1 olga     14348 Jan  7 14:23 Köln.txt
-
-   When the client and server file systems use different character sets,
-   you should take care to use only those characters that the two sets
-   share in common when creating filenames or text-file contents. For
-   example, PC code pages contain a lot line- and box-drawing characters,
-   and sometimes "smart quotes", etc, that are not found in ISO standard
-   8-bit character sets. You should be especially careful to avoid using
-   such characters in filenames.
-
-   [ [325]C-Kermit Character Sets ]
-     _________________________________________________________________
-
-    3.7.1. Character Sets and Uploading
-
-   Kermit's PUT and MPUT commands include full file-scanning
-   capabilities, as described in [326]Section 4. Thus if FTP
-   CHARACTER-SET-TRANSLATION is ON and your character-set associations
-   are set up appropriately, Kermit automatically switches on a per-file
-   basis between text and binary mode, and for each text file between
-   your chosen 7-bit text character set (e.g. ASCII or ISO 646 German),
-   8-bit text (e.g. Latin-1 or Japanese EUC), UCS-2, and UTF-8, and
-   converts each of these automatically to the server character-set, and
-   furthermore automatically differentiates between the Little and Big
-   Endian forms of UCS-2, always sending in Big Endian form.
-
-     WARNING: It is not advisable to use UCS-2 (or any Unicode
-     transformation other than UTF-8) "on the wire", i.e. as a server
-     character set. Most FTP servers are not able to cope with it, since
-     it contains lots of 0 (NUL) characters. If you do use it, Kermit
-     does not translate filenames to or from UCS-2, for reasons well
-     known to C programmers (for example, UNIX APIs assume filename
-     strings are NUL-terminated). [327]UTF-8 is the preferred (and
-     standard) Unicode format for the Internet.
-
-   FTP character-set translations differ from the regular Kermit ones by
-   not restricting translations to a file-character-set /
-   transfer-character-set pair. You can have Kermit's FTP client
-   translate between any pair of character sets it knows about. You can
-   see the list of supported character sets by typing either of the
-   following:
-
-  set ftp server-character-set ?
-  set file character-set ?
-
-   A typical list looks like this ([328]CLICK HERE for an explanation of
-   the names):
-
-  C-Kermit>set file char ? One of the following:
-   ascii            cp869-greek       hebrew-7         mazovia-pc
-   british          cyrillic-iso      hebrew-iso       next-multinational
-   bulgaria-pc      danish            hp-roman8        norwegian
-   canadian-french  dec-kanji         hungarian        portuguese
-   cp1250           dec-multinational iso2022jp-kanji  shift-jis-kanji
-   cp1251-cyrillic  dg-international  italian          short-koi
-   cp1252           dutch             jis7-kanji       spanish
-   cp437            elot927-greek     koi8             swedish
-   cp850            elot928-greek     koi8r            swiss
-   cp852            euc-jp            koi8u            ucs2
-   cp855-cyrillic   finnish           latin1-iso       utf8
-   cp858            french            latin2-iso
-   cp862-hebrew     german            latin9-iso
-   cp866-cyrillic   greek-iso         macintosh-latin
-  C-Kermit>
-
-   Thus you can translate not only between private sets (like PC code
-   pages) and standard ones (like Latin-1) as in Kermit protocol, but
-   also between any given pair of private sets (e.g. CP852 and Mazovia).
-   All conversions go through Unicode as the intermediate character set,
-   resulting in a minimum of character loss, since Unicode is a superset
-   of all other character sets known to Kermit.
-
-   In addition to the SET commands listed above, the FTP PUT and MPUT
-   commands include switches that apply only to the current command:
-
-   /LOCAL-CHARACTER-SET:name
-   /SERVER-CHARACTER-SET:name
-          Use these switches to force a particular translation. These
-          switches override the global FTP CHARACTER-SET-TRANSLATION and
-          SERVER-CHARACTER-SET settings and also character-set
-          differentiation by file scanning for the duration of the PUT or
-          MPUT command. The file scan is still performed, however, to
-          determine whether the file is text or binary; thus these
-          switches do not affect binary files unless you also include the
-          /TEXT switch to force all files to be treated as text.
-
-   In other words, if you include one or both of these switches with a
-   PUT or MPUT command, they are used. Similarly, the /TRANSPARENT switch
-   disables character-set translation for the PUT or MPUT command despite
-   the prevailing FTP CHARACTER-SET-TRANSLATION and SERVER-CHARACTER-SET
-   settings.
-
-   When uploading, the FILE CHARACTER-SET setting is ignored unless you
-   have forced Kermit not to [329]scan local files by including a /TEXT
-   or /BINARY switch with your [M]PUT command, or by disabling automatic
-   text/binary switching in some other way.
-
-   Examples:
-
-    1. Suppose you have a CP852 (East European) text file that you want
-       to upload and store in ISO Latin Alphabet 2 encoding:
-  ftp put /local-char:cp852 /server-char:latin2 magyar.txt
-    2. Suppose you always want your text files converted to Latin-2 when
-       uploading with FTP. Then put:
-  set ftp server-character-set latin2
-       in your Kermit customization file, and then you can omit the
-       /SERVER-CHARACTER-SET: switch from your FTP PUT commands:
-  ftp put /local-char:cp852 magyar.txt
-    3. Now suppose that all the text files on your PC are written in
-       Hungarian, but they have a variety of encodings, and you don't
-       want to have to include the /LOCAL-CHARACTER-SET: switch on every
-       FTP PUT command, or (more to the point) you want to be able to
-       send a mixture of these files all at once. Put these commands in
-       your Kermit customization file:
-  set ftp server-character-set latin2            ; ISO 8859-2
-  set file default 7-bit-character-set hungarian ; ISO 646 Hungarian
-  set file default 8-bit-character-set cp852     ; PC East European Code Page
-       and now PUT and MPUT will automatically detect and switch among
-       ISO 646 Hungarian, Code Page 852, UTF-8, and UCS-2 encodings,
-       translating each one to Latin-2 for uploading:
-  ftp put *.txt
-
-   And since binary files are also detected automatically, the latter can
-   be simplified to:
-
-  ftp put *
-
-   even when "*" matches a diverse collection of binary and text files,
-   because translations are skipped automatically for binary files.
-     _________________________________________________________________
-
-    3.7.2. Character Sets and Downloading
-
-   The commands and switches are the same as for uploading, but automatic
-   character-set switching works differently, since Kermit can't scan the
-   server files in advance. Instead, the transfer mode (text or binary)
-   is based on the filenames; each name is compared with Kermit's list of
-   text name patterns and binary name patterns. If the name matches a
-   binary pattern (for example, if the filename is oofa.tar.gz and one of
-   the filename patterns is "*.gz"), the file is downloaded in binary
-   mode; otherwise if it matches a text pattern (e.g. oofa.txt matches
-   "*.txt"), it is transferred in text ("ascii") mode. Otherwise, it is
-   transferred in the prevailing FTP TYPE.
-
-   In C-Kermit 8.0, the pattern lists used with FTP GET are not the same
-   lists used with Kermit transfers, and can not be viewed with SHOW
-   PATTERNS, nor adjusted with ADD and REMOVE TEXT-PATTERNS and
-   BINARY-PATTERNS, or SET FILE TEXT-PATTERNS and BINARY-PATTERNS.
-   Configuration of the FTP patterns list will be added in a future
-   release.
-
-   Examples:
-
-   get /server-char:latin1 /local-char:cp850 Grüße.txt
-          In this command, the filename contains special characters,
-          which you enter using whatever character set your local
-          computer uses, in this case PC Code Page 850 (cp850). The
-          command tells Kermit (in case it didn't know already from its
-          FILE CHARACTER-SET setting) that the local character set is
-          cp850 and the server's character-set is ISO 8859-1 Latin
-          Alphabet 1 (latin1). Kermit translates the filename from cp850
-          to latin1 and sends the latin1 name to the server. Since it's a
-          text file (matches "*.txt"), its contents are translated to
-          cp850 on arrival, and it is saved with a cp850 name.
-
-   mget /text /server:latin1 /local:utf8 *.txt
-          This command:
-
-          + Tells C-Kermit that the server's files are encoded in ISO
-            8859-1 Latin Alphabet 1.
-          + Tells C-Kermit to translate the incoming files into Unicode
-            UTF-8 for storage.
-          + Asks the server to send all ".txt" files in text mode.
-
-   mget /server:latin1 /local:utf8 *
-          Tells Kermit to get all files from the server's directory,
-          switching between text and binary mode based on the filename.
-          The names of all the files are translated (to UTF-8 in this
-          case), but contents are translated (also to UTF-8) only for
-          text files.
-
-   Note that any pair of 8-bit character sets is likely to have some
-   incompatibilities. Any characters in the source file that do not have
-   equivalents in the destination file's character set are converted to
-   question marks. This applies to both filenames and to text file
-   contents.
-
-   Also note that the server's ability to accept special characters in
-   filenames depends on the particular server. For example:
-
-  get Grüße.txt
-
-   works with WU-FTPD, but:
-
-  mget Grüß*.txt
-
-   does not.
-     _________________________________________________________________
-
-    3.7.3. RFC2640
-
-   [330]RFC2640, July 1999, specifies a method by which the FTP client
-   and server can negotiate the use of UTF8. However, RFC2640-capable
-   servers are rare to nonexistent at this writing, and in any case you
-   don't need them to be able to transfer text in UTF8. C-Kermit lets you
-   upload and download text files in any character set it knows about,
-   converting to or from any other character set it knows about, without
-   the knowledge, permission, or cooperation of the server, and
-   regardless of its capabilities.
-
-   [ [331]Top ] [ [332]FTP Top ] [ [333]C-Kermit Home ] [ [334]Kermit
-   Home ]
-     _________________________________________________________________
-
-  3.8. FTP Command Shortcuts
-
-   C-Kermit's FTP client coexists with other C-Kermit functions by
-   requiring the "ftp" prefix for each FTP-related command: FTP OPEN, FTP
-   GET, FTP BYE, and so on. For interactive use, however, this can be
-   rather awkward and sometimes surprising, for example when a GET
-   command starts a Kermit GET rather than an FTP GET. In fact, many
-   Kermit commands might just as easily apply to an FTP connection: GET,
-   PUT (SEND), BYE, and CLOSE. The following command lets you choose how
-   these commands are interpreted:
-
-   SET GET-PUT-REMOTE { AUTO, KERMIT, FTP }
-          Controls the orientation of GET, PUT, REMOTE and other
-          file-transfer and client/server commands that might apply to
-          either Kermit or FTP. The default setting is AUTO, meaning that
-          these commands apply to FTP if an FTP connection is open, and
-          to Kermit otherwise. KERMIT means they always apply to Kermit,
-          FTP means they always apply to FTP.
-
-   Here is a complete list of affected commands:
-
- Kermit Command               FTP Equivalent
-  (none)                       FTP [ OPEN ]
-  LOGIN                        FTP USER
-  LOGOUT                       FTP RESET
-  BYE                          FTP BYE
-  FINISH                       FTP BYE
-  CLOSE                        FTP BYE
-  HANGUP                       FTP BYE
-  BINARY                       FTP TYPE BINARY
-  TEXT (or ASCII)              FTP TYPE ASCII
-  SEND (or PUT)                FTP PUT
-  MSEND (or MPUT)              FTP MPUT
-  RESEND                       FTP PUT /RECOVER
-  CSEND                        FTP PUT /COMMAND
-  GET                          FTP GET
-  MGET                         FTP MGET
-  REGET                        FTP GET /RECOVER
-  REMOTE HELP      (RHELP)     FTP HELP
-  REMOTE CD        (RCD)       FTP CD (CWD)
-  REMOTE PWD       (RPWD)      FTP PWD
-  REMOTE DIRECTORY (RDIR)      FTP DIRECTORY
-  REMOTE DELETE    (RDEL)      FTP DELETE
-  REMOTE MKDIR     (RMKDIR)    FTP MKDIR
-  REMOTE RMDIR     (RRMDIR)    FTP RMDIR
-  REMOTE RENAME    (RRENAME)   FTP RENAME
-  REMOTE TYPE      (RTYPE)     FTP TYPE
-  REMOTE EXIT      (REXIT)     FTP BYE
-
-   The commands in the right-hand column always access FTP. The commands
-   in the left column can access either Kermit protocol or FTP:
-
-     * When GET-PUT-REMOTE is set to KERMIT, or to AUTO when there is no
-       FTP connection, the commands in the left-hand column access Kermit
-       protocol, and those right-hand column are required for FTP.
-     * When GET-PUT-REMOTE is set to FTP, or to AUTO when there is an
-       active FTP connection, the commands in the left-hand column access
-       the FTP connection and can not be used to access Kermit protocol.
-       In this case, if you want to be able to use both Kermit protocol
-       and the FTP connection, you must SET GET-PUT-REMOTE KERMIT, and
-       then use the FTP commands in the right-hand column to access the
-       FTP connection.
-
-   Note that file-management commands such as DIRECTORY, DELETE, CD, PWD,
-   MKDIR, RMDIR, HELP, RENAME, COPY, TYPE, and so on, always apply
-   locally, no matter what kind of connection you have. This is the
-   opposite of most FTP clients, where these commands are intended for
-   the server, and require an "L" prefix for local execution (e.g. "dir"
-   gets a directory listing from the server, "ldir" gets a local
-   directory listing). To illustrate with the CD command and a typical
-   UNIX FTP client:
-
- Client   Server      Change Local Directory     Change Remote Directory
-  FTP      FTP         lcd                        cd (cwd)
-  Kermit   Kermit      cd                         rcd, remote cd
-  Kermit   FTP         cd                         ftp cd, rcd, remote cd
-
-   Also note that not all REMOTE commands are useful with FTP, since FTP
-   servers do not offer the corresponding functions. These include:
-
-     * REMOTE ASSIGN  - FTP servers don't have variables
-     * REMOTE COPY    - FTP servers don't copy files
-     * REMOTE HOST    - FTP servers don't execute host (shell) commands
-     * REMOTE KERMIT  - FTP servers don't execute Kermit commands
-     * REMOTE PRINT   - FTP servers don't print files
-     * REMOTE QUERY   - FTP servers don't have variables
-     * REMOTE SET     - FTP servers don't have Kermit settings
-     * REMOTE WHO     - FTP servers don't send user lists
-
-   Finally note that command shortcuts do not apply to the HELP command.
-   For help about an FTP command, use (for example) "help ftp delete",
-   not "help delete" or "help rdelete".
-
-   [ [335]Top ] [ [336]FTP Top ] [ [337]C-Kermit Home ] [ [338]Kermit
-   Home ]
-     _________________________________________________________________
-
-  3.9. Dual Sessions
-
-   You can have an FTP session open at the same time as a regular Kermit
-   SET LINE or SET HOST (terminal) session. In this case, the default SET
-   GET-PUT-REMOTE AUTO setting should ensure that all "two-faced"
-   commands like GET, PUT, REMOTE, HANGUP, BYE, etc, apply to the Kermit
-   session, and all commands for the FTP session must include the FTP
-   prefix. To be absolutely certain, you can use SET GET-PUT-REMOTE
-   KERMIT.
-
-  ftp foo.bar.baz.com
-  if fail ...
-  (log in)
-  set host foo.bar.baz.com
-  if fail ...
-  (log in)
-
-   Now you have both an FTP and Telnet connection to the same host (of
-   course they could also be to different hosts, and you could also have
-   a direct or dialed serial connection instead of a Telnet connection).
-   Now assuming you have a Kermit server on the far end of the Kermit
-   connection:
-
-  rcd incoming      ; Changes Kermit server's directory (= REMOTE CD)
-  ftp cd incoming   ; Changes FTP server's directory
-  put oofa.txt      ; Sends a file on the Kermit connection
-  ftp put oofa.txt  ; Sends a file on the FTP connection
-  bye               ; Shuts down the Kermit connection
-  ftp bye           ; Shuts down the FTP connection
-
-   Note that PUT and SEND are synonyms for both FTP and Kermit
-   connections.
-
-   You can also establish dual sessions on the Kermit command line:
-
-  kermit -j host1 -9 host2
-
-   This makes a Telnet connection to host1 and an FTP connection to
-   host2.
-
-   [ [339]Top ] [ [340]FTP Top ] [ [341]C-Kermit Home ] [ [342]Kermit
-   Home ]
-     _________________________________________________________________
-
-  3.10. Automating FTP Sessions
-
-   Most of Kermit's scripting features can be used to make and control
-   FTP sessions: FOR and WHILE loops, IF-ELSE and SWITCH constructions,
-   variables, arrays, built-in functions, and all the rest. You can't use
-   INPUT, MINPUT, OUTPUT, CLEAR, or SCRIPT on an FTP session, but these
-   are not needed since the FTP protocol is well defined.
-
-   [343]CLICK HERE for an FTP scripting tutorial.
-
-    3.10.1. FTP-Specific Variables and Functions
-
-   The following variable tells whether an FTP connection is open:
-
-   \v(ftp_connected)
-          1 if there is an active FTP connection, 0 if there isn't.
-
-   The FTP OPEN command sets:
-
-   \v(ftp_host)
-          The host to which the most recent FTP connection was made.
-
-   \v(ftp_security)
-          The security method negotiated for the current FTP session. The
-          value is "NULL" when no security is used. See [344]3.2. Making
-          Secure FTP Connections.
-
-   \v(ftp_server)
-          The OS type (UNIX, VMS, etc) of the FTP server host.
-
-   The FTP USER command (or FTP OPEN /USER:, or FTP with automatic login)
-   sets:
-
-   \v(ftp_loggedin)
-          1 if you are logged in to an FTP server, 0 if you are not.
-
-   The current COMMAND-PROTECTION-LEVEL and DATA-PROTECTION-LEVEL values
-   are reflected in:
-
-   \v(ftp_cpl)
-   \v(ftp_dpl)
-          The values are "clear", "confidential", "safe" or "private".
-          See [345]3.2. Making Secure FTP Connections.
-
-   The FTP GET-PUT-REMOTE setting is reflected in:
-
-   \v(ftp_getputremote)
-          The values are "auto", "ftp", or "kermit".
-
-   Every FTP command sets the \v(success) variable, as well as the
-   following two FTP-specific variables:
-
-   \v(ftp_code)
-          The standardized numeric FTP protocol code from the server's
-          response to the last client command, a 3-digit decimal number
-          defined in [346]RFC959. Briefly:
-
-          1xx = Positive Preliminary Reply
-          2xx = Positive Completion Reply
-          3xx = Positive Intermediate Reply
-          4xx = Transient Negative Completion Reply
-          5xx = Permanent Negative Completion Reply
-
-   \v(ftp_message)
-          The text message, if any, from the server's response to the
-          last client command. If the most recent response had multiple
-          lines, this variable has only the final line. These messages
-          are not standardized and vary in format and content from server
-          to server. Synonym: \v(ftp_msg).
-
-   FTP file transfers set the regular Kermit transfer status variables:
-
-  \v(cps)         Characters per second of most recent transfer.
-  \v(filespec)    File specification used in most recent transfer.
-  \v(fsize)       Size of file most recently transferred.
-  \v(tfsize)      Total size of file group most recently transferred.
-  \v(xferstatus)  Status of most recent transfer (0 = success, 1 = failure).
-  \v(tftime)      Elapsed time of most recent transfer, in seconds.
-
-   During an FTP transfer, the per-file variables are:
-
-  \v(filename)    Name of current file.
-  \v(filenumber)  Ordinal file number in group (1, 2, 3, ...)
-     _________________________________________________________________
-
-    3.10.2. Examples
-
-   Let's begin with a simple example showing how to log in, send some
-   files, and log out:
-
-  define error if fail { ftp bye, stop 1 Error: \%1 }
-  set transact brief
-  log t
-  ftp ftp.xyzcorp.com /anonymous
-  if fail stop 1 Connection failed
-  if not \v(ftp_loggedin) stop 1 Login failed
-  ftp cd incoming
-  error {ftp cd}
-  cd upload
-  error {local cd}
-  ftp put /delete *
-  error {put}
-  ftp bye
-
-   First we define an error handling macro to be used after the
-   connection is made. Then we set up a brief-format transaction log to
-   keep a record of our file transfers. Then we make a connection to the
-   host and log in anonymously. The "if fail" command checks whether the
-   connection was made. The "if not" command checks whether login was
-   successful. Obviously the script should not continue unless both tests
-   succeed.
-
-   Next we change to the server's 'incoming' directory and to our own
-   'upload' directory, and send all the files that are in it (they can be
-   any mixture of text and binary files), deleting each source file
-   automatically after it is successfully uploaded. Each of these
-   operations is checked with the ERROR macro, which prevents the script
-   from continuing past a failure.
-
-   Finally we close the FTP session with the "bye" command.
-
-   Just like any other Kermit script, this one can be used in many ways:
-
-     * It can be stored in a file, and Kermit can be told to TAKE the
-       file.
-     * In UNIX, it can be a "[347]kerbang" script and therefore run
-       directly from the shell prompt or as a cron job.
-
-   We could have used command shortcuts like "rcd", "put", and "bye", but
-   since they can be ambiguous under certain circumstances, it is better
-   to avoid them in scripts; they are intended mainly for convenience
-   during interactive use. However, if you wish to use the shortcuts in a
-   script, you can do it this way (error handling omitted for brevity):
-
-  local \%t                       ; Declare a local temporary veriable
-  assign \%t \v(ftp_getputremote) ; Save current FTP GET-PUT-REMOTE setting
-  set ftp get-put-remote ftp      ; Choose FTP orientation
-  ftp xyzcorp.com /anonymous      ; Open an FTP connection
-  get oofa.txt                    ; GET a file
-  put foo.bar                     ; PUT a file
-  rdel yesterday.log              ; Delete a file on the server
-  bye                             ; Log out and disconnect from server.
-  set ftp get-put-remote \%t      ; Restore previous GET-PUT-REMOTE setting
-
-   Of course, FTP scripts can also be written as macros. This lets you
-   pass parameters such as hostnames, usernames, and filenames to them:
-
-  define doftpget {
-      if < \v(argc) 4 end 1 Usage: \%0 host user remotefile [ localfile ]
-      ftp \%1 /user:\%2
-      if fail end 1 FTP OPEN \%1 failed
-      if not \v(ftp_loggedin) end 1 FTP LOGIN failed
-      ftp get {\%3} {\%4}
-      if fail end 1 FTP GET \%3 failed
-      ftp bye
-  }
-
-   Add this definition to your Kermit customization file, and it will
-   always be available when you start Kermit. This macro lets you
-   download a file with FTP by giving a single command, e.g.:
-
-  doftpget xyzcorp.com anonymous oofa.txt
-     _________________________________________________________________
-
-    3.10.3. Automating Secure FTP Sessions
-
-   Often when making secure connections, you are prompted interactively
-   for certain information or permission to proceed. These prompts can
-   stop an automated procedure. To avoid them, you must give the
-   appropriate commands to disable them, and/or supply the prompted-for
-   information beforehand. Here are a few hints:
-
-     * Make sure that SET TAKE ERROR and SET MACRO ERROR are both OFF.
-       This is the default, but in case you have set either one of these
-       ON in your script or initialization file, this makes the script
-       halt on any kind of error. Normally you would want to check each
-       operation for success or failure and take appropriate action.
-     * On SSL and TLS connections, you may be asked whether it is OK to
-       proceed with a connection to server that presents a self-signed
-       certificate. You can use the SET AUTHENTICATION SSL (or TLS)
-       VERIFY or SET AUTH SSL (or TLS) CERTS-OK commands to avoid this
-       prompt by not requesting a certificate from the peer.
-     * (More to be added...)
-
-   [ [348]Top ] [ [349]FTP Top ] [ [350]FTP Script Tutorial ] [
-   [351]C-Kermit Home ] [ [352]Kermit Home ]
-     _________________________________________________________________
-
-  3.11. Advanced FTP Protocol Features
-
-   The remainder of the FTP documention (through the end of Section 3) is
-   new to C-Kermit 8.0.206, but we leave it in black to prevent
-   headaches. Except for titles.
-     * [353]TERMINOLOGY
-     * [354]FEATURE NEGOTIATION
-     * [355]USING MGET: NLST VERSUS MLSD
-     * [356]EXAMPLES
-     * [357]REFERENCES
-
-   The new releases of [358]C-Kermit (8.0.206) and [359]Kermit 95 (2.1)
-   support new FTP protocol features from RFC 2389 as well as most of
-   what's in the Elz and Hethmon Extensions to FTP Internet Draft (see
-   [360]References). Some of these features, such as SIZE (request a
-   file's size), MDTM (request file's modification time), and REST
-   (restart interrupted transfer) have been widely implemented in FTP
-   clients and servers for years (as well as in the initial release of
-   the Kermit FTP clients). Others such as FEAT and MLSD are rarely seen
-   and are new to the upcoming Kermit releases. TVFS (Trivial Virtual
-   File Store) is supported implicitly, and the UTF-8 character-set is
-   already fully supported at the protocol and data-interchange level.
-
-   For Kermit users, the main benefit of the new FTP protocol extensions
-   is the ability to do recursive downloads. But the extensions also
-   introduce complications and tradeoffs that you should be aware of. Of
-   course Kermit tries to "do the right thing" automatically in every
-   case for backwards compatibility. But (as noted later) some cases are
-   inherently ambiguous and/or can result in nasty surprises, and for
-   those situations new commands and switches are available to give you
-   precise control over Kermit's behavior, in case the defaults don't
-   produce the desired results.
-     _________________________________________________________________
-
-   3.11.1. Terminology Command-line FTP clients such as Kermit (as well
-   as the traditional FTP programs found on Unix, VMS, ..., even Windows)
-   have commands like PUT, MPUT, GET, MGET, and BYE, which they convert
-   into zero or more FTP protocol commands, such as NLST, RETR, QUIT. For
-   clarity, we'll use "command" to refer to commands given by the user to
-   the FTP client, and "directive" for FTP protocol commands sent by the
-   FTP client to the FTP server.
-     _________________________________________________________________
-
-   3.11.2. Feature Negotiation New FTP protocol features are negotiated
-   by the client sending a FEAT directive and the server responding with
-   a list of (new) features it supports, or else with an error indication
-   if it does not support the FEAT directive at all, in which case the
-   client has to guess which new features it supports (Kermit guesses
-   that it supports SIZE and MDTM but not MLST). Note that the MLST
-   feature includes MLSD, which is not listed separately as a feature.
-
-   Guessing is nice when it works, but sometimes it doesn't, and some FTP
-   servers become confused when you send them a directive they don't
-   understand, or they do something you didn't want, sometimes to the
-   point of closing the connection. For this reason, Kermit lets you
-   override default or negotiated features with the following new
-   commands:
-
-   FTP { ENABLE, DISABLE } FEAT
-          Enables or disables the automatic sending of a FEAT directive
-          upon connection to an FTP server. Note that
-          FTP [ OPEN ] /NOINIT   also inhibits sending the FEAT directive
-          (and several others) for the connection being OPEN'd, but
-          without necessarily disabling FEAT for subsequent connections
-          in the same Kermit instance. FEAT is ENABLED by default, in
-          which case many FTP servers are likely to reply:
-
-500 'FEAT': command not understood
-
-          which is normally harmless (but you never know). (In C-Kermit
-          8.0.208, this error message is suppressed unless you SET FTP
-          DEBUG ON.)
-
-   FTP ENABLE { MDTM, MLST, SIZE }
-          Enables the given directive for implicit use by the FTP GET and
-          MGET commands in case it has been disabled or erroneously
-          omitted by the server in its FEAT response. Note: MLSD can be
-          used in the FTP ENABLE and DISABLE commands as a synonym for
-          MLST. YOU MUST GIVE THIS COMMAND AFTER MAKING THE FTP
-          CONNECTION.
-
-   FTP DISABLE { MDTM, MLST, SIZE }
-          Disables implicit use of the given directive by GET or MGET in
-          case it causes problems; for example, because it makes
-          multifile downloads take too long or the server announces it
-          erroneously or misimplements it. Use DISABLE FEAT before making
-          a connection to prevent Kermit from sending the FEAT directive
-          as part of its initial sequence. Note that disabling FEAT,
-          SIZE, or MDTM does not prevent you from executing explicit FTP
-          FEATURES, FTP SIZE, or FTP MODTIME commands. Also note that
-          disabling SIZE prevents PUT /RESTART (recovery of interrupted
-          uploads) from working. YOU MUST GIVE THIS COMMAND AFTER MAKING
-          THE FTP CONNECTION.
-
-   To enable or disable more than one feature, use multiple FTP ENABLE or
-   FTP DISABLE commands. The SHOW FTP command shows which features are
-   currently enabled and disabled.
-
-   FTP FEATURES
-          This command sends a FEAT directive to the server. In case you
-          have been disabling and enabling different features, this
-          resynchronizes Kermit's feature list with the server's. If the
-          server does not support the FEAT directive, Kermit's feature
-          list is not changed.
-
-   FTP OPTIONS directive
-          Informational only: the server tells what options, if any, it
-          supports for the given directive, e.g. MLST. Fails if the
-          server does not support the OPTS directive or if the directive
-          for which options are requested is not valid. The directive is
-          case-insensitive.
-
-   FTP SIZE filename
-          Sends a SIZE directive to the server for the given file. The
-          filename must not contain wildcards. The server responds with
-          an error if the file can't be found, is not accessible, or the
-          SIZE directive is not supported, otherwise with the length of
-          the file in bytes, which Kermit displays and also makes
-          available to you in its \v(ftp_message) variable. If the
-          directive is successful, Kermit (re-)enables it for internal
-          use by the GET and MGET directives on this connection.
-
-   FTP MODTIME filename
-          Works just like the SIZE directive except it sends an MDTM
-          directive. Upon success, the server sends modification
-          date-time string, which Kermit interprets for you and also
-          makes available in its \v(ftp_message) variable.
-
-   Whenever a SIZE or MDTM directive is sent implicitly and rejected by
-   the server because it is unknown, Kermit automatically disables it.
-     _________________________________________________________________
-
-   3.11.3. Using MGET: NLST versus MLSD When you give an MGET command to
-   an FTP client, it sends a request to the FTP server for a list of
-   files, and then upon successful receipt of the list, goes through it
-   and issues a RETR (retrieve) directive for each file on the list (or
-   possibly only for selected files).
-
-   With the new FTP protocol extensions, now there are two ways to get
-   the list of files: the NLST directive, which has been part of FTP
-   protocol since the beginning, and the new MLSD directive, which is new
-   and not yet widely implemented. When NLST is used and you give a
-   command like "mget *.txt", the FTP client sends:
-
-NLST *.txt
-
-   and the server sends back a list of the files whose names match, e.g.
-
-foo.txt
-bar.txt
-baz.txt
-
-   Then when downloading each file, the client sends SIZE (if it wants
-   have a percent-done display) and MDTM (if it wants to set the
-   downloaded file's timestamp to match that of the original), as well as
-   RETR (to retrieve the file).
-
-   But when MLSD is used, the client is not supposed to send the filename
-   or wildcard to the server; instead it sends an MLSD directive with no
-   argument (or the name of a directory), and the server sends back a
-   list of all the files in the current or given directory; then the
-   client goes through the list and checks each file to see if it matches
-   the given pattern, the rationale being that the user knows only the
-   local conventions for wildcards and not necessarily the server's
-   conventions. So with NLST the server interprets wildcards; with MLSD
-   the client does.
-
-     The interpretation of NLST wildcards by the server is not
-     necessarily required or even envisioned by the FTP protocol
-     definition (RFC 959), but in practice most clients and servers work
-     this way. 
-
-   The principal advantage of MLSD is that instead of sending back a
-   simple list of filenames, it sends back a kind of database in which
-   each entry contains a filename together with information about the
-   file: type, size, timestamp, and so on; for example:
-
-size=0;type=dir;perm=el;modify=20020409191530; bin
-size=3919312;type=file;perm=r;modify=20000310140400; bar.txt
-size=6686176;type=file;perm=r;modify=20001215181000; baz.txt
-size=3820092;type=file;perm=r;modify=20000310140300; foo.txt
-size=27439;type=file;perm=r;modify=20020923151312; foo.zip
-(etc etc...)
-
-   (If the format of the file list were the only difference between NLST
-   and MLSD, the discussion would be finished: it would always be better
-   to use MLSD when available, and the MGET user interface would need no
-   changes. But there's a lot more to MLSD than the file-list format;
-   read on...)
-
-   The client learns whether the server supports MLSD in FEAT exchange.
-   But the fact that the server supports MLSD doesn't mean the client
-   should always use it. It is better to use MLSD:
-
-     * On connections where the server imposes a time penalty for every
-       command, e.g. the Red Hat Rawhide server. With MLSD, the client
-       needs to send only one command (RETR) per file, whereas NLST
-       requires three (SIZE, RETR, and MDTM). Suppose there is a
-       30-second delay for each command and 1000 files are to be fetched;
-       in that case, MLSD saves 60,000 seconds = 1000 minutes = 16 hours
-       and 40 minutes.
-     * For recursive downloads since there is no dependable way to
-       download directory trees with NLST.
-
-   But it is better to use NLST:
-
-     * If you want only a couple short files out of a large directory. In
-       this case, NLST is the better choice since the server sends a list
-       of only the files you want, not a list of (say) a million files,
-       which can make a big difference on slow connections. For example,
-       suppose your wildcard matches three files of 1K each, but the
-       million-file listing is 80MB long, and your connection is through
-       a modem. The overhead of using MLSD is practically infinite.
-     * If the server supports wildcarding features not known to the
-       client, but that can be used to achieve desirable effects
-       otherwise unobtainable, such as "[dir...]*.txt" in VMS or AOS/VS
-       "except" clauses.
-     * If you have been given a wildcard string by an FTP site
-       administrator for fetching a specific group of files out of a
-       larger directory, e.g. "mget ck[cuw]*.[cwh] makefile", that is
-       expected to work with any client (an FTP site administrator can't
-       be expected to know the wildcard syntax of every FTP client).
-
-   But when using MLSD there are complications:
-
-     * MLSD wants either a blank argument (meaning the current directory)
-       or else the name of a specific directory. The client must not send
-       it a wildcard or a filename.
-     * But if the user's command is "mget xxx", how does the client know
-       whether to send "xxx" in the MLSD directive? It might be the name
-       of a directory on on the server, in which case it should be sent,
-       or it might be the name of a file on the server (or a wildcard),
-       in which case it must not be sent. Since the client knows its own
-       wildcard syntax, then in most cases it would be right to send
-       "MLSD" with no argument if xxx is wild, and to send "MLSD xxx" if
-       it is not.
-     * But suppose the server's file system allows filename characters
-       that correspond with the client's wildcard syntax? For example:
-       "[abc]" could be either a valid VMS directory name or a wildcard
-       pattern used by the FTP client. What should the client do with
-       "mget [abc]"? In this case there must be a way for the user to
-       force sending the MGET argument as the MLSD argument.
-     * If "xxx" is a regular file in the server's current directory,
-       "mget xxx" works with NLST but not with MLSD.
-
-   To further complicate matters, NLST can (in theory) work just like
-   MLSD: if sent with a blank argument or a directory name, it is
-   supposed to return a complete list of files in the current or given
-   directory, which the client can match locally against some pattern. It
-   is not known if any FTP server or client does this but nevertheless,
-   it should be possible since this behavior can be inferred from RFC
-   959.
-
-   In view of these considerations, and given the need to preserve the
-   traditional FTP client command structure and behavior so the software
-   will be usable by most people:
-
-    1. The MGET command should produce the expected result in the common
-       cases, regardless of whether NLST or MLSD is used underneath.
-    2. For anomalous cases, the user needs a way to control whether the
-       MGET argument is sent to the server or kept for local use.
-    3. At the same time, the user might need a way to send a directory
-       name to the server, independent of any wildcard pattern.
-    4. The user needs a way to force NLST or MLSD for a given MGET
-       command.
-
-   By default, Kermit's MGET command uses MLSD if MLST is reported by the
-   server in its FEAT list. When MLSD is used, the filespec is sent to
-   the server if it is not wild (according to Kermit's own definition of
-   "wild" since it can't possibly know the server's definition). If the
-   filespec is wild it is held for local use to select files from the
-   list returned by the server. If MLST is not reported by the server or
-   is disabled, Kermit sends the MGET filespec with the NLST directive.
-
-   The default behavior can be overridden globally with FTP DISABLE MLST,
-   which forces Kermit to use NLST to get file lists. And then for
-   situations in which MLSD is enabled, the following MGET switches can
-   be used to override the defaults for a specific MGET operation:
-
-   /NLST
-          Forces the client to send NLST. Example:
-
-mget /nlst foo.*
-
-   /MLSD
-          Forces the client to send MLSD (even if MLST is disabled).
-          Example:
-
-mget /mlsd foo.*
-
-   /MATCH:pattern
-          When this switch is given, it forces the client to hold the
-          pattern for local use against the returned file list. If a
-          remote filespec is also given (e.g. the "blah" in "mget
-          /match:*.txt blah"), then it is sent as the NLST or MLSD
-          argument, presumably to specify the directory whose files are
-          to be listed. When the /MATCH switch is not given, the MGET
-          filespec is sent to the server if the directive is NLST or if
-          the filespec is not wild. Examples:
-
-  Command:                   With NLST:     With MLSD:
-    mget                      NLST           MLSD
-    mget *.txt                NLST *.txt     MLSD
-    mget foo                  NLST foo       MLSD foo
-    mget /match:*.txt         NLST           MLSD
-    mget /match:*.txt foo     NLST foo       MLSD foo
-
-   In other words, the pattern is always intepreted locally unless MGET
-   uses NLST and no /MATCH switch was given.
-     _________________________________________________________________
-
-   3.11.4. Examples
-
-  3.11.4.1. Downloading a Single File
-
-   There are no choices here, just use the FTP GET command. Kermit always
-   sends the RETR directive, and possibly SIZE and/or MDTM. The small
-   advantage of using MLST in this case is outweighed by the risk and
-   effort of coding a special case.
-
-  3.11.4.2. Downloading a Group of Files from a Single Directory
-
-   This case presents tradeoffs, especially on slow connections:
-
-     * For downloading all or most of the files in a directory, MLSD is
-       better because it eliminates the need to send SIZE and MDTM for
-       each file. No special actions are required in this case; Kermit
-       uses MLSD automatically if the server supports it (unless you have
-       disabled it).
-     * For a small number of files from a large directory, NLST is better
-       because it bypasses downloading of a potentially huge file list
-       prior to the files themselves. If you have a connection to a
-       server that supports MLSD, use the /NLST switch to force NLST:
-
-mget /nlst t[1234].h
-
-     * If the server supports MLSD but does not support separate SIZE or
-       MDTM directives, and you need the size and/or timestamp
-       information, MLSD is better; no special actions required.
-     * If the server supports MLSD but does not support the "size" and
-       "modify" facts, but it does support the SIZE or MDTM directives,
-       and you need the size and/or timestamp information, NLST is
-       better.
-
-  3.11.4.3. Downloading a Directory Tree
-
-   MLSD is the only choice for recursive downloads; they rarely, if ever,
-   work with NLST (the few cases where they do work rely on
-   extra-protocol "secret" notations for the NLST argument). No special
-   actions are required to force MLSD when the server supports it, unless
-   you have disabled it. Examples:
-
-   MGET /RECURSIVE
-          This tells the server to send all files and directories in the
-          tree rooted at its current directory.
-
-   MGET /RECURSIVE *.txt
-          This tells the server to send all *.txt files in the tree
-          rooted at its current directory.
-
-   MGET /MLSD /RECURSIVE *.txt
-          Same as the previous example but forces Kermit to send MLSD in
-          case it was disabled, or in case the server is known to support
-          it even though it did not announce it in its FEAT listing.
-
-   MGET /RECURSIVE /MATCH:*.zip archives
-          Tells the server to send all ZIP files in the tree rooted at
-          its "archives" directory.
-
-   MGET /RECURSIVE /MATCH:* [abc]
-          The server is running on VMS and you want it to send all the
-          files in the directory tree rooted at [ABC]. But since "[abc]"
-          looks just like a wildcard, you have to include a /MATCH:
-          switch to force Kermit to send "[abc]" as the MLSD argument.
-
-   In all cases in which the /RECURSIVE switch is included, the server's
-   tree is duplicated locally.
-
-     Although MLSD allows recursion and NLST does not, the MLSD
-     specification places a heavy burden on the client; the obvious,
-     straightforward, and elegant implementation (depth-first, the one
-     that Kermit currently uses) requires as many open temporary files
-     as the server's directory tree is deep, and therefore client
-     resource exhaustion -- e.g. exceeding the maximum number of open
-     files -- is a danger. Unfortunately MLSD was not designed with
-     recursion in mind. (Breadth-first traversal could be problematic
-     due to lack of sufficient navigation information.) 
-
-   Of course all of Kermit's other MGET switches can be used too, e.g.
-   for finer-grained file selection (by date, size, etc), for moving or
-   renaming files as they arrive, to override Kermit's automatic per-file
-   text/binary mode switching, to pass the incoming files through a
-   filter, to convert text-file character sets, and so on.
-
-  3.11.4.4. NLST/MLSD Summary Table
-
-   Here's a table summarizing MGET behavior when the server supports both
-   NLST and MLSD. /NLST and /MLSD switches are included for clarity to
-   indicate which protocol is being used, and the expected effects. In
-   practice you can omit the /NLST and /MLSD switches and the Kermit
-   client chooses the appropriate or desired protocol as described above.
-   Sample commands presume a Unix file system on the server, but of
-   course the server can have any file system or syntax at all.
-
-   User's Command FTP Sends Remarks
-   mget /nlst NLST Gets a list of all the files in the server's current
-   and downloads each file. The list includes names only, so Kermit also
-   must send SIZE and MDTM directives if size and timestamp information
-   is required (this is always true of NLST). Sending NLST without an
-   argument is allowed by the RFC959 NLST definition and by the Kermit
-   FTP client, but might not work with other clients, and also might not
-   work with every server.
-   mget /nlst foo NLST foo If "foo" is a directory, this gets a list of
-   all the files from the server's "foo" directory and downloads each
-   file; otherwise this downloads the file named "foo" (if any) from the
-   server's current directory.
-   mget /nlst *.txt NLST *.txt Gets a list of the files in the server's
-   current directory whose names match the pattern *.txt, and then
-   downloads each file from the list. Because we are using NLST, we send
-   the filespec (*.txt) to the server and the server interprets any
-   wildcards.
-   mget /nlst foo/*.txt NLST foo/*.txt  Gets a list of the files in the
-   server's "foo" directory whose names match the pattern *.txt, and then
-   downloads each file from the list (server interprets wildcards).
-   mget /nlst /match:*.txt NLST Gets a list of all the files in the
-   server's current directory and then downloads each one whose name
-   matches the pattern *.txt (client interprets wildcards).
-   mget /nlst /match:*.txt foo  NLST foo Gets a list of all the files in
-   the server's "foo" directory and then downloads each one whose name
-   matches the pattern *.txt (client interprets wildcards).
-   mget /mlsd MLSD Gets a list of all the files from the server's current
-   directory and then downloads each one. The list might include size and
-   timestamp information, in which case Kermit does not need to send SIZE
-   and MDTM directives for each file (this is always true of MLSD).
-   mget /mlsd foo MLSD foo Gets a list of all the files from the server's
-   "foo" directory (where the string "foo" does not contain wildcards)
-   and then downloads each one. If "foo" is a regular file and not a
-   directory, this command is supposed to fail, but some servers have
-   been observed that send the file.
-   mget /mlsd *.txt MLSD Gets a list of all the files from the server's
-   current directory and then downloads only the ones whose names match
-   the pattern "*.txt". Because we are using MLSD and the MGET filespec
-   is wild, we do not send the filespec to the server, but treat it as
-   though it had been given in a /MATCH: switch and use it locally to
-   match the names in the list.
-   mget /mlsd foo/*.txt MLSD This one won't work because MLSD requires
-   that the notions of server directory and filename-matching pattern be
-   separated. However, the client, which can't be expected to know the
-   server's file-system syntax, winds up sending a request that the
-   server will (or should) reject.
-   mget /mlsd /match:*.txt MLSD Gets a list of all the files from the
-   server's current directory and then downloads only the ones whose
-   names match the pattern "*.txt" (client interprets wildcards).
-   mget /mlsd /match:*.txt foo MLSD foo If "foo" is a directory on the
-   server, this gets a list of all the files from the server's "foo"
-   directory and then downloads only the ones whose names match the
-   pattern "*.txt" (client interprets wildcards). This leaves the server
-   CD'd to the "foo" directory; there's no way the client can restore the
-   server's original directory because MLSD doesn't give that
-   information, and since the client can not be expected to know the
-   server's file-system syntax, it would not be safe to guess. If "foo"
-   is a regular file, MLSD fails.
-   mget /mlsd foo bar MLSD This one is problematic. You're supposed to be
-   able to give MGET a list a filespecs; in this case we name two
-   directories. The client must change the server's directory to "foo" to
-   get the list of files, and then the files themselves. But then it has
-   no way to return to the server's previous directory in order to do the
-   same for "bar", as explained in the previous example.
-   mget /mlsd /match:* [abc] MLSD [abc] Including a /MATCH: switch forces
-   [abc] to be sent to the server even though the client would normally
-   think it was a wildcard and hold it for local interpretation. In this
-   example, [abc] might be a VMS directory name.
-   mget /mlsd /match:* t*.h MLSD t*.h Contrary to the MLSD specification,
-   some MLSD-capable FTP servers do interpret wildcards. This form of the
-   MGET command can be used to force a wildcard to be sent to the server
-   for interpretation.
-
-   When MLSD is used implicitly (that is, without an /MLSD switch given
-   to force the use of MLSD) and an MGET command such as "mget foo/*.txt"
-   fails, Kermit automatically falls back to NLST and tries again.
-     _________________________________________________________________
-
-   3.11.5. References
-
-    1. Postel, J., and J. Reynolds, File Transfer Protocol (FTP), RFC
-       959, October 1985: [361]ftp://ftp.isi.edu/in-notes/rfc959.txt.
-    2. Hethmon, P, and R. Elz, Feature negotiation mechanism for the File
-       Transfer Protocol, RFC 2389, August 1998:
-       [362]ftp://ftp.isi.edu/in-notes/rfc2389.txt.
-    3. Elz, R, and P. Hethmon, Extensions to FTP, Internet Draft
-       draft-ietf-ftpext-mlst-16.txt, September 2002:
-       [363]http://www.ietf.org/internet-drafts/draft-ietf-ftpext-mlst-16
-       .txt.
-    4. [364]The Kermit FTP Client (overview).
-
-   [ [365]Top ] [ [366]FTP Top ] [ [367]C-Kermit Home ] [ [368]Kermit
-   Home ]
-  __________________________________________________________________________
-
-4. FILE SCANNING
-
-   A new feature called file scanning is used in various contexts to
-   determine if a file is text or binary, and if it is text, what kind of
-   text. The overhead of file scanning is surprisingly tolerable, usually
-   about a quarter second per file. File scanning is now used instead of
-   filename patterns unless you SET FILE SCAN OFF, which restores the
-   previous behavior.
-
-   The primary benefit of file scanning is in file transfer. For all
-   practical purposes, now you can stop worrying about whether a file
-   should be sent in binary or text mode, or about sending mixtures of
-   text and binary files in a single operation, or configuring and
-   fine-tuning your lists of binary-file and text-file name patterns: now
-   it all just works.
-
-   File scanning is done by the file sender, which determines the type of
-   each file before it sends it and informs the receiver (Kermit or FTP
-   server) of the type. File scanning is NOT done by the receiver,
-   because it is the sender's responsibility to determine each file's
-   type, send the file in the right mode, and inform the receiver of the
-   mode. If both transfer partners are capable of this (or any other)
-   form of automatic text/binary mode switching, then files can be sent
-   in both directions with no worries about corruption due to
-   inappropriate transfer mode. (As noted in [369]Section 3, FTP servers
-   don't do this, so this discussion does not apply when using Kermit to
-   download from an FTP server.)
-
-   The rest of this section is mainly for the curious. If you don't read
-   it and simply accept all defaults, every file you send should go in
-   the appropriate mode automatically. As always, however, for
-   character-set translation to work for 7- and 8-bit character-set
-   files, the appropriate SET FILE CHARACTER-SET command(s) must have
-   been executed to identify their encoding (Kermit's default file
-   character-set is neutral ASCII except on platforms like HP-UX or
-   DG/UX, where the default file character-set is known). And of course,
-   receiving is another matter -- obviously the other Kermit must also
-   send each file in the appropriate mode.
-
-   Scanning is more reliable than filename patterns simply because
-   filenames are not reliable indicators of the file's contents. Classic
-   examples include ".doc" files, which are binary if Microsoft Word
-   documents but text on most other platforms, and ".com" files, which
-   are binary on DOS and Windows but text on VMS. Anyway, nobody knows
-   the naming conventions (if any) of all the applications (and persons!)
-   on your computer. Scanning, on the other hand, determines each file's
-   type by inspecting its contents rather than just looking at its name.
-
-   Also, file patterns -- even when they work as intended -- categorize
-   each file only as text or binary, whereas file scanning can make finer
-   distinctions:
-
-   BINARY
-          Binary data, not to be converted in any way. Examples include
-          binary machine code (executable programs), graphics images
-          (GIF, JPG, etc), compressed files (Z, GZ, etc), archives and
-          packages (ZIP, TAR, RPM, etc), object files and libraries (OBJ,
-          DLL, etc).
-
-   7-BIT TEXT
-          Text encoded in a 7-bit character set such as ASCII or one of
-          the ISO 646 national versions. Kermit has no way to tell which
-          character is used, only that it's 7-bit text. Typical examples
-          include program source code, README files, Perl or Kermit
-          scripts, plain-text email, HTML, TeX, and various textual
-          encodings of binary files: Hex, Base64, etc. When sending such
-          files, the FILE DEFAULT 7BIT-CHARACTER-SET is used as the file
-          character-set, and then the appropriate transfer character set
-          is chosen from the associations list (ASSOCIATE, SHOW
-          ASSOCIATIONS).
-
-   8-BIT TEXT
-          Text encoded in an 8-bit character set such as Latin-1,
-          Latin-2, Latin/Hebrew, Latin/Cyrillic, KOI8, HP-Roman8, JIS X
-          0208, Code Page 437, or Code Page 1252. Again, Kermit has no
-          way of knowing which particular set is in use, only that it's
-          8-bit text. When sending such files, the FILE DEFAULT
-          8BIT-CHARACTER-SET is used as the file character-set, and then
-          the appropriate transfer character set is chosen from the
-          associations list.
-
-   UCS2 TEXT
-          Unicode in its basic form, 16 bits (2 octets) per character.
-          When sending such files, UCS2 is the file character-set and the
-          byte order is identified automatically; the appropriate
-          transfer character set is chosen from the associations list.
-          Normally this would be UTF8. UTF-16 is not supported yet;
-          Kermit's Unicode translations are restricted to Plane 0, the
-          Base Multilingual Plane (BMP).
-
-   UTF8 TEXT
-          Unicode in its 8-bit transformation format. When sending such
-          files, UTF8 is the file character-set; the appropriate transfer
-          character set is chosen from the associations list, normally
-          UCS2 or UTF8.
-
-   File scanning is available in UNIX C-Kermit, in K-95, and to a limited
-   extent, in VMS C-Kermit (full scanning is problematic in VMS because
-   even plain-text files might contain binary record-format information).
-   The relevant commands are:
-
-   SET TRANSFER MODE { AUTOMATIC, MANUAL }
-          Tells whether the file-transfer mode (text or binary) should be
-          set by automatic or "manual" means. AUTOMATIC is the default,
-          which allows any of the automatic methods that are enabled to
-          do their jobs: FILE SCAN, FILE PATTERNS, peer recognition, etc.
-          MANUAL lets you control the transfer mode with the SET FILE
-          TYPE commands. As always, /TEXT and /BINARY switches on your
-          file-transfer commands override all other methods; if you give
-          one of these switches, scanning is not done. SHOW TRANSFER
-          displays the current TRANSFER MODE setting.
-
-   SET FILE SCAN { ON [ number ], OFF }
-          Turns this feature on and off. It's ON by default. When OFF,
-          the previous rules apply (SET FILE PATTERNS, etc). When ON is
-          given, you can also specify a number of bytes to be scanned.
-          The default is 49152 (= 48K). If a negative number is given,
-          the entire file is scanned, no matter how big, for maximum
-          certainty (for example, a PostScript file that appears to be
-          plain text might include an embedded graphic past the normal
-          scanning limit). SHOW FILE displays the current FILE SCAN
-          setting.
-
-   SET FILE DEFAULT 7BIT-CHARACTER-SET name
-          Tells the 7-bit character-set to use if scanning identifies a
-          7-bit text file, e.g. GERMAN. SHOW FILE displays the current
-          SET FILE DEFAULT settings. So does SHOW CHARACTER-SETS.
-
-   SET FILE DEFAULT 8BIT-CHARACTER-SET name
-          Tells the 8-bit character-set to use if scanning identifies an
-          8-bit text file, e.g. LATIN1. SHOW FILE and SHOW CHARACTER-SET
-          display this.
-
-   ASSOCIATE FILE-CHARACTER-SET fcs tcs
-          When sending files and a file character-set (fcs) is identified
-          by scanning, this tells C-Kermit which transfer character-set
-          (tcs) to translate it to. It also allows C-Kermit to set the
-          appropriate transfer character-set automatically whenever you
-          give a SET FILE CHARACTER-SET command.
-
-   ASSOCIATE TRANSFER-CHARACTER-SET tcs fcs
-          When receivinging files and a file arrives whose transfer
-          character-set (tcs) is announced by the sender, this command
-          tells C-Kermit which file character-set (fcs) to translate it
-          to. It also allows C-Kermit to set the appropriate file
-          character-set whenever you give a SET TRANSFER CHARACTER-SET
-          command.
-
-   SET FILE CHARACTER-SET name
-          When given for a 7-bit set, also sets FILE DEFAULT
-          7BIT-CHARACTER-SET to the same set. When given for an 8-bit
-          set, also sets FILE DEFAULT 8BIT-CHARACTER-SET to the same set.
-          If an ASSOCIATE FILE-CHARACTER-SET command has been given for
-          this set, also sets the corresponding transfer character-set.
-
-   DIRECTORY /XFERMODE [ filespec ]
-          Performs a file scan of the given files, listing the result for
-          each file. If FILE SCAN is OFF but PATTERNS are ON, the result
-          shown according to the current FILE TEXT-PATTERNS and
-          BINARY-PATTERNS, and are restricted to (B) and (T). When FILE
-          SCAN is ON, the results are:
-
-  (B)          Binary
-  (T)(7BIT)    Text: 7-bit
-  (T)(8BIT)    Text: 8-bit
-  (T)(UTF8)    Text: Unicode UTF8
-  (T)(UCS2BE)  Text: Unicode UCS2 Big Endian
-  (T)(UCS2LE)  Text: Unicode UCS2 Little Endian
-
-          So you can use DIR /XFER to get a preview of how each file in a
-          selected group will be transferred. Everything to the right of
-          the (B) or (T) is new. If FILE SCAN is OFF, you only get the
-          (B) or (T) as before.
-
-          Note: Big and Little Endian refer to the ordering of bytes
-          within a computer word. Big Endian architecture is standard and
-          is used on most non-PC computers. Little Endian architecture is
-          used on PCs.
-
-   To illustrate file-transfer with scanning, suppose you have a
-   directory containing a mixture of text and binary files, and each text
-   file can be 7-bit German ISO 646, 8-bit Latin-1, or Unicode in any of
-   the following forms: UCS2 Little Endian, UCS2 Big Endian, or UTF8
-   ([370]UTF-16 is not supported yet). Assuming all the built-in defaults
-   are in effect, the following three commands do the job:
-
-  set file char german   ; This sets the default for 7-bit text files
-  set file char latin1   ; This sets the default for 8-bit text files
-  send *
-
-   Each file is sent in the appropriate mode (text or binary), with text
-   files converted to the appropriate transfer character-set and labeled
-   so the receiver can convert them according to its own local
-   conventions.
-
-   By the way, what if you want to inhibit character-set translation but
-   still allow automatic text/binary mode switching? Previously, you
-   could simply SET TRANSFER CHARACTER-SET TRANSPARENT. But now with file
-   scanning, the file and transfer character-sets are set automatically
-   per file. A new command was added for this purpose:
-
-   SET TRANSFER TRANSLATION { ON, OFF }
-          Enables and disables file-transfer character-set translation.
-          It is enabled by default.
-
-   When TRANSFER TRANSLATION is OFF but FILE SCAN is ON, files are still
-   scanned to see if they are text or binary, but no character-set
-   translation is done when they text: only the normal record-format
-   conversion.
-
-   Like all SET commands, SET TRANSFER TRANSLATION is global and
-   persistent. You can also force a particular file-transfer command
-   (SEND, MSEND, GET, RECEIVE, TRANSMIT, etc) to not translate without
-   affecting the global translation settings by including the new
-   /TRANSPARENT switch, e.g.
-
-  send /transparent oofa.txt
-
-   As of C-Kermit 8.0.206, SET TRANSFER CHARACTER-SET TRANSPARENT implies
-   SET TRANSFER TRANSLATION OFF.
-
-   File scanning is also used in the TYPE command. The source file type
-   and character set are determined as above, and then the file is
-   automatically converted to your display character-set, line by line.
-   In Kermit 95, the display character-set is Unicode, perhaps converted
-   to your current console code page; in other versions of C-Kermit, it
-   is your current file character-set. Thus if you have the following set
-   appriately:
-
-  SET FILE CHARACTER-SET (necessary in Unix but not K95)
-  SET FILE DEFAULT 7BIT CHARACTER-SET
-  SET FILE DEFAULT 8BIT CHARACTER-SET
-
-   then you should be able to TYPE any text file and see something
-   reasonable. For example, in Unix, if your DEFAULT 7BIT-CHARACTER-SET
-   is ITALIAN and your DEFAULT 8BIT-CHARACTER-SET is LATIN1, and your
-   FILE CHARACTER-SET is LATIN1, you can TYPE an Italian ISO 646 file, a
-   Latin-1 file, or any kind of Unicode file, and have it translated
-   automatically to Latin-1 for your display.
-
-   In the GUI version of Kermit 95, you can see mixtures of many
-   different scripts if the file is UTF8 or UCS2: Roman, Cyrillic,
-   Hebrew, Greek, Armenian, Georgian, etc, all on the same screen at
-   once.
-
-   File scanning also adds a new criterion for file selection, i.e. to
-   select only text (or binary) files. Several commands now include a new
-   switch, /TYPE:{BINARY,TEXT,ALL}. BINARY means select only binary
-   regular files (not directories). TEXT means select only text files.
-   ALL means don't scan; select all files. Examples:
-
-   SEND /TYPE:BINARY *.*
-          Sends only binary files, skipping over text files.
-
-   NOTE: File scanning is NOT done when using external protocols (because
-   the external protocol programs, such as sz, are processing each file,
-   not Kermit).
-
-   DIRECTORY /TYPE:TEXT
-          Lists only text files but not binary files.
-
-   DELETE /TYPE:BINARY foo.*
-          Deletes all foo.* files that are regular binary files but does
-          not delete any text files.
-
-   CHMOD /TYPE:BINARY 775 *
-          (UNIX) Changes the permissions of all binary files to 775.
-
-   When FILE SCAN is OFF and FILE PATTERNS are ON, behavior is as before
-   with PATTERNS ON, but with some improvements:
-
-     * Pathnames are now stripped prior to pattern matching.
-     * Backup suffixes (like .~3~) are stripped prior to pattern
-       matching.
-
-   [ [371]Top ] [ [372]Contents ] [ [373]C-Kermit Home ] [ [374]Kermit
-   Home ]
-  __________________________________________________________________________
-
-5. FILE AND DIRECTORY NAMES CONTAINING SPACES
-
-   Prior to the introduction of the graphical user interface (GUI), it
-   was inconceivable that file or directory names could contain spaces,
-   because space is a field delimiter in all command languages. GUIs,
-   however, use dialog boxes for filenames, so there is never any
-   question of distinguishing a filename from adjacent fields -- because
-   there are no adjacent fields -- and therefore it has become quite
-   common on computers that have GUIs to have file and directory names
-   composed of multiple words. Of course this poses problems for command
-   shells and other text-oriented programs.
-
-   Most command shells address these problems by allowing such names to
-   be enclosed in doublequotes, e.g.:
-
-  cd "c:\Program Files"
-
-   C-Kermit previously used braces for this:
-
-  cd {c:\Program Files}
-
-   which was not what most people expected. And even when braces were
-   used, Kermit had difficulties with completion, file menus, and so
-   forth, within braced fields.
-
-   C-Kermit 8.0 allows either doublequotes or braces to be used for
-   grouping:
-
-  send "this file"
-  send {this file}
-  rename "this file" "that file"
-  rename {this file} "that file"
-  rename "this file" {that file}
-  cd {Program Files}
-  cd "Program Files"
-
-   Note that the doublequotes or brackets must enclose the whole file or
-   directory specification:
-
-  "c:\My Directory"
-
-   not:
-
-  c:\"My Directory"
-
-   In C-Kermit 8.0, you can also use completion on these filenames, in
-   which case Kermit supplies the quotes (or braces) automatically.
-   Example (in which the current directory contains only one file whose
-   name starts with "th" and its full name is "this file" (without the
-   quotes, but with the space)):
-
-  cat th<Tab>
-
-   Kermit repaints the filename field like this:
-
-  cat "this file"
-
-   That is, it backspaces over the original "th" and then writes the
-   filename in doublequotes.
-
-   If completion is only partial, Kermit still supplies the quotes, but
-   in this case also beeps. To continue the filename, you must first
-   backspace over the closing quote. The closing quote is supplied in
-   this case to make sure that you can see the spaces, especially if they
-   are trailing. For example, if the current directory contains two files
-   whose names start with "th", and their fill names are "this file" and
-   "this other file":
-
-  cat th<Tab>
-
-   Kermit prints:
-
-  cat "this "<Beep>
-
-   If it didn't print the closing quote, you would probably wonder why it
-   was beeping.
-
-   Also, if you begin a filename field with a doublequote or opening
-   brace, now you can use completion or get ?-help; this was never
-   possible before.
-
- C-Kermit>type "thi? Input file specification, one of the following:
-   this file        this other file
- C-Kermit>type "thi_
-
-   [ [375]Top ] [ [376]Contents ] [ [377]C-Kermit Home ] [ [378]Kermit
-   Home ]
-  __________________________________________________________________________
-
-6. OTHER COMMAND PARSING IMPROVEMENTS
-
-  6.1. Grouping Macro Arguments
-
-   Doublequotes now can be used in macro invocations to group arguments
-   containing spaces, where previously only braces could be used:
-
-  define xx show args
-  xx one "this is two" three
-
-   Result:
-
-  Macro arguments at level 0 (\v(argc) = 4):
-   \%0 = xx
-   \%1 = one
-   \%2 = this is two
-   \%3 = three
-
-   Also, you can now quote braces and quotes in macro args (this didn't
-   work before). Examples:
-
-  xx "{"  ; The argument is a single left brace
-  xx {"}  ; The argument is a doublequote character
-
-   In case this new behavior interferes with your scripts, you can
-   restore the previous behavior with:
-
-  SET COMMAND DOUBLEQUOTING OFF
-
-  6.2. Directory and File Name Completion
-
-   C-Kermit 8.0 also includes better completion for directory names, e.g.
-   in the CD command. If the name typed so far uniquely matches a
-   directory name, it is completed (as before), but now if the directory
-   contains any subdirectories, completion is partial (allowing you to
-   supply additional path segments without backspacing); otherwise it is
-   complete.
-
-   Completion has also been improved for file and directory names that
-   contain not only spaces (as described above) but also "metacharacters"
-   such as asterisk (*) and tilde (~): now the field is repainted if
-   necessary. For example, if the current directory contains only one
-   file whose name contains "blah", then in:
-
-  type *blah<Tab>
-
-   "*blah" is replaced by the filename. In earlier releases, the part
-   typed so far was left on the command line (and in the history buffer),
-   so even when the original command worked, the recalled version would
-   not. Similarly for ~ (the nearly-universal Unix notation for
-   username):
-
-  type ~olga/x<Tab>
-
-   is repainted as (e.g.):
-
-  type /users/home/olga/x(Beep)
-
-   Speaking of command history, the new SHOW HISTORY command shows your
-   command history and recall buffer. SAVE COMMAND HISTORY saves it into
-   a file of your choice.
-
-  6.3. Passing Arguments to Command Files
-
-   The method for passing arguments to command files has been improved.
-   Prior to C-Kermit 7.0 there was no provision for doing this. In
-   C-Kermit 7.0, the TAKE command was changed to allow arguments to be
-   given after the filename:
-
-  take commandfile arg1 arg2 ...
-
-   This was accomplished by replacing the current \%1, \%2, etc, with the
-   given arguments, since a new set of macro argument variables is
-   created only when a macro is executed, not a command file. It is much
-   more intuitive, however, if arguments to command files worked like
-   those to macros: the command file sees the arguments as its own \%1,
-   \%2, etc, but the caller's variables are not disturbed. C-Kermit 8.0
-   accomplishes this by automatically creating an intermediate temporary
-   macro to start the command file (if any arguments were given), thus
-   creating a new level of arguments as expected.
-
-  6.4. More-Prompting
-
-   The familiar --more?-- prompt that appears at the end of each
-   screenful of command-response output now accepts a new answer: G (Go)
-   meaning "show all the rest without pausing and asking me any more
-   questions". P (Proceed) is a synonym for G.
-
-  6.5. Commas in Macro Definitions
-
-   As noted in the [379]C-Kermit manual, comma is used to separate
-   commands in a macro definition. Even when the macro is defined on
-   multiple lines using curly-brace block-structure notation without
-   commas, the definition is still stored internally as a comma-separated
-   list of commands. Therefore special tricks are needed to include a
-   comma in a command. The classic example is:
-
-  define foo {
-      (some command)
-      if fail echo Sorry, blah failed...
-  }
-
-   This would result in Kermit trying to execute a "blah" command. This
-   could always be handled by enclosing the text in braces:
-
-  define foo {
-      (some command)
-      if fail echo {Sorry, blah failed...}
-  }
-
-   but doublequotes (more intuitive) should have worked too. Now they do:
-
-  define foo {
-      (some command)
-      if fail echo "Sorry, blah failed..."
-  }
-
-  6.6. Arrow Keys
-
-   As of version 8.0.201, C-Kermit on most platforms lets you access the
-   command history buffer with arrow keys, just as you always could with
-   control characters. The restrictions are:
-
-    1. Only Up and Down arrow keys are accepted.
-    2. Only 7-bit ANSI arrow-key sequences are understood (ESC followed
-       by [ or uppercase letter O, followed by uppercase letter A or (up)
-       B (down).
-
-   This change was made to facilitate command recall in Linux-based PDAs
-   that don't have a Control key, or at least not one that's easily (or
-   always) accessible, such as the Sharp Zaurus SL5500.
-
-   [ [380]Top ] [ [381]Contents ] [ [382]C-Kermit Home ] [ [383]Kermit
-   Home ]
-  __________________________________________________________________________
-
-7. NEW COMMANDS AND SWITCHES
-
-   See [384]Section 4 for more about file scanning and the /TYPE: switch.
-
-   ASK[Q] [ /TIMEOUT:number /QUIET /DEFAULT:text ] variable [ prompt ]
-          The new optional /TIMEOUT: switch for ASK and ASKQ causes the
-          command to time out and and fail if no response is given within
-          the specified number of seconds, 1 or greater (0 or less means
-          no timeout, wait forever). This works just like SET ASK-TIMER,
-          except its effect is local to the ASK command with which it is
-          given and it does not disturb the global ask timer setting. The
-          new /QUIET switch tells Kermit not to print an error message if
-          the ASK or ASKQ command times out waiting for a response.
-
-          Version 8.0.211 adds the /DEFAULT:text switch for ASK-Class
-          commands (ASK, ASKQ, and GETOK). This lets you supply a default
-          answer in case the user supplies an empty answer or the
-          /TIMEOUT: switch was included and the time limit expired
-          without an answer. In both these cases, the command succeeds.
-
-   CAT filename
-          Equivalent to TYPE /NOPAGE.
-
-   CDUP
-          Changes Kermit's local working directory to the parent of the
-          current one. Equivalent to "cd .." in UNIX or Windows, "cd [-]"
-          in VMS, "cd ^" in AOS/VS, etc; in other words, it's a
-          platform-independent way of moving one level up in a directory
-          tree.
-
-   CHMOD [ switches ] permission files
-          UNIX only. Sets file permissions for one or more files or
-          directories. The permission must be given as an octal number,
-          e.g. 664, 755. Switches: /DIRECTORIES, /FILES, /NOLIST, /PAGE,
-          /DOTFILES, /LIST, /NOPAGE, /RECURSIVE, /TYPE:{TEXT,BINARY,ALL},
-          /SIMULATE. The /TYPE: switch allows selection of only text or
-          binary files. For example, if you have a mixture of source
-          files and executables, you can use "chmod /files /type:text
-          664" to give owner/group read/write and world read permission
-          to the text files, and "chmod /files /type:binary 775" to give
-          the same plus execute permission to the executables. Use
-          /SIMULATE to see which files would be affected, without
-          actually changing their permissions.
-
-   CLEAR KEYBOARD-BUFFER
-          Flushes any as-yet unread characters from the keyboard input
-          buffer. Useful for flushing typeahead in scripts.
-
-   CONTINUE
-          When given at an interactive command prompt that was reached by
-          issuing a PROMPT command (described in this section) from a
-          script, this command returns to the script, continuing its
-          execution at the command after the PROMPT command. In this
-          context, CONTINUE is simply a more-intuitive synonym for END.
-
-   COPY, RENAME, and TRANSLATE
-          These commands now work on file groups if the target filename
-          is a directory, e.g. "copy oofa.* ..", "rename * ~olga/tmp/"
-
-   COPY /APPEND source destination
-          The source file specification can now include wildcards, in
-          which case all of the source files that match will go into the
-          destination file in alphabetical order by name.
-
-   DELETE /ASK
-          Asks permission to delete each file before deleting it. In
-          C-Kermit 7.0, the answers were "yes" (or "ok") and "no".
-          C-Kermit 8.0 adds "go" (meaning, delete all the rest without
-          asking) and "quit" (cancel the DELETE command and return to the
-          prompt).
-
-   DELETE /DIRECTORIES
-          Deletes not only files but also directories.
-
-   DELETE /RECURSIVE
-          Deletes all files that match the given file specification in
-          the current (or given) directory and all directories beneath
-          it.
-
-   DELETE /SUMMARY
-          Prints only the number of files deleted and total size freed,
-          without listing each file.
-
-   DELETE /TREE
-          Shorthand for DELETE /RECURSIVE /DIRECTORIES /DOTFILES/.
-          Equivalent to Windows DELTREE or Unix "rm -Rf". If no file
-          specification is given, the contents of the current directory,
-          plus all of its subdirectories and their contents, are deleted.
-
-   DELETE /TYPE:BINARY
-          Delete only regular binary files (requires FILE SCAN ON).
-
-   DELETE /TYPE:TEXT
-          Delete only regular text files (requires FILE SCAN ON).
-
-   DIRECTORY [ switches ] [ filespec [ filespec [ filespec ... ] ] ]
-          The DIRECTORY command now accepts more than one file
-          specification; e.g. "directory moon.txt sun.doc stars.*".
-
-   DIRECTORY /NORECURSIVE xxx
-          If xxx is a directory name, forces listing of the directory
-          itself rather than its contents.
-
-   DIRECTORY /FOLLOWLINKS xxx
-          (UNIX only) Tells the DIRECTORY command to follow symbolic
-          links. This not the default because it can cause endless loops.
-
-   DIRECTORY /NOFOLLOWLINKS xxx
-          (UNIX only) Tells the DIRECTORY command not to follow symbolic
-          links, but rather, merely to list them. This is the default.
-
-   DIRECTORY /OUTPUT:filename
-          Sends the results of the DIRECTORY command to the given file.
-
-   DIRECTORY /SUMMARY
-          Prints only the number of directories and files and the total
-          size, without listing each file.
-
-   DIRECTORY /TYPE:{TEXT,BINARY}
-          Shows only files of the selected type, based on file scan.
-
-   DIRECTORY /XFERMODE
-          Now shows results of file scan (see [385]Section 4).
-
-   FOPEN [ switches ] channel filename
-
-          As of version 8.0.211, FOPEN allows /dev/tty as a filename in
-          Unix-based operating systems.
-
-   FREAD /TRIM
-          (8.0.211) Trims any trailing blanks or tabs from the item (such
-          as a line of text) that it has read.
-
-   FREAD /UNTABIFY
-          (8.0.211) Converts Horizontal Tab characters to the appropriate
-          number of spaces, based on VT100-like tab stops
-          (1,9,17,25,...).
-
-   GREP [ switches ] pattern files
-          Similar to Unix grep command: displays file lines that match
-          the given [386]pattern. Switches:
-
-        /COUNT[:variable]
-                Don't show the matching lines, just tell how many lines
-                match. If a variable name is specified, the count is
-                stored in the given variable.
-
-        /DOTFILES
-                Include files whose names begin with dot.
-
-        /LINENUMBERS
-                Show line numbers of matching lines.
-
-        /NAMEONLY
-                only list the names of files that contain matching lines,
-                but not the lines themselves.
-
-        /NOBACKUP
-                Skip backup files.
-
-        /NOCASE
-                Ignore alphabetic case while pattern matching.
-
-        /NODOTFILES
-                skip files whose names start with dot (period).
-
-        /NOLIST
-                Suppress output but set SUCCESS or FAILURE according to
-                search result.
-
-        /NOMATCH
-                Look for lines that do not match the pattern.
-
-        /NOPAGE
-                Don't pause between screens of output.
-
-        /OUTPUT:filename
-                Write results into the given file.
-
-        /PAGE
-                Pause between screens of output.
-
-        /RECURSIVE
-                Search files in subdirectories too.
-
-        /TYPE:{TEXT,BINARY}
-                Search only files of the specified type.
-
-          Synonyms: FIND, SEARCH.
-
-   GETOK /TIMEOUT:n /QUIET /DEFAULT:text
-          The new /QUIET switch instructs GETOK, when given a timeout,
-          not to print an error message if it times out. As of 8.0.211, a
-          default answer can be supplied (see ASK).
-
-   HEAD [ switches ] filename
-          Equivalent to TYPE /HEAD [ other-switches ] filename.
-
-   HELP DATE
-          Explains date-time formats, including timezone notation and
-          delta times.
-
-   HELP FIREWALLS
-          Explains the firewall negotiation capabilities of your version
-          of Kermit.
-
-   KCD [ symbolic-directory-name ]
-          Changes Kermit's working directory to the named symbolic
-          directory, such as such as exedir, inidir, startup, download,
-          or and home. Type "kcd ?" for a list of symbolic directory
-          names known to your copy of Kermit, or give the new ORIENTATION
-          command for a more detailed explanation. If you give a KCD
-          command without a directory name, Kermit returns to its "home"
-          directory, which is determined in some way that depends on the
-          underlying operating system, but which you can redefine with
-          the (new) SET CD HOME command. Your home directory is shown by
-          SHOW CD and it's also the value of the \v(home) variable.
-
-   LICENSE
-          Displays the C-Kermit license.
-
-   L-commands
-          When Kermit has a connection to a Kermit or FTP server, file
-          managment commands such as CD, DIRECTORY, and DELETE might be
-          intended for the local computer or the remote server. C-Kermit
-          8.0.200 and earlier always executes these commands on the local
-          computer. If you want them executed by the remote server, you
-          have to prefix them with REMOTE (e.g. REMOTE CD) or use special
-          R-command aliases (e.g. RCD = REMOTE CD, RDIR = REMOTE DIR,
-          etc). But this feels unnatural to FTP users, who expect
-          unprefixed file management commands to be executed by the
-          remote server, rather than locally. C-Kermit 8.0.201 adds
-          automatic locus switching to present an FTP-like interface for
-          FTP connections and the normal Kermit interface for Kermit
-          connections, and a SET LOCUS command (described below) to
-          control whether or how this is done. For when LOCUS is REMOTE,
-          a new set of commands was added for local management: LCD
-          (Local CD), LDIR (Local DIR), etc. These are described below
-          under SET LOCUS.
-
-   MORE filename
-          Equivalent to TYPE /PAGE.
-
-   ORIENTATION
-          Displays symbolic directory names and the corresponding
-          variable names and values. The symbolic names, such as exedir,
-          inidir, startup, download, and home, can be used as arguments
-          to the new KCD command.
-
-   PROMPT [ text ]
-          For use in a macro or command file: enters interactive command
-          mode within the current context ([387]Section 8.1). If the
-          optional text is included, the prompt is set to it. The text
-          can include variables, functions, etc, as in the SET PROMPT
-          command. They are evaluated each time the prompt is printed.
-          Unlike the SET PROMPT command, the text argument applies only
-          to the current command level. Thus you can have different
-          prompts at different levels.
-
-   REMOTE SET MATCH { DOTIFILE, FIFO } { ON, OFF }
-          Allows the client to tell the server whether wildcards sent to
-          the server should match dot files (files whose names begin with
-          period) or FIFOs (named pipes). See SET MATCH.
-
-   SET ATTRIBUTE RECORD-FORMAT { ON, OFF }
-          Allows control of the Kermit's Record-Format attribute. Set
-          this to OFF in case incoming file are refused due to unknown or
-          invalid record formats if you want to accept the file anyway
-          (and, perhaps, postprocess it to fix its record format).
-
-   SET CD HOME [ directory ]
-          Specifies the target directory for the CD and KCD commands,
-          when they are given without an argument, and also sets the
-          value of the \v(home) variable.
-
-   SET EXIT HANGUP { OFF, ON }
-          Normally ON, meaning that when Kermit exits, it also explicitly
-          hangs up the current SET LINE / SET PORT serial port according
-          to the current SET MODEM TYPE and SET MODEM HANGUP METHOD, and
-          closes the port device if it was opened by Kermit in the first
-          place (as opposed to inherited). SET EXIT HANGUP OFF tells
-          Kermit not to do this. This can't prevent the operating system
-          from closing the device when Kermit exits (and it's a "last
-          close") but if the port or modem have been conditioned to
-          somehow ignore the close and keep the connection open, at least
-          Kermit itself won't do anything explicit to hang it up or close
-          it.
-
-   SET FILE EOF { CTRL-Z, LENGTH }
-          Specifies the end-of-file detection method to be used by
-          C-Kermit when sending and receiving text files, and in the TYPE
-          and similar text-file oriented commands. The normal and default
-          method is LENGTH. You can specify CTRL-Z when handling CP/M or
-          MS-DOS format text files, in which a Ctrl-Z (ASCII 26)
-          character within the file marks the end of the file.
-
-   SET FILE LISTSIZE number
-          Allocates space for the given number of filenames to be filled
-          in by the wildcard expander. The current number is shown by
-          SHOW FILE. If you give a command that includes a filename
-          containing a wildcard (such as "*") that matches more files
-          that Kermit's list has room for, you can adjust the list size
-          with this command.
-
-   SET FILE STRINGSPACE number
-          Allocates space for the given amount of filename strings for
-          use by the wildcard expander. The current number is shown by
-          SHOW FILE. The number is the total number of bytes of all the
-          file specifications that match the given wildcard.
-
-     If you need to process a bigger list of files than your computer
-     has memory for, you might be able use an external file list. The
-     Kermit SEND and the FTP PUT and GET commands accept a /LISTFILE:
-     switch, which gives the name of a file that contains the list of
-     files to be transferred. Example for UNIX:
-
-  !find . -print | grep / > /tmp/names
-  ftp put /update /recursive /listfile:/tmp/names
-
-   SET LOCUS { AUTO, LOCAL, REMOTE }
-          Added in C-Kermit 8.0.201.   Sets the locus for unprefixed file
-          management commands such as CD, DIRECTORY, MKDIR, etc. When
-          LOCUS is LOCAL these commands act locally and a REMOTE (or R)
-          prefix (e.g. REMOTE CD, RCD, RDIR) is required to send file
-          management commands to a remote server. When LOCUS is REMOTE,
-          an L prefix is required to issue local file management commands
-          (e.g. LCD, LDIR). The word LOCAL can't be used as a prefix
-          since it is already used for declaring local variables. LOCUS
-          applies to all types of connections, and thus is orthogonal to
-          SET GET-PUT-REMOTE, which selects between Kermit and FTP for
-          remote file-transfer and management commands. The default LOCUS
-          is AUTO, which means we switch to REMOTE whenever an FTP
-          connection is made, and to LOCAL whenever a non-FTP connection
-          is made, and switch back accordingly whenever a connnection is
-          closed. So by default, Kermit behaves in its traditional manner
-          unless you make an FTP connection, in which case it acts like a
-          regular FTP client (but better :-)   LOCUS applies to the
-          following commands:
-
-  Unprefixed    Remote       Local        Description        
-   CD (CWD)      RCD          LCD          Change (Working) Directory
-   CDUP          RCDUP        LCDUP        CD Up
-   PWD           RPWD         LPWD         Print Working Directory
-   DIRECTORY     RDIR         LDIR         Request a directory listinga
-   DELETE        RDEL         LDEL         Delete (a) file(s)
-   RENEME        RREN         LREN         Rename a file
-   MKDIR         RMKDIR       LMKDIR       Create a directory
-   RMDIR         RRMDIR       LRMDIR       Remove a directory
-
-   SET MATCH { DOTIFILE, FIFO } { ON, OFF }
-          Whether C-Kermit filename patterns (wildcards) should match
-          filenames that start with dot (period), or (Unix only) FIFOs
-          (named pipes). The defaults are to skip dotfiles in Unix but
-          match them elsewhere, and to skip FIFOs. Applies to both
-          interactive use and to server mode, when the server receives
-          wildcards, e.g. in a GET command. Also see REMOTE SET MATCH.
-
-   SET OPTIONS DIRECTORY /DOTFILES
-          Now works for server listings too (UNIX only). Give this
-          command prior to having Kermit enter server mode, and then it
-          will show files whose names begin with dot (period) when sent a
-          REMOTE DIRECTORY command.
-
-   SET QUIET ON
-          (as well as the -q command-line option) Now applies also to:
-
-          + SET HOST connection progress messages.
-          + "Press the X or E key to cancel" file-transfer message.
-          + REMOTE CD response.
-          + REMOTE LOGIN response.
-
-   SET RECEIVE PERMISSIONS { ON, OFF }
-          Tells C-Kermit whether to set the permissions of incoming files
-          (received with Kermit protocol) from the permissions supplied
-          in the file's Attribute packet (if any). Normally ON. Also see
-          SET SEND PERMISSIONS.
-
-   SET ROOT directory
-          Like UNIX chroot, without requiring privilege. Sets the root
-          for file access, does not allow reference to or creation of
-          files outside the root, and can't be undone.
-
-   SET SEND PERMISSIONS { ON, OFF }
-          Tells C-Kermit whether to include file permissions in the
-          attributes it includes with each file when sending with Kermit
-          protocol. Also see SET RECEIVE PERMISSIONS.
-
-   SET TCP { HTTP-PROXY, SOCKS-SERVER } /USER:name /PASSWORD:text
-          These commands now allow specification of username and
-          password.
-
-   SET TERMINAL . . .
-          (See [388]Section 12.)
-
-   SET TRANSFER MESSAGE [ text ]
-          Sets an initial text message to be displayed in the
-          file-transfer display. The transfer message is automatically
-          deleted once used, so must be set each time a message a
-          desired. Any variables in the message are evaluated at the time
-          the SET command is given. If the optional text is omitted, any
-          transfer message that is currently set is removed. Synonym: SET
-          XFER MSG. SHOW TRANSFER displays it if it has been set but not
-          yet used.
-
-   SHOW COMMUNICATIONS
-          In C-Kermit 8.0, SHOW COMMUNICATIONS, when given in remote mode
-          (i.e. before any connection has been established), tells the
-          typical dialout device name for the particular platform on
-          which it's running (e.g. TXA0: for VMS, or /dev/cua0p0 for
-          HP-UX). On Unix platforms, it also tells the name of the
-          lockfile directory. This way, you have an idea of what the SET
-          LINE device name should look like, and if the SET LINE command
-          fails, you know the name of the directory or device that is
-          protected against you.
-
-   SHOW VARIABLES [ name [ name [ ... ] ] ]
-          In C-Kermit 8.0.201 you can request values of a list of
-          built-in (\v(xxx)) variables. Each name is a pattern, as
-          before, but now it a free pattern rather than an anchored one
-          (explained in [389]Section 8.12) so now "show var date time"
-          shows the values of all variables whose names include the
-          strings "date" or "time".
-
-   TAIL [ switches ] filename
-          Equivalent to TYPE /TAIL [ other-switches ] filename.
-
-   TRANSMIT /NOECHO [ other switches ] filename
-          The /NOECHO switch is equivalent to giving the command SET
-          TRANSMIT ECHO OFF prior to the TRANSMIT command, except the
-          switch affects only the command with which it was given and
-          does not affect the prevailing global setting.
-
-   TRANSMIT /NOWAIT [ other switches ] filename
-          The /NOWAIT switch is equivalent to giving the command SET
-          TRANSMIT PROMPT 0 prior to the TRANSMIT command, except the
-          switch affects only the command with which it was given and
-          does not affect the prevailing global setting.
-
-   TRANSMIT /NOWAIT /NOECHO /BINARY [ other switches ] filename
-          When the TRANSMIT command is given with the /NOWAIT, /NOECHO,
-          and /BINARY switches, this activates a special "blast the whole
-          file out the communications connection all at once" mode that
-          Kermit didn't have prior to version 8.0. There has been
-          increasing demand for this type of transmission with the advent
-          of devices that expect image (e.g. .JPG) or sound (e.g. .MP3)
-          files as raw input. The obvious question is: how does the
-          receiving device know when it has the whole file? This depends
-          on the device, of course; usually after a certain amount of
-          time elapses with nothing arriving, or else when Kermit hangs
-          up or closes the connection.
-
-   TYPE /CHARACTER-SET:name
-          Allows you to specify the character set in which the file to be
-          typed is encoded.
-
-   TYPE /NUMBER
-          Adds line numbers.
-
-   TYPE /OUTPUT:filename
-          Sends the results of the TYPE command to the given file.
-
-   TYPE /TRANSLATE-TO:name
-          Used in conjunction with TYPE /CHARACTER-SET:xxx; allows you to
-          specify the character set in which the file is to be displayed.
-
-   TYPE /TRANSPARENT
-          Used to disable character-set translation in the TYPE command,
-          which otherwise can take place automatically based on file
-          scanning, even when /CHARACTER-SET and /TRANSLATE-TO switches
-          are not given.
-
-   VOID text
-          Parses the text, evaluating any backslash items in it (such as
-          function calls) but doesn't do anything further, except
-          possibly printing error messages. Useful for invoking functions
-          that have side effects without using or printing their direct
-          results, e.g. "void \fsplit(\%a,&a)".
-
-  Symbolic Links in UNIX
-
-   The UNIX versions of C-Kermit have had /FOLLOWLINKS and /NOFOLLOWLINKS
-   switches added to several commands to control the treatment of
-   symbolic links. Different commands deal differently with symbolic
-   links:
-
-   Kermit SEND, FTP MPUT
-          /NOFOLLOWLINKS is the default, which means symbolic links are
-          skipped entirely. The alternative, /FOLLOWLINKS, should be used
-          with caution, since an innocent link might point to a whole
-          file system, or it might cause a loop. There is no way in
-          Kermit or FTP protocol to send the link itself. We either skip
-          them or follow them; we can't duplicate them.
-
-   DIRECTORY
-          /NOFOLLOWLINKS is the default, which means the DIRECTORY
-          command lists symbolic links in a way that shows they are
-          links, but it does not follow them. The alternative,
-          /FOLLOWLINKS, follows links and gives information about the
-          linked-to directories and files.
-
-   DELETE, RMDIR
-          The DELETE command does not have link-specific switches. DELETE
-          never follows links. If you tell Kermit to delete a symbolic
-          link, it deletes the link itself, not the linked-to file. Ditto
-          for RMDIR.
-
-   COPY
-          The COPY command behaves just like the UNIX cp command; it
-          always follows links.
-
-   RENAME
-          The RENAME command behaves just like the UNIX mv command; it
-          operates on links directly rather than following.
-
-   [ [390]Top ] [ [391]Contents ] [ [392]C-Kermit Home ] [ [393]Kermit
-   Home ]
-  __________________________________________________________________________
-
-8. OTHER SCRIPTING IMPROVEMENTS
-
-  8.1. Performance and Debugging
-
-   A command cache for frequently used commands plus some related
-   optimizations increases the speed of compute-bound scripts by anywhere
-   from 50% to 1000%.
-
-   The new PROMPT command can be used to set breakpoints for debugging
-   scripts. If executed in a command file or macro, it gives you an
-   interactive command prompt in the current context of the script, with
-   all its variables, arguments, command stack, etc, available for
-   examination or change, and the ability to resume the script at any
-   point (END resumes it, Ctrl-C or STOP cancels it and returns to top
-   level).
-
-   The new Ctrl-C trapping feature ([394]Section 8.14) lets you intercept
-   interruption of scripts. This can be used in combination with the
-   PROMPT command to debug scripts. Example:
-
-define ON_CTRLC {
-    echo INTERRUPTED BY CTRL-C...
-    echo The command stack has not yet been rolled back:
-    show stack
-    echo Type Ctrl-C again or use the END command to return to top level.
-    prompt Debug>
-}
-
-   Adding this ON_CTRL definition to your script lets you interrupt it at
-   any point and get prompt that is issued at the current command level,
-   so you can query local variables, etc.
-
-   [ [395]Top ] [ [396]Contents ] [ [397]C-Kermit Home ] [ [398]Kermit
-   Home ]
-     _________________________________________________________________
-
-  8.2. Using Macros as Numeric Variables
-
-   A macro is a way to assign a value to a name, and then use the name to
-   refer to the value. Macros are used in two ways in Kermit: as
-   "subroutines" or functions composed of Kermit commands, which are
-   executed, or as variables to hold arbitrary values -- text, numbers,
-   filenames, etc.
-
-   When a macro is to be executed, its name is given as if it were a
-   C-Kermit command, optionally preceded by the word "do". When a macro
-   is used as a variable, it must be "escaped" with \m(xxx) (or
-   equivalent function, e.g. \s(xxx), \:(xxx), \fdefinition(xxx)), where
-   xxx is the macro name, for example:
-
-  define filename /usr/olga/oofa.txt
-  send \m(filename)
-
-   Of course variables can also hold numbers:
-
-  define size 17
-  declare \&a[\m(size)]
-  ...
-  define index 3
-  if ( == \m(index) 3 ) echo The third value is: \&a[\m(index)]
-  evaluate index (\m(index) * 4)
-  if ( > \m(index) \m(size) ) echo Out of range!
-
-   But these are contexts in which only numbers are valid. C-Kermit 8.0
-   has been changed to treat non-escaped non-numeric items in strictly
-   numeric contexts as macro names. So it is now possible (but not
-   required) to omit the \m(...) notation and just use the macro name in
-   these contexts:
-
-  define size 17
-  declare \&a[size]
-  ...
-  define index 3
-  if ( == index 3 ) echo The third value is: \&a[index]
-  evaluate index (index * 4)
-  if ( > index size ) echo Out of range!
-
-   This is especially nice for loops that deal with arrays. Here, for
-   example, is a loop that reverses the order of the elements in an
-   array. Whereas formerly it was necessary to write:
-
-  .\%n ::= \fdim(&a)
-  for \%i 1 \%n/2 1 {
-      .tmp := \&a[\%n-\%i+1]
-      .\&a[\%n-\%i+1] := \&a[\%i]
-      .\&a[\%i] := \m(tmp)
-  }
-
-   Recoding this to use macro names "i" and "n" instead of the backslash
-   variables \%i and \%n, we have:
-
-  .n ::= \fdim(&a)
-  for i 1 n/2 1 {
-      .tmp := \&a[n-i+1]
-      .\&a[n-i+1] := \&a[i]
-      .\&a[i] := \m(tmp)
-  }
-
-   which reduces the backslash count to less than half. The final
-   statement in the loop could be written ".\&a[i] ::= tmp" if the array
-   contained only numbers (since ::= indicates arithmetic expression
-   evaluation).
-
-   Also, now you can use floating-point numbers in integer contexts (such
-   as array subscripts), in which case they are truncated to an integer
-   value (i.e. the fractional part is discarded).
-
-   Examples of numeric contexts include:
-
-     * Array subscripts.
-     * Any numeric function argument.
-     * Right-hand side of ::= assignments.
-     * EVALUATE command or \fevaluate() function expression.
-     * The INCREMENT or DECREMENT by-value.
-     * IF =, >, <, !=, >=, and <= comparands.
-     * The IF number construct.
-     * FOR-loop variables.
-     * STOP, END, and EXIT status codes.
-     * The INPUT timeout value.
-     * PAUSE, WAIT, SLEEP, MSLEEP intervals.
-     * The SHIFT argument.
-     * Numeric switch arguments, e.g. TYPE /WIDTH:number, SEND
-       /LARGER:number.
-     * SCREEN MOVE-TO row and column number.
-     * Various SET DIAL parameters (timeout, retry limit, etc).
-     * Various SET SEND or RECEIVE parameters (packet length, window
-       size, etc).
-     * Various other SET parameters.
-
-   and:
-
-     * S-Expressions (explained in [399]Section 9).
-
-   Macro names used in numeric contexts must not include mathematical
-   operators. Although it is legal to create a macro called "foo+bar", in
-   a numeric context this would be taken as the sum of the values of
-   "foo" and "bar". Any such conflict can be avoided, of course, by
-   enclosing the macro name in \m(...).
-
-   [ [400]Top ] [ [401]Contents ] [ [402]C-Kermit Home ] [ [403]Kermit
-   Home ]
-     _________________________________________________________________
-
-  8.3. New IF Conditions
-
-   Several new IF conditions are available:
-
-   IF DECLARED arrayname
-          Explained in [404]Section 8.6.
-
-   IF KBHIT
-          Allows a script to test whether a key was pressed without
-          actually trying to read it.
-
-   IF KERBANG (Unix only)
-          True if Kermit was started from a Kerbang script. This is
-          useful for knowing how to interpret the \&@[] and \&_[]
-          argument vector arrays, and under what conditions to exit.
-
-   IF INTEGER n
-          This is just a synonym for IF NUMERIC, which is true if n
-          contains only digits (or, if n is a variable, its value
-          contains only digits).
-
-   By contrast, IF FLOAT n succeeds if n is a floating-point number OR an
-   integer (or a variable with floating-point or integer value).
-   Therefore, IF FLOAT should be used whenever any kind of number is
-   acceptable, whereas IF INTEGER (or IF NUMERIC) when only an integer
-   can be used.
-
-   [ [405]Top ] [ [406]Contents ] [ [407]C-Kermit Home ] [ [408]Kermit
-   Home ]
-     _________________________________________________________________
-
-  8.4. The ON_UNKNOWN_COMMAND Macro
-
-   The new ON_UNKNOWN_COMMAND macro, if defined, is executed whenever you
-   give a command that is not known to C-Kermit; any operands are passed
-   as arguments. Here are some sample definitions:
-
-  DEF ON_UNKNOWN_COMMAND telnet \%1 ; Treat unknown commands as hostnames
-  DEF ON_UNKNOWN_COMMAND dial \%1   ; Treat unknown commands phone numbers
-  DEF ON_UNKNOWN_COMMAND take \%1   ; Treat unknown commands as filenames
-  DEF ON_UNKNOWN_COMMAND !\%*       ; Treat unknown commands as shell commands
-
-   The ON_CD macro, if defined, is executed whenever Kermit is given a CD
-   (change directory) command (8.0.211). Upon entry to this macro, the
-   directory has already changed and the new directory string is
-   available in the \v(directory) variable, and also as the first
-   argument (\%1).
-
-   [ [409]Top ] [ [410]Contents ] [ [411]C-Kermit Home ] [ [412]Kermit
-   Home ]
-     _________________________________________________________________
-
-  8.5. The SHOW MACRO Command
-
-   The SHOW MACRO command has been changed to accept more than one macro
-   name:
-
-  (setq a 1 b 2 c 3)
-  show mac a b c
-  a = 1
-  b = 2
-  c = 3
-
-   An exact match is required for each name (except that case doesn't
-   matter). If you include wildcard characters, however, a pattern match
-   is performed:
-
-  show mac [a-c]*x
-
-   shows all macros whose names start with a, b, or c, and end with x.
-
-   [ [413]Top ] [ [414]Contents ] [ [415]C-Kermit Home ] [ [416]Kermit
-   Home ]
-     _________________________________________________________________
-
-  8.6. Arrays
-
-   A clarification regarding references to array names (as opposed to
-   array elements): You can use array-name "abbreviations" like &a only
-   in contexts that expect array names, like ARRAY commands or array-name
-   function arguments such as the second argument of \fsplit(). In a
-   LOCAL statement, however, you have to write \&a[], since "local &a"
-   might refer to a macro named "&a".
-
-   In function arguments, however, you MUST use the abbreviated form:
-   \fsplit(\%a,&a) or \fsplit(\%a,&a[]). If you include the backslash (as
-   in "\fsplit(\%a,\&a[])") a parse error occurs.
-
-   Here are the new array-related commands:
-
-   IF DECLARED arrayname
-          Allows a script to test whether an array has been declared. The
-          arrayname can be a non-array backslash variable such as \%1 or
-          \m(name), in which case it is evaluated first, and the result
-          is treated as the array name. Otherwise, arrayname is treated
-          as in the ARRAY commands: it can be a, &a, &a[], \&a, \&a[],
-          \&a[3], \&a[3:9], etc, with the appropriate results in each
-          case. Synonym: IF DCL.
-
-   UNDECLARE arrayname
-          UNDECLARE is a new top-level command to undeclare an array.
-          Previously this could only be done with "declare \&a[0]" (i.e.
-          re-declare the array with a dimension of 0).
-
-   ARRAY LINK linkname arrayname
-          Creates a symbolic link from the array named by linkname (which
-          must be the name of an array that is not yet declared in the
-          current context) to the array named by arrayname (which must
-          the name of a currently declared array that is not itself a
-          link, or a variable containing the name of such an array). The
-          two names indicate the same array: if you change an array
-          element, the change is reflected in the link too, and vice
-          versa. If you undeclare the link, the real array is unaffected.
-          If you undeclare the real array, all links to it disappear. If
-          you resize an array (directly or through a link), all links to
-          it are updated automatically.
-
-   Array links let you pass array names as arguments to macros. For
-   example, suppose you had a program that needed to uppercase all the
-   elements of different arrays at different times. You could write a
-   macro to do this, with the array name as an argument. But without
-   array links, there would be no way to refer to the argument array
-   within the macro. Array links make it easy:
-
-  define arrayupper {
-      local \&e[] \%i
-      array link \&e[] \%1
-      for i 1 \fdim(&e) 1 { .\&e[i] := \fupper(\&e[i]) }
-  }
-  declare \&a[] = these are some words
-  arrayupper &a
-  show array &a
-
-   The macro declares the array link LOCAL, which means it doesn't
-   conflict with any array of the same name that might exist outside the
-   macro, and that the link is destroyed automatically when the macro
-   exits. This works, by the way, even if the link name and the macro
-   argument name are the same, as long as the link is declared LOCAL.
-
-   As noted, you can't make a link to a nonexistent array. So when
-   writing a macro whose job is to create an array whose name is passed
-   as an argument, you must declare the array first (the size doesn't
-   matter as long as it's greater than 0). Example:
-
-  define tryme {                ; Demonstration macro
-      local \&e[]               ; We only need this inside the macro
-      array link \&e[] \%1      ; Make local link
-      shift                     ; Shift argument list
-      void \fsplit(\%*,&e)      ; Split remainder of arg list into array
-  }
-  declare \&a[1]                ; Declare target array in advance
-  tryme &a here are some words  ; Invoke the macro with array name and words
-  show array a                  ; See the results
-
-   One final improvement allows the macro itself to declare the array
-   (this was not possible in earlier Kermit releases): if the array name
-   in the DECLARE command is a variable (and not an array name), or
-   includes variables, the resulting value is used as the array name. So:
-
-  define tryme {                ; Demonstration macro
-      declare \%1[1]            ; Preliminary declaration for target array
-      local \&e[]               ; We only need this inside the macro
-      array link \&e[] \%1      ; Make local link
-      shift                     ; Shift argument list
-      void \fsplit(\%*,&e)      ; Split remainder of arg list into array
-  }
-  tryme &a here are some words  ; Invoke the macro with array name and words
-  show array a                  ; See the results
-
-   The SHOW ARRAY command now indicates whether an array name is a link.
-
-   Also see the descriptions of [417]\fjoin() and [418]\fsplit(), plus
-   [419]Section 8.10 on the MINPUT command, which shows how an entire
-   array (or segment of it) can be used as the MINPUT target list.
-
-   [ [420]Top ] [ [421]Contents ] [ [422]C-Kermit Home ] [ [423]Kermit
-   Home ]
-     _________________________________________________________________
-
-  8.7. New or Improved Built-in Variables and Functions
-
-   The following new built-in variables are available:
-
-  \v(buildid)       A date string like "20000808" indicating when C-Kermit was
-built.
-  \v(ftime)         Current time, secs since midnight, including fraction of se
-cond.
-  \v(iprompt)       The current SET PROMPT value
-  \v(sexp)          The most recent S-Expression (see [424]Section 9)
-  \v(sdepth)        The current S-Expression invocation depth ([425]Section 9)
-  \v(svalue)        The value of the most recent S-Expression ([426]Section 9)
-
-  \v(ftp_code)      Most recent FTP response code ([427]Section 3)
-  \v(ftp_connected) FTP connection status ([428]Section 3)
-  \v(ftp_cpl)       FTP Command Protection Level ([429]Section 3.2)
-  \v(ftp_dpl)       FTP Data Protection Level ([430]Section 3.2)
-  \v(ftp_getputremote) The current SET GET-PUT-REMOTE setting ([431]Section 3.8
-)
-  \v(ftp_host)      Name or IP address of FTP server ([432]Section 3)
-  \v(ftp_loggedin)  FTP login status ([433]Section 3)
-  \v(ftp_message)   Most recent FTP response message ([434]Section 3)
-  \v(ftp_security)  FTP Security method ([435]Section 3.2)
-  \v(ftp_server)    OS type of FTP server ([436]Section 3)
-
-  \v(http_code)       Most recent HTTP response code
-  \v(http_connected)  HTTP connection status
-  \v(http_host)       Name or IP address of HTTP server
-  \v(http_message)    Most recent HTTP response message
-  \v(http_security)   TLS cipher used to secure the HTTP session
-
-  \v(hour)            Hour of the day, 0 to 23.
-  \v(timestamp)       Equivalent to "\v(ndate) \v(time)".
-
-  \v(log_debug)       Current debug log file, if any.
-  \v(log_packet)      Current packet log file, if any.
-  \v(log_session)     Current session log file, if any.
-  \v(log_transaction) Current transaction log file, if any.
-  \v(log_connection)  Current connection log file, if any.
-
-   The following new or improved built-in functions are available:
-
-  \fcmdstack()            Allows programmatic access to the command stack.
-  \fcvtdate()             [437]Section 8.13, format options added
-  \fdelta2secs()          [438]Section 8.13
-  \fdostounixpath(s1)     Converts a DOS filename to Unix format.
-  \fsplit()               Now allows grouping/nesting in source string.
-  \fword()                Allows the same grouping and nesting.
-  \fjoin(&a,s1,n1,n2)     Copies an array into a single string.
-  \fsubstitute(s1,s2,s3)  Substitutes characters within a string.
-  \freplace()             Has new 4th "occurrence" argument.
-  \fsexpression()         Evaluates an S-Expression (explained in [439]Section
-9).
-  \ftrim(), \fltrim()     Now trim CR and LF by default, as well as SP and Tab.
-  \funixtodospath(s1)     Converts a Unix filename to DOS format.
-  \fkeywordval(s1,c1)     Assigns values to keywords (macros) (explained below)
-.
-
-   Most functions that have "2" in their names to stand for the word "to"
-   can now also be written with "to", e.g. "\fdelta2secs(),"
-   \fdeltatosecs()."
-
-   \funtabify(string)
-          (New to 8.0.211) Replaces Horizontal Tab characters in the
-          given string with spaces based on VT100-like tab stops.
-
-   \fverify(s1,s2,n)
-          As of version 8.0.211, returns -1 if s2 is an empty string.
-          Previously it returned 0, making \fverify(abc,\%a) look as if
-          \%a was a string combosed of a's, b's, and/or c's when in fact
-          it contained nothing.
-
-   \fcode(string)
-          As of version 8.0.211, returns 0 if string is empty or missing.
-          Previously it returned the empty string, which made it unsafe
-          to use in arithmetic or boolean expressions.
-
-   \v(inscale)
-          New to version 8.0.211, its value is the INPUT SCALE-FACTOR
-          ([440]Section 8.10), default 1.0.
-
-  8.7.1. The \fkeywordval() Function
-
-   \fkeywordval(s1,c1) is new to C-Kermit 8.0. Given a string s1 of the
-   form "name=value", it creates a macro with the given name and assigns
-   it the given value. If no value appears after the equal sign, any
-   existing macro of the given name is undefined. Blanks are
-   automatically trimmed from around the name and value. The optional c1
-   parameter is the assignment operator character, equal sign (=) by
-   default. This function is handy for processing keyword parameters or
-   any other form of parameter-value pair. Suppose, for example, you want
-   to write a macro that accepts keyword parameters rather than
-   positional ones:
-
-  define MYDIAL {
-      local \%i modem hangup method device speed number
-      def number 5551234          ; Assign default parameter values
-      def speed 57600
-      def modem usrobotics
-      def hangup rs232
-      def method tone
-      def country 1
-      for \%i 1 \v(argc)-1 1 {    ; Parse any keyword parameters...
-          if not \fkeywordval(\&_[\%i]) end 1 Bad parameter: "\&_[\%i]"
-      }
-      set dial country \m(country)
-      set modem type \m(modem)
-      set modem hang \m(hangup)
-      set dial method \m(tone)
-      set line \m(device)
-      if fail stop 1
-      set speed \m(speed)
-      if fail stop 1
-      show comm
-      set dial display on
-      dial \m(number)
-      if success connect
-  }
-
-   In this example, all the defaults are set up inside the macro, and
-   therefore it can be invoked with no parameters at all. But if you want
-   to have the macro dial a different number, you can supply it as
-   follows:
-
-  mydial number=7654321
-
-   You can supply any number of keyword parameters, and you can give them
-   in any order:
-
-  mydial number=7654321 hangup=modem speed=115200
-
-  8.7.2. The \fsplit(), \fjoin(), and \fword() Functions
-
-   \fjoin(&a,s1,n1,n2) is also new; it creates a string from an array (or
-   a piece of one). &a is the name of the array (a range specifier can be
-   included); s1 is a character or string to separate each element in the
-   result string (can be omitted, in which case the elements are not
-   separated at all), and n1 is a grouping mask, explained below. If s1
-   is empty or not specified, the array elements are separated with
-   spaces. If you want the elements concatenated with no separator,
-   include a nonzero n2 argument. Given the array:
-
-  declare \&a[] = 0 1 2 3 4 5 6 7 8 9
-
-   you can get effects like this:
-
-  \fjoin(&a)      0 1 2 3 4 5 6 7 8 9
-  \fjoin(&a,:)    0:1:2:3:4:5:6:7:8:9
-  \fjoin(&a,{,})  0,1,2,3,4,5,6,7,8,9
-  \fjoin(&a,...)  0...1...2...3...4...5...6...7...8...9
-  \fjoin(&a,,,1)  0123456789
-
-   \fsplit(), \fword(), \fstripb(), and \fjoin() accept a "grouping mask"
-   argument, n1, which is a number from 0 to 63, in which:
-
-   1 = "" doublequotes
-   2 = {} braces
-   4 = '' singlequotes
-   8 = () parentheses
-  16 = [] square brackets
-  32 = <> angle brackets
-
-   These can be OR'd (added) together to make any number 0-63 (-1 is
-   treated the same as 63, 0 means no grouping). If a bit is on, the
-   corresponding kind of grouping is selected. (If more than 1 bit is set
-   for \fjoin(), only the lowest-order one is used.)
-
-   If you include the same character in the grouping mask and the include
-   list, the grouping mask takes precedence. Example:
-
-  def \%a  a "b c d" e
-  \fsplit(\%a,&a[],,,-1)  = 3  <-- doublequote used for grouping
-  \fsplit(\%a,&a[],,",-1) = 3  <-- doublequote still used for grouping
-
-   Nesting of matched left and right grouping characters (parentheses,
-   braces, and brackets, but not quotes) is recognized. Example:
-
-  def \%a a (b c <d e [f g {h i} j k] l m> n o) p
-  \fsplit(\%a,&a,,,0)  = 16 (no grouping)
-  \fsplit(\%a,&a,,,2)  = 15 (braces only)
-  \fsplit(\%a,&a,,,16) = 11 (square brackets only)
-  \fsplit(\%a,&a,,,32) =  7 (angle brackets only)
-  \fsplit(\%a,&a,,,63) =  3 (all)
-  \fsplit(\%a,&a,,,-1) =  3 (all)
-
-   \fsplit() and \fjoin() are "reciprocal" functions. You can split a
-   string up into an array and join it back into a new string that is
-   equivalent, as long as \fsplit() and \fjoin() are given equivalent
-   grouping masks, except that the type of braces might change. Example:
-
-  def \%a a {b c [d e] f g} "h i" j <k l> m
-  echo STRING=[\%a]
-  echo WORDS=\fsplit(\%a,&a,,,-1)
-  show array a
-  asg \%b \fjoin(&a,{ },2)
-  echo JOIN  =[\%b]
-  echo WORDS=\fsplit(\%b,&b,,,-1)
-  show array b
-
-   The arrays a and b are identical. The strings a and b are as follows:
-
-  \%a: a {b c [d e] f g} "h i" j <k l> m
-  \%b: a {b c [d e] f g} {h i} j {k l} m
-
-   It is possible to quote separator grouping characters with backslash
-   to override their grouping function. And of course to include
-   backslash itself in the string, it must be quoted too. Furthermore,
-   each backslash must be doubled, so the command parser will still pass
-   one backslash to \fsplit() for each two that it sees. Here are some
-   examples using \fsplit() with a grouping mask of 8 (treat parentheses
-   as grouping characters).
-
-  String                  Result
-    a b c d e f             6
-    a b\\ c d e f           5
-    a b (c d e) f           4
-    a b \\(c d e\\) f       6
-    a b \\\\(c d e\\\\) f   7
-
-   \fsplit() has also been changed to create its array (if one is given)
-   each time it is called, so now it can be conveniently called in a loop
-   without having to redeclare the array each time.
-
-   Incidentally... Sometimes you might want to invoke \fsplit() in a
-   situation where you don't care about its return value, e.g. when you
-   just want to fill the array. Now you can "call" \fsplit() or any other
-   function with the new [441]VOID command:
-
-  void \fsplit(\%a,&a)
-
-   \fsplit() and \fjoin() also accept a new, optional 6th argument, an
-   options flag, a number that can specify a number of options. So far
-   there is just one option, whose value is 1:
-
-   separator-flag
-          Normally separators are collapsed. So, for example,
-
-  \fword(Three        little          words,2)
-
-          returns "little" (the second word). Space is a separator, but
-          there are multiple spaces between each word. If the value 1 is
-          included in the option flag, however, each separator counts. If
-          two separators are adjacent, an empty word is produced between
-          them. This is useful for parsing (e.g.) comma-separated lists
-          exported from databases or spreadsheets.
-
-  8.7.3. The \fcmdstack() Function
-
-   The new \fcmdstack() function gives access to the command stack:
-
-   \fcmdstack(n1,n2)
-          Arguments: n1 is the command stack level. If omitted, the
-          current level, \v(cmdlevel), is used. n2 is a function code
-          specifying the desired type of information:
-
-  0 (default) = name of object at level n1.
-  1 (nonzero) = object type (0 = prompt; 1 = command file; 2 = macro).
-
-          The default for n2 is 0.
-
-   The name associated with prompt is "(prompt)". Here's a loop that can
-   be included in a macro or command file to show the stack (similar to
-   what the SHOW STACK command does):
-
-  for \%i \v(cmdlevel) 0 -1 {
-      echo \%i. [\fcmdstack(\%i,1)] \fcmdstack(\%i,0)
-  }
-
-   In this connection, note that \v(cmdfile) always indicates the most
-   recently invoked active command file (if any), even if that file is
-   executing a macro. Similarly, \v(macro) indicates the most recently
-   invoked macro (if any), even if the current command source is not a
-   macro. The name of the "caller" of the currently executing object
-   (command file or macro) is:
-
-  \fcmdstack(\v(cmdlevel)-1)
-
-   and its type is:
-
-  \fcmdstack(\v(cmdlevel)-1,1)
-
-   To find the name of the macro that invoked the currently executing
-   object, even if one or more intermediate command files (or prompting
-   levels) are involved, use a loop like this:
-
-  for \%i \v(cmdlevel)-1 0 -1 {
-      if = \fcmdstack(\%i,1) 2 echo CALLER = \fcmdstack(\%i,0)
-  }
-
-   Of course if you make a macro to do this, the macro must account for
-   its own additional level:
-
-  define CALLER {
-      for \%i \v(cmdlevel)-2 0 -1 {
-          if = \fcmdstack(\%i,1) 2 return \fcmdstack(\%i,0)
-      }
-      return "(none)"
-  }
-
-   The built-in variable \v(cmdsource) gives the current command source
-   as a word ("prompt", "file", or "macro").
-
-  8.7.4. The VOID Command
-
-   VOID is like ECHO in that all functions and variables in its argument
-   text are evaluated. but it doesn't print anything (except possibly an
-   error message if a function was invocation contained or resulted in
-   any errors). VOID sets FAILURE if it encounters any errors, SUCCESS
-   otherwise.
-
-   [ [442]Top ] [ [443]Contents ] [ [444]C-Kermit Home ] [ [445]Kermit
-   Home ]
-     _________________________________________________________________
-
-  8.8. The RETURN and END Commands
-
-   The execution of a macro is terminated in any of the following ways:
-
-     * With an END [ number [ message ] ] command. If a number is given,
-       the macro succeeds if the number is 0, and fails if it is not
-       zero; if a number is not given, the macro succeeds.
-     * With a STOP command, which works just like END except it peels
-       back the command stack all the way to top level.
-     * With a RETURN [ text ] command, in which case the macro always
-       succeeds.
-     * By running out of commands to execute, in which case the macro
-       succeeds or fails according the most recently executed command
-       that sets success or failure.
-
-   The same considerations apply to command files invoked by the TAKE
-   command.
-
-   If a macro does not execute any commands that set success or failure,
-   then invoking the macro does not change the current SUCCESS/FAILURE
-   status. It follows, then, that the mere invocation of a macro does not
-   change the SUCCESS/FAILURE status either. This makes it possible to
-   write macros to react to the status of other commands (or macros), for
-   example:
-
-  define CHKLINE {
-      if success end 0
-      stop 1 SET LINE failed - please try another device.
-  }
-  set modem type usrobotics
-  set line /dev/cua0
-  chkline
-  set speed 57600
-  dial 7654321
-
-   By the way, none of this is news. But it was not explicitly documented
-   before, and C-Kermit 7.0 and earlier did not always handle the RETURN
-   statement as it should have.
-
-   [ [446]Top ] [ [447]Contents ] [ [448]C-Kermit Home ] [ [449]Kermit
-   Home ]
-     _________________________________________________________________
-
-  8.9. UNDEFINing Groups of Variables
-
-   The UNDEFINE command, which previously accepted one variable name, now
-   accepts a list of them, and also accepts wildcard notation to allow
-   deletion of variables that match a given pattern.
-
-   UNDEFINE [ switches ] name [ name [ name [ ... ] ] ]
-          Undefines the variables whose names are given. Up to 64 names
-          may be given in one UNDEFINE command.
-
-   If you omit the switches and include only one name, the UNDEFINE
-   command works as before.
-
-   Switches include:
-
-   /MATCHING
-          Specifies that the names given are to treated as patterns
-          rather than literal variable names. Note: pattern matching
-          can't be used with array references; use the ARRAY command to
-          manipulate arrays and subarrays.
-
-   /LIST
-          List the name of each variable to be undefined, and whether it
-          was undefined successfully ("ok" or "error"), plus a summary
-          count at the end.
-
-   /SIMULATE
-          List the names of the variables that would be deleted without
-          actually deleting them. Implies /LIST.
-
-   The UNDEFINE command fails if there were any errors and succeeds
-   otherwise.
-
-   The new _UNDEFINE command is like UNDEFINE, except the names are
-   assumed to be variable names themselves, which contain the names (or
-   parts of them) of the variables to be undefined. For example, if you
-   have the following definitions:
-
-  define \%a foo
-  define foo This is some text
-
-   then:
-
-  undef \%a
-
-   undefines the variable \%a, but:
-
-  _undef \%a
-
-   undefines the macro foo.
-
-   Normal Kermit patterns are used for matching; metacharacters include
-   asterisk, question mark, braces, and square brackets. Thus, when using
-   the /MATCHING switch, if the names of the macros you want to undefine
-   contain any of these characters, you must quote them with backslash to
-   force them to be taken literally. Also note that \%* is not the name
-   of a variable; it is a special notation used within a macro for "all
-   my arguments". The command "undef /match \%*" deletes all \%x
-   variables, where x is 0..9 and a..z. Use "undef /match \%[0-9]" to
-   delete macro argument variables or "undef /match \%[i-n]" to delete a
-   range of \%x variables.
-
-   [ [450]Top ] [ [451]Contents ] [ [452]C-Kermit Home ] [ [453]Kermit
-   Home ]
-     _________________________________________________________________
-
-  8.10. The INPUT and MINPUT Commands
-
-   As of C-Kermit 8.0.211, the INPUT and MINPUT commands accept a switch:
-
-   [M]INPUT /NOMATCH timeout
-          The /NOMATCH switch allows INPUT or MINPUT to read incoming
-          material for the specified amount of time, without attempting
-          to match it with any text or patterns. When this switch is
-          included, the [M]INPUT command succeeds when the timeout
-          interval expires, with \v(instatus) set to 1, meaning "timed
-          out", or fails upon interruption or i/o error.
-
-   Also in version 8.0.211, there is a new way to apply a scale factor to
-   [M]INPUT timeouts:
-
-   SET INPUT SCALE-FACTOR floating-point-number
-          This scales all [M]INPUT timeouts by the given factor, allowing
-          time-sensitive scripts to be adjusted to changing conditions
-          such as congested networks or different-speed modems without
-          having to change each INPUT-class command. This affects only
-          those timeouts that are given in seconds, not as wall-clock
-          times. Although the scale factor can have a fractional part,
-          the INPUT timeout is still an integer. The new built-in
-          variable \v(inscale) tells the current INPUT SCALE-FACTOR.
-
-   The MINPUT command can be used to search the incoming data stream for
-   several targets simultaneously. For example:
-
-  MINPUT 8 one two three
-
-   waits up to 8 seconds for one of the words "one", "two", or "three" to
-   arrive. Words can be grouped to indicate targets that contain spaces:
-
-  MINPUT 8 nineteeen twenty "twenty one"
-
-   And of course you can also use variables in place of (or as part of)
-   the target names:
-
-  MINPUT 8 \%a \&x[3] \m(foo)
-
-   Until now you had to know the number of targets in advance when
-   writing the MINPUT statement. Each of the examples above has exactly
-   three targets.
-
-   But suppose your script needs to look for a variable number of
-   targets. For this you can use arrays and \fjoin(), described in
-   [454]Section 8.7. Any number of \fjoin() invocations can be included
-   in the MINPUT target list, and each one is expanded into the
-   appropriate number of separate targets each time the MINPUT command is
-   executed. Example:
-
-  declare \&a[10] = one two three
-  minput 10 foo \fjoin(&a) bar
-
-   This declares an array of ten elements, and assigns values to the
-   first three of them. The MINPUT command looks for these three (as well
-   as the words "foo" and "bar"). Later, if you assign additional
-   elements to the array, the same MINPUT command also looks for the new
-   elements.
-
-   If an array element contains spaces, each word becomes a separate
-   target. To create one target per array element, use \fjoin()'s
-   grouping feature:
-
-  dcl \&a[] = {aaa bbb} {ccc ddd} {xxx yyy zzz}
-
-  minput 10 \fjoin(&a)     <-- 7 targets
-  minput 10 \fjoin(&a,,2)  <-- 3 targets
-
-   [ [455]Top ] [ [456]Contents ] [ [457]C-Kermit Home ] [ [458]Kermit
-   Home ]
-     _________________________________________________________________
-
-  8.11. Learned Scripts
-
-   C-Kermit now includes a simple script recorder that monitors your
-   commands, plus your actions during CONNECT mode, and automatically
-   generates a script program that mimics what it observed. You should
-   think of this feature as a script-writing ASSISTANT since, as you will
-   see [459]later in this section, the result generally needs some
-   editing to make it both secure and flexible. The script recorder is
-   controlled by the new LEARN command:
-
-   LEARN [ /ON /OFF /CLOSE ] [ filename ]
-          If you give a filename, the file is opened for subsequent
-          recording. The /ON switch enables recording to the current file
-          (if any); /OFF disables recording. /CLOSE closes the current
-          script recording file (if any). If you give a filename without
-          any switches, /ON is assumed.
-
-   The /OFF and /ON switches let you turn recording off and on during a
-   session without closing the file.
-
-   When recording:
-
-     * All commands that you type (or recall) at the prompt are recorded
-       in the file except:
-          + LEARN commands are not recorded.
-          + The CONNECT command is not recorded.
-          + The TELNET command is converted to SET HOST /NETWORK:TCP.
-     * Commands obtained from macros or command files are not recorded.
-     * During CONNECT:
-          + Every line you type is converted to an OUTPUT command.
-          + The last prompt before any line you type becomes an INPUT
-            command.
-          + Timeouts are calculated automatically for each INPUT command.
-          + A PAUSE command is inserted before each OUTPUT command just
-            to be safe.
-
-   Thus the script recorder is inherently line-oriented. It can't be used
-   to script character-oriented interactions like typing Space to a
-   "More?" prompt or editing a text file with VI or EMACS.
-
-   But it has advantages too; for example it takes control characters
-   into account that might not be visible to you otherwise, and it
-   automatically converts control characters in both the input and output
-   streams to the appropriate notation. It can tell, for example that the
-   "$ " prompt on the left margin in UNIX is really {\{13}\{10}$ },
-   whereas in VMS it might be {\{13}\{10}\{13}$ }. These sequences are
-   detected and recorded automatically.
-
-   A learned script should execute correctly when you give a TAKE command
-   for it. However, it is usually appropriate to edit the script a bit.
-   The most important change would be to remove any passwords from it.
-   For example, if the script contains:
-
-  INPUT 9 {\{13}\{10}Password: }
-  IF FAIL STOP 1 INPUT timeout
-  PAUSE 1
-  OUTPUT bigsecret\{13}
-
-   you should replace this by something like:
-
-  INPUT 9 {\{13}\{10}Password: }
-  IF FAIL STOP 1 INPUT timeout
-  ASKQ pswd Please type your password:
-  PAUSE 1
-  OUTPUT \m(pswd)\{13}
-
-   The LEARN command can't do this for you since it knows nothing about
-   "content"; it only knows about lines and can't be expected to parse or
-   understand them -- after all, the Password prompt might be in some
-   other language. So remember: if you use the LEARN command to record a
-   login script, be sure edit the resulting file to remove any passwords.
-   Also be sure to delete any backup copies your editor or OS might have
-   made of the file.
-
-   Other manual adjustments might also be appropriate:
-
-     * If the target of an INPUT command can vary, you can replace the
-       INPUT command with MINPUT and the appropriate target list, and/or
-       the target with a \fpattern(). For example, suppose you are
-       dialing a number that can be answered by any one of 100 terminal
-       servers, whose prompts are ts-00>, ts-01>, ts-02>, ... ts-99>. The
-       script records a particular one of these, but you want it to work
-       for all of them, so change (e.g.):
-  INPUT 10 ts-23>  ; or whatever
-       to:
-  INPUT 10 \fpattern(ts-[0-9][0-9]>)
-     * The INPUT timeout values are conservative, but they are based only
-       on a single observation; you might need to tune them.
-     * The PAUSE commands might not be necessary, or the PAUSE interval
-       might need adjustment.
-     * In case you made typographical errors during recording, they are
-       incorporated in your script; you can edit them out if you want to.
-
-   Here is a sample script generated by Kermit ("learn vms.ksc") in which
-   a Telnet connection is made to a VMS computer, the user logs in,
-   starts Kermit on VMS, sends it a file, and then logs out:
-
-  ; Scriptfile: vms.ksc
-  ; Directory:  /usr/olga
-  ; Recorded:   20001124 15:21:23
-
-  SET HOST /NETWORK:TCP vms.xyzcorp.com
-  IF FAIL STOP 1 Connection failed
-
-  INPUT 7 {\{13}\{10}\{13}Username: }
-  IF FAIL STOP 1 INPUT timeout
-  PAUSE 1
-  OUTPUT olga\{13}
-  INPUT 3 {\{13}\{10}\{13}Password: }
-  IF FAIL STOP 1 INPUT timeout
-  PAUSE 1
-  OUTPUT secret\{13}
-  INPUT 18 {\{13}\{10}\{13}$ }
-  IF FAIL STOP 1 INPUT timeout
-  PAUSE 1
-  OUTPUT set default [.incoming]\{13}
-  INPUT 12 {\{13}\{10}\{13}$ }
-  IF FAIL STOP 1 INPUT timeout
-  PAUSE 1
-  OUTPUT kermit\{13}
-  INPUT 15 {\{13}\{10}\{13}ALTO:[OLGA.INCOMING] C-Kermit>}
-  IF FAIL STOP 1 INPUT timeout
-  PAUSE 1
-  OUTPUT receive\{13}
-  send myfile.txt
-
-  INPUT 18 {\{13}\{10}\{13}ALTO:[OLGA.INCOMING] C-Kermit>}
-  IF FAIL STOP 1 INPUT timeout
-  PAUSE 1
-  OUTPUT exit\{13}
-  INPUT 6 {\{13}\{10}\{13}$ }
-  IF FAIL STOP 1 INPUT timeout
-  PAUSE 1
-  OUTPUT logout\{13}
-  close
-  exit
-
-   The commands generated by Kermit during CONNECT (INPUT, IF FAIL,
-   PAUSE, and OUTPUT) have uppercase keywords; the commands typed by the
-   user are in whatever form the user typed them (in this case,
-   lowercase).
-
-   [ [460]Top ] [ [461]Contents ] [ [462]C-Kermit Home ] [ [463]Kermit
-   Home ]
-     _________________________________________________________________
-
-  8.12. Pattern Matching
-
-   A pattern is a character string that is used to match other strings.
-   Patterns can contain metacharacters that represent special actions
-   like "match any single character", "match zero or more characters",
-   "match any single character from a list", and so on. The best known
-   application of patterns is in file specifications that contain
-   wildcards, as in "send *.txt", meaning "send all files whose names end
-   with .txt".
-
-   Patterns are also used in increasingly many other ways, to the extent
-   it is useful to point out certain important distinctions in the ways
-   in which they are used:
-
-   Anchored Patterns
-          If an anchored pattern does not begin with "*", it must match
-          the beginning of the string, and if it does not end with "*",
-          it must match the end of the string. For example, the anchored
-          pattern "abc" matches only the string "abc", not "abcde" or
-          "xyzabc" or "abcabc". The anchored pattern "abc*" matches any
-          string that starts with "abc"; the anchored pattern "*abc"
-          matches any string that ends with "abc"; the anchored pattern
-          "*abc*" matches any string that contains "abc" (including any
-          that start and/or end with it).
-
-   Floating Patterns
-          A floating pattern matches any string that contains a substring
-          that matches the pattern. In other words, a floating pattern
-          has an implied "*" at the beginning and end. You can anchor a
-          floating pattern to the beginning by starting it with "^", and
-          you can anchor it to the end by ending it with "$" (see
-          examples below).
-
-   Wildcards
-          A wildcard is an anchored pattern that has the additional
-          property that "*" does not match directory separators.
-
-   This terminology lets us describe Kermit's commands with a bit more
-   precision. When a pattern is used for matching filenames, it is a
-   wildcard, except in the TEXT-PATTERNS and BINARY-PATTERNS lists and
-   /EXCEPT: clauses, in which case directory separators are not
-   significant (for example, a BINARY-PATTERN of "*.exe" matches any file
-   whose name ends in .exe, no matter how deeply it might be buried in
-   subdirectories). When Kermit parses a file specification directly,
-   however, it uses the strict wildcard definition. For example, "send
-   a*b" sends all files whose names start with "a" and end with "b" in
-   the current directory, and not any files whose names end with "b" that
-   happen to be in subdirectories whose names start with "a". And as
-   noted, wildcards are anchored, so "delete foo" deletes the file named
-   "foo", and not all files whose names happen to contain "foo".
-
-   Most other patterns are anchored. For example:
-
-  if match abc bc ...
-
-   does not succeed (and you would be surprised if it did!). In fact, the
-   only floating patterns are the ones used by commands or functions that
-   search for patterns in files, arrays, or strings. These include:
-
-     * The GREP and TYPE /MATCH commands.
-     * The \fsearch(), \frsearch(), and \farraylook() functions.
-
-   Thus these are the only contexts in which explicit anchors ("^" and
-   "$") may be used:
-
-   grep abc *.txt
-          Prints all lines containing "abc" in all files whose names end
-          with ".txt".
-
-   grep ^abc *.txt
-          Prints all lines that start with "abc" in all ".txt" files.
-
-   grep abc$ *.txt
-          Prints all lines that end with "abc" in all ".txt" files.
-
-   grep ^a*z$ *.txt
-          Prints all lines that start with "a" and end with "z" in all
-          ".txt" files.
-
-   Similarly for TYPE /PAGE, /fsearch(), /frsearch(), and \farraylook().
-
-   Here is a brief summary of anchored and floating pattern equivalences:
-
-  Anchored   Floating
-    abc       ^abc$
-    *abc      abc$
-    abc*      ^abc
-    *abc*     abc
-
-   [ [464]Top ] [ [465]Contents ] [ [466]C-Kermit Home ] [ [467]Kermit
-   Home ]
-     _________________________________________________________________
-
-  8.13. Dates and Times
-
-   C-Kermit's comprehension of date-time formats is considerably expanded
-   in version 8.0. Any command that reads dates, including the DATE
-   command itself, or any switch, such as the /BEFORE: and /AFTER:
-   switches, or any function such as \fcvtdate(), now can understand
-   dates and times expressed in any ISO 8601 format, in Unix "asctime"
-   format, in FTP MDTM format, and in practically any format used in RFC
-   822 or RFC 2822 electronic mail, with or without timezones, and in a
-   great many other formats as well. HELP DATE briefly summarizes the
-   acceptable date-time formats.
-
-   Furthermore, C-Kermit 8.0 includes a new and easy-to-use form of
-   date-time arithmetic, in which any date or time can be combined with a
-   "delta time", to add or subtract the desired time interval (years,
-   months, weeks, days, hours, minutes, seconds) to/from the given date.
-   And new functions are available to compare dates and to compute their
-   differences.
-
-   As you can imagine, all this requires quite a bit of "syntax". The
-   basic format is:
-
-  [ date ] [ time ] [ delta ]
-
-   Each field is optional, but in most cases (depending on the context)
-   there must be at least one field. If a date is given, it must come
-   first. If no date is given, the current date is assumed. If no time is
-   given, an appropriate time is supplied depending on whether a date was
-   supplied. If no delta is given, no arithmetic is done. If a delta is
-   given without a date or time, the current date and time are used as
-   the base.
-
-   Date-time-delta fields are likely to contain spaces (although they
-   need not; space-free forms are always available). Therefore, in most
-   contexts -- and notably as switch arguments -- date-time information
-   must be enclosed in braces or doublequotes, for example:
-
-  send /after:"8-Aug-2001 12:00 UTC" *.txt
-
-   Kermit's standard internal format for dates and times is:
-
-  yyyymmdd hh:mm:ss
-
-   for example:
-
-  20010208 10:28:01
-
-   Date-times can always be given in this format. yyyy is the 4-digit
-   year, mm is the two-digit month (1-12; supply leading zero for
-   Jan-Sep), dd is the 2-digit day (leading zero for 1-9), hh is the hour
-   (0-23), mm the minute (0-59), ss the second (0-59), each with leading
-   zero if less than the field width. The date and time can be separated
-   by a space, an underscore, a colon, or the letter T. The time is in
-   24-hour format. Thus the various quantites are at the following fixed
-   positions:
-
-Position  Contents                    
-   1-4    Year   (4 digits, 0000-9999)
-   5-6    Month  (2 digits, 1-12)
-   7-8    Day    (2 digits, 1-31)
-   9      Date-Time Separator (space, :, _, or the letter T)
-  10-11   Hour   (2 digits, 0-23)
-  12      Hour-Minute Separator (colon)
-  13-14   Minute (2 digits, 0-59)
-  15      Minute-Second Separator (colon)
-  16-17   Second (2 digits, 0-59)
-
-   Example:
-
-  19800526 13:07:12  26 May 1980, 13:07:12 (1:07:12PM)
-
-   This is the format produced by the DATE command and by any function
-   that returns a date-time. It is suitable for lexical comparison and
-   sorting, and for use as a date-time in any Kermit command. When this
-   format is given as input to a command or function, various date-time
-   separators (as noted) are accepted:
-
-  19800526 13:07:12  26 May 1980, 13:07:12 (1:07:12PM)
-  20010208_10:28:35  2 February 2001, 10:28:35 AM
-  18580101:12:00:00  1 January 1858, noon
-  20110208T00:00:00  2 February 2011, midnight
-
-   Certain other special date-time formats that are encountered on
-   computer networks are recognized:
-
-   Asctime Format
-          This is a fixed format used by Unix, named after Unix's
-          asctime() ("ASCII time") function. It is always exactly 24
-          characters long. Example: Fri Aug 10 16:38:01 2001
-
-   Asctime with Timezone
-          This is like Asctime format, but includes a 3-character
-          timezone between the time and year. It is exactly 28 characters
-          long. Example: Fri Aug 10 16:38:01 GMT 2001
-
-   E-Mail Format
-          E-mail date-time formats are defined in [468]RFC 2822 with a
-          fair amount of flexibility and options. The following examples
-          are typical of e-mails and HTTP (web-page) headers:
-
-  Sat, 14 Jul 2001 11:49:29                (No timezone)
-  Fri, 24 Mar 2000 14:19:59 EST            (Symbolic timezone)
-  Tue, 26 Jun 2001 10:19:45 -0400 (EDT)    (GMT Offset + comment)
-
-   FTP MDTM Format
-          This is the date-time format supplied by FTP servers that
-          support the (not yet standard but widely used nevertheless)
-          MDTM command, by which the FTP client asks for a file's
-          modification time:
-
-  yyyymmddhhmmss[.ffff]
-
-          where yyyy is the 4-digit year, mm is the 2-digit month, and so
-          on, exactly 14 digits long. An optional fractional part
-          (fraction of second) may also be included, separated by a
-          decimal point (period). Kermit rounds to the nearest second.
-          Example:
-
-  20020208102835.515                       (8 February 2002 10:28:36 AM)
-
-    8.13.1. The Date
-
-   The date, if given, must precede the time and/or delta, and can be in
-   many, many formats. For starters, you can use several symbolic date
-   names in place of actual dates:
-
-   NOW
-          This is replaced by the current date and time. The time can not
-          be overriden (if you want to supply a specific time, use TODAY
-          rather than NOW).
-
-   TODAY
-          This is replaced by the current date and a default time of
-          00:00:00 is supplied, but can be overridden by a specific time;
-          for example, if today is 8 February 2002, then "TODAY" is
-          "20020802 00:00:00" but "TODAY 10:28" is "20020802 10:28:00".
-
-   TOMORROW
-          Like TODAY, but one day later (if today is 8 February 2002,
-          then "TOMORROW" is "20020803 00:00:00" but "TOMORROW 16:30" is
-          "20020803 16:30:00").
-
-   YESTERDAY
-          Like TODAY, but one day earlier.
-
-   MONDAY, TUESDAY, WEDNESDAY, ..., SUNDAY
-          The date on the given day of the week, today or later. A
-          default time of 00:00:00 is supplied but can be overridden.
-          Example: "SATURDAY 12:00" means next Saturday (or today, if
-          today is Saturday) at noon.
-
-   You can give an explicit date in almost any conceivable format, but
-   there are some rules:
-
-     * If a date is given, it must have three fields: day, month, and
-       year; the order can vary (except that the month can not be last).
-     * If names are used for days, months, etc, they must be English.
-     * The year must lie between 0000 and 9999, inclusive.
-     * All calendar calculations use Gregorian dating, so calculated
-       dates for years prior to 1582 (or later, depending on the country)
-       will not agree with historical dates. Other forms of dating (e.g.
-       Hebrew, Chinese) are not supported.
-
-   Various date-field separators are accepted: hyphen, slash, space,
-   underscore, period. The same field separator (if any) must be used in
-   both places; for example 18-Sep-2001 but not 18-Sep/2001. Months can
-   be numeric (1-12) or English names or abbreviations. Month name
-   abbreviations are normally three letters, e.g. Apr, May, Jun, Jul.
-   Capitalization doesn't matter.
-
-   Here are a few examples:
-
-  18 Sep 2001                              (English month, abbreviated)
-  18 September 2001                        (English month, spelled out)
-  2001 Sept 18                             (Year, month, day)
-  18-Sep-2001                              (With hyphens)
-  18/09/2001                               (All numeric with slashes)
-  18.09.2001                               (Ditto, with periods)
-  18_09_2001                               (Ditto, with underscores)
-  09/18/2001                               (See below)
-  2001/09/18                               (See below)
-  September 18, 2001                       (Correspondence style)
-  Sep-18-2001                              (Month-day-year)
-  20010918                                 (Numeric, no separators)
-
-   You can also include the day of the week with a specific date, in
-   which case it is accepted (if it is a valid day name), but not
-   verified to agree with the given date:
-
-  Tue, 18 Sep 2001                         (Abbreviated, with comma)
-  Tue,18 Sep 2001                          (Comma but no space)
-  Tue 18 Sep 2001                          (Abbreviated, no comma)
-  Tuesday 18 Sep 2001                      (Spelled out)
-  Tuesday, 18 Sep 2001                     (etc)
-  Friday, 18 Sep 2001                      (Accepted even if not Friday)
-
-   In all-numeric dates with the year last, such as 18/09/2001, Kermit
-   identifies the year because it's 4 digits, then decides which of the
-   other two numbers is the month or day based on its value. If both are
-   12 or less and are unequal, the date is ambiguous and is rejected. In
-   all-numeric dates with the year first, the second field is always the
-   month and the third is the day. The month never comes last. A date
-   with no separators is accepted only if it is all numeric and has
-   exactly eight digits, and is assumed to be in yyyymmdd format.
-
-  20010918                                 (18-Sep-2001 00:00:00)
-
-   or 14 digits (as in FTP MDTM format):
-
-  20010918123456                           (18-Sep-2001 12:34:56)
-
-   You can always avoid ambiguity by putting the year first, or by using
-   an English, rather than numeric, month. A date such as 09/08/2001
-   would be ambiguous but 2001/09/08 is not, nor is 09-Aug-2001.
-
-   Until the late 1990s, it was common to encounter 2-digit years, and
-   these are found to this day in old e-mails and other documents. Kermit
-   accepts these dates if they have English months, and interprets them
-   according to the windowing rules of [469]RFC 2822: "If a two digit
-   year is encountered whose value is between 00 and 49, the year is
-   interpreted by adding 2000, ending up with a value between 2000 and
-   2049. If a two digit year is encountered with a value between 50 and
-   99, or any three digit year is encountered, the year is interpreted by
-   adding 1900."
-
-   If you need to specify a year prior to 1000, use leading zeros to
-   ensure it is not misinterpreted as a "non-Y2K-compliant" modern year:
-
-  7-Oct-77                                 (19771007 00:00:00)
-  7-Oct-0077                               (00771007 00:00:00)
-
-    8.13.2. The Time
-
-   The basic time format is hh:mm:dd; that is hours, minutes, seconds,
-   separated by colons, perhaps with an optional fractional second
-   separated by a decimal point (period). The hours are in 24-hour
-   format; 12 is noon, 13 is 1pm, and so on. Fields omitted from the
-   right default to zero. Fields can be omitted from the left or middle
-   by including the field's terminating colon. Examples:
-
-  11:59:59                                 (11:59:59 AM)
-  11:59                                    (11:59:00 AM)
-  11                                       (11:00:00 AM)
-  11:59:59.33                              (11:59:59 AM)
-  11:59:59.66                              (Noon)
-  03:21:00                                 (3:21:00 AM)
-  3:21:00                                  (3:21:00 AM)
-  15:21:00                                 (3:21:00 PM)
-  :21:00                                   (00:21:00 AM)
-  ::01                                     (00:00:01 AM)
-  11::59                                   (11:00:59 AM)
-
-   Leading zeros can be omitted, but it is customary and more readable to
-   keep them in the minute and second fields:
-
-  03:02:01                                 (03:02:01 AM)
-  3:02:01                                  (03:02:01 AM)
-  3:2:1                                    (03:02:01 AM)
-
-   AM/PM notation is accepted if you wish to use it:
-
-  11:59:59                                 (11:59:59 AM)
-  11:59:59AM                               (11:59:59 AM)
-  11:59:59A.M.                             (11:59:59 AM)
-  11:59:59am                               (11:59:59 AM)
-  11:59:59a.m.                             (11:59:59 AM)
-  11:59:59PM                               (11:59:59 PM = 23:59:59)
-  11:59:59P.M.                             (11:59:59 PM = 23:59:59)
-  11:59:59pm                               (11:59:59 PM = 23:59:59)
-  11:59:59p.m.                             (11:59:59 PM = 23:59:59)
-
-   You can omit the colons if you wish, in which case Kermit uses the
-   following rules to interpret the time:
-
-    1. 6 digits is hh:mm:ss, e.g. 123456 is 12:34:56.
-    2. 5 digits is h:mm:ss, e.g. 12345 is 1:23:45.
-    3. 4 digits is hh:mm, e.g. 1234 is 12:34.
-    4. 3 digits is h:mm, e.g. 123 is 1:23.
-    5. 2 digits is hh, e.g. 12 is 12:00.
-    6. 1 digit is h (the hour), e.g. 1 is 1:00.
-
-   Examples:
-
-  1                                        (01:00:00 AM)
-  10                                       (10:00:00 AM)
-  230                                      (02:30:00 AM)
-  230pm                                    (02:30:00 PM = 14:30:00)
-  1115                                     (11:15:00 AM)
-  2315                                     (11:15:00 PM = 23:15:00 PM)
-  23150                                    (02:31:50 AM)
-  231500                                   (23:15:00 PM)
-
-    8.13.3. Time Zones
-
-   If a time is given, it can (but need not) be followed by a time zone
-   designator. If no time zone is included, the time is treated as local
-   time and no timezone conversions are performed.
-
-   The preferred time zone designator is the UTC Offset, as specified in
-   [470]RFC 2822: a plus sign or minus sign immediately followed by
-   exactly four decimal digits, signifying the difference in hh (hours)
-   and mm (minutes) from Universal Coordinated Time (UTC, also known as
-   Greenwich Mean Time, or GMT), with negative numbers to the West and
-   positive numbers to the East. For example:
-
-  Fri, 13 Jul 2001 12:54:29 -0700
-
-   indicates a local time of 12:54:29 that is 07 hours and 00 minutes
-   behind (less than, East of) Universal Time. The space is optional, so
-   the example could also be written as:
-
-  Fri, 13 Jul 2001 12:54:29-0700
-
-   The following symbolic time zones are also accepted, as specified by
-   [471]RFC 2822 and/or in ISO 8601:
-
-  GMT  =  +0000       Greenwich Mean Time
-  Z    =  +0000       Zulu (Zero Meridian) Time
-  UTC  =  +0000       Universal Coordinated Time
-  UT   =  +0000       Universal Time
-  EDT  =  -0400       Eastern (USA) Daylight Time
-  EST  =  -0500       Eastern (USA) Standard Time
-  CDT  =  -0500       Central (USA) Daylight Time
-  CST  =  -0600       Central (USA) Standard Time
-  MDT  =  -0600       Mountain (USA) Daylight Time
-  MST  =  -0700       Mountain (USA) Standard Time
-  PDT  =  -0700       Pacific (USA) Daylight Time
-  PST  =  -0800       Pacific (USA) Standard Time
-
-   Note that GMT, Z, UTC, and UT all express the same concept: standard
-   (not daylight) time at the Zero Meridian. UTC, by the way, is an
-   international standard symbol and does not correspond to the order of
-   the English words, Universal Coordinated Time, but it happens to have
-   the same initial letters as these words. Of course hundreds of other
-   symbolic timezones and variations exist, but they are not
-   standardized, and are therefore not supported by Kermit.
-
-   When a time zone is included with a time, the time is converted to
-   local time. In case the conversion crosses a midnight boundary, the
-   date is adjusted accordingly. Examples converting to EST (Eastern USA
-   Standard Time = -0500):
-
- 11:30:00      =  11:30:00
- 11:30:00 EST  =  11:30:00
- 11:30:00 GMT  =  06:30:00
- 11:30:00 PST  =  14:30:00
- 11:30:00Z     =  06:30:00
- 11:30PM GMT   =  18:30:00
- 11:30 -0500   =  11:30:00
- 11:30 -0800   =  08:30:00
- 11:30 +0200   =  04:30:00
-
-   Unlike most of Kermit's other date-time conversions, timezone
-   knowledge (specifically, the offset of local time from UTC) is
-   embodied in the underlying operating system, not in Kermit itself, and
-   any conversion errors in this department are the fault of the OS. For
-   example, most UNIX platforms do not perform conversions for years
-   prior to 1970.
-
-    8.13.4. Delta Time
-
-   Date/time expressions can be composed of a date and/or time and a
-   delta time, or a delta time by itself. When a delta time is given by
-   itself, it is relative to the current local date and time. Delta times
-   have the following general format:
-
-  {+,-}[number units][hh[:mm[:ss]]]
-
-   In other words, a delta time always starts with a plus or minus sign,
-   which is followed by a "part1", a "part2", or both. The "part1", if
-   given, specifies a number of days, weeks, months, or years; "part2"
-   specifies a time in hh:mm:ss notation. In arithmetic terms, these
-   represents some number of days or other big time units, and then a
-   fraction of a day expressed as hours, minutes, and seconds; these are
-   to be added to or subtracted from the given (or implied) date and
-   time. The syntax is somewhat flexible, as shown by the following
-   examples:
-
-  +1 day                (Plus one day)
-  +1day                 (Ditto)
-  +1d                   (Ditto)
-  + 1 day               (Ditto)
-  + 1 day 3:00          (Plus one day and 3 hours)
-  +1d3:00               (Ditto)
-  +1d3                  (Ditto)
-  +3:00:00              (Plus 3 hours)
-  +3:00                 (Ditto)
-  +3                    (Ditto)
-  +2 days               (Plus 2 days)
-  -12 days 7:14:22      (Minus 12 days, 7 hours, 14 minutes, and 22 seconds)
-
-   The words "week", "month", and "year" can be used like "day" in the
-   examples above. A week is exactly equivalent to 7 days. When months
-   are specified, the numeric month number of the date is incremented or
-   decremented by the given number, and the year and day adjusted
-   accordingly if necessary (for example, 31-Jan-2001 +1month =
-   03-Mar-2001 because February does not have 31 days). When years are
-   specified, they are added or subtracted to the base year. Examples
-   (assuming the current date is 10-Aug-2001 and the current time is
-   19:21:11):
-
-  18-Sep-2001 +1day              (20010918 00:00:00)
-  today +1day                    (20010811 00:00:00)
-  now+1d                         (20010811 19:21:11)
-  + 1 day                        (20010811 19:21:11)
-  + 1 day 3:14:42                (20010811 22:35:54)
-  + 7 weeks                      (20010928 19:21:11)
-  +1d3:14:42                     (20010811 22:35:54)
-  +1w3:14:42                     (20010817 22:35:54)
-  +1m3:14:42                     (20010910 22:35:54)
-  +1y3:14:42                     (20020810 22:35:54)
-  2 feb 2001 + 10 years          (20110208 00:00:00)
-  2001-02-08 +10y12              (20110208 12:00:00)
-  31-dec-1999 23:59:59+00:00:01  (20000101 00:00:00)
-  28-feb-1996 +1day              (19960229 00:00:00) (leap year)
-  28-feb-1997 +1day              (19970301 00:00:00) (nonleap year)
-  28-feb-1997 +1month            (19970328 00:00:00)
-  28-feb-1997 +1month 11:59:59   (19970328 11:59:59)
-  28-feb-1997 +20years           (20170228 00:00:00)
-  28-feb-1997 +8000years         (99970228 00:00:00)
-
-   For compatibility with VMS, the following special delta-time format is
-   also accepted:
-
-  +number-hh:mm:ss
-  -number-hh:mm:ss
-
-   (no spaces). The hyphen after the number indicates days. It
-   corresponds exactly to the Kermit notation:
-
-  +numberdhh:mm:ss
-  -numberdhh:mm:ss
-
-   The following forms all indicate exactly the same date and time:
-
-  18-Sep-2001 12:34:56 +1-3:23:01
-  18-Sep-2001 12:34:56 +1d3:23:01
-  18-Sep-2001 12:34:56 +1 day 3:23:01
-
-   and mean "add a day plus 3 hours, 23 minutes, and 1 second" to the
-   given date.
-
-   Note that delta times are not at all the same as UTC offsets; the
-   former specifies an adjustment to the given date/time and the latter
-   specifies that the local time is a particular distance from Universal
-   Time, for example:
-
-  11-Aug-2001 12:34:56 -0800          (20010811 16:34:56 -- UTC Offset)
-  11-Aug-2001 12:34:56 -08:00         (20010811 04:34:56 -- Delta time)
-
-   If you give a time followed by a modifer that starts with a + or -
-   sign, how does Kermit know whether it's a UTC offset or a delta time?
-   It is treated as a UTC offset if the sign is followed by exactly four
-   decimal digits; otherwise it is a delta time. Examples (for USA
-   Eastern Daylight Time):
-
-  11-Aug-2001 12:34:56 -0800          (20010811 16:34:56 -- UTC Offset)
-  11-Aug-2001 12:34:56 -08:00         (20010811 04:34:56 -- Delta time)
-  11-Aug-2001 12:34:56 -800           (20010811 04:34:56 -- Delta time)
-  11-Aug-2001 12:34:56 -8             (20010811 04:34:56 -- Delta time)
-
-   The first example says that at some unknown place which is 8 hours
-   ahead of Universal Time, the time is 12:34:56, and this corresponds to
-   16:34:56 in Eastern Daylight time. The second example says to subtract
-   8 hours from the local time. The third and fourth are delta times
-   because, even though a colon is not included, the time does not
-   consist of exactly 4 digits.
-
-   When a delta time is written after a timezone, however, there is no
-   ambiguity and no syntax distinction is required:
-
-  11-Aug-2001 12:34:56 -0800 -0800    (20010811 08:34:56)
-  11-Aug-2001 12:34:56 -0800 -08:00   (Ditto)
-  11-Aug-2001 12:34:56 -08:00 -08:00  (Illegal)
-
-    8.13.5. The DATE Command
-
-   Obviously a great many combinations of date, time, time zone, and
-   delta time are possible, as well as many formatting options. The
-   purpose of all this flexibility is to comply with as many standards as
-   possible -- Internet RFCs, ISO standards, and proven corporate
-   standards -- as well as with notations commonly used by real people,
-   in order that dates and times from the widest variety of sources can
-   be assigned to a variable and used in any date-time field in any
-   Kermit command.
-
-   You can test any date-and/or-time format with the DATE command, which
-   converts it to standard yyyymmdd hh:mm:ss format if it is understood,
-   or else gives an explicit error message (rather than just "BAD DATE"
-   as in previous C-Kermit releases) to indicate what is wrong with it.
-   Examples (on Tuesday, 31 July 2001 in New York City, Eastern Daylight
-   Time, UTC -0400):
-
-  DATE command argument                   Result           
-  12:30                                   20010731 12:30:00
-  12:30:01                                20010731 12:30:01
-  12:30:01.5                              20010731 12:30:02
-  1230                                    20010731 12:30:00
-  230                                     20010731 02:30:00
-  230+1d                                  20010801 02:30:00
-  230+1d3:00                              20010801 05:30:00
-  20010718 19:21:15                       20010718 19:21:15
-  20010718_192115                         20010718 19:21:15
-  20010718T192115                         20010718 19:21:15
-  18 Jul 2001 +0400                       20010717 23:59:59
-  18 Jul 2001 192115                      20010718 19:21:15
-  18 Jul 2001 192115.8                    20010718 19:21:16
-  18-Jul-2001T1921                        20010718 19:21:00
-  18-Jul-2001 1921Z                       20010718 15:21:00
-  18-Jul-2001 1921 GMT                    20010718 15:21:00
-  18-Jul-2001 1921 UTC                    20010718 15:21:00
-  18-Jul-2001 1921 Z                      20010718 15:21:00
-  18-Jul-2001 1921Z                       20010718 15:21:00
-  18-Jul-2001 1921 -04:00:00              20010718 19:21:00
-  21-Jul-2001_08:20:00am                  20010721 08:20:00
-  21-Jul-2001_8:20:00P.M.                 20010721 20:20:00
-  Fri Jul 20 11:26:25 2001                20010720 11:26:25
-  Fri Jul 20 11:26:25 GMT 2001            20010720 07:26:25
-  Sun, 9 Apr 2000 06:46:46 +0100          20000409 01:46:46
-  Sunday, 9 Apr 2000 06:46:46 +0100       20000409 01:46:46
-  now                                     20010731 19:41:12
-  today                                   20010731 00:00:00
-  today 09:00                             20010731 09:00:00
-  tomorrow                                20010801 00:00:00
-  tomorrow 09:00                          20010801 09:00:00
-  tomorrow 09:00 GMT                      20010801 05:00:00
-  yesterday                               20010730 00:00:00
-  yesterday 09:00                         20010730 09:00:00
-  + 3 days                                20010803 00:00:00
-  +3 days                                 20010803 00:00:00
-  +3days                                  20010803 00:00:00
-  + 3days                                 20010803 00:00:00
-  + 3 days 09:00                          20010803 09:00:00
-  + 2 weeks                               20010814 00:00:00
-  + 1 month                               20010831 00:00:00
-  - 7 months                              20001231 00:00:00
-  + 10 years                              20110731 00:00:00
-  friday                                  20010803 00:00:00
-  saturday                                20010804 00:00:00
-  sunday                                  20010805 00:00:00
-  monday                                  20010806 00:00:00
-  tuesday                                 20010731 00:00:00
-  wednesday                               20010801 00:00:00
-  thursday                                20010802 00:00:00
-  friday 07:00                            20010803 07:00:00
-  thursday 1:00pm                         20010802 13:00:00
-  thursday 1:00pm GMT                     20010802 09:00:00
-  Thu, 10 Nov 94 10:50:47 EST             19941110 10:50:47
-  Fri, 20 Oct 1995 18:35:15 -0400 (EDT)   19951020 18:35:15
-  31/12/2001                              20011231 00:00:00
-  12/31/2001                              20011231 00:00:00
-  2001-July-20                            20010720 00:00:00
-  2001-September-30                       20010930 00:00:00
-  30-September-2001                       20010930 00:00:00
-  Sep 30, 2001 12:34:56                   20010930 12:34:56
-  September 30, 2001                      20010930 00:00:00
-  September 30, 2001 630                  20010930 06:30:00
-  September 30 2001 630                   20010930 06:30:00
-  Sep-30-2001 12:34:59                    20010930 12:34:59
-  20010807113542.014                      20010807 11:35.42
-  20010807113542.014Z                     20010807 07:35:42
-
-    8.13.6. New Date-Time Functions
-
-   In the following descriptions, date-time function arguments are the
-   same free-format date-time strings discussed above, with the same
-   defaults for missing fields. They are automatically converted to
-   standard format internally prior to processing.
-
-   \fcvtdate(d1)
-          Converts the date-time d1 to standard format and local time.
-          This function is not new, but now it accepts a wider range of
-          argument formats that can include timezones and/or delta times.
-          If the first argument is omitted, the current date and time are
-          assumed. The optional second argument is a format code for the
-          result:
-
-     n1 = 1: yyyy-mmm-dd hh:mm:ss (mmm = English 3-letter month
-     abbreviation)
-     n1 = 2: dd-mmm-yyyy hh:mm:ss (ditto)
-     n1 = 3: yyyymmddhhmmss (all numeric)
-
-   \futcdate(d1)
-          Converts the date-time d1 to Universal Coordinated Time (UTC),
-          also known as GMT or Zulu or Zero-Meridian time. The default d1
-          is NOW. If d1 is a valid date-time, the UTC result is returned
-          in standard format, yyyymmdd hh:ss:mm.
-
-   \fcmpdates(d1,d2)
-          Compares two free-format date-times, d1 and d2, and, if both
-          arguments are valid, returns a number: -1 if d1 is earlier than
-          (before) d2; 0 if d1 is the same as d2; 1 if d1 is later than
-          (after) d2.
-
-   \fdiffdates(d1,d2)
-          Computes the difference between two free-format date-times, d1
-          and d2. If both arguments are valid, returns a delta time which
-          is negative if d1 is earlier than (before) d2 and positive
-          otherwise. If d1 and d2 are equal, the result is "+0:00".
-          Otherwise, the result consists of the number of days, hours,
-          minutes, and seconds that separate the two date-times. If the
-          number of days is zero, it is omitted. If the number of days is
-          nonzero but the hours, minutes, and seconds are all zero, the
-          time is omitted. if the seconds are zero, they are omitted.
-
-   \fdelta2secs(dt)
-          Converts a delta time to seconds. For example, "+1d00:00:01" to
-          86401. Valid delta times must start with a + or - sign. Days
-          are accepted as time units, but not years, months, or weeks. If
-          the result would overflow a computer long word (as would happen
-          with 32-bit long words when the number of days is greater than
-          24854), the function fails.
-
-   HINT: Although Kermit has a number of built-in date and time
-   variables, it doesn't have a single one suitable for writing a
-   timestamp. For this you would normally use something like "\v(ndate)
-   \v(time)". But \fcvtdate() (with no arguments) is equivalent: it
-   returns the current date and time in yyyymmdd hh:mm:ss format,
-   suitable for time stamping.
-
-    8.13.7. Date-Time Programming Examples
-
-   Here's a macro that converts any date-time to UTC, which you might use
-   if C-Kermit didn't already have a \futcdate() function:
-
-  define utcdate {
-      .local := \fcvtdate(\%*)                 ; 1.
-      .tmp := \fcvtdate(\m(local)UTC)          ; 2.
-      .offset := \fdiffdate(\m(local),\m(tmp)) ; 3.
-      .utc := \fcvtdate(\m(local)\m(offset))   ; 4.
-      sho mac utc                              ; 5.
-  }
-
-   Brief explanation: Line 1 converts the macro argument, a free-format
-   date-time, to standard-format local time. Line 2 appends the "UTC"
-   timezone to the local time and converts the result to local time. In
-   other words, we take the same time as the local time, but pretend it's
-   UTC time, and convert it to local time. For example, if New York time
-   is 4 hours ahead of UTC, then 6:00pm New York time is 2:00pm UTC. Line
-   3 gets the difference of the two results (e.g. "+04:00"). Line 4
-   appends the difference (delta time) to the local time, and converts it
-   again, which adds (or subtracts) the UTC offset to the given time.
-   Line 5 displays the result.
-
-   Here's a script that opens a web page, gets its headers into an array,
-   scans the array for the "Last-Modified:" header, and inteprets it:
-  http open www.columbia.edu
-  if fail stop 1 HTTP OPEN failed
-  http /array:a head index.html /dev/null
-  if fail stop 1 HTTP GET failed
-  show array a
-  for \%i 1 \fdim(&a) 1 {
-      .\%x := \findex(:,\&a[\%i])
-      if not \%x continue
-      .tag := \fleft(\&a[\%i],\%x-1)
-      .val := \fltrim(\fsubstr(\&a[\%i],\%x+1))
-      if ( eq "\m(tag)" "Last-Modified" ) {
-          echo HTTP Date: \m(val)
-          .rdate := \fcvtdate(\m(val))
-          echo {Standard Date (local): \m(rdate)}
-          echo {Standard Date (UTC):   \futcdate(\m(rdate))}
-          break
-      }
-  }
-  http close
-
-   The result:
-
-  HTTP Date: Mon, 13 Aug 2001 20:05:42 GMT
-  Standard Date (local): 20010813 16:05:42
-  Standard Date (UTC):   20010813 20:05:42
-
-   As you can see, Kermit had no trouble decoding the date-time-string
-   from the website, converting to local time, and converting back to UTC
-   with no conflicts or loss of information. If it had been in any other
-   known format, the result would have been the same.
-
-   Now suppose we want to download the web page only if it is newer than
-   our local copy. The \fdate(filename) function (which returns the
-   modification date-time of the given file) and the new \fcmpdates()
-   function make it easy. Insert the following just before the BREAK
-   statement:
-
-  if ( < 0 \fcmpdates(\m(rdate),\fdate(index.html)) ) {
-     echo GETTING index.html...
-     http get index.html index.html
-     if success echo HTTP GET OK
-  } else {
-     echo index.html: no update needed
-  }
-  http close
-  exit
-
-   This says, "if 0 is less than the comparison of the remote file date
-   and the local file date, get the remote file, otherwise skip it." And
-   it automatically reconciles the time-zone difference (if any).
-
-   It would be nice to be able to extend this script into a
-   general-purpose website updater, but unfortunately HTTP protocol
-   doesn't provide any mechanism for the client to ask the server for a
-   list of files, recursive or otherwise.
-
-   [ [472]Top ] [ [473]Contents ] [ [474]C-Kermit Home ] [ [475]Kermit
-   Home ]
-     _________________________________________________________________
-
-  8.14. Trapping Keyboard Interruption
-
-   Normally when you type Ctrl-C and Kermit is in command mode (as
-   opposed to CONNECT mode) with COMMAND INTERRUPTION ON (as it is unless
-   you have set it OFF), Kermit interrupts any command that is currently
-   in progress, and if a command file or macro is executing, rolls the
-   command stack back to top level, closing all open command files,
-   deactivating all macros, deallocating all local variables and arrays,
-   and leaving you at the command prompt.
-
-   Suppose, however, you want certain actions to occur when a script is
-   interrupted; for example, closing open files, writing log entries, or
-   displaying summary results. You can do this by defining a macro named
-   ON_CTRLC. When Ctrl-C is detected, and a macro with this name is
-   defined, Kermit executes it from the current command level, thus
-   giving it full access to the environment in which the interruption
-   occurred, including local variables and open files. Only when the
-   ON_CTRLC macro completes execution is the command stack rolled back to
-   top level.
-
-   Once the ON_CTRLC macro is defined, it can be executed only once. This
-   is to prevent recursion if the user types Ctrl-C while the ON_CTRLC
-   macro is executing. If you type Ctrl-C while the Ctrl-C macro is
-   active, this does not start a new copy of ON_CTRLC; rather, it returns
-   to the top-level command prompt. After the ON_CTRLC macro returns, it
-   has been removed from the macro table so if you want to use it again
-   or install a different Ctrl-C trap, you must execute a new DEFINE
-   ON_CTRLC command. In any case, as always when you interrupt a script
-   with Ctrl-C, its completion status is FAILURE.
-
-   Normally the ON_CTRLC macro would be defined in the command file or
-   macro to which it applies, and should be declared LOCAL. This way, if
-   the command file or macro completes successfully without being
-   interrupted, the ON_CTRLC definition disappears automatically.
-   Otherwise the definition would still be valid and the macro would be
-   executed, probably out of context, the next time you typed Ctrl-C.
-
-   Here's a simple example of a command file that sets a Ctrl-C trap for
-   itself:
-
-  local on_ctrlc              ; Make Ctrl-C trap local to this command file.
-  define on_ctrlc {           ; Define the ON_CTRLC macro.
-      echo Interrupted at \v(time).
-      echo Iterations: \%n
-  }
-  xecho Type Ctrl-C to quit
-  for \%n 1 999 1 {           ; Prints a dot every second until interrupted.
-      sleep 1
-      xecho .
-  }
-  echo Finished normally at \v(time) ; Get here only if not interrupted.
-  decrement \%n
-  echo Iterations: \%n
-
-   This prints a summary no matter whether it completes normally or is
-   interrupted from the keyboard. In both cases the trap is automatically
-   removed afterwards.
-
-   For an example of how to use ON_CTRLC to debug scripts, see
-   [476]Section 8.1.
-
-   [ [477]Top ] [ [478]Contents ] [ [479]C-Kermit Home ] [ [480]Kermit
-   Home ]
-  __________________________________________________________________________
-
-9. S-EXPRESSIONS
-
-   This section is primarily for those who want to write
-   calculation-intensive scripts, especially if they require
-   floating-point arithmetic, and/or for those who are familiar with the
-   LISP programming language.
-
-   Ever since C-Kermit version 5 was released in 1988, scripting has been
-   one of its major attractions, and arithmetic is a key part of it.
-   Versions 5 and 6 included integer arithmetic only, using traditional
-   algebraic notation, e.g.:
-
-  echo \fevaluate(3*(2+7)/2)
-  13
-
-   C-Kermit 7.0 added support for floating-point arithmetic, but only
-   through function calls:
-
-  echo \ffpdivide(\ffpmultiply(3.0,\ffpadd(2.0,7.0)),2.0)
-  13.5
-
-   C-Kermit 8.0 introduces a third form of arithmetic that treats
-   integers and floating-point numbers uniformly, is easier to read and
-   write, and executes very quickly:
-
-  (/ (* 3 (+ 2 7)) 2)
-  13.5
-
-   But first some background.
-
-   The Kermit command and scripting language differs from true
-   programming languages (such as C or Fortran) in many ways; one of the
-   most prominent differences is the way in which variables are
-   distinguished from constants. In a command language, words are taken
-   literally; for example, the Unix shell:
-
-  cat foo.bar
-
-   displays the file named foo.bar. Whereas in a programming language
-   like C, words are assumed to be variables:
-
-  s = foo.bar;    /* Assigns the value of foo.bar to the variable s */
-
-   To make a programming language take words literally, you have to quote
-   or "escape" them:
-
-  s = "foo.bar";  /* Assigns a pointer to the string "foo.bar" to the variable
-s */
-
-   The opposite holds for command languages: to get them to treat a word
-   as a variable rather than a constant, you have to escape them. For
-   example, in the Unix shell:
-
-  foo=123         ; Assign value 123 to variable foo.
-  echo foo        ; Prints "foo"
-  echo $foo       ; Prints "123"
-
-   And in Kermit:
-
-  define foo 123  ; Assign value 123 to variable foo.
-  echo 123        ; This prints "123".
-  echo foo        ; This prints "foo".
-  echo \m(foo)    ; This prints "123".
-
-   In other words, character strings (such as "foo" above) are
-   interpreted as literal strings, rather than variable names, except in
-   special commands like DEFINE that deal specifically with variable
-   names (or in numeric contexts as explained in [481]Section 8.2). The
-   special "escape" character (dollar sign ($) for the shell, backslash
-   (\) for Kermit) indicates that a variable is to be replaced by its
-   value.
-
-   The requirement to escape variable names in command languages normally
-   does not impose any special hardship, but can add a considerable
-   notational burden to arithmetic expressions, which are typically full
-   of variables. Especially in Kermit when floating point numbers are
-   involved, where you must use special \ffpxxx() functions, e.g.
-   "\ffpadd(\m(a),\m(b))" rather than the simple "+" operator to add two
-   floating-point numbers together, because the original arithmetic
-   handler doesn't support floating point (this might change in the
-   future). To illustrate, the general formula for the area of a triangle
-   is:
-
-  sqrt(s * (s - a) * (s - b) * (s - c))
-
-   where a, b, and c are the lengths of the triangle's three sides and:
-
-  s = (a + b + c) / 2
-
-   Except in special cases (e.g. a = 3, b = 4, c = 5), the result has a
-   fractional part so the computation must be done using floating-point
-   arithmetic. We can create a Kermit 7.0 function for this as follows:
-
-  def area {
-      local s t1 t2 t3
-      assign s \ffpdiv(\ffpadd(\ffpadd(\%1,\%2),\%3),2.0)
-      assign t1 \ffpsub(\m(s),\%1)
-      assign t2 \ffpsub(\m(s),\%2)
-      assign t3 \ffpsub(\m(s),\%3)
-      return \ffpsqrt(\ffpmul(\m(s),\ffpmul(\m(t1),\ffpmul(\m(t2),\m(t3)))))
-  }
-
-   But as you can see, this is rather cumbersome. Note, in particular,
-   that arithmetic functions like \ffpadd(), \ffpmul(), etc, take exactly
-   two operands (like their symbolic counterparts + and *), so obtaining
-   the product of three or more numbers (as we do in this case) is
-   awkward.
-
-   Using the alternative S-Expression notation, we can reduce this to a
-   form that is both easier to read and executes faster (the details are
-   explained later):
-
-  def newarea {
-      (let s (/ (+ \%1 \%2 \%3) 2.0))
-      (sqrt (* s (- s \%1) (- s \%2) (- s \%3)))
-  }
-
-   In both examples, the \%1..3 variables are the normal Kermit macro
-   arguments, referenced by the normal escaping mechanism. For increased
-   readability, we can also assign the macro arguments \%1, \%2, and \%3
-   to the letters a, b, and c corresponding to our formula:
-
-def newarea {
-    (let a \%1 b \%2 c \%3)
-    (let s (/ (+ a b c) 2.0))
-    (sqrt (* s (- s a) (- s b) (- s c)))
-}
-
-   And now the Kermit function reads almost like the original formula.
-   Here Kermit behaves more like a regular programming language. In an
-   S-Expression, macro names need not be escaped when they are used as
-   the names of numeric variables.
-
-   [ [482]Top ] [ [483]Contents ] [ [484]C-Kermit Home ] [ [485]Kermit
-   Home ]
-     _________________________________________________________________
-
-  9.1. What is an S-Expression?
-
-   The S-Expression concept is borrowed from the Lisp programming
-   language. "S-Expression" is short for Symbolic Expression (itself
-   sometimes shortened to SEXP). S-Expressions provide a kind of
-   Alternative Mini-Universe within the Kermit command language when the
-   regular rules don't apply, a universe enclosed in parentheses.
-
-   C-Kermit does not pretend to be a full Lisp interpreter; only the
-   arithmetic parts of Lisp have been incorporated: S-Expressions that
-   operate on numbers and return numeric values (plus extensibility
-   features described in [486]Section 9.8, which allow some degree of
-   string processing).
-
-   An S-Expression is a list of zero or more items, separated by spaces,
-   within parentheses. Examples:
-
-  ()
-  (1)
-  (a)
-  (+ a 1)
-  (* 2 a b)
-
-   If the S-Expression is empty, it has the NIL (empty) value. If it is
-   not empty and the first item is an operator (such as + or *), there
-   can be zero or more subsequent items, called the operands:
-
-  (+ 1 2)
-
-   Here the operator is "+" and the operands are "1" and "2", and the
-   value of the S-Expression is the value of the operation (in this case
-   3). The operator always comes first, which is different from the
-   familiar algebraic notation; this because S-Expression operators can
-   have different numbers of operands:
-
-  (+ 1)
-  (+ 1 2)
-  (+ 1 2 3 4 5 6 7 8 9)
-
-   If the first item in the S-Expression is not an operator, then it must
-   be a variable or a number (or a macro; see [487]Section 9.8), and the
-   S-Expression can only contain one item; in this case, the
-   S-Expression's value is the value of the variable or number:
-
-  (a)
-  (3)
-
-   Operands can be numbers, variables that have numeric values, functions
-   that return numbers, or other S-Expressions. To illustrate an
-   S-Expression within an S-Expression, observe that:
-
-  (+ 1 2)
-
-   is equivalent to any of the following (plus an infinite number of
-   others):
-
-  (+ 1 (+ 1 1))
-  (+ (- 3 2) (/ 14 (+ 3 4)))
-
-   S-Expressions can be nested to any reasonable level; for example, the
-   value of the following S-Expression is 64:
-
-  (- (* (+ 2 (* 3 4)) (- 9 (* 2 2))) 6)
-
-   Operators have no precedence, implied or otherwise, since they can't
-   be mixed. The only exceptions are unary + and -, which simply indicate
-   the sign of a number:
-
-  (* 3 -1)
-
-   Order of evaluation is specified entirely by parentheses, which are
-   required around each operator and its operands: (+ a (* b c)) instead
-   of (a + b * c).
-
-   S-Expressions provide a simple and isolated environment in which
-   Kermit's macro names can be used without the \m(...) escaping that is
-   normally required. Given:
-
-  define a 1
-  define b 2
-  define c 3
-
-   Then:
-
-  (+ \m(a) \m(b) \m(c))
-
-   is equivalent to:
-
-  (+ a b c)
-
-   Within an S-Expression, as in other strictly numeric contexts
-   ([488]Section 8.2), any operand that starts with a letter is treated
-   as a Kermit macro name. In this context, abbreviations are not
-   accepted; variable names must be spelled out in full. Alphabetic case
-   is not significant; "a" and "A" are the same variable, but both are
-   different from "area".
-
-   Of course, regular Kermit variables and functions can be used in
-   S-Expressions in the normal ways:
-
-  (* \v(math_pi) (^ \%r 2))             ; Area of a circle with radius \%r
-  (+ \fjoin(&a))                        ; Sum of all elements of array \&a[]
-
-   [ [489]Top ] [ [490]Contents ] [ [491]C-Kermit Home ] [ [492]Kermit
-   Home ]
-     _________________________________________________________________
-
-  9.2. Integer and Floating-Point-Arithmetic
-
-   Normally, if all numbers in an S-Expression are integers, the result
-   is an integer:
-
-  (+ 1 1)                               ; Result is 2
-  (/ 9 3)                               ; Result is 3
-
-   If any of the operands is floating point, however, the result is also
-   floating point:
-
-  (+ 1 1.0)                             ; Result is 2.0
-  (/ 9.0 3)                             ; Result is 3.0
-
-   If all the operands are integers but the result has a fractional part,
-   the result is floating point:
-
-  (/ 10 3)                              ; Result is 3.333333333333333
-
-   To force an integer result in such cases, use the TRUNCATE operator:
-
-  (truncate (/ 10 3))                   ; Result is 3
-
-   Similarly, to force a computation to occur in floating point, you can
-   coerce one of its operands to FLOAT:
-
-  (+ 1 (float 1))                       ; Result is 2.0
-
-   The result is also floating point if the magnitude of any integer
-   operand, intermediate result, or the result itself, is larger than the
-   maximum for the underlying machine architecture:
-
-  (^ 100 100)
-
-   If the result is too large even for floating-point representation,
-   "Infinity" is printed; if it is too small to be distinguished from 0,
-   0.0 is returned.
-
-   Large numbers can be used and large results generated, but they are
-   accurate only to the precision of the underlying machine. For example,
-   the result of:
-
- (+ 111111111111111111111 222222222222222222222)
-
-   should be 333333333333333333333, but 333333333333333300000.0 is
-   produced instead if the machine is accurate to only about 16 decimal
-   digits, even with coercion to floating-point. The order of magnitude
-   is correct but the least significant digits are wrong. The imprecise
-   nature of the result is indicated by the ".0" at the end. Contrast
-   with:
-
- (+ 111111111 222222222)
-
-   which produces an exact integer result.
-
-   [ [493]Top ] [ [494]Contents ] [ [495]C-Kermit Home ] [ [496]Kermit
-   Home ]
-     _________________________________________________________________
-
-  9.3. How to Use S-Expressions
-
-   S-Expressions may be given as commands to C-Kermit. Any command whose
-   first character is "(" (left parenthesis) is interpreted as an
-   S-Expression.
-
-   If you enter an S-Expression at the C-Kermit> prompt, its result is
-   printed:
-
-  C-Kermit>(/ 10.0 3)
-   3.333333333333333
-  C-Kermit>
-
-   If an S-Expression is executed within a macro or command file, its
-   value is not printed. However, you can control the printing action
-   with:
-
-   SET SEXPRESSION ECHO { AUTO, ON, OFF }
-          AUTO is the default, meaning print the value at top level only;
-          ON means always print the value; OFF means never print it.
-
-   In any case, the value of the most recent S-Expression (and the
-   S-Expression itself) may be accessed programmatically through the
-   following variables:
-
-   \v(sexpression)
-          The S-Expression most recently executed.
-
-   \v(svalue)
-          The value of the S-Expression most recently executed.
-
-   Besides issuing S-Expressions as commands in themselves, you can also
-   execute them anywhere within a Kermit command, but in this case they
-   must be enclosed in a function call (otherwise they are taken
-   literally):
-
-   \fsexpression(s)
-          The argument "s" is an S-Expression; the outer parentheses may
-          be omitted. The value of the S-Expression is returned. Note
-          that since S-Expressions usually contain spaces, some form of
-          grouping or quoting might be needed in some contexts:
-
-  echo \fsexpression((+ 1 1))            ; Outer parentheses may be included
-  echo \fsexpr(+ 1 1)                    ; Outer parentheses may be omitted
-  echo Value = "\fsexp(+ 1 a)"           ; Can be embedded in strings
-  echo Value = \&a[\fsexp(/ b 2)]        ; Can be used in array subscripts
-  if = {\fsexp(+ 1 1)} 2 {               ; Braces needed here for grouping
-      echo One plus one still equals two
-  }
-
-   The IF statement illustrates how to use S-Expressions as (or in) IF or
-   WHILE conditions:
-
-     * Although S-Expressions and IF conditions are similar in
-       appearance, they are not interchangeable. Therefore you must use
-       \fsexpr() to let Kermit know it's an S-Expression rather than a
-       regular IF condition, or a boolean or algebraic expression within
-       an IF condition.
-     * In contexts where a single "word" is expected, you must enclose
-       the \fsexp() invocation in braces if the S-Expression contains
-       spaces (and most of them do).
-
-   If an S-Expression is the last command executed in a macro, its value
-   becomes the return value of the macro; no RETURN command is needed.
-   Example:
-
-  def newarea {
-      (let s (/ (+ \%1 \%2 \%3) 2.0))
-      (sqrt (* s (- s \%1) (- s \%2) (- s \%3)))
-  }
-
-   This is equivalent to (but more efficient than):
-
-  def newarea {
-      (let s (/ (+ \%1 \%2 \%3) 2.0))
-      return \fsexp(sqrt (* s (- s \%1) (- s \%2) (- s \%3)))
-  }
-
-   When an S-Expression is entered as a command -- that is, the first
-   nonblank character of the command is a left parenthesis -- then it is
-   allowed to span multiple lines, as many as you like, until the first
-   left parenthesis is matched:
-
-  (let s (/
-          (+
-           \%1
-           \%2
-           \%3
-           )
-          2.0
-          )
-       )
-  (sqrt (*
-         s
-         (- s \%1)
-         (- s \%2)
-         (- s \%3)
-         )
-        )
-
-   The S-Expression concept lends itself easily to embedding and
-   recursion, but the depth to which recursion can occur is limited by
-   the resources of the computer (memory size, address space, swap space
-   on disk) and other factors. There is no way that C-Kermit can know
-   what this limit is, since it varies not only from computer to
-   computer, but also from moment to moment. If resources are exhausted
-   by recursion, C-Kermit simply crashes; there's no way to trap this
-   error. However, you can set a depth limit on S-Expressions:
-
-   SET SEXPRESSION DEPTH-LIMIT number
-          Limits the number of times the S-Expression reader can invoke
-          itself without returning to the given number. The default limit
-          is 1000. This limit applies to S-Expressions embedded within
-          other S-Expressions as well as to S-Expressions that invoke
-          recursive macros. If the limit is exceeded, Kermit prints
-          "?S-Expression depth limit exceeded" and returns to its prompt.
-          More about recursion in [497]Section 9.8.
-
-   You can also test the depth programmatically:
-
-   \v(sdepth)
-          The current S-Expression invocation depth. The depth includes
-          both nesting level and recursion. For example, in:
-          (foo (foo (foo (foo (foo))))), the innermost (foo) is at depth
-          5.
-
-   Help, completion, and syntax checking are not available within an
-   S-Expression. If you type ? within an S-Expression, it says:
-
-  C-Kermit>(? S-Expression ("help sexp" for details)
-
-   As it says, typing "help sexp" will display a brief help text.
-
-   The SHOW SEXPRESSION command displays current SET SEXPRESSION settings
-   and related information.
-
-   [ [498]Top ] [ [499]Contents ] [ [500]C-Kermit Home ] [ [501]Kermit
-   Home ]
-     _________________________________________________________________
-
-  9.4. Summary of Built-in Constants and Operators
-
-   Three constants are built in:
-
-     * PI, whose value is the value of pi (the quotient of circumference
-       of any circle and its diameter, 3.141592653...) to the underlying
-       machine's precision;
-     * T, which always has the value 1, which signifies truth in Kermit
-       logical expressions or S-Expressions;
-     * NIL, which always has the empty value, and can serve as a False
-       truth value.
-
-   These constants are specific to S-Expressions and are not visible
-   outside them. They may not be used as the target of an assignment. So,
-   for example:
-
-  (setq t 0)   Fails
-  assign t 0   Succeeds but this is not the same T!
-
-   E (the base of natural logarithms, 2.7182818184...) is not built in
-   since it is not intrinsic in most Lisp dialects. If you want E to be
-   the base of natural logarithms you can:
-
-  (setq e (exp 1))
-
-   Operators are either symbols (such as "+") or words. Words must be
-   spelled out in full, not abbreviated. Differences of alphabetic case
-   are ignored.
-
-   The most basic operation in S-Expressions is evaluation:
-
-   EVAL [ s-expression or variable or number [ another [ another ... ] ]
-          ]
-          Evaluates its operands and returns the value of the last one
-          evaluated. Examples:
-
-  (eval)                                0
-  (eval 1)                              1
-  (eval a)                              value of a
-  (eval (+ 1 a))                        value of a+1
-  (eval (setq a 1) (setq b (+ a 0.5)))  value of b (= a+0.5)
-
-          You can use "." as a shorthand for EVAL:
-
-  (.)
-  (. 1)
-  (. a)
-  (. (+ 1 a))
-  (. (setq a 1) (setq b (+ a 0.5)))
-
-   Opposite of EVAL is the operator that suppresses evaluation of its
-   operand:
-
-   QUOTE item
-          The value (quote item) is "item". If the item is itself an
-          S-Expression, the result is the S-Expression with the outer
-          parentheses stripped. Examples:
-
-  (quote)                               (illegal)
-  (quote a)                             a
-  (quote hello)                         hello
-  (quote (this is a string))            this is a string
-  (quote this is a string)              (illegal)
-
-          A shorthand notation is also accepted for quoting:
-          'a is equivalent to (quote a). And therefore:
-          '(a b c) is equivalent to (quote (a b c)).
-          More about quoting in [502]Section 9.8.
-
-   STRING item
-          Is a combination of EVAL and QUOTE. It evaluates the item as an
-          S-Expression, and then puts quotes around the result (more
-          about this in [503]Section 9.8).
-
-   The following operators assign values to variables:
-
-   SETQ [ variable [ value [ variable [ value [ ... ] ] ] ] ]
-          Applies to global variables. For each variable given: if a
-          value is not given, the variable is undefined. If a value is
-          given, assigns the value to the variable. The value may be a
-          number, a variable, or anything that resolves to a number
-          including an S-Expression. Returns the value of the last
-          assignment. Examples:
-
-  (setq)             Does nothing, returns NIL.
-  (setq a)           Undefines a, returns NIL.
-  (setq a 1)         Assigns 1 to a, returns 1.
-  (setq a 1 b 2)     Assigns 1 to a, 2 to b, returns 2.
-  (setq a 1 b 2 c)   Assigns 1 to a, 2 to b, undefines c, returns NIL.
-
-   To undefine a variable that is not the final one in the list, give it
-   a value of "()" or NIL:
-
-  (setq a () b 2)    Undefines a, assigns 2 to b, returns 2.
-  (setq a nil b 2)   Ditto.
-
-   Note that a variable can be used right away once it has a value:
-
-  (setq a 1 b a)     Assigns 1 to a, the value of a (1) to b, returns 1.
-
-   The results of SETQ (when used with macro names) can be checked
-   conveniently with SHOW MACRO, e.g:
-
-  show mac a b c
-
-   LET [ variable [ value [ variable [ value [ ... ] ] ] ] ]
-          Like SETQ, but applies to local variables. Note that "local" is
-          used in the Kermit sense, not the Lisp sense; it applies to the
-          current Kermit command level, not to the current S-Expression.
-
-   If you want to use SETQ or LET to assign a value to a backslash
-   variable such as \%a or \&a[2], you must double the backslash:
-
-  (setq \\%a 3)
-  (setq \\%b (+ \%a 1))
-  (setq \\&a[2] (setq (\\%c (+ \%a \%b))))
-
-   In other words:
-
-     * Double the backslash when you want to indicate the variable's
-       NAME;
-     * Don't double the backslash when you want its VALUE.
-
-   See [504]Section 9.6 for a fuller explanation of variable syntax and
-   scope.
-
-   Here's a summary table of arithmetic operators; in the examples, a is
-   2 and b is -1.3:
-
-  Operator  Description                            Example           Result
-  +         Adds all operands (0 or more)          (+ a b)           0.7
-  -         Subtracts all operands (0 or more)     (- 9 5 2 1)       1
-  *         Multiplies all operands (0 or more)    (* a (+ b 1) 3)  -1.80
-  /         Divides all operands (2 or more)       (/ b a 2)        -0.325
-  ^         Raise given number to given power      (^ 3 2)           9
-  ++        Increments variables                   (++ a 1.2)        3.2
-  --        Decrements variables                   (-- a)            1
-  ABS       Absolute value of 1 operand            (abs (* a b 3))   7.8
-  MAX       Maximum of all operands (1 or more)    (max 1 2 3 4)     4
-  MIN       Minimum of all operands (1 or more)    (min 1 2 3 4)     1
-  MOD (%)   Modulus of all operands (1 or more)    (mod 7 4 2)       1
-  FLOAT     Convert an integer to floating-point   (float 1)         1.0
-  TRUNCATE  Integer part of floating-point operand (truncate 3.333)  3
-  CEILING   Ceiling of floating-point operand      (ceiling 1.25)    2
-  FLOOR     Floor of floating-point operand        (floor 1.25)      1
-  ROUND     Operand rounded to nearest integer     (round 1.75)      2
-  SQRT      Square root of 1 operand               (sqrt 2)          1.414..
-  EXP       e (2.71828..) to the given power       (exp -1)          0.367..
-  SIN       Sine of angle-in-radians               (sin (/ pi 2))    1.0
-  COS       Cosine of angle-in-radians             (cos pi)         -1.0
-  TAN       Tangent of angle-in-radians            (tan pi)          0.0
-  LOG       Natural log (base e) of given number   (log 2.7183)      1.000..
-  LOG10     Log base 10 of given number            (log10 1000)      3.0
-
-   The ++ and -- operators are also assignment operators and work just
-   like SETQ and LET in their interpretations of operators and operands,
-   but:
-
-     * Each target variable must already be defined and have a numeric
-       value;
-     * The assignment value is the amount by which to increment or
-       decrement the variable.
-     * If an assignment value is not given, 1 is used.
-
-   If you include more than one variable-value pair in a ++ or --
-   expression, every variable (except, optionally, the last) must be
-   followed by a value. Examples:
-
-  (++ a)                Equivalent to (setq a (+ a 1)) and to (++ a 1)
-  (++ a 2)              Equivalent to (setq a (+ a 2))
-  (-- a (* 2 pi))       Equivalent to (setq a (- a (* 2 pi)))
-  (++ a 1 b 1 c 1 d)    Equivalent to four SETQs incrementing a,b,c,d by 1.
-
-   Another group of operators forms the predicates. These return a "truth
-   value", in which 0 (or NIL) is false, and 1 or any other nonzero
-   number is true.
-
-  Operator  Description                            Example           Result
-  = (or ==) Operands are equal                     (= 1 1.0)         1
-  !=        Operands are not equal                 (!= 1 1.0)        0
-  <         Operands in strictly ascending order   (< 1 2 3)         1
-  <=        Operands in ascending order            (<= 1 1 2 3)      1
-  >         Operands in strictly descending order  (> 3 2 1)         1
-  >=        Operands in descending order           (<= 3 3 2 1)      1
-  AND (&&)  Operands are all true                  (and 1 1 1 1 0)   0
-  OR  (||)  At least one operand is true           (or 1 1 1 1 0)    1
-  XOR       Logical Exclusive OR                   (xor 3 1)         0
-  NOT (!)   Reverses truth value of operand        (not 3)           0
-
-   The Exclusive OR of two values is true if one value is true and the
-   other value is false.
-
-   And another group operates on bits within an integer word:
-
-  Operator  Description                            Example           Result
-  &         Bitwise AND                            (& 7 2)           2
-  |         Bitwise OR                             (| 1 2 3 4)       7
-  #         Bitwise Exclusive OR                   (# 3 1)           2
-  ~         Reverses all bits                      (~ 3)            -4
-
-   These operators coerce their operands to integer by truncation if
-   necessary. The result of bit reversal is hardware dependent.
-
-   The final category of operator works on truth values:
-
-  Operator  Description                            Example           Result
-  IF        Conditional evaluation                 (if (1) 2 3)      2
-
-   IF (predicate) (s1) [ (s2) ]
-          The IF operator is similar to Kermit's IF command. If the
-          predicate is true (i.e. evaluates to a nonzero number), the
-          first S-Expression (s1) is evaluated and its value is returned.
-          Otherwise, if (s2) is given, it is evaluated and its value
-          returned; if (s2) is not given, nothing happens and the NIL
-          (empty) value is returned.
-
-   You can group multiple expressions in the s1 and s2 expressions using
-   EVAL (or "."):
-
-  (if (< a 0) (eval (setq x 0) (setq y 0)) (eval (setq x a) (setq y b)))
-
-   or equivalently:
-
-  (if (< a 0) (. (setq x 0) (setq y 0)) (. (setq x a) (setq y b)))
-
-   Each operator has its own requirement as to number and type of
-   operands. In the following table, "number" means any kind of number --
-   integer or floating-point -- or a variable, function, macro, or
-   S-Expression that returns a number; "vname" means variable name,
-   "fpnumber" means a floating-point number (or anything that resolves to
-   one), and "integer" means integer (or anything that resolves to one).
-   "truthvalue" means anything that resolves to a value of zero or an
-   empty value (which indicates false) or a nonzero value (which
-   indicates true). "any" means any kind of value, including none at all.
-
-  Operator  Number of operands   Type of operands    Returns
-  EVAL  (.) 0 or more            S-Expression        Last value (default NIL)
-  STRING    1                    S-Expression        string
-  QUOTE (') 1                    word                string
-  SETQ      0 or more            vname value pairs   Last value (default NIL)
-  LET       0 or more            vname value pairs   Last value (default NIL)
-  +         0 or more            number              number     (default 0)
-  -         0 or more            number              number     (default 0)
-  *         0 or more            number              number     (see note (1))
-  /         2 or more            number              number
-  ^         2 or more            number              number
-  ++        1 or more            vname value pairs   Result of last increment
-  --        1 or more            vname value pairs   Result of last decrement
-  ABS       1                    number              number
-  MAX       1 or more            number              number
-  MIN       1 or more            number              number
-  MOD (%)   2                    number              number
-  FLOAT     1                    number              fpnumber
-  TRUNCATE  1                    number              integer
-  CEILING   1                    number              integer
-  FLOOR     1                    number              integer
-  ROUND     1                    number              integer
-  SQRT      1                    number              fpnumber
-  EXP       1                    number              fpnumber
-  SIN       1                    number              fpnumber
-  COS       1                    number              fpnumber
-  TAN       1                    number              fpnumber
-  LOG       1                    number              fpnumber
-  LOG10     1                    number              fpnumber
-  = (==)    1 or more            number              truthvalue
-  !=        1 or more            number              truthvalue
-  <         1 or more            number              truthvalue
-  <=        1 or more            number              truthvalue
-  >         1 or more            number              truthvalue
-  >=        1 or more            number              truthvalue
-  AND (&&)  1 or more            truthvalue          truthvalue
-  OR  (||)  1 or more            truthvalue          truthvalue
-  XOR       2                    truthvalue          truthvalue
-  NOT (!)   1                    truthvalue          truthvalue
-  &         1 or more            number (see note 2) integer
-  |         1 or more            number (see note 2) integer
-  #         2                    number (see note 2) integer
-  ~         1                    number (see note 2) integer
-  IF        2 or 3               truthvalue,any,any  any
-
-   Operators that don't require any arguments return the default values
-   shown.
-
-    1. The value of "*", when used as an operator, is initially "1" and
-       the value of the most recent S-Expression thereafter, as in Franz
-       Lisp. This is handy when doing a series of calculations by hand:
-  C-Kermit>(* 13272.42 0.40)
-   5308.968
-  C-Kermit>(/ * 2)
-   2654.4840
-  C-Kermit>
-    2. The bitwise operators coerce their operands to integer by
-       truncation.
-
-   [ [505]Top ] [ [506]Contents ] [ [507]C-Kermit Home ] [ [508]Kermit
-   Home ]
-     _________________________________________________________________
-
-  9.5. Variables
-
-   As noted elsewhere in this discussion, all backslash items (variables
-   such as \%a, macro parameters such as \%1, array elements such as
-   \&a[\%i], built-in variables such as \v(ndate), built-in functions
-   such as \fjoin(), macro names enclosed in \m(), \s(), or \:(), etc)
-   are evaluated at "top level" before the S-Expression is sent to the
-   S-Expression reader. To use a backslash variable as the target of an
-   assignment (e.g. by SETQ, LET, ++, or --), you must double the
-   backslash, e.g. (setq \\%r 1234). This is discussed at greater length
-   in the next section.
-
-   Thus S-Expression reader generally deals only with macro names (not
-   backslash items) as variables. It is important to understand how the
-   reader handles macro names. There are fundamentally two kinds of
-   S-Expressions: those that contain a single element, such as:
-
-  (foo)
-
-   and those that contain more than one element:
-
-  (foo a b c)
-
-   If an S-Expression contains only one element, and it is the name of a
-   macro, the macro's definition is examined. If the definition is a
-   number (integer or floating-point, positive or negative), then this
-   becomes the value of the expression. If the definition starts with '
-   (apostrophe), then the quoted word or string is the value of the
-   expression (explained in [509]Section 9.8). Otherwise, the macro is
-   assumed to be composed of Kermit commands (possibly including
-   S-Expressions), which are executed. If the macro has a RETURN value,
-   or it executes an S-Expression as its last command, the result becomes
-   the value of the S-Expression; otherwise the result is empty.
-
-   For S-Expressions that contain more than one element, and the first
-   element is the name of a macro, then this macro is executed with the
-   arguments that are given, after the arguments are evaluated by the
-   S-Expression reader. Likewise, If the first element is a built-in
-   operator, then it is applied to the operands after they are evaluated.
-   In both cases, each operand is fed to the S-Expression reader
-   recursively for evaluation. If an operand is a number or a quoted
-   string, it is used as-is. But if it's a macro name, this degenerates
-   into the first case, and the previous paragraph applies.
-
-   Examples:
-
-  define foo 123
-  (foo)                                Result: 123
-  define foo 'abc
-  (foo)                                Result: abc
-  define foo '(one two three)
-  (foo)                                Result: one two three
-  define foo return \frandom(1000)
-  (foo)                                Result: 713 (or other number)
-  define foo (+ a b)
-  (foo)                                Result: The sum of a and b
-
-   A more difficult example:
-
-  define foo abc
-  (foo)                                Result: ???
-
-   The result in the last example depends on the definition of abc:
-
-     * If it has no definition, an error occurs; otherwise:
-     * If the definition is an S-Expression, the result is the
-       S-Expression's value; otherwise:
-     * If the definition consists of Kermit commands, they are executed.
-       But in this case "(foo)" produces the empty result, because it
-       doesn't RETURN anything.
-
-   The use of macros as S-Expression operators is described in
-   [510]Section 9.8.
-
-   [ [511]Top ] [ [512]Contents ] [ [513]C-Kermit Home ] [ [514]Kermit
-   Home ]
-     _________________________________________________________________
-
-  9.6. Assignments and Scope
-
-   The assignment operators SETQ and LET apply to global and local
-   variables, respectively. SETQ and LET are standard Lisp operators
-   adapted to Kermit scoping rules. When the operands are numeric or
-   arithmetic, SETQ is equivalent to Kermit's EVALUATE command:
-
-  (setq a (+ 1 2))
-  evaluate a 1 + 2
-
-   When the operand is a string, SETQ is equivalent to DEFINE:
-
-  (setq a '(this is a string))
-  define a this is a string
-
-   In the first case, both statements create a macro named "a" with a
-   value of 3. But in neither case is the macro "a" necessarily global.
-   If either of these commands executes in an environment (i.e. macro
-   invocation level) where a "local a" command has been given, the "a"
-   macro is global to that environment, but is not visible outside it.
-
-   LET is equivalent to the Kermit LOCAL command, followed by the
-   corresponding EVALUATE:
-
-  (let a (+ 1 2))
-
-   is equivalent to:
-
-  local a
-  evaluate a 1 + 2
-
-   Again, "local" in this context applies to the Kermit macro invocation
-   stack, not to the S-Expression nesting level. To illustrate, recall
-   our "newarea" macro:
-
-def newarea {
-    (let a \%1 b \%2 c \%3)
-    (let s (/ (+ a b c) 2.0))
-    (sqrt (* s (- s a) (- s b) (- s c)))
-}
-
-   Because SETQ and LET expressions return a value, they can be placed
-   within a larger S-Expression. In this case we can replace the first
-   reference to the "s" variable by its defining expression:
-
-def newarea {
-    (let a \%1 b \%2 c \%3)
-    (sqrt (* (let s (/ (+ a b c) 2.0)) (- s a) (- s b) (- s c)))
-}
-
-   This would not work if LET were local to the S-Expression, but it
-   works nicely in the context of Kermit macros. The previous definition
-   is equivalent to:
-
-def newarea {
-    local a b c s
-    (setq a \%1 b \%2 c \%3)
-    (sqrt (* (setq s (/ (+ a b c) 2.0)) (- s a) (- s b) (- s c)))
-}
-
-   In both cases, the variables a, b, c, and s are local to the "newarea"
-   macro, and global within it.
-
-   Multiple assignments can be handled in several ways. Here is the
-   obvious way to initialize a series of variables to the same value:
-
-  (setq a 0)
-  (setq b 0)
-  (setq c 0)
-  (setq s 0)
-
-   Here is a more compact and efficient way of doing the same thing:
-
-  (setq a 0 b 0 c 0 s 0)
-
-   However, in case the value was more complex, it's better to put only
-   one copy of it in the S-Expression; in this case we rely on the fact
-   that SETQ returns the value of its last assignment:
-
-  (setq a (setq b (setq c (setq s (* x (^ y 2))))))
-
-   Similarly, to set a series of variables to x, x+1, x+2, ...
-
-  (setq c (+ (setq b (+ (setq a (+ (setq s x) 1)) 1)) 1))
-
-   In the last example, you can see why "last" does not always correspond
-   to "rightmost" (the leftmost variable "c" is assigned last).
-
-   If you are working with backslash variables like \%a or array elements
-   like \&a[1], remember two rules:
-    1. Don't put spaces inside array brackets.
-    2. You must double the backslash when using SETQ, LET, ++, or -- to
-       assign a value to a backslash variable.
-
-   Examples of assigning to a backslash variable:
-
-  (setq x 1)
-  (setq \\%a 0)
-  (setq \\&a[x+1] 1)
-  (++ \\%x)
-  (-- \\&a[x+2])
-
-   Examples of referring to a backslash variable's value:
-
-  (setq a (+ \%a 1))
-  (setq b (+ \%a \&a[1]))
-  (++ a \%x)
-  (-- b \&a[1])
-
-   The special notation is required because all backslashed items (\%x
-   variables, array elements, built-in \v(xxx) variables, and \fxxx()
-   function invocations) are evaluated in a single pass BEFORE the
-   S-Expression is executed; any other approach would result in
-   unacceptable performance. So, for example, in:
-
-  declare \&a[] = 1 2 3
-  define \%x 4
-  define \%y 0
-  (setq \\%y (+ \%x \&a[1]))
-
-   the S-Expression becomes:
-
-  (setq \%y (+ 4 1))
-
-   before it is sent to the S-Expression evaluator. If the backslash had
-   not been doubled on the assignment target, the result would have been:
-
-  (setq 0 (+ 4 1))
-
-   which is illegal because you can't assign a value to a number.
-   Conversely, if backslashes were doubled on right-hand-side values:
-
-  (setq \\%y (+ \\%x \\&a[1])
-
-   this too, would give an error (not numeric - "\%x").
-
-   If you omit the double backslash in the assignment target, the result
-   depends on whether the variable already has a value:
-
-  (setq \%a (* 3 3))
-
-   If \%a has a non-numeric single-word value, then this becomes the name
-   of the variable that is assigned by SETQ. To illustrate:
-
-  define \%a foo
-  echo \%a
-  foo
-  (setq \%a (* 3 3))
-  echo \%a
-  foo
-  show macro foo
-  foo = 9
-
-   If \%a has no value, a numeric value, or a multiword value, an
-   "invalid assignment" error occurs.
-
-   [ [515]Top ] [ [516]Contents ] [ [517]C-Kermit Home ] [ [518]Kermit
-   Home ]
-     _________________________________________________________________
-
-  9.7. Conditional Expressions
-
-   The IF operator provides a compact form of decision-making within
-   S-Expressions. An IF expression can stand wherever a number might
-   stand, as long is it returns a number. Here's a quick way to obtain
-   the average value of all the elements in an array that contains only
-   numbers:
-
-  (/ (+ \fjoin(&a)) (float \fdim(&a)))
-
-   This results in a "Divide by zero" error if the array is empty. If you
-   want to define the average value of an empty array to be 0 instead of
-   getting an error, you can use IF to check the array size:
-
-  (if \fdim(&a) (/ (+ \fjoin(&a)) (float \fdim(&a))) 0)
-
-   or equivalently:
-
-  (if (not \fdim(&a)) 0 (/ (+ \fjoin(&a)) (float \fdim(&a))))
-
-   Of course, IF can fit anywhere else into an S-Expression:
-
-  (setq a (+ b (if (< c 0) 0 c)))
-
-   and the IF expression can be as complex as you like:
-
-  (setq a (+ b (if (and (or (> x 0) (> y 0)) (< c 0) (> d 1) (!= e 0)) 1 0)))
-
-   and the "then" and "else" parts can contain multiple S-Expressions
-   enclosed within (EVAL ...):
-
-  (if x (eval (...) (...) (...)) (eval (...) (...) (...)))
-
-   AND and OR operators are guaranteed to "short circuit". If any operand
-   of AND is false, none of the subsequent operands is evaluated;
-   likewise, if an OR operand is true, no further operands are evaluated.
-
-   Bear in mind that the S-Expression IF is not the same as Kermit IF;
-   the condition is only allowed to be an S-Expression or a variable or
-   number, not the whole list of possibilities you see when you type "if
-   ?" at the C-Kermit> prompt. But keep reading...
-
-   [ [519]Top ] [ [520]Contents ] [ [521]C-Kermit Home ] [ [522]Kermit
-   Home ]
-     _________________________________________________________________
-
-  9.8. Extensibility
-
-   To extend the capabilities of S-Expressions, you can use Kermit macro
-   names as operators, with the following limitations:
-
-     * The macro must not have the same name as a built-in operator.
-     * You must use the full macro name, not an abbreviation.
-
-   And with the following enhancement:
-
-     * If the last statement executed by the macro is an S-Expression,
-       its value is returned automatically. In other words:
-
-  define bump (++ \%1)
-
-   is equivalent to:
-
-  define bump return \fsexpression(++ \%1)
-
-   Here's an example in which we define a FIBONACCI operator that returns
-   the nth element, n >= 0, of the Fibonacci series, 0 1 1 2 3 5 8 13 21
-   34 55, . . ., in which the first element is 0, the second is 1, and
-   each subsequent element is the sum of the two before it. This series
-   was devised by Leonardo Pisano, Filius Bonacci (Fibonacci for short)
-   in 1202 to describe how fast rabbits can breed, and also forms the
-   basis for the Golden Mean, the branching behavior of plants, the
-   spiral of a nautilus shell, etc. (Thanks to [523]Dat Thuc Nguyen for
-   December 2003 corrections to this section!)
-
-   We can write a FIBONACCI function as a macro easily with
-   S-Expressions:
-
-  define FIBONACCI {
-    (if (== \%1 0) 0
-        (if (== \%1 1) 1 (+ (fibonacci (- \%1 2)) (fibonacci (- \%1 1)))))
-  }
-
-   You can read this as:
-
-     If the argument (\%1) is 0, return a result of 0; if it is 1,
-     return 1; otherwise:
-     return the sum of fibonacci(argument - 2) and fibonacci(argument -
-     1)
-
-   Note that a RETURN statement is not needed, since S-Expressions
-   automatically set the return value of their containing macros.
-
-   For comparison, here's how it would be coded without S-Expressions:
-
-  define FIBONACCI {
-      if == \%1 0 {
-          return 0
-      } else if == \%1 1 {
-          return 1
-      } else {
-          return \feval(\fexec(fibonacci \feval(\%1-2)) -
-               + \fexec(fibonacci \feval(\%1-1)))
-      }
-  }
-
-   Now we can use the FIBONACCI function (whichever way you write it)
-   just as if it were a built-in operator:
-
-  (fibonacci 6)
-
-   Or:
-
-  (setq a 10)
-  (fibonacci a)
-
-   Within S-Expressions only (not outside them), S-Expressions themselves
-   can be used as macro arguments:
-
-  (setq a 2 b 4)
-  (setq x (fibonacci (* a b )))
-
-   The value of the S-Expression (in this case "8"), and not the
-   S-Expression itself, is sent to the macro.
-
-   Your macro is responsible for argument validation and error handling.
-   A robust Fibonacci macro would be more like this:
-
-  define FIBONACCI {
-      if < \v(argc) 2 end 1 ?\%0: Missing argument
-      if > \v(argc) 2 end 1 ?\%0: Too many arguments
-      if not integer \%1 end 1 ?\%0: Integers only
-      if < \%1 1 end 1 ?\%0: Argument out of range
-      (if (== \%1 0) 0
-         (if (== \%1 1) 1 (+ (fibonacci (- \%1 2)) (fibonacci (- \%1 1)))))
-  }
-
-   Recall that "END nonzero-number [ message ]" causes a macro invocation
-   to fail. When the macro is the operator in an S-Expression, this makes
-   the S-Expression fail too. Also note that our Fibonacci macro is just
-   an illustration, not a practical example. Since it is recursive (calls
-   itself), it won't work for large arguments because the call stack can
-   exceed available memory. See [524]Section 9.9.2 for a practical
-   alternative.
-
-   Kermit macros, when used as S-Expression operators, can do anything at
-   all except initiate file transfers: they can print messages on the
-   screen, read and write files, interact with the user, and so on. For
-   example, here's a macro ASKME that asks you to enter a number, makes
-   sure that you did, and then returns its value for use in the
-   S-Expression:
-
-  define ASKME {
-      local \%n
-      while true {
-          ask \%n { Number: }
-          if not def \%n continue
-          if not numeric \%n {
-              echo Not numeric - "\%n"
-              continue
-          }
-          break
-      }
-      return \%n
-  }
-  (setq a (* 2 (askme))) ; Get number from user, double it, assign result to a.
-
-   Here's a macro you can use to validate that a number is in a given
-   range:
-
-  define inrange {
-      if != \v(argc) 4 end 1 ?\%0: Wrong number of arguments
-      if ( < \%1 \%2 || > \%1 \%3 ) return 0
-      return 1
-  }
-
-   The first argument is the number to be checked, the second is the
-   minimum acceptable value, the third is the maximum. You can use this
-   (for example) in IF conditions:
-
-  define yes echo \%1 IS OK
-  define no echo \%1 IS NOT OK
-
-  (setq a -1 b 999)
-  (if (inrange a 0 100) (yes a) (no a))
-  (if (inrange b -1000 +1000) (yes b) (no b))
-
-   This is just an illustration, of course; there's already a built-in
-   operator to let you do range checking without help from macros:
-
-  (if (<= 0 a 100) (yes a) (no a))
-  (if (<= -1000 b +1000) (yes b) (no b))
-
-   To send string parameters to a macro, some kind of quoting is required
-   to tell the S-Expression parser to take a given "word" literally
-   rather than replacing it by its value. For this we use the Lisp QUOTE
-   operator:
-
-  define length return \flength(\%1)
-  (length (quote abcdefghijklmnopqrstuvwxyz))
-  26
-
-   This causes the string "abcdefghijklmnopqrstuvwxyz" to be sent
-   literally to the LENGTH macro. Kermit, like Lisp, also offers a
-   shortcut for QUOTE, that lets us quote a word by prefixing it with a
-   single quote (') character, also called apostophe (ASCII 39):
-
-  (length 'abcdefghijklmnopqrstuvwxyz)
-  26
-
-   The two forms are equivalent.
-
-   How the macro treats its arguments is up to the macro. In the example
-   above, the argument is treated as a literal string. However, it can
-   also be treated as a variable name:
-
-  define string This is a string
-  define length return \flength(\m(\%1))
-  (length 'string)
-  16
-
-   Note the construct \m(\%1). This means "the value of the macro whose
-   name is the value of
-   \%1". The value of \%1 in this case is the word "string", and the
-   value of the macro whose name is "string" is "This is a string".
-
-   What if the macro takes multiple arguments, or a variable number of
-   them? Here's a simple macro that prints a phrase that includes its
-   arguments:
-
-  define complain echo It's too \%*!
-
-   (Recall that \%* means "all arguments".)
-
-   It can be called in the traditional way:
-
-  complain hot                       Result: "It's too hot!"
-  complain cold and wet              Result: "It's too cold and wet!"
-
-   Or from an S-Expression if you quote the arguments:
-
-  (complain 'hot)                    Result: "It's too hot!"
-  (complain 'cold 'and 'wet)         Result: "It's too cold and wet!"
-
-   To group multiple words into a single argument, use parentheses:
-
-  (complain (quote (cold and wet)))  Result: "It's too cold and wet!"
-  (complain '(cold and wet))         Result: "It's too cold and wet!"
-
-   Note the difference:
-
-  (complain 'cold 'and 'wet)         Three arguments
-  (complain '(cold and wet))         One argument
-
-   Since the COMPLAIN macro uses \%* to refer to all its arguments, no
-   matter how many, it doesn't care which form you use. But it makes a
-   difference in cases where the macro refers to its arguments
-   individually.
-
-   To illustrate, let's consider a macro that receives the name of a
-   macro and its argument list and executes it with its arguments,
-   without knowing how many arguments there are. The following LOOP macro
-   is used to execute the given macro with the given argument list the
-   requested number of times:
-
-  def loop { local i, for i 1 \%1 1 do \%2 \%3 }
-
-   Within the LOOP macro, the first argument (\%1) is the loop count, \%2
-   is the macro name, and \%3 is the argument list. When the LOOP macro
-   is invoked traditionally like this:
-
-  loop 3 complain hot
-
-   it prints "It's too hot!" three times. To invoke it from an
-   S-Expression, you must quote both the macro name as well as the
-   argument, since in this case the macro name itself is an argument:
-
-  (loop 3 'complain 'hot)
-
-   Now what if you need to send different or variable numbers of
-   arguments to the LOOP macro? The LOOP macro can handle it already,
-   provided you group the arguments into LOOP's third argument (\%3). In
-   Kermit syntax, without grouping:
-
-  loop 3 complain cold and wet
-
-   prints "It's too cold!" three times ("and wet" is lost); but with
-   grouping (either of the following two forms):
-
-  loop 3 complain {cold and wet}
-  loop 3 complain "cold and wet"
-
-   the LOOP macro prints "It's too cold and wet!" three times as desired.
-
-   To do the same thing in an S-Expression, just use the Lisp forms of
-   quoting instead of the Kermit forms; the following two are equivalent:
-
-  (loop 3 'complain (quote (cold and wet)))
-  (loop 3 'complain '(cold and wet))
-
-   Here's a similar example in which we write a macro that shows both the
-   name and the value of one or more other macros, whose names are given
-   as arguments (similar to "show macro"):
-
-  define display {
-      local \%i
-      for \%i 1 \v(argc)-1 1 {
-          echo \&_[\%i] = \m(\&_[\%i])
-      }
-  }
-
-   (Recall that \&_[] is the macro's argument vector array, equivalent to
-   \%1, \%2, ...) The DISPLAY macro can be used in S-Expressions like
-   this:
-
-  (setq a 1 b 2 c 3)
-  (display 'a 'b 'c 'd)
-
-   which prints:
-
-  a = 1
-  b = 2
-  c = 3
-  d =
-
-   The names must be quoted to prevent their evaluation before they are
-   sent to the macro. This ability to pass variables "by name" to macros,
-   rather than by value, lets you write macros that change the values of
-   argument variables. For example, here's a macro that doubles the value
-   of its argument variable:
-
-  define double (++ \%1 \%1)
-
-   which you can call like this:
-
-  (setq a 12)
-  (double 'a)
-
-   In the macro, \%1 is replace by the variable name "a"; "(++ a a)" adds
-   "a" to itself, and sets the value of "a" to the result.
-
-   There are no built-in operators other than QUOTE, ', and STRING for
-   handling strings in S-Expressions, but using just these, plus macros
-   that use Kermit's regular string-handling features, you can easily
-   extend S-Expressions to do string manipulation:
-
-  define len return \flen(\%1)               Returns length of argument string
-  define cap return \fupper(\%1)             Uppercase argument string
-  define rev return \freverse(\%1)           Reverses argument string
-  define sub return \fsubstr(\%1,\%2,\%3)    Returns substring of arg string
-
-  (len '(this is a string))                  Result: 16
-  (rev '(this is a string))                  Result: gnirts a si siht
-  (rev (cap '(this is a string)))            Result: GNIRTS A SI SIHT
-  (sub (rev (cap '(this is a string))) 5 9)  Result: TS A SI S
-
-   You can assign a string to a macro name as follows:
-
-  (setq foo '(this is a string))
-  (setq foo (quote (this is a string)))
-
-   The two are exactly equivalent. In both cases, the macro "foo" has the
-   value:
-
-  '(this is a string)
-
-   so when it is retrieved it can be identified as a string rather than a
-   number or commands to be executed. Thus:
-
-  (setq foo (quote (this is a string)))
-  show macro foo
-  foo = '(this is a string)
-  (foo)
-  this is a string
-
-   Note the different results for "show macro foo" and "(foo)". The
-   former shows the internal definition; the latter evaluates the
-   variable, which removes the quoting. And perhaps more important, note
-   that if the apostrophe and surrounding parentheses were not stored as
-   part of the definition, (foo) would try to execute "this is a string"
-   as a command.
-
-   Given the assignment above, the following work as expected:
-
-  (len foo)                                  Result: 16
-  (rev foo)                                  Result: gnirts a si siht
-  (rev (cap foo))                            Result: GNIRTS A SI SIHT
-  (sub (rev (cap foo)) 5 8)                  Result: TS A SI S
-
-   Note that, unlike built-in S-Expression operators that return numbers
-   or truth values, these operators return strings. If you want to assign
-   their return values to other variables, you can do so:
-
-  (setq bar (rev (cap foo)))                 Result: GNIRTS A SI SIHT
-
-   But now the S-Expression processor doesn't know the value of "bar" is
-   supposed to be a string, rather than a macro to execute. For this you
-   need one final special operator, STRING. The STRING operator takes an
-   S-Expression as an operand, evaluates it, and then returns its value
-   enclosed in '(), so you can use the value as a string is subsequent
-   S-Expressions. Use STRING for referencing macros that return strings:
-
-  (setq bar (string (rev (cap foo))))        Result: '(GNIRTS A SI SIHT)
-
-   STRING is like QUOTE, except that it evaluates its operand before
-   applying the quoting, rather than taking the operand literally.
-
-   To reference backslash variables or functions that return string
-   values, you must use the regular quoting mechanisms:
-
-  (setq time '(\v(time)))
-  (setq date '(\v(date)))
-  assign \%r this is a string
-  (setq s1 '(\%r))
-
-   That's because backslash items are evaluated BEFORE the S-Expression
-   parser ever sees them, and the values of \v(time) and so on are not
-   valid S-Expressions, so STRING won't like them.
-
-   Finally a brief word on the touchy topic of quoting. Suppose you want
-   to include (say) literal parentheses in a string that will later be
-   processed by the S-Expression reader (or \fsplit() or \fword()).
-   Normally, you can't do this because parentheses are meaningful in
-   these contexts. To defeat the normal parsing rules, you can quote the
-   parentheses with backslash. However, due to the many levels of string
-   processing involved, a surprisingly large amount of backslashes might
-   be required, for example:
-
-  (setq s '(a b (c d) \\\\\\\\\\\\\\\\(e f (g h) x\\\\\\\\\\\\\\\\) j k))
-
-   This is nearly impossible to explain(*). Instead, just remember two
-   points:
-
-     * In situations like this, it's better to use DEFINE to create the
-       string, rather than SETQ. The example above requires only double
-       backslashes when DEFINE is used:
-  define s '(a b (c d) \\(e f (g h) x\\) j k)
-     * The level of quoting depends on how many levels of evaluation the
-       string must pass through, which is not always obvious. However,
-       the number of backslashes required in any given situation is
-       always a power of 2. So if 1 doesn't work, try 2; if 2 doesn't
-       work, try 4; if 4 doesn't work, try 8, 16, 32, and so on.
-
-   Considerations like this apply in any scripting language (shell, Tcl,
-   Perl, Python, etc). The situation is known as "Quoting Hell".
-
-   (*) If you really want an explanation, here it is:
-
-     * Every SEXP has its backslash items evaluated in a single pass at
-       top level before being passed to the SEXP reader, so \%1,
-       \v(ftime), etc, can be evaluated up front, freeing the SEXP reader
-       of having to know about such things, which in turn makes it much
-       more efficient. Therefore one level of quoting is lost right away,
-       and therefore you must double each backslash that is to be used as
-       a quote.
-     * When the SEXP reader sees '\', it treats it as a quote; discards
-       it and keeps the next character. Thus '\\' becomes '\'. This would
-       be the end of it, except that:
-     * The SEXP reader must call itself recursively on its operands, so
-       we must double any quotes in the operands: 2^2 = 4.
-     * If the result is to be passed as an argument to a macro, the
-       backslashes must again be doubled, because the macro processor
-       evaluates the arguments before sending them to the macro: 2^3 = 8.
-     * If the macro itself is to see the quotes, rather than just the
-       result of the quoting, the quotes must be doubled again: 2^4 = 16.
-
-   Moral: To create string constants in which grouping characters must be
-   quoted, use DEFINE rather than SETQ.
-
-   [ [525]Top ] [ [526]Contents ] [ [527]C-Kermit Home ] [ [528]Kermit
-   Home ]
-     _________________________________________________________________
-
-  9.9. Examples
-
-    9.9.1. Statistics
-
-   The following program computes statistics -- means, maxima, mimima,
-   variance, standard deviation, and correlation -- from data stored in
-   parallel arrays, \&x[] and \&y[], which can contain any mixture of
-   integer and floating-point numbers: positive, negative, or zero. Array
-   setup and validation are not shown. Except for the traditional FOR
-   loop and printing the results at the end, the entire computation is
-   done with S-Expressions:
-
-; Initialize sums, maxima, minima, and number of elements
-
-  (setq xsum 0 ysum 0 xsum2 0 ysum2 0 xysum 0)
-  (setq xmin (setq xmax \&x[1]) ymin (setq ymax \&y[1]))
-  (setq n \fdim(&x))
-
-; Loop through elements and accumulate sums, maxima, and minima
-
-  for i 1 n 1 {
-      (setq x \&x[i] y \&y[i])                    ; Notational convenience
-      (setq xmax (max xmax x) ymax (max ymax y))  ; X and Y maxima
-      (setq xmin (min xmin x) ymin (min ymin y))  ; X and Y minima
-      (++ xsum x ysum y)                          ; X and Y sums
-      (++ xsum2 (^ x 2) ysum2 (^ y 2))            ; Sum of X and Y squares
-      (++ xysum (* x y))                          ; Sum of XY products
-  }
-
-; Calculate results
-
-  (setq xmean (/ xsum n) ymean (/ ysum n))        ; Mean X and Y
-  (setq xss (- xsum2 (/ (^ xsum 2) n)))           ; Intermediate values
-  (setq yss (- ysum2 (/ (^ ysum 2) n)))
-  (setq xyss (- xysum (/ (* xsum ysum) n)))
-  (setq xvar (/ xss n) yvar (/ yss n))            ; X and Y variance
-  (setq sdx (sqrt xvar) sdy (sqrt yvar))          ; Std deviation in X and Y
-  (setq tmp (* xss yss))
-  (setq cc (if tmp (/ xyss (sqrt tmp)) 1.0))      ; Correlation coefficient
-  show macro xmean ymean xvar yvar sdx sdy cc     ; Print the results
-
-   The final "if tmp" check accounts for the possibility that both arrays
-   contain all 0's. Results can also be printed with "echo CC = \m(cc)",
-   or any other desired way. Interestingly, if we had not needed the sum
-   of the squares and products, we could have obtained the sums, maxima,
-   and minima of the X's and Y's without a loop like this:
-
-  (setq xsum (+ \fjoin(&x)) ysum (+ \fjoin(&y)))
-  (setq xmax (max \fjoin(&x)) ymax (max \fjoin(&y)))
-  (setq xmin (min \fjoin(&x)) ymin (min \fjoin(&y)))
-
-   Any Kermit function that returns numbers or lists of numbers can be
-   included in an S-Expression as an operand.
-     _________________________________________________________________
-
-    9.9.2. Practical Fibonacci Series
-
-   The recursive Fibonacci example given previously is simple and
-   elegant, but not very useful since it causes memory occupation to grow
-   each time it calls itself, until eventually both physical memory and
-   disk swap space are filled and the program crashes. Even for small
-   arguments, like 17, execution time can be prohibitive:
-
-  (setq t1 \v(ftime))
-  (setq result (fibonacci 17))
-  (setq t2 (- \v(ftime) t1))
-  echo FIBONACCI(17) = \m(result): TIME = \ffpround(t2,3)
-
-   prints (on a certain rather slow computer):
-
-  FIBONACCI(17) = 1597: TIME = 5.861
-
-   Any recursive function can be recoded iteratively. The result is not
-   as pretty, but execution is far less expensive:
-
-    define FIBITER {
-        (if (== \%3 0) (\%2) (fibiter (+ \%1 \%2) \%1 (- \%3 1)))
-    }
-    define FIBONACCI {
-        (fibiter 1 0 \%1)
-    }
-
-   Here's the result on the same computer for the same argument of 17:
-
-  FIBONACCI(17) = 1597: TIME = 0.015
-
-   (47 times faster.) Execution time increases proportionally to the size
-   of the argument in the iterative case, whereas in the recursive case
-   it goes up geometrically, quickly reaching infinity.
-
-   [ [529]Top ] [ [530]Contents ] [ [531]C-Kermit Home ] [ [532]Kermit
-   Home ]
-     _________________________________________________________________
-
-  9.10. Differences from Algebraic Notation
-
-   In C-Kermit:
-
-     * Algebraic notation uses infix operators and normal rules of
-       operator precedence, with parentheses used to force exceptions to
-       the rules; many operations can be included in an expression.
-       S-Expressions use prefix operators with no intrinsic precedence;
-       each operation is enclosed in parentheses, and the arrangement of
-       parentheses determines precedence.
-     * Algebraic infix operators require two operands; S-Expression
-       prefix operators can accept a variable number of operands.
-     * You can use algebraic notation anywhere that C-Kermit accepts a
-       number, e.g. "echo \&a[((1+1)*2-1]", but you can use S-Expressions
-       only as top-level commands. You can, however, use either algebraic
-       or S-Expressions anywhere at all by enclosing them in \fevaluate()
-       or \fsexpression(), respectively.
-     * You can use any mixture of integer and floating-point numbers in
-       S-Expressions, but only integers are permitted in algebraic
-       expressions. Outside of S-Expressions, floating point arithmetic
-       is supported only by \ffp...() function calls.
-     * Operators and operands in S-Expressions must be separated by
-       spaces, e.g. "(+ a b)". Spaces are not required in algebraic
-       expressions: "((a+b)*c)".
-     * When assigning values to backslash variables (such as \%x or
-       \&a[2]) using SETQ or LET, you must double the backslash.
-
-   [ [533]Top ] [ [534]Contents ] [ [535]C-Kermit Home ] [ [536]Kermit
-   Home ]
-     _________________________________________________________________
-
-  9.11. Differences from Lisp
-
-     * Kermit has a lot of built-in operators not found in Lisp: ++, ^,
-       etc.
-     * Most dialects of real Lisp do not allow S-Expressions that don't
-       start with an operator, for example:
-  (a)
-       This expression can cause an error in Lisp (even if "a" has a
-       value), but is acceptable in Kermit, where it returns the value of
-       the variable "a". Similarly, (1) returns the value "1".
-     * In real Lisp, EVAL requires exactly one operand. In Kermit, it can
-       have 0, 1, 2, or more operands. It returns the value of the last
-       operand evaluated.
-     * Real Lisp SETQ and LET usually require an even number of operands.
-       Kermit allows an odd number, in which case the last (or only)
-       variable is undefined (i.e. deleted, destroyed).
-     * Kermit does not support ratios such as "7/8". Some Lisp dialects
-       accept ratios as numbers, and generate ratios when told to divide
-       two integers whose quotient is not a whole number; e.g. in Common
-       Lisp:
-  [13] USER(37): (/ (+ 1 2 3 4) 3)
-  10/3
-  [13] USER(38):
-     * The result of (/ 10 3) is 3.333.... Some Lisp dialects truncate
-       the result to 3 since both operands are integers, some don't; some
-       give the result as a ratio. C-Kermit always gives a floating point
-       result when there is a fractional part. If you want an integer
-       result, you can use TRUNCATE, FLOOR, or CEILING, e.g. (truncate (/
-       10 3)).
-     * There is currently no "bignum" support. Large numbers can be used
-       and large results generated, but (as noted in [537]Section 9.2)
-       they are accurate only to the precision of the underlying machine.
-       \v(math_precision) gives the machine precision as a number of
-       decimal digits, e.g. 16.
-     * Scientific notation for floating-point numbers is not supported.
-       If the magnitude of a number is greater than the precision of the
-       underlying hardware, the less-significant digits are shown but
-       their values are meaningless. If it the number is too small to be
-       represented internally, it is shown as "0.0".
-     * Many Lisp features are omitted: List processing (CAR, CDR, etc),
-       DEFUN, Lisp-specific control structures, and so on.
-
-   [ [538]Top ] [ [539]Contents ] [ [540]C-Kermit Home ] [ [541]Kermit
-   Home ]
-  __________________________________________________________________________
-
-10. FILE TRANSFER
-
-   New commands and switches:
-
-   SET TRANSFER REPORT { OFF, ON }
-          Enables or disables the (new) one-line message printed by
-          Kermit after a remote-mode file transfer to indicate the source
-          and destination file, complete with path, to let you know where
-          the file went.
-
-   SEND /TYPE:{TEXT,BINARY}
-          Sends only files of the given type (see [542]Section 4).
-
-   SEND /NOFOLLOWLINKS:
-          (UNIX only) Skip over symbolic links rather than following them
-          (default). This applies to wildcard and/or recursive SENDs; if
-          a single filename is given, and it happens to be a symbolic
-          link, the file it points to is sent.
-
-   SEND /FOLLOWLINKS:
-          (UNIX only) Follow (resolve) symbolic links. Watch out for
-          circular links, endless loops, etc.
-
-   SET SEND I-PACKETS { OFF, ON }
-          When sending commands to a Kermit server, this tells whether
-          command packets should be preceded by an I (information)
-          packet, which is used to synchronize parameters prior to
-          executing the command. Normally ON. The only reason to set this
-          OFF is for communicating with buggy Kermit servers that
-          misbehave when an I packet is sent to them. There is also a SET
-          RECEIVE I-PACKETS command, but presently it has no effect.
-
-   SET TRANSFER MESSAGE [ text ]
-          Sets an initial message to be shown in the Last Message field
-          of the fullscreen file-transfer display.
-
-   SET TRANSFER TRANSLATION { ON, OFF }
-          Inhibits or re-enables text-file transfer character-set
-          translation globally.
-
-   { SEND, MSEND, GET, RECEIVE } /TRANSPARENT
-          Inhibits character-set translation for this transfer only.
-
-   { GET, RECEIVE } /PIPES:{ON,OFF}
-          Overrides global TRANSFER PIPES setting for this transfer only;
-          ON allows incoming files with names like "!tar xf -" to be
-          opened as pipelines rather than regular files.
-
-   The following new "hot keys" are available when Kermit's file-transfer
-   display is visible:
-
-     D: Turn on debugging, open "debug.log" if not already open.
-     d: Turn off debugging but leave log open (if it was open).
-     T: Turn on debug-log timestamps.
-     t: Turn off debug-log timestamps.
-
-   Other improvements:
-     * SET FILE DOWNLOAD-DIRECTORY now works for external protocols (e.g.
-       sz/rz) too.
-     * Improved automatic per-file text/binary switching, described in
-       [543]Section 4.
-     * When sending a file group (e.g. "send *.*"), failure to open a
-       file is no longer fatal; now C-Kermit simply goes ahead to the
-       next file.
-     * Transaction log entries are now made for external protocols too.
-
-   [ [544]Top ] [ [545]Contents ] [ [546]C-Kermit Home ] [ [547]Kermit
-   Home ]
-  __________________________________________________________________________
-
-11. MODEMS AND DIALING
-
-   In C-Kermit 8.0, the default modem type for dialing has changed from
-   NONE (= DIRECT, meaning no modem) to GENERIC. This change should have
-   no impact on direct connections. For dialing, it means that, unless
-   you SET MODEM TYPE to a specific type, such as USROBOTICS or CONEXANT,
-   Kermit assumes:
-
-    1. The modem uses the Hayes AT command set.
-    2. The modem supports error correction, data compression, and
-       hardware flow control and is already configured to use them.
-
-   In fact, Kermit assumes the modem is completely configured, and
-   therefore does not send it an initialization string or any
-   configuration commands. Instead, it sends only the simplest and most
-   portable commands:
-
-     ATQ0V1          Give dial result codes.
-     ATDTnumber      Dial the number.
-
-   (or ATD or ATDP, as appropriate).
-
-   The new defaults work for direct connections and for most modern
-   modems on most platforms, and they work much faster than
-   "full-treatment" dialing. If the new defaults don't work for you, or
-   if you need to perform explicit modem configuations or interactions,
-   then set a specific modem type and use the SET MODEM and SET DIAL
-   commands as documented in Using C-Kermit.
-
-     WARNING: Don't use the generic modem on hosts that do not support
-     RTS/CTS flow control. If Xon/Xoff is in use on the serial port,
-     you'll need to select a particular modem type so Kermit knows what
-     command to give it to enable Xon/Xoff flow control between itself
-     and your serial port.
-
-   The following new modem types were added in C-Kermit 8.0:
-
-     lucent:          Lucent Venus chipset
-     pctel:           PCTel V.90 chipset
-     conexant:        Conexant (ex-Rockwell) modem family
-     zoom-v32bis:     New name for "Zoom"
-     zoom-v34         Zoom V.34
-     zoom-v90         Zoom V.90 56K
-     zoom-v92:        Zoom V.92 with V.44 data compression
-     zoltrix-v34:     New name for "zoltrix"
-     zoltrix-hsp-v90: Synonym for PCTel
-     zoltrix-hcf-v90: Synonym for ITU-T-V250
-     smartlink-v90:   Synonym for usrobotics (same chipset)
-     acer-v90:        Synonym for Rockwell-v90
-
-   New DIAL-related variables:
-
-     \v(dm_hf):  Dial modifier: Wait for Hook-Flash.
-     \v(dm_wb):  Dial modifier: Wait for Bong.
-
-   Finally, if dialing fails, Kermit now prints a context-sensitive hint
-   suggesting possible reasons and remedies.
-
-   Added in C-Kermit 8.0.201:   Rudimentary support for Caller ID, for
-   use with the ANSWER command. If the modem reports Caller ID
-   information, Kermit stores it in variables that you can access after
-   the call is answered:
-
-  \v(callid_date)   The date of the call
-  \v(callid_time)   The time of the call
-  \v(callid_name)   The name of the caller
-  \v(callid_nmbr)   The telephone number of the caller
-  \v(callid_mesg)   A message
-
-   The format of these items depends on the originating and answering
-   phone companies and the modems and their configuration.
-
-   Not very many modems support Caller ID, and those that do (a) tend to
-   have it disabled by default, and (b) use different commands to enable
-   it. A quick survey shows of some current models shows:
-
-   - USR V.90:      No
-   - ITU-T V.250:   No
-   - Lucent Venus:  No
-   - Diamond Supra: #CID=1
-   - Rockwell 56K:  #CID=1
-   - PCTEL:         #CID=1
-   - Zoltrix:       +VCID=1
-   - Conexant:      +VCID=1
-
-   To use Kermit's Caller ID feature, you have to set the modem to wait
-   for at least two rings before answering, and you have to give the
-   command to enable Caller ID; for example (after choosing a modem with
-   SET MODEM TYPE):
-
-  set modem command autoanswer on ATS0=2#CID=1\{13}
-  set modem command autoanswer on ATS0=2+VCID=1\{13}
-
-   These commands can be undone with:
-
-  set modem command autoanswer on ATS0=1#CID=0\{13}
-  set modem command autoanswer on ATS0=1+VCID=0\{13}
-
-   Kermit presently has no built-in knowledge of the Caller ID
-   capabilities or commands of the modems in its database.
-
-   Since the variables can be accessed only after the call is answered,
-   the only way to refuse a call is to answer it, inspect the variables,
-   and then hang it up if desired.
-
-   [ [548]Top ] [ [549]Contents ] [ [550]C-Kermit Home ] [ [551]Kermit
-   Home ]
-  __________________________________________________________________________
-
-12. TERMINAL CONNECTION
-
-   Now that 7-bit connections are no longer the norm, the default
-   terminal bytesize (also called "data size" or "word size") in C-Kermit
-   8.0 is 8 bits, rather than 7 bits as it was in C-Kermit 7.0 and
-   earlier:
-
-   SET ESCAPE character
-          This command, which specifies your CONNECT-mode escape
-          character, allows you to specify any ASCII control character in
-          a variety of formats. C-Kermit 8.0.201 now also lets you
-          specify any 8-bit value, 128-255, as the escape character. In
-          the SET ESCAPE command, you can type the 8-bit character
-          literally or you can enter its numeric code. Here are examples
-          that you can enter from a terminal or console that uses the ISO
-          Latin-1 character set:
-
-  C-Kermit> set escape Ã
-  C-Kermit> set escape 195
-  C-Kermit> show escape
-   Escape character: Code 195 (Ã): enabled
-  C-Kermit>
-
-          Both of these commands set the escape character value to 195
-          (decimal), which happens to be uppercase letter A with Tilde in
-          Latin-1. SHOW ESCAPE and SHOW TERMINAL show the value, as does
-          the CONNECT message.
-
-   SET TERMINAL AUTODOWNLOAD ERROR { STOP, CONTINUE }
-          When Kermit has a terminal connection to another computer, and
-          a file transfer is initiated automatically because a Kermit
-          packet was received in CONNECT mode (i.e. in the terminal
-          screen), this command tells what Kermit should do if the
-          transfer fails. The default is to STOP, which leaves Kermit in
-          command mode with its file-transfer display showing, so you can
-          see that the transfer failed and why. If you SET TERMINAL
-          AUTODOWNLOAD ERROR CONTINUE, this causes Kermit to return
-          automatically to its terminal screen (i.e. resume its CONNECT
-          session) as if the transfer had succeeded; this can be
-          desirable if the entire session is under control of a
-          host-based script.
-
-   SET TERMINAL BYTESIZE { 7, 8 }
-          The byte size to use during CONNECT and INPUT command
-          execution, which can be more restrictive than the bytesize
-          implied by the current PARITY setting, but not less
-          restrictive. In C-Kermit 7.0 and earlier, the terminal bytesize
-          was 7 by default to protect against the likelihood that parity
-          was in use on the connection without the user's knowledge. When
-          the terminal bytesize is 8 (as it is in C-Kermit 8.0 and
-          later), the user will see garbage in this (increasingly
-          unlikely) situation. Note that 8 data bits are required for
-          most character sets other than ASCII: Latin-1, UTF-8, and so
-          on.
-
-   A new command has been added to produce timestamped session logs:
-
-   SET TERMINAL SESSION-LOG TIMESTAMPED-TEXT
-          Records the terminal session in text mode (like SET TERMINAL
-          SESSION-LOG TEXT) but adds a timestamp at the beginning of each
-          line. The timestamp format is hh:mm:ss.nnn, and indicates the
-          time at which the first character of the line appeared.
-
-   In most UNIX versions (those built with the select()-capable CONNECT
-   module -- pretty much all the ones that have or could have TELNET
-   included), an idle timeout feature has been added:
-
-   SET TERMINAL IDLE-TIMEOUT number
-          If the number is not 0, then Kermit is to take an action when
-          the given amount of time passes with no activity during CONNECT
-          mode. If the number is positive it is the maximum number of
-          idle seconds; if number is negative it represents milliseconds
-          (thousandths of seconds). If 0 is given as the number, there
-          are no idle timeouts. Synonym: SET TERMINAL IDLE-LIMIT.
-
-   SET TERMINAL IDLE-ACTION { RETURN, HANGUP, EXIT, OUTPUT [ string ] }
-          The action to be taken upon an idle timeout in CONNECT mode.
-          RETURN to the prompt, HANGUP the connection, EXIT from Kermit,
-          or OUTPUT the given string (if no string is given, a NUL (ASCII
-          0) character is sent).
-
-   SET TERMINAL IDLE-ACTION { TELNET-NOP, TELNET-AYT }
-          Actions that can be selected on Telnet connections only, that
-          might be useful if idle limits are enforced by the Telnet
-          server or in the TCP/IP protocol: TELNET-NOP sends a "NO
-          Operation" (do-nothing) command, which causes no response from
-          the server; TELNET-AYT sends an "Are You There" message to the
-          server, which should make the server send back a message.
-          Neither of these actions interferes with your remote session.
-
-   SET TERMINAL IDLE-ACTION is useful for connections to hosts or
-   services that automatically log you out after a certain amount of idle
-   time, e.g.:
-
-  set term idle-timeout 300
-  set term idle-action output \32
-
-   sends a space (as if you had pressed the space bar) every 300 seconds
-   (five minutes) while there is no activity (32 is the ASCII code for
-   space).
-
-   When C-Kermit returns from CONNECT to command mode, the reason for the
-   transition is given in a new variable, \v(cx_status):
-
-      0  No CONNECT command given yet.
-      1  User escaped back manually.
-      2  A trigger string was encountered.
-      3  IKSD entered server mode.
-      4  Application Program Command received from host.
-      5  Idle timeout.
-      6  Telnet protocol error.
-      7  Keystroke macro.
-      8  Time limit exceeded.
-    100  Internal error.
-    101  Carrier required by not detected.
-    102  I/O error on connection.
-    103  Disconnected by host.
-    104  Disconnected by user.
-    105  Session limit exceeded.
-    106  Rejected due to Telnet policy.
-    107  Received kill signal.
-
-   Values 100 and above indicate there is no connection.
-
-   [ [552]Top ] [ [553]Contents ] [ [554]C-Kermit Home ] [ [555]Kermit
-   Home ]
-  __________________________________________________________________________
-
-13. CHARACTER SETS
-
-   See the section on [556]file scanning above, and the section on
-   character-set conversion in [557]FTP. Also:
-
-     * True support for CP1252 (rather than treating it as Latin-1).
-     * Proper handling of C1 values when converting ISO 8-bit text to
-       UTF-8.
-     * TYPE /CHARACTER-SET: /TRANSLATE-TO: allows specific translations.
-     * The TRANSLATE command now works on multiple files.
-     * K_CHARSET environment variable to set the file character-set.
-     * SET TRANSFER TRANSLATION OFF.
-     * FTP client character-set translation ([558]Section 3.7).
-
-   [ [559]Top ] [ [560]Contents ] [ [561]C-Kermit Home ] [ [562]Kermit
-   Home ]
-  __________________________________________________________________________
-
-14. DIALOUT FROM TELNET TERMINAL SERVERS
-
-   For years, C-Kermit has supported dialing out from Telnet modem
-   servers (also called reverse terminal servers or access servers), but
-   until now there was no way for Kermit to control the communication
-   parameters (speed, parity, etc) on the serial port of the terminal
-   server; it had to use whatever was there.
-
-   But now, if you make a connection to a server that supports the Telnet
-   Com Port Control Option, [563]RFC 2217, you have the same degree of
-   control as you would have over a serial port on the computer where
-   Kermit is running: SET SPEED, SET FLOW, SET PARITY, SET STOP-BITS,
-   SHOW COMM, WAIT, SET CARRIER-WATCH, the modem-signal variables,
-   sending Break, and so on, apply to the connection between the terminal
-   server and the modem.
-
-   For example, using a Cisco Access Server 2509, where specifying a TCP
-   port in the 6000's selects a serial port that can be used for dialing
-   out:
-
-  set host xxx 6001      ; xxx is the IP hostname or address of the server
-  (log in if necessary)  ; With a script or by hand
-  set modem type usr     ; Tell Kermit what kind of modem it has
-  set speed 57600        ; This affects the server's port
-  set flow rts/cts       ; Ditto
-  dial 7654321
-
-   The modem server might or might not require a login sequence. It might
-   also allow for automatic authentication, e.g. via Kerberos tickets.
-   NOTE: If the modem server requires a login sequence, then REDIAL might
-   not work as expected.
-
-   When you have a Telnet Com Port connection, your SET SPEED and SET
-   FLOW options change automatically to reflect the capabilities of the
-   server, rather than those of your local computer.
-
-   See the configuration manual for your server for additional
-   information. For example, how to set up the server to drop the Telnet
-   connection automatically when the telephone call is hung up (e.g.
-   "autohangup" on Cisco models).
-
-   For a Linux-based Telnet Com-Port server, click the Srdird link:
-
-   [ [564]Top ] [ [565]Contents ] [ [566]Sredird ] [ [567]C-Kermit Home ]
-   [ [568]Kermit Home ]
-  __________________________________________________________________________
-
-15. COPING WITH BROKEN KERMIT PARTNERS
-
-   There are lots of faulty Kermit protocol implementations out there,
-   found mainly in 3rd-party products ranging from communications
-   software packages to file-transfer functions imbedded within devices.
-   This topic is covered [569]HERE for C-Kermit 7.0, but C-Kermit 8.0
-   adds some additional tricks.
-
-   SET ATTRIBUTE RECORD-FORMAT { ON, OFF }
-          Allows control of the Kermit's Record-Format attribute. Set
-          this to OFF in case incoming file are refused due to unknown or
-          invalid record formats if you want to accept the file anyway.
-
-   SET SEND I-PACKETS { ON, OFF }
-          A Kermit server is supposed to accept I-packets; this is how
-          the client lets the server know its capabilities and
-          preferences before sending a command. Apparently there is at
-          least one Kermit server implementation that does not accept
-          I-packets, and does not properly respond with an Error packet
-          if it gets one. To get around such situations in C-Kermit 8.0,
-          you can use SET SEND I-PACKETS OFF to inhibit the sending of I
-          packets. In this case, the client must be able to adjust to the
-          server's configuration, rather than the other way around as we
-          are used to.
-
-   SET PROTOCOL KERMIT {} {} {}
-          C-Kermit 6.0 and later automatically send "autoupload" and
-          "autodownload" commands when in local mode and you give a file
-          transfer command. For example, if you tell kermit to "send
-          oofa.txt", Kermit sends "kermit -r" and a carriage return, in
-          case you had forgotten to start Kermit on the far end and told
-          it to receive a file. If a Kermit program had already been
-          started on the far end, it should harmlessly absorb this
-          string. However, some Kermit programs violate the Kermit
-          protocol definition and treat such strings as Kermit packets
-          even though they are not. In such cases, give this command to
-          set the Kermit protocol autoupload and download strings to
-          nothing, which tells Kermit not to send them. (This is not a
-          new feature, but it was not previously included in the "Coping"
-          section of the documentation.)
-
-   [ [570]Top ] [ [571]Contents ] [ [572]C-Kermit Home ] [ [573]Kermit
-   Home ]
-  __________________________________________________________________________
-
-16. NEW COMMAND-LINE OPTIONS
-
-   kermit -h Now prints a complete listing of its command-line options,
-   rather than an abbreviated list squeezed into a 24x80 space.
-
-   -dd              Debug, like -d but adds timestamps
-   --version  Shows C-Kermit version number.
-   --noperms  Equivalent to SET ATTRIBUTE PROTECTION OFF.
-
-   Kermit now accepts a selection of URLs (Universal Resource Locators)
-   as its first command-line argument. These are:
-
-   telnet:hostname
-          Makes a Telnet connection to the given host (IP hostname or
-          address).
-
-   ftp://[user[:password]@]hostname[/path...]
-          Makes an FTP connection to the given host (IP hostname or
-          address). If a username is given, Kermit tries to log you in;
-          if a password is given, it is used; if not, you are prompted
-          for one. If no username is given, an anonymous login is
-          performed. If a pathname is included, Kermit tries to GET the
-          given file. See [574]Section 3.1.3 for details.
-
-   ftps://[user[:password]@]hostname[/path...]
-          Makes a secure FTP connection over SSL.
-
-   telnets://[user[:password]@]hostname
-          Makes a secure Telnet connection over SSL.
-
-   kermit://[user[:password]@]hostname[/path...]
-          Makes a connection to an [575]Internet Kermit Server.
-
-   http://[user[:password]@]hostname[/path...]
-          Makes a connection to Web server.
-
-   https://[user[:password]@]hostname[/path...]
-          Makes a connection to secure Web server.
-
-   [ [576]Top ] [ [577]Contents ] [ [578]C-Kermit Home ] [ [579]Kermit
-   Home ]
-  __________________________________________________________________________
-
-17. LOGS
-
-   In C-Kermit 8.0, we make an effort to keep passwords out of the debug
-   log. This can never be 100% effective, but it's better than before,
-   when there were no precautions at all. Whenever Kermit knows it's
-   prompting for, parsing, or transmitting a password, it temporarily
-   turns off logging and then turns it back on afterwards. This keeps the
-   debug log password-free in most common cases, but there can be no
-   guarantees.
-
-   As noted elsewhere, the new "-dd" command-line option selects a
-   timestamped debug log (equivalent to "set debug timestamps on", "log
-   debug debug.log").
-
-   C-Kermit 8.0 also supports a new timestamped session log via "set
-   session-log timestamped-text", "log session".
-
-   There have been requests for other kinds of logs, for example a
-   command log. These might be added at some point. One person wanted to
-   be able to log commands with timestamps, but only commands issued at
-   the prompt, not commands from files or macros, and also wanted a
-   header line at the beginning showing the date, user, and host. This
-   can be done as follows:
-
-  .filename := \v(home)commands.log  ; (for example)
-  fopen /write \%c \m(filename)
-  if success {
-      fwrite /line \%c \v(date): User=\v(user) Host=\v(host)
-      fclose \%c
-      set debug timestamps on
-      log debug {| grep "CMD(P)" >> \m(filename)} append
-  }
-
-   [ [580]Top ] [ [581]Contents ] [ [582]C-Kermit Home ] [ [583]Kermit
-   Home ]
-     _________________________________________________________________
-
-   C-Kermit 8.0 Update Notes / [584]The Kermit Project / Columbia
-   University / 15 Dec 2003
-
-References
-
-   1. http://www.columbia.edu/kermit/ckermit80.html#contents
-   2. http://www.columbia.edu/kermit/ckermit.html
-   3. http://www.columbia.edu/kermit/index.html
-   4. http://www.columbia.edu/kermit/ckermit80.html
-   5. mailto:kermit-support@columbia.edu
-   6. http://www.columbia.edu/kermit/
-   7. http://www.kermit-project.org/
-   8. http://www.columbia.nyc.ny.us/kermit/
-   9. ftp://kermit.columbia.edu/kermit/f/COPYING.TXT
-  10. ftp://kermit.columbia.edu/kermit/f/ckcmai.c
-  11. http://www.columbia.edu/kermit/ckermit80.html#xv
-  12. http://www.columbia.edu/kermit/ck60manual.html
-  13. http://www.columbia.edu/kermit/ckermi70.html
-  14. ftp://kermit.columbia.edu/kermit/f/ckermit70.txt
-  15. http://www.columbia.edu/kermit/ckututor.html
-  16. ftp://kermit.columbia.edu/kermit/f/ckuker.nr
-  17. http://www.columbia.edu/kermit/security.htm
-  18. http://www.columbia.edu/kermit/telnet.htm
-  19. http://www.columbia.edu/kermit/ftpscripts.html
-  20. http://www.columbia.edu/kermit/ckcbwr.html
-  21. ftp://kermit.columbia.edu/kermit/f/ckcbwr.txt
-  22. http://www.columbia.edu/kermit/ckubwr.html
-  23. ftp://kermit.columbia.edu/kermit/f/ckubwr.txt
-  24. http://www.columbia.edu/kermit/ckvbwr.html
-  25. ftp://kermit.columbia.edu/kermit/f/ckvbwr.txt
-  26. http://www.columbia.edu/kermit/ckuins.html
-  27. ftp://kermit.columbia.edu/kermit/f/ckuins.txt
-  28. http://www.columbia.edu/kermit/ckvins.html
-  29. ftp://kermit.columbia.edu/kermit/f/ckvins.txt
-  30. http://www.columbia.edu/kermit/ckccfg.html
-  31. ftp://kermit.columbia.edu/kermit/f/ckccfg.txt
-  32. http://www.columbia.edu/kermit/ckcplm.html
-  33. ftp://kermit.columbia.edu/kermit/f/ckcplm.txt
-  34. http://www.columbia.edu/kermit/iksd.html
-  35. http://www.columbia.edu/kermit/skermit.html
-  36. http://www.columbia.edu/kermit/ckermit80.html#top
-  37. http://www.columbia.edu/kermit/ckermit.html
-  38. http://www.columbia.edu/kermit/index.html
-  39. http://www.columbia.edu/kermit/ckermit80.html#x0
-  40. http://www.columbia.edu/kermit/ckermit80.html#x1
-  41. http://www.columbia.edu/kermit/ckermit80.html#x2
-  42. http://www.columbia.edu/kermit/ckermit80.html#x2.1
-  43. http://www.columbia.edu/kermit/ckermit80.html#x2.2
-  44. http://www.columbia.edu/kermit/ckermit80.html#x2.2.1
-  45. http://www.columbia.edu/kermit/ckermit80.html#x2.2.2
-  46. http://www.columbia.edu/kermit/ckermit80.html#x2.2.3
-  47. http://www.columbia.edu/kermit/ckermit80.html#x2.2.4
-  48. http://www.columbia.edu/kermit/ckermit80.html#x2.2.5
-  49. http://www.columbia.edu/kermit/ckermit80.html#x2.2.6
-  50. http://www.columbia.edu/kermit/ckermit80.html#x3
-  51. http://www.columbia.edu/kermit/ckermit80.html#x3.1
-  52. http://www.columbia.edu/kermit/ckermit80.html#x3.1.1
-  53. http://www.columbia.edu/kermit/ckermit80.html#x3.1.2
-  54. http://www.columbia.edu/kermit/ckermit80.html#x3.1.3
-  55. http://www.columbia.edu/kermit/ckermit80.html#x3.1.4
-  56. http://www.columbia.edu/kermit/ckermit80.html#x3.2
-  57. http://www.columbia.edu/kermit/ckermit80.html#x3.3
-  58. http://www.columbia.edu/kermit/ckermit80.html#x3.4
-  59. http://www.columbia.edu/kermit/ckermit80.html#x3.5
-  60. http://www.columbia.edu/kermit/ckermit80.html#x3.5.1
-  61. http://www.columbia.edu/kermit/ckermit80.html#x3.5.2
-  62. http://www.columbia.edu/kermit/ckermit80.html#x3.5.3
-  63. http://www.columbia.edu/kermit/ckermit80.html#x3.6
-  64. http://www.columbia.edu/kermit/ckermit80.html#x3.6.1
-  65. http://www.columbia.edu/kermit/ckermit80.html#x3.6.2
-  66. http://www.columbia.edu/kermit/ckermit80.html#x3.6.3
-  67. http://www.columbia.edu/kermit/ckermit80.html#x3.7
-  68. http://www.columbia.edu/kermit/ckermit80.html#x3.7.1
-  69. http://www.columbia.edu/kermit/ckermit80.html#x3.7.2
-  70. http://www.columbia.edu/kermit/ckermit80.html#x3.8
-  71. http://www.columbia.edu/kermit/ckermit80.html#x3.9
-  72. http://www.columbia.edu/kermit/ckermit80.html#x3.10
-  73. http://www.columbia.edu/kermit/ckermit80.html#x3.10.1
-  74. http://www.columbia.edu/kermit/ckermit80.html#x3.10.2
-  75. http://www.columbia.edu/kermit/ckermit80.html#x3.10.3
-  76. http://www.columbia.edu/kermit/ckermit80.html#x3.11
-  77. http://www.columbia.edu/kermit/ckermit80.html#x4
-  78. http://www.columbia.edu/kermit/ckermit80.html#x5
-  79. http://www.columbia.edu/kermit/ckermit80.html#x6
-  80. http://www.columbia.edu/kermit/ckermit80.html#x6.1
-  81. http://www.columbia.edu/kermit/ckermit80.html#x6.2
-  82. http://www.columbia.edu/kermit/ckermit80.html#x6.3
-  83. http://www.columbia.edu/kermit/ckermit80.html#x6.4
-  84. http://www.columbia.edu/kermit/ckermit80.html#x6.5
-  85. http://www.columbia.edu/kermit/ckermit80.html#x6.6
-  86. http://www.columbia.edu/kermit/ckermit80.html#x7
-  87. http://www.columbia.edu/kermit/ckermit80.html#x8
-  88. http://www.columbia.edu/kermit/ckermit80.html#x8.1
-  89. http://www.columbia.edu/kermit/ckermit80.html#x8.2
-  90. http://www.columbia.edu/kermit/ckermit80.html#x8.3
-  91. http://www.columbia.edu/kermit/ckermit80.html#x8.4
-  92. http://www.columbia.edu/kermit/ckermit80.html#x8.5
-  93. http://www.columbia.edu/kermit/ckermit80.html#x8.6
-  94. http://www.columbia.edu/kermit/ckermit80.html#x8.7
-  95. http://www.columbia.edu/kermit/ckermit80.html#x8.8
-  96. http://www.columbia.edu/kermit/ckermit80.html#x8.9
-  97. http://www.columbia.edu/kermit/ckermit80.html#x8.10
-  98. http://www.columbia.edu/kermit/ckermit80.html#x8.11
-  99. http://www.columbia.edu/kermit/ckermit80.html#x8.12
- 100. http://www.columbia.edu/kermit/ckermit80.html#x8.13
- 101. http://www.columbia.edu/kermit/ckermit80.html#x8.14
- 102. http://www.columbia.edu/kermit/ckermit80.html#x9
- 103. http://www.columbia.edu/kermit/ckermit80.html#x9.1
- 104. http://www.columbia.edu/kermit/ckermit80.html#x9.2
- 105. http://www.columbia.edu/kermit/ckermit80.html#x9.3
- 106. http://www.columbia.edu/kermit/ckermit80.html#x9.4
- 107. http://www.columbia.edu/kermit/ckermit80.html#x9.5
- 108. http://www.columbia.edu/kermit/ckermit80.html#x9.6
- 109. http://www.columbia.edu/kermit/ckermit80.html#x9.7
- 110. http://www.columbia.edu/kermit/ckermit80.html#x9.8
- 111. http://www.columbia.edu/kermit/ckermit80.html#x9.9
- 112. http://www.columbia.edu/kermit/ckermit80.html#x9.10
- 113. http://www.columbia.edu/kermit/ckermit80.html#x9.11
- 114. http://www.columbia.edu/kermit/ckermit80.html#x10
- 115. http://www.columbia.edu/kermit/ckermit80.html#x11
- 116. http://www.columbia.edu/kermit/ckermit80.html#x12
- 117. http://www.columbia.edu/kermit/ckermit80.html#x13
- 118. http://www.columbia.edu/kermit/ckermit80.html#x14
- 119. http://www.columbia.edu/kermit/ckermit80.html#x15
- 120. http://www.columbia.edu/kermit/ckermit80.html#x16
- 121. http://www.columbia.edu/kermit/ckermit80.html#x17
- 122. http://www.columbia.edu/kermit/ckermit80.html#top
- 123. http://www.columbia.edu/kermit/ckermit.html
- 124. http://www.columbia.edu/kermit/index.html
- 125. http://www.columbia.edu/kermit/ckuins.html#x5
- 126. http://www.columbia.edu/kermit/ckuins.html
- 127. http://www.columbia.edu/kermit/ckermit80.html#x5
- 128. http://www.columbia.edu/kermit/ckermit80.html#x2.2
- 129. http://www.columbia.edu/kermit/ckermit80.html#contents
- 130. http://www.columbia.edu/kermit/ckermit80.html#x15
- 131. http://www.columbia.edu/kermit/ckermit80.html#x3.7
- 132. http://www.columbia.edu/kermit/ckermit80.html#ftpdates
- 133. http://www.columbia.edu/kermit/ckermit80.html#ftpcheck
- 134. http://www.columbia.edu/kermit/ckermit80.html#ftpnamelist
- 135. http://www.columbia.edu/kermit/ckermit80.html#srvrename
- 136. http://www.columbia.edu/kermit/ckermit80.html#ftpvdir
- 137. http://www.columbia.edu/kermit/ckermit80.html#setftptype
- 138. http://www.columbia.edu/kermit/ckermit80.html#x3.6
- 139. http://www.columbia.edu/kermit/ckermit80.html#x15
- 140. http://www.columbia.edu/kermit/ckermit80.html#x8.7
- 141. http://www.columbia.edu/kermit/ckermit80.html#x2.1
- 142. http://www.columbia.edu/kermit/ckermit80.html#x2.2
- 143. http://www.columbia.edu/kermit/ckermit80.html#x8.14
- 144. http://www.columbia.edu/kermit/ckermit80.html#x8.13
- 145. http://www.columbia.edu/kermit/ckermit80.html#x8.13
- 146. http://www.columbia.edu/kermit/ckututor.html
- 147. http://www.columbia.edu/kermit/ckuins.html
- 148. http://www.columbia.edu/kermit/skermit.html
- 149. http://www.columbia.edu/kermit/ckermit80.html#setlocus
- 150. http://www.columbia.edu/kermit/ckermit80.html#lcommands
- 151. http://www.columbia.edu/kermit/ckermit80.html#ftpuser
- 152. http://www.columbia.edu/kermit/ckermit80.html#showvar
- 153. http://www.columbia.edu/kermit/ckermit80.html#callerid
- 154. http://www.columbia.edu/kermit/ckermit80.html#x6.6
- 155. http://www.columbia.edu/kermit/ckermit80.html#x0
- 156. http://www.columbia.edu/kermit/ckermit80.html#x3.11
- 157. http://www.columbia.edu/kermit/ckermit80.html#top
- 158. http://www.columbia.edu/kermit/ckermit80.html#contents
- 159. http://www.columbia.edu/kermit/ckermit.html
- 160. http://www.columbia.edu/kermit/index.html
- 161. http://www.columbia.edu/kermit/ckermit80.html#x0
- 162. http://www.columbia.edu/kermit/ckermit80.html#top
- 163. http://www.columbia.edu/kermit/ckermit80.html#contents
- 164. http://www.columbia.edu/kermit/ckermit.html
- 165. http://www.columbia.edu/kermit/index.html
- 166. http://www.columbia.edu/kermit/k95.html
- 167. http://www.columbia.edu/kermit/sshclient.html
- 168. http://www.columbia.edu/kermit/skermit.html
- 169. http://www.columbia.edu/kermit/skermit.html
- 170. http://www.columbia.edu/kermit/sshclien.htm
- 171. http://www.columbia.edu/kermit/ckermit80.html#x3
- 172. ftp://ftp.isi.edu/in-notes/rfc1738.txt
- 173. http://www.columbia.edu/kermit/ckermit80.html#x2.2.2
- 174. http://www.columbia.edu/kermit/ckermit80.html#x2.2.1
- 175. ftp://ftp.isi.edu/in-notes/rfc2396.txt
- 176. ftp://ftp.isi.edu/in-notes/rfc2616.txt
- 177. http://www.columbia.edu/kermit/ckermit80.html#x2.2.3
- 178. ftp://ftp.isi.edu/in-notes/rfc2616.txt
- 179. http://www.columbia.edu/kermit/ckermit80.html#x8.13.7
- 180. http://www.columbia.edu/kermit/security.htm#x5.4
- 181. http://www.columbia.edu/kermit/security.htm#x15
- 182. http://www.columbia.edu/kermit/security.htm#x6.2
- 183. http://www.columbia.edu/kermit/security.html
- 184. http://www.columbia.edu/kermit/ckermit80.html#x16
- 185. http://www.columbia.edu/kermit/ckermit80.html#top
- 186. http://www.columbia.edu/kermit/ckermit80.html#contents
- 187. http://www.columbia.edu/kermit/ckermit.html
- 188. http://www.columbia.edu/kermit/index.html
- 189. http://www.columbia.edu/kermit/ckermit80.html#x3.1
- 190. http://www.columbia.edu/kermit/ckermit80.html#x3.2
- 191. http://www.columbia.edu/kermit/ckermit80.html#x3.3
- 192. http://www.columbia.edu/kermit/ckermit80.html#x3.4
- 193. http://www.columbia.edu/kermit/ckermit80.html#x3.5
- 194. http://www.columbia.edu/kermit/ckermit80.html#x3.6
- 195. http://www.columbia.edu/kermit/ckermit80.html#x3.7
- 196. http://www.columbia.edu/kermit/ckermit80.html#x3.8
- 197. http://www.columbia.edu/kermit/ckermit80.html#x3.9
- 198. http://www.columbia.edu/kermit/ckermit80.html#x3.10
- 199. http://www.columbia.edu/kermit/ckermit80.html#x3.11
- 200. http://www.columbia.edu/kermit/security.htm
- 201. http://www.columbia.edu/kermit/security.htm#servers
- 202. http://www.columbia.edu/kermit/ckcsets.html
- 203. http://www.columbia.edu/kermit/unicode.html
- 204. http://www.columbia.edu/kermit/ckermi70.htm#x1.5.4
- 205. http://www.columbia.edu/kermit/case10.html
- 206. http://www.columbia.edu/kermit/ckermit80.html#x4
- 207. http://www.columbia.edu/kermit/ckermit80.html#x3.11
- 208. http://www.columbia.edu/kermit/ftpscripts.html
- 209. http://www.columbia.edu/kermit/ckermit80.html#top
- 210. http://www.columbia.edu/kermit/ckermit80.html#ftp
- 211. http://www.columbia.edu/kermit/ftpclient.html
- 212. http://www.columbia.edu/kermit/ftpscripts.html
- 213. http://www.columbia.edu/kermit/ckermit.html
- 214. http://www.columbia.edu/kermit/index.html
- 215. http://www.columbia.edu/kermit/ckermit80.html#x3.1.1
- 216. http://www.columbia.edu/kermit/ckermit80.html#x3.1.3
- 217. http://www.columbia.edu/kermit/ckermit80.html#x3.1.4
- 218. http://www.columbia.edu/kermit/ckermit80.html#x3.1.3
- 219. http://www.columbia.edu/kermit/ckermit80.html#x3.1.3
- 220. http://www.columbia.edu/kermit/ckermit80.html#x3.2
- 221. http://www.columbia.edu/kermit/ckermit80.html#x3.5
- 222. http://www.columbia.edu/kermit/ckermit80.html#x3.6
- 223. http://www.columbia.edu/kermit/ftpscripts.html
- 224. http://www.columbia.edu/kermit/ckb2.htm
- 225. http://www.columbia.edu/kermit/ckermit80.html#ftpautolog
- 226. http://www.columbia.edu/kermit/ckermit80.html#ftpuser
- 227. http://www.columbia.edu/kermit/ckermit80.html#x3.8
- 228. http://www.columbia.edu/kermit/ckermit80.html#x3.8
- 229. http://www.columbia.edu/kermit/ckermit80.html#top
- 230. http://www.columbia.edu/kermit/ckermit80.html#ftp
- 231. http://www.columbia.edu/kermit/ckermit.html
- 232. http://www.columbia.edu/kermit/index.html
- 233. http://www.columbia.edu/kermit/ibm_ie.html
- 234. http://www.columbia.edu/kermit/ckermit80.html#x3.10
- 235. http://www.columbia.edu/kermit/ckermit80.html#top
- 236. http://www.columbia.edu/kermit/ckermit80.html#ftp
- 237. http://www.columbia.edu/kermit/ckermit.html
- 238. http://www.columbia.edu/kermit/index.html
- 239. http://www.columbia.edu/kermit/ck60manual.html
- 240. http://www.columbia.edu/kermit/ckermit70.html#x4.17
- 241. http://www.columbia.edu/kermit/ckermit70.html
- 242. http://www.columbia.edu/kermit/ckermit80.html#x3.6
- 243. http://www.columbia.edu/kermit/ckermit80.html#x3.11
- 244. http://www.columbia.edu/kermit/ckermit80.html#x3.1.4
- 245. http://www.columbia.edu/kermit/security.html
- 246. http://www.columbia.edu/kermit/ckermit80.html#x3.7
- 247. http://www.columbia.edu/kermit/ckermit80.html#x3.7
- 248. http://www.columbia.edu/kermit/ckermit80.html#x8.13.4
- 249. http://www.columbia.edu/kermit/ckermit80.html#permswitch
- 250. http://www.columbia.edu/kermit/ckermit80.html#ftpchmod
- 251. http://www.columbia.edu/kermit/ckermit80.html#x3.6.2
- 252. http://www.columbia.edu/kermit/ckermit80.html#x4
- 253. http://www.columbia.edu/kermit/ckermit80.html#top
- 254. http://www.columbia.edu/kermit/ckermit80.html#ftp
- 255. http://www.columbia.edu/kermit/ckermit.html
- 256. http://www.columbia.edu/kermit/index.html
- 257. http://www.columbia.edu/kermit/ckermit80.html#x7
- 258. http://www.columbia.edu/kermit/ckermit80.html#x3.8
- 259. http://www.columbia.edu/kermit/ckermit80.html#x3.8
- 260. http://www.columbia.edu/kermit/ckb2.htm
- 261. http://www.columbia.edu/kermit/ckermit80.html#x3.10
- 262. http://www.columbia.edu/kermit/ckermit80.html#x3.10
- 263. http://www.columbia.edu/kermit/ckermit80.html#x3.6
- 264. http://www.columbia.edu/kermit/ckermit80.html#setftptype
- 265. http://www.columbia.edu/kermit/ckermit80.html#top
- 266. http://www.columbia.edu/kermit/ckermit80.html#ftp
- 267. http://www.columbia.edu/kermit/ckermit.html
- 268. http://www.columbia.edu/kermit/index.html
- 269. http://www.columbia.edu/kermit/ckermit70.html#x4.9
- 270. http://www.columbia.edu/kermit/ckermit80.html#x3.5.1
- 271. http://www.columbia.edu/kermit/ckermit80.html#erroraction
- 272. http://www.columbia.edu/kermit/ckermit70.html#x1.5
- 273. http://www.columbia.edu/kermit/ckermit70.html#x4.7
- 274. http://www.columbia.edu/kermit/ckermit70.html#x1.6
- 275. http://www.columbia.edu/kermit/ckermit80.html#x8.13
- 276. http://www.columbia.edu/kermit/ckermi70.htm#x1.5.4
- 277. http://www.columbia.edu/kermit/ckermi70.htm
- 278. http://www.columbia.edu/kermit/ckermit80.html#x4
- 279. http://www.columbia.edu/kermit/ckermit80.html#x3.7
- 280. http://www.columbia.edu/kermit/ckermit80.html#x3.5.2
- 281. http://www.columbia.edu/kermit/ckermit80.html#x3.7
- 282. http://www.columbia.edu/kermit/ckermit80.html#erroraction
- 283. http://www.columbia.edu/kermit/ckermit80.html#x3.5.2
- 284. http://www.columbia.edu/kermit/ckermit80.html#erroraction
- 285. http://www.columbia.edu/kermit/ckermit80.html#ftpfilenames
- 286. http://www.columbia.edu/kermit/ckermit80.html#ftpperms
- 287. http://www.columbia.edu/kermit/ckermit80.html#ftpunique
- 288. http://www.columbia.edu/kermit/ckermit80.html#ftpfilenames
- 289. http://www.columbia.edu/kermit/ckermit80.html#note_utc
- 290. http://www.columbia.edu/kermit/ckermit80.html#note_date
- 291. http://www.columbia.edu/kermit/ckermit80.html#x3.6
- 292. http://www.boulder.nist.gov/timefreq/faq/faq.htm#10:
- 293. http://www.columbia.edu/kermit/ckermit80.html#x3.7
- 294. http://www.columbia.edu/kermit/ckermit80.html#top
- 295. http://www.columbia.edu/kermit/ckermit80.html#ftp
- 296. http://www.columbia.edu/kermit/ckermit.html
- 297. http://www.columbia.edu/kermit/index.html
- 298. http://www.columbia.edu/kermit/ckermit80.html#x3.11
- 299. http://www.columbia.edu/kermit/ckermi70.htm#x4.3
- 300. http://www.columbia.edu/kermit/ckermit70.html
- 301. http://www.columbia.edu/kermit/ckermit80.html#x5
- 302. http://www.columbia.edu/kermit/ckermit80.html#x3.6.3
- 303. http://www.columbia.edu/kermit/ckermit80.html#ftpfilenames
- 304. http://www.columbia.edu/kermit/ckermi70.htm#x4.1
- 305. http://www.columbia.edu/kermit/ckermi70.htm#x4.2.2
- 306. http://www.columbia.edu/kermit/ckermi70.htm#x1.5.4
- 307. http://www.columbia.edu/kermit/ckermit80.html#x3.6.2
- 308. http://www.columbia.edu/kermit/ckermit80.html#x3.11
- 309. http://www.columbia.edu/kermit/ckermit80.html#x3.11
- 310. http://www.columbia.edu/kermit/ckermit80.html#srvrename
- 311. http://www.columbia.edu/kermit/ckermi70.htm#x4.1
- 312. http://www.columbia.edu/kermit/ckermi70.htm
- 313. http://www.columbia.edu/kermit/ckb2.htm
- 314. http://www.columbia.edu/kermit/ckermit80.html#ftpfilenames
- 315. http://www.columbia.edu/kermit/ckermit80.html#x3.5.3
- 316. http://www.proftpd.net/
- 317. http://www.columbia.edu/kermit/ckermit80.html#top
- 318. http://www.columbia.edu/kermit/ckermit80.html#ftp
- 319. http://www.columbia.edu/kermit/ckermit.html
- 320. http://www.columbia.edu/kermit/index.html
- 321. http://www.columbia.edu/kermit/ckb2.htm
- 322. http://www.columbia.edu/kermit/ckcsets.html
- 323. http://www.columbia.edu/kermit/unicode.html
- 324. http://www.columbia.edu/kermit/ckcsets.html
- 325. http://www.columbia.edu/kermit/ckcsets.html
- 326. http://www.columbia.edu/kermit/ckermit80.html#x4
- 327. http://www.columbia.edu/kermit/utf8.html
- 328. http://www.columbia.edu/kermit/ckcsets.html
- 329. http://www.columbia.edu/kermit/ckermit80.html#x4
- 330. ftp://ftp.isi.edu/in-notes/rfc2640.txt
- 331. http://www.columbia.edu/kermit/ckermit80.html#top
- 332. http://www.columbia.edu/kermit/ckermit80.html#ftp
- 333. http://www.columbia.edu/kermit/ckermit.html
- 334. http://www.columbia.edu/kermit/index.html
- 335. http://www.columbia.edu/kermit/ckermit80.html#top
- 336. http://www.columbia.edu/kermit/ckermit80.html#ftp
- 337. http://www.columbia.edu/kermit/ckermit.html
- 338. http://www.columbia.edu/kermit/index.html
- 339. http://www.columbia.edu/kermit/ckermit80.html#top
- 340. http://www.columbia.edu/kermit/ckermit80.html#ftp
- 341. http://www.columbia.edu/kermit/ckermit.html
- 342. http://www.columbia.edu/kermit/index.html
- 343. http://www.columbia.edu/kermit/ftpscripts.html
- 344. http://www.columbia.edu/kermit/ckermit80.html#x3.2
- 345. http://www.columbia.edu/kermit/ckermit80.html#x3.2
- 346. ftp://ftp.isi.edu/in-notes/rfc959.txt
- 347. http://www.columbia.edu/kermit/ckscripts.html
- 348. http://www.columbia.edu/kermit/ckermit80.html#top
- 349. http://www.columbia.edu/kermit/ckermit80.html#ftp
- 350. http://www.columbia.edu/kermit/ftpscript.html
- 351. http://www.columbia.edu/kermit/ckermit.html
- 352. http://www.columbia.edu/kermit/index.html
- 353. http://www.columbia.edu/kermit/ckermit80.html#x3.11.1
- 354. http://www.columbia.edu/kermit/ckermit80.html#x3.11.2
- 355. http://www.columbia.edu/kermit/ckermit80.html#x3.11.3
- 356. http://www.columbia.edu/kermit/ckermit80.html#x3.11.4
- 357. http://www.columbia.edu/kermit/ckermit80.html#x3.11.5
- 358. http://www.columbia.edu/kermit/ckermit.html
- 359. http://www.columbia.edu/kermit/k95.html
- 360. http://www.columbia.edu/kermit/ckermit80.html#x3.11.5
- 361. ftp://ftp.isi.edu/in-notes/rfc959.txt
- 362. ftp://ftp.isi.edu/in-notes/rfc2389.txt
- 363. http://www.ietf.org/internet-drafts/draft-ietf-ftpext-mlst-16.txt
- 364. http://www.columbia.edu/kermit/ftpclient.html
- 365. http://www.columbia.edu/kermit/ckermit80.html#top
- 366. http://www.columbia.edu/kermit/ckermit80.html#ftp
- 367. http://www.columbia.edu/kermit/ckermit.html
- 368. http://www.columbia.edu/kermit/index.html
- 369. http://www.columbia.edu/kermit/ckermit80.html#x3
- 370. http://www.columbia.edu/kermit/ckermit80.html#ucs2
- 371. http://www.columbia.edu/kermit/ckermit80.html#top
- 372. http://www.columbia.edu/kermit/ckermit80.html#contents
- 373. http://www.columbia.edu/kermit/ckermit.html
- 374. http://www.columbia.edu/kermit/index.html
- 375. http://www.columbia.edu/kermit/ckermit80.html#top
- 376. http://www.columbia.edu/kermit/ckermit80.html#contents
- 377. http://www.columbia.edu/kermit/ckermit.html
- 378. http://www.columbia.edu/kermit/index.html
- 379. http://www.columbia.edu/kermit/ckb2.htm
- 380. http://www.columbia.edu/kermit/ckermit80.html#top
- 381. http://www.columbia.edu/kermit/ckermit80.html#contents
- 382. http://www.columbia.edu/kermit/ckermit.html
- 383. http://www.columbia.edu/kermit/index.html
- 384. http://www.columbia.edu/kermit/ckermit80.html#x4
- 385. http://www.columbia.edu/kermit/ckermit80.html#x4
- 386. http://www.columbia.edu/kermit/ckermit80.html#x8.12
- 387. http://www.columbia.edu/kermit/ckermit80.html#x8.1
- 388. http://www.columbia.edu/kermit/ckermit80.html#x12
- 389. http://www.columbia.edu/kermit/ckermit80.html#x8.12
- 390. http://www.columbia.edu/kermit/ckermit80.html#top
- 391. http://www.columbia.edu/kermit/ckermit80.html#contents
- 392. http://www.columbia.edu/kermit/ckermit.html
- 393. http://www.columbia.edu/kermit/index.html
- 394. http://www.columbia.edu/kermit/ckermit80.html#x8.14
- 395. http://www.columbia.edu/kermit/ckermit80.html#top
- 396. http://www.columbia.edu/kermit/ckermit80.html#contents
- 397. http://www.columbia.edu/kermit/ckermit.html
- 398. http://www.columbia.edu/kermit/index.html
- 399. http://www.columbia.edu/kermit/ckermit80.html#x9
- 400. http://www.columbia.edu/kermit/ckermit80.html#top
- 401. http://www.columbia.edu/kermit/ckermit80.html#contents
- 402. http://www.columbia.edu/kermit/ckermit.html
- 403. http://www.columbia.edu/kermit/index.html
- 404. http://www.columbia.edu/kermit/ckermit80.html#x8.6
- 405. http://www.columbia.edu/kermit/ckermit80.html#top
- 406. http://www.columbia.edu/kermit/ckermit80.html#contents
- 407. http://www.columbia.edu/kermit/ckermit.html
- 408. http://www.columbia.edu/kermit/index.html
- 409. http://www.columbia.edu/kermit/ckermit80.html#top
- 410. http://www.columbia.edu/kermit/ckermit80.html#contents
- 411. http://www.columbia.edu/kermit/ckermit.html
- 412. http://www.columbia.edu/kermit/index.html
- 413. http://www.columbia.edu/kermit/ckermit80.html#top
- 414. http://www.columbia.edu/kermit/ckermit80.html#contents
- 415. http://www.columbia.edu/kermit/ckermit.html
- 416. http://www.columbia.edu/kermit/index.html
- 417. http://www.columbia.edu/kermit/ckermit80.html#fjoin
- 418. http://www.columbia.edu/kermit/ckermit80.html#fsplit
- 419. http://www.columbia.edu/kermit/ckermit80.html#x8.10
- 420. http://www.columbia.edu/kermit/ckermit80.html#top
- 421. http://www.columbia.edu/kermit/ckermit80.html#contents
- 422. http://www.columbia.edu/kermit/ckermit.html
- 423. http://www.columbia.edu/kermit/index.html
- 424. http://www.columbia.edu/kermit/ckermit80.html#x9
- 425. http://www.columbia.edu/kermit/ckermit80.html#x9
- 426. http://www.columbia.edu/kermit/ckermit80.html#x9
- 427. http://www.columbia.edu/kermit/ckermit80.html#x3
- 428. http://www.columbia.edu/kermit/ckermit80.html#x3
- 429. http://www.columbia.edu/kermit/ckermit80.html#x3.2
- 430. http://www.columbia.edu/kermit/ckermit80.html#x3.2
- 431. http://www.columbia.edu/kermit/ckermit80.html#x3.8
- 432. http://www.columbia.edu/kermit/ckermit80.html#x3
- 433. http://www.columbia.edu/kermit/ckermit80.html#x3
- 434. http://www.columbia.edu/kermit/ckermit80.html#x3
- 435. http://www.columbia.edu/kermit/ckermit80.html#x3.2
- 436. http://www.columbia.edu/kermit/ckermit80.html#x3
- 437. http://www.columbia.edu/kermit/ckermit80.html#x8.13
- 438. http://www.columbia.edu/kermit/ckermit80.html#x8.13
- 439. http://www.columbia.edu/kermit/ckermit80.html#x9
- 440. http://www.columbia.edu/kermit/ckermit80.html#x8.10
- 441. http://www.columbia.edu/kermit/ckermit80.html#x8.7.4
- 442. http://www.columbia.edu/kermit/ckermit80.html#top
- 443. http://www.columbia.edu/kermit/ckermit80.html#contents
- 444. http://www.columbia.edu/kermit/ckermit.html
- 445. http://www.columbia.edu/kermit/index.html
- 446. http://www.columbia.edu/kermit/ckermit80.html#top
- 447. http://www.columbia.edu/kermit/ckermit80.html#contents
- 448. http://www.columbia.edu/kermit/ckermit.html
- 449. http://www.columbia.edu/kermit/index.html
- 450. http://www.columbia.edu/kermit/ckermit80.html#top
- 451. http://www.columbia.edu/kermit/ckermit80.html#contents
- 452. http://www.columbia.edu/kermit/ckermit.html
- 453. http://www.columbia.edu/kermit/index.html
- 454. http://www.columbia.edu/kermit/ckermit80.html#x8.7
- 455. http://www.columbia.edu/kermit/ckermit80.html#top
- 456. http://www.columbia.edu/kermit/ckermit80.html#contents
- 457. http://www.columbia.edu/kermit/ckermit.html
- 458. http://www.columbia.edu/kermit/index.html
- 459. http://www.columbia.edu/kermit/ckermit80.html#scriptedit
- 460. http://www.columbia.edu/kermit/ckermit80.html#top
- 461. http://www.columbia.edu/kermit/ckermit80.html#contents
- 462. http://www.columbia.edu/kermit/ckermit.html
- 463. http://www.columbia.edu/kermit/index.html
- 464. http://www.columbia.edu/kermit/ckermit80.html#top
- 465. http://www.columbia.edu/kermit/ckermit80.html#contents
- 466. http://www.columbia.edu/kermit/ckermit.html
- 467. http://www.columbia.edu/kermit/index.html
- 468. ftp://ftp.isi.edu/in-notes/rfc2822.txt
- 469. ftp://ftp.isi.edu/in-notes/rfc2822.txt
- 470. ftp://ftp.isi.edu/in-notes/rfc2822.txt
- 471. ftp://ftp.isi.edu/in-notes/rfc2822.txt
- 472. http://www.columbia.edu/kermit/ckermit80.html#top
- 473. http://www.columbia.edu/kermit/ckermit80.html#contents
- 474. http://www.columbia.edu/kermit/ckermit.html
- 475. http://www.columbia.edu/kermit/index.html
- 476. http://www.columbia.edu/kermit/ckermit80.html#x8.1
- 477. http://www.columbia.edu/kermit/ckermit80.html#top
- 478. http://www.columbia.edu/kermit/ckermit80.html#contents
- 479. http://www.columbia.edu/kermit/ckermit.html
- 480. http://www.columbia.edu/kermit/index.html
- 481. http://www.columbia.edu/kermit/ckermit80.html#x8.2
- 482. http://www.columbia.edu/kermit/ckermit80.html#top
- 483. http://www.columbia.edu/kermit/ckermit80.html#contents
- 484. http://www.columbia.edu/kermit/ckermit.html
- 485. http://www.columbia.edu/kermit/index.html
- 486. http://www.columbia.edu/kermit/ckermit80.html#x9.8
- 487. http://www.columbia.edu/kermit/ckermit80.html#x9.8
- 488. http://www.columbia.edu/kermit/ckermit80.html#x8.2
- 489. http://www.columbia.edu/kermit/ckermit80.html#top
- 490. http://www.columbia.edu/kermit/ckermit80.html#contents
- 491. http://www.columbia.edu/kermit/ckermit.html
- 492. http://www.columbia.edu/kermit/index.html
- 493. http://www.columbia.edu/kermit/ckermit80.html#top
- 494. http://www.columbia.edu/kermit/ckermit80.html#contents
- 495. http://www.columbia.edu/kermit/ckermit.html
- 496. http://www.columbia.edu/kermit/index.html
- 497. http://www.columbia.edu/kermit/ckermit80.html#x9.8
- 498. http://www.columbia.edu/kermit/ckermit80.html#top
- 499. http://www.columbia.edu/kermit/ckermit80.html#contents
- 500. http://www.columbia.edu/kermit/ckermit.html
- 501. http://www.columbia.edu/kermit/index.html
- 502. http://www.columbia.edu/kermit/ckermit80.html#x9.8
- 503. http://www.columbia.edu/kermit/ckermit80.html#x9.8
- 504. http://www.columbia.edu/kermit/ckermit80.html#x9.6
- 505. http://www.columbia.edu/kermit/ckermit80.html#top
- 506. http://www.columbia.edu/kermit/ckermit80.html#contents
- 507. http://www.columbia.edu/kermit/ckermit.html
- 508. http://www.columbia.edu/kermit/index.html
- 509. http://www.columbia.edu/kermit/ckermit80.html#x9.8
- 510. http://www.columbia.edu/kermit/ckermit80.html#x9.8
- 511. http://www.columbia.edu/kermit/ckermit80.html#top
- 512. http://www.columbia.edu/kermit/ckermit80.html#contents
- 513. http://www.columbia.edu/kermit/ckermit.html
- 514. http://www.columbia.edu/kermit/index.html
- 515. http://www.columbia.edu/kermit/ckermit80.html#top
- 516. http://www.columbia.edu/kermit/ckermit80.html#contents
- 517. http://www.columbia.edu/kermit/ckermit.html
- 518. http://www.columbia.edu/kermit/index.html
- 519. http://www.columbia.edu/kermit/ckermit80.html#top
- 520. http://www.columbia.edu/kermit/ckermit80.html#contents
- 521. http://www.columbia.edu/kermit/ckermit.html
- 522. http://www.columbia.edu/kermit/index.html
- 523. mailto:thucdat@hotmail.com
- 524. http://www.columbia.edu/kermit/ckermit80.html#x9.9.2
- 525. http://www.columbia.edu/kermit/ckermit80.html#top
- 526. http://www.columbia.edu/kermit/ckermit80.html#contents
- 527. http://www.columbia.edu/kermit/ckermit.html
- 528. http://www.columbia.edu/kermit/index.html
- 529. http://www.columbia.edu/kermit/ckermit80.html#top
- 530. http://www.columbia.edu/kermit/ckermit80.html#contents
- 531. http://www.columbia.edu/kermit/ckermit.html
- 532. http://www.columbia.edu/kermit/index.html
- 533. http://www.columbia.edu/kermit/ckermit80.html#top
- 534. http://www.columbia.edu/kermit/ckermit80.html#contents
- 535. http://www.columbia.edu/kermit/ckermit.html
- 536. http://www.columbia.edu/kermit/index.html
- 537. http://www.columbia.edu/kermit/ckermit80.html#x9.2
- 538. http://www.columbia.edu/kermit/ckermit80.html#top
- 539. http://www.columbia.edu/kermit/ckermit80.html#contents
- 540. http://www.columbia.edu/kermit/ckermit.html
- 541. http://www.columbia.edu/kermit/index.html
- 542. http://www.columbia.edu/kermit/ckermit80.html#x4
- 543. http://www.columbia.edu/kermit/ckermit80.html#x4
- 544. http://www.columbia.edu/kermit/ckermit80.html#top
- 545. http://www.columbia.edu/kermit/ckermit80.html#contents
- 546. http://www.columbia.edu/kermit/ckermit.html
- 547. http://www.columbia.edu/kermit/index.html
- 548. http://www.columbia.edu/kermit/ckermit80.html#top
- 549. http://www.columbia.edu/kermit/ckermit80.html#contents
- 550. http://www.columbia.edu/kermit/ckermit.html
- 551. http://www.columbia.edu/kermit/index.html
- 552. http://www.columbia.edu/kermit/ckermit80.html#top
- 553. http://www.columbia.edu/kermit/ckermit80.html#contents
- 554. http://www.columbia.edu/kermit/ckermit.html
- 555. http://www.columbia.edu/kermit/index.html
- 556. http://www.columbia.edu/kermit/ckermit80.html#x4
- 557. http://www.columbia.edu/kermit/ckermit80.html#x3.7
- 558. http://www.columbia.edu/kermit/ckermit80.html#x3.7
- 559. http://www.columbia.edu/kermit/ckermit80.html#top
- 560. http://www.columbia.edu/kermit/ckermit80.html#contents
- 561. http://www.columbia.edu/kermit/ckermit.html
- 562. http://www.columbia.edu/kermit/index.html
- 563. ftp://ftp.isi.edu/in-notes/rfc2217.txt
- 564. http://www.columbia.edu/kermit/ckermit80.html#top
- 565. http://www.columbia.edu/kermit/ckermit80.html#contents
- 566. ftp://kermit.columbia.edu/kermit/sredird/
- 567. http://www.columbia.edu/kermit/ckermit.html
- 568. http://www.columbia.edu/kermit/index.html
- 569. http://www.columbia.edu/kermit/ckermi70.htm#x4.22
- 570. http://www.columbia.edu/kermit/ckermit80.html#top
- 571. http://www.columbia.edu/kermit/ckermit80.html#contents
- 572. http://www.columbia.edu/kermit/ckermit.html
- 573. http://www.columbia.edu/kermit/index.html
- 574. http://www.columbia.edu/kermit/ckermit80.html#x3.1.3
- 575. http://www.columbia.edu/kermit/cuiksd.html
- 576. http://www.columbia.edu/kermit/ckermit80.html#top
- 577. http://www.columbia.edu/kermit/ckermit80.html#contents
- 578. http://www.columbia.edu/kermit/ckermit.html
- 579. http://www.columbia.edu/kermit/index.html
- 580. http://www.columbia.edu/kermit/ckermit80.html#top
- 581. http://www.columbia.edu/kermit/ckermit80.html#contents
- 582. http://www.columbia.edu/kermit/ckermit.html
- 583. http://www.columbia.edu/kermit/index.html
- 584. http://www.columbia.edu/kermit/index.html