imported 9.0.299 Beta.01
[ckermit.git] / ckermit70.txt
diff --git a/ckermit70.txt b/ckermit70.txt
deleted file mode 100644 (file)
index 8aca397..0000000
+++ /dev/null
@@ -1,17956 +0,0 @@
-
-   [ [1]Contents ] [ [2]C-Kermit ] [ [3]Kermit Home ]
-
-                 Supplement to Using C-Kermit, Second Edition
-
-For C-Kermit 7.0
-
-As of C-Kermit version:  7.0.196
-This file last updated:  8 February 2000
-
-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:  [4]kermit-support@columbia.edu
-Web:     [5]http://www.columbia.edu/kermit/
-Or:      [6]http://www.kermit-project.org/
-Or:      [7]http://www.columbia.nyc.ny.us/kermit/
-     _________________________________________________________________
-
-  NOTICES
-
-   This document:
-          Copyright © 1997, 2000, Frank da Cruz and Christine M. Gianone.
-          All rights reserved.
-
-   Kermit 95:
-          Copyright © 1995, 2000, Trustees of Columbia University in the
-          City of New York. All rights reserved.
-
-   C-Kermit:
-          Copyright © 1985, 2000,
-          Trustees of Columbia University in the City of New York. All
-          rights reserved. See the C-Kermit [8]COPYING.TXT file or the
-          copyright text in the [9]ckcmai.c module for disclaimer and
-          permissions.
-
-   When Kerberos(TM) and/or SRP(TM) (Secure Remote Password) and/or SSL
-          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
-   [10]Appendix V.
-     _________________________________________________________________
-
-  WHAT IS IN THIS FILE
-
-   This file lists changes made to C-Kermit since the second edition of
-   the book [11]Using C-Kermit was published and C-Kermit 6.0 was
-   released in November 1996. Use this file as a supplement to the second
-   edition of Using C-Kermit until the third edition is published some
-   time in 2000. If the "most recent update" shown above is long ago,
-   contact Columbia University to see if there is a newer release.
-
-   For further information, also see the [12]CKCBWR.TXT ("C-Kermit
-   beware") file for hints, tips, tricks, restrictions, frequently asked
-   questions, etc, plus the system-specific "beware file", e.g.
-   [13]CKUBWR.TXT for UNIX, [14]CKVBWR.TXT for VMS, etc, and also any
-   system-specific update files such as KERMIT95.HTM for Kermit 95 (in
-   the DOCS\MANUAL\ subdirectory of your K95 directory).
-
-     This Web-based copy of the C-Kermit 7.0 update notes supersedes the
-     plain-text CKERMIT2.TXT file. All changes after 19 January 2000
-     appear only here in the Web version. If you need an up-to-date
-     plain-text copy, use your Web browser to save this page as plain
-     text. 
-     _________________________________________________________________
-
-  ABOUT FILENAMES
-
-   In this document, filenames are generally shown in uppercase, but on
-   file systems with case-sensitive names such as UNIX, OS-9, and AOS/VS,
-   lowercase names are used: [15]ckubwr.txt, [16]ckermit70.txt, etc.
-     _________________________________________________________________
-
-  ADDITIONAL FILES
-
-   Several other files accompany this new Kermit release:
-
-   SECURITY.TXT
-          Discussion of Kermit's new authentication and encryption
-          features:
-
-          + [17]Plain-text version
-          + [18]HTML (hypertext) version
-
-   IKSD.TXT
-          How to install and manage an Internet Kermit Service Daemon.
-
-          + [19]Plain-text version
-          + [20]HTML (hypertext) version
-
-          Also see [21]cuiksd.htm for instructions for use.
-
-   TELNET.TXT
-          A thorough presentation of Kermit's new advanced Telnet
-          features and controls.
-
-          + [22]Plain-text version
-          + [23]HTML (hypertext) version
-     _________________________________________________________________
-
-  THE NEW C-KERMIT LICENSE
-
-   The C-Kermit license was rewritten for version 7.0 to grant automatic
-   permission to packagers of free operating-system distributions to
-   include C-Kermit 7.0. Examples include Linux (GNU/Linux), FreeBSD,
-   NetBSD, etc. The new license is in the [24]COPYING.TXT file, and is
-   also displayed by C-Kermit itself when you give the VERSION or
-   COPYRIGHT command. The new C-Kermit license does not apply to
-   [25]Kermit 95.
-     _________________________________________________________________
-
-  ACKNOWLEDGMENTS
-
-   Thanks to Jeff Altman, who joined the Kermit Project in 1995, for much
-   of what you see in C-Kermit 7.0, especially in the networking and
-   security areas, and his key role in designing and implementing the
-   Internet Kermit Service Daemon. And special thanks to Lucas Hart for
-   lots of help with the VMS version; to Peter Eichhorn for continuous
-   testing on the full range of HP-UX versions and for a consolidated set
-   of HP-UX makefile targets; and to Colin Allen, Mark Allen, Roger
-   Allen, Ric Anderson, William Bader, Mitch Baker, Mitchell Bass, Nelson
-   Beebe, Gerry Belanger, Jeff Bernsten, Mark Berryman, John Bigg, Volker
-   Borchert, Jonathan Boswell, Tim Boyer, Frederick Bruckman, Kenneth
-   Cochran, Jared Crapo, Bill Delaney, Igor Sobrado Delgado, Clarence
-   Dold, Joe Doupnik, John Dunlap, Max Evarts, Patrick French, Carl
-   Friedberg, Carl Friend, Hirofumi Fujii, Andrew Gabriel, Gabe Garza,
-   Boyd Gerber, David Gerber, George Gilmer, Hunter Goatley, DJ Hagberg,
-   Kevin Handy, Andy Harper, Randolph Herber, Sven Holström, Michal
-   Jaegermann, Graham Jenkins, Dick Jones, Terry Kennedy, Robert D Keys,
-   Nick Kisseberth, Igor Kovalenko, David Lane, Adam Laurie, Jeff
-   Liebermann, Eric Lonvick, Hoi Wan Louis, Arthur Marsh, Gregorie
-   Martin, Peter Mauzey, Dragan Milicic, Todd Miller, Christian Mondrup,
-   Daniel Morato, Dat Nguyen, Herb Peyerl, Jean-Pierre Radley, Steve
-   Rance, Stephen Riehm, Nigel Roles, Larry Rosenman, Jay S Rouman, David
-   Sanderson, John Santos, Michael Schmitz, Steven Schultz, Bob Shair,
-   Richard Shuford, Fred Smith, Michael Sokolov, Jim Spath, Peter Szell,
-   Ted T'so, Brian Tillman, Linus Torvalds, Patrick Volkerding, Martin
-   Vorländer, Steve Walton, Ken Weaverling, John Weekley, Martin
-   Whitaker, Jim Whitby, Matt Willman, Joellen Windsor, Farrell Woods,
-   and many others for binaries, hosting, reviews, suggestions, advice,
-   bug reports, and all the rest over the 3+ year C-Kermit 7.0
-   development cycle. Thanks to Russ Nelson and the board of the Open
-   Software Initiative ([26]http://www.opensource.org) for their
-   cooperation in developing the new C-Kermit license and to the
-   proprietors of those free UNIX distributions that have incorporated
-   C-Kermit 7.0 for their cooperation and support, especially FreeBSD's
-   Jörg Wunsch.
-     _________________________________________________________________
-
-  NOTE TO KERMIT 95 USERS
-
-   Kermit 95 and C-Kermit share the same command and scripting language,
-   the same Kermit file-transfer protocol implementation, and much else
-   besides.
-
-   Like the book [27]Using C-Kermit, this file concentrates on the
-   aspects of C-Kermit that are common to all versions: UNIX, VMS,
-   Windows, OS/2, VOS, AOS/VS, etc. Please refer to your Kermit 95
-   documentation for information that is specific to Kermit 95.
-
-   C-Kermit 7.0 corresponds to Kermit 95 1.1.19.
-     _________________________________________________________________
-
-  C-KERMIT VERSIONS AND VERSION NUMBERS
-
-   "C-Kermit" refers to all the many programs that are compiled in whole
-   or in part from common C-language source code, comprising:
-
-     * A Kermit file transfer protocol module
-     * A command parser and script execution module
-     * A modem-dialing module
-     * A network support module
-     * A character-set translation module.
-
-   and several others. These "system-independent" modules are combined
-   with system-dependent modules for each platform to provide the
-   required input/output functions, and also in some cases overlaid with
-   an alternative user interface, such as Macintosh Kermit's
-   point-and-click interface, and in some cases also a terminal emulator,
-   as Kermit 95.
-
-   The C-Kermit version number started as 1.0, ... 3.0, 4.0, 4.1 and then
-   (because of confusion at the time with Berkeley UNIX 4.2), 4B, 4C, and
-   so on, with the specific edit number in parentheses, for example
-   4E(072) or 5A(188). This scheme was used through 5A(191), but now we
-   have gone back to the traditional numbering scheme with decimal
-   points: major.minor.edit; for example 7.0.196. Internal version
-   numbers (the \v(version) variable), however, are compatible in
-   C-Kermit 5A upwards.
-
-   Meanwhile, C-Kermit derivatives for some platforms (Windows,
-   Macintosh) might go through several releases while C-Kermit itself
-   remains the same. These versions have their own platform-specific
-   version numbers, such as Kermit 95 1.1.1, 1.1.2, and so on.
-
-   C-Kermit Version History:
-
-  1.0       1981-1982         Command-line only, 4.2 BSD UNIX only
-  2.0       (*)               (who remembers...)
-  3.0       May 1984          Command-line only, supports several platforms
-  4.0-4.1   Feb-Apr 1985 (*)  First interactive and modular version
-  4C(050)   May 1985
-  4D(060)   April 1986
-  4E(066)   August 1987       Long packets
-  4E(068)   January 1988
-  4E(072)   January 1989
-  4F(095)   August 1989 (*)   Attribute packets
-  5A(188)   November 1992     Scripting, TCP/IP, sliding windows (1)
-  5A(189)   September 1993    Control-char unprefixing
-  5A(190)   October 1994      Recovery
-  5A(191)   April 1995        OS/2 only
-  6.0.192   September 1996    Intelligent dialing, autodownload, lots more (2)
-  6.1.193   1997-98 (*)       Development only
-  6.1.194   June 1998         K95 only - switches, directory recursion, more
-  7.0.195   August 1999       IKSD + more (CU only as K95 1.1.18-CU)
-  7.0.196   1 January 2000    Unicode, lots more
-
-   (*) Never formally released (4.0 was a total rewrite)
-   (1) Using C-Kermit, 1st Edition
-   (2) Using C-Kermit, 2nd Edition
-     _________________________________________________________________
-
-CONTENTS
-
- I.  [28]C-KERMIT DOCUMENTATION
-
- II. [29]NEW FEATURES
-
-     (0) [30]INCOMPATIBILITIES WITH PREVIOUS RELEASES
-     (1) [31]PROGRAM AND FILE MANAGEMENT AND COMMANDS
-         1.0.  [32]Bug fixes
-         1.1.  [33]Command Continuation
-         1.2.  [34]Editor Interface
-         1.3.  [35]Web Browser and FTP Interface
-         1.4.  [36]Command Editing
-         1.5.  [37]Command Switches
-               1.5.1. [38]General Switch Syntax
-               1.5.2. [39]Order and Effect of Switches
-               1.5.3. [40]Distinguishing Switches from Other Fields
-               1.5.4. [41]Standard File Selection Switches
-               1.5.5. [42]Setting Preferences for Different Commands
-         1.6.  [43]Dates and Times
-         1.7.  [44]Partial Completion of Keywords
-         1.8.  [45]Command Recall
-         1.9.  [46]EXIT Messages
-         1.10. [47]Managing Keyboard Interruptions
-         1.11. [48]Taming the Wild Backslash -- Part Deux
-               1.11.1. [49]Background
-               1.11.2. [50]Kermit's Quoting Rules
-               1.11.3. [51]Passing DOS Filenames from Kermit to Shell Commands
-               1.11.4. [52]Using Variables to Hold DOS Filenames
-               1.11.5. [53]Passing DOS Filenames as Parameters to Macros
-               1.11.6. [54]Passing DOS File Names from Macro Parameters to the
-DOS Shell
-               1.11.7. [55]Passing DOS Filenames to Kermit from the Shell
-         1.12. [56]Debugging
-         1.13. [57]Logs
-         1.14. [58]Automatic File-Transfer Packet Recognition at the Command Pr
-ompt
-         1.15. [59]The TYPE Command
-         1.16. [60]The RESET Command
-         1.17. [61]The COPY and RENAME Commands
-         1.18. [62]The MANUAL Command
-         1.19. [63]String and Filename Matching Patterns
-         1.20. [64]Multiple Commands on One Line
-         1.21. [65]What Do I Have?
-         1.22. [66]Generalized File Input and Output
-               1.22.1. [67]Why Another I/O System?
-               1.22.2. [68]The FILE Command
-               1.22.3. [69]FILE Command Examples
-               1.22.4. [70]Channel Numbers
-               1.22.5. [71]FILE Command Error Codes
-               1.22.6. [72]File I/O Variables
-               1.22.7. [73]File I/O Functions
-               1.22.8. [74]File I/O Function Examples
-         1.23. [75]The EXEC Command
-         1.24. [76]Getting Keyword Lists with '?'
-     (2) [77]MAKING AND USING CONNECTIONS
-         2.0. [78]SET LINE and SET HOST Command Switches
-         2.1. [79]Dialing
-              2.1.1. [80]The Dial Result Message
-              2.1.2. [81]Long-Distance Dialing Changes
-              2.1.3. [82]Forcing Long-Distance Dialing
-              2.1.4. [83]Exchange-Specific Dialing Decisions
-              2.1.5. [84]Cautions about Cheapest-First Dialing
-              2.1.6. [85]Blind Dialing (Dialing with No Dialtone)
-              2.1.7. [86]Trimming the Dialing Dialog
-              2.1.8. [87]Controlling the Dialing Speed
-              2.1.9. [88]Pretesting Phone Number Conversions
-              2.1.10. [89]Greater Control over Partial Dialing
-              2.1.11. [90]New DIAL-related Variables and Functions
-              2.1.12. [91]Increased Flexibility of PBX Dialing
-              2.1.13. [92]The DIAL macro - Last-Minute Phone Number Conversions
-              2.1.14. [93]Automatic Tone/Pulse Dialing Selection
-              2.1.15. [94]Dial-Modifier Variables
-              2.1.16. [95]Giving Multiple Numbers to the DIAL Command
-         2.2. [96]Modems
-              2.2.1. [97]New Modem Types
-              2.2.2. [98]New Modem Controls
-         2.3. [99]TELNET and RLOGIN
-              2.3.0. [100]Bug Fixes
-              2.3.1. [101]Telnet Binary Mode Bug Adjustments
-              2.3.2. [102]VMS UCX Telnet Port Bug Adjustment
-              2.3.3. [103]Telnet New Environment Option
-              2.3.4. [104]Telnet Location Option
-              2.3.5. [105]Connecting to Raw TCP Sockets
-              2.3.6. [106]Incoming TCP Connections
-         2.4. [107]The EIGHTBIT Command
-         2.5. [108]The Services Directory
-         2.6. [109]Closing Connections
-         2.7. [110]Using C-Kermit with External Communication Programs
-              2.7.0. [111]C-Kermit over tn3270 and tn5250
-              2.7.1. [112]C-Kermit over Telnet
-              2.7.2. [113]C-Kermit over Rlogin
-              2.7.3. [114]C-Kermit over Serial Communication Programs
-              2.7.4. [115]C-Kermit over Secure Network Clients
-              2.7.4.1. [116]SSH
-              2.7.4.2. [117]SSL
-              2.7.4.3. [118]SRP
-              2.7.4.4. [119]SOCKS
-              2.7.4.5. [120]Kerberos and SRP
-         2.8. [121]Scripting Local Programs
-         2.9. [122]X.25 Networking
-              2.9.1. [123]IBM AIXLink/X.25 Network Provider Interface for AIX
-              2.9.2. [124]HP-UX X.25
-         2.10. [125]Additional Serial Port Controls
-         2.11. [126]Getting Access to the Dialout Device
-         2.12. [127]The Connection Log
-         2.13. [128]Automatic Connection-Specific Flow Control Selection
-         2.14. [129]Trapping Connection Establishment and Loss
-         2.15. [130]Contacting Web Servers with the HTTP Command
-     (3) [131]TERMINAL CONNECTION
-         3.1. [132]CONNECT Command Switches
-         3.2. [133]Triggers
-         3.3. [134]Transparent Printing
-         3.4. [135]Binary and Text Session Logs
-     (4) [136]FILE TRANSFER AND MANAGEMENT
-         4.0. [137]Bug Fixes, Minor Changes, and Clarifications
-         4.1. [138]File-Transfer Filename Templates
-         4.1.1. [139]Templates in the As-Name
-         4.1.2. [140]Templates on the Command Line
-         4.1.3. [141]Post-Transfer Renaming
-         4.2. [142]File-Transfer Pipes and Filters
-         4.2.1. [143]Introduction
-         4.2.1.1. [144]Terminology
-         4.2.1.2. [145]Notation
-         4.2.1.3. [146]Security
-         4.2.2. [147]Commands for Transferring from and to Pipes
-         4.2.2.1. [148]Sending from a Command
-         4.2.2.2. [149]Receiving to a Command
-         4.2.3. [150]Using File-Transfer Filters
-         4.2.3.1. [151]The SEND Filter
-         4.2.3.2. [152]The RECEIVE Filter
-         4.2.4. [153]Implicit Use of Pipes
-         4.2.5. [154]Success and Failure of Piped Commands
-         4.2.6. [155]Cautions about Using Pipes to Transfer Directory Trees
-         4.2.7. [156]Pipes and Encryption
-         4.2.8. [157]Commands and Functions Related to Pipes
-         4.2.8.1. [158]The OPEN !READ and OPEN !WRITE Commands
-         4.2.8.2. [159]The REDIRECT Command
-         4.2.8.3. [160]Receiving Mail and Print Jobs
-         4.2.8.4. [161]Pipe-Related Functions
-         4.3. [162]Automatic Per-File Text/Binary Mode Switching
-         4.3.1. [163]Exceptions
-         4.3.2. [164]Overview
-         4.3.3. [165]Commands
-         4.3.4. [166]Examples
-         4.4. [167]File Permissions
-         4.4.1. [168]When ATTRIBUTES PROTECTION is OFF
-         4.4.1.1. [169]Unix
-         4.4.1.2. [170]VMS
-         4.4.2. [171]When ATTRIBUTES PROTECTION is ON
-         4.4.2.1. [172]System-Specific Permissions
-         4.4.2.1.1. [173]UNIX
-         4.4.2.1.2. [174]VMS
-         4.4.2.2. [175]System-Independent Permissions
-         4.5. [176]File Management Commands
-         4.5.1. [177]The DIRECTORY Command
-         4.5.2. [178]The CD and BACK Commands
-         4.5.2.1. [179]Parsing Improvements
-         4.5.2.2. [180]The CDPATH
-         4.5.3. [181]Creating and Removing Directories
-         4.5.4. [182]The DELETE and PURGE Commands
-         4.6. [183]Starting the Remote Kermit Server Automatically
-         4.7. [184]File-Transfer Command Switches
-         4.7.1. [185]SEND Command Switches
-         4.7.2. [186]GET Command Switches
-         4.7.3. [187]RECEIVE Command Switches
-         4.8. [188]Minor Kermit Protocol Improvements
-         4.8.1. [189]Multiple Attribute Packets
-         4.8.2. [190]Very Short Packets
-         4.9. [191]Wildcard / File Group Expansion
-         4.9.1. [192]In UNIX C-Kermit
-         4.9.2. [193]In Kermit 95
-         4.9.3. [194]In VMS, AOS/VS, OS-9, VOS, etc.
-         4.10. [195]Additional Pathname Controls
-         4.11. [196]Recursive SEND and GET: Transferring Directory Trees
-         4.11.1. [197]Command-Line Options
-         4.11.2. [198]The SEND /RECURSIVE Command
-         4.11.3. [199]The GET /RECURSIVE Command
-         4.11.4. [200]New and Changed File Functions
-         4.11.5. [201]Moving Directory Trees Between Like Systems
-         4.11.6. [202]Moving Directory Trees Between Unlike Systems
-         4.12. [203]Where Did My File Go?
-         4.13. [204]File Output Buffer Control
-         4.14. [205]Improved Responsiveness
-         4.15. [206]Doubling and Ignoring Characters for Transparency
-         4.16. [207]New File-Transfer Display Formats
-         4.17. [208]New Transaction Log Formats
-         4.17.1. [209]The BRIEF Format
-         4.17.2. [210]The FTP Format
-         4.18. [211]Unprefixing NUL
-         4.19. [212]Clear-Channel Protocol
-         4.20. [213]Streaming Protocol
-         4.20.1. [214]Commands for Streaming
-         4.20.2. [215]Examples of Streaming
-         4.20.2.1. [216]Streaming on Socket-to-Socket Connections
-         4.20.2.2. [217]Streaming on Telnet Connections
-         4.20.2.3. [218]Streaming with Limited Packet Length
-         4.20.2.4. [219]Streaming on Dialup Connections
-         4.20.2.5. [220]Streaming on X.25 Connections
-         4.20.3. [221]Streaming - Preliminary Conclusions
-         4.21. [222]The TRANSMIT Command
-         4.22. [223]Coping with Faulty Kermit Implementations
-         4.22.1. [224]Failure to Accept Modern Negotiation Strings
-         4.22.2. [225]Failure to Negotiate 8th-bit Prefixing
-         4.22.3. [226]Corrupt Files
-         4.22.4. [227]Spurious Cancellations
-         4.22.5. [228]Spurious Refusals
-         4.22.6. [229]Failures during the Data Transfer Phase
-         4.22.7. [230]Fractured Filenames
-         4.22.8. [231]Bad File Dates
-         4.23. [232]File Transfer Recovery
-         4.24. [233]FILE COLLISION UPDATE Clarification
-         4.25. [234]Autodownload Improvements
-     (5) [235]CLIENT/SERVER
-         5.0. [236]Hints
-         5.1. [237]New Command-Line Options
-         5.2. [238]New Client Commands
-         5.3. [239]New Server Capabilities
-         5.3.1. [240]Creating and Removing Directories
-         5.3.2. [241]Directory Listings
-         5.4. [242]Syntax for Remote Filenames with Embedded Spaces
-         5.5. [243]Automatic Orientation Messages upon Directory Change
-         5.6. [244]New Server Controls
-         5.7. [245]Timeouts during REMOTE HOST Command Execution
-     (6) [246]INTERNATIONAL CHARACTER SETS
-         6.0. [247]ISO 8859-15 Latin Alphabet 9
-         6.1. [248]The HP-Roman8 Character Set
-         6.2. [249]Greek Character Sets
-         6.3. [250]Additional Latin-2 Character Sets
-         6.4. [251]Additional Cyrillic Character Sets
-         6.5. [252]Automatic Character-Set Switching
-         6.6. [253]Unicode
-         6.6.1. [254]Overview of Unicode
-         6.6.2. [255]UCS Byte Order
-         6.6.2. [256]UCS Transformation Formats
-         6.6.3. [257]Conformance Levels
-         6.6.4. [258]Relationship of Unicode with Kermit's Other Character Sets
-         6.6.5. [259]Kermit's Unicode Features
-         6.6.5.1. [260]File Transfer
-         6.6.5.2. [261]The TRANSLATE Command
-         6.6.5.3. [262]Terminal Connection
-         6.6.5.4. [263]The TRANSMIT Command
-         6.6.5.5. [264]Summary of Kermit Unicode Commands
-         6.7. [265]Client/Server Character-Set Switching
-     (7) [266]SCRIPT PROGRAMMING
-         7.0. [267]Bug Fixes
-         7.1. [268]The INPUT Command
-         7.1.1. [269]INPUT Timeouts
-         7.1.2. [270]New INPUT Controls
-         7.1.3. [271]INPUT with Pattern Matching
-         7.1.4. [272]The INPUT Match Result
-         7.2. [273]New or Improved Built-In Variables
-         7.3. [274]New or Improved Built-In Functions
-         7.4. [275]New IF Conditions
-         7.5. [276]Using More than Ten Macro Arguments
-         7.6. [277]Clarification of Function Call Syntax
-         7.7. [278]Autodownload during INPUT Command Execution
-         7.8. [279]Built-in Help for Functions.
-         7.9. [280]Variable Assignments
-         7.9.1. [281]Assignment Operators
-         7.9.2. [282]New Assignment Commands
-         7.10. [283]Arrays
-         7.10.1. [284]Array Initializers
-         7.10.2. [285]Turning a String into an Array of Words
-         7.10.3. [286]Arrays of Filenames
-         7.10.4. [287]Automatic Arrays
-         7.10.5. [288]Sorting Arrays
-         7.10.6. [289]Displaying Arrays
-         7.10.7. [290]Other Array Operations
-         7.10.8. [291]Hints for Using Arrays
-         7.10.9. [292]Do-It-Yourself Arrays
-         7.10.10. [293]Associative Arrays
-         7.11. [294]OUTPUT Command Improvements
-         7.12. [295]Function and Variable Diagnostics
-         7.13. [296]Return Value of Macros
-         7.14. [297]The ASSERT, FAIL, and SUCCEED Commands.
-         7.15. [298]Using Alarms
-         7.16. [299]Passing Arguments to Command Files
-         7.17. [300]Dialogs with Timed Responses
-         7.18. [301]Increased Flexibility of SWITCH Case Labels
-         7.19. "[302]Kerbang" Scripts
-         7.20. [303]IF and XIF Statement Syntax
-         7.20.1. [304]The IF/XIF Distinction
-         7.20.2. [305]Boolean Expressions (The IF/WHILE Condition)
-         7.21. [306]Screen Formatting and Cursor Control
-         7.22. [307]Evaluating Arithmetic Expressions
-         7.23. [308]Floating-Point Arithmetic
-         7.24. [309]Tracing Script Execution
-         7.25. [310]Compact Substring Notation
-         7.26. [311]New WAIT Command Options
-         7.26.1. [312]Waiting for Modem Signals
-         7.26.2. [313]Waiting for File Events
-         7.27. [314]Relaxed FOR and SWITCH Syntax
-     (8) [315]USING OTHER FILE TRANSFER PROTOCOLS
-     (9) [316]COMMAND-LINE OPTIONS
-         9.0. [317]Extended-Format Command-Line Options
-         9.1. [318]Command Line Personalities
-         9.2. [319]Built-in Help for Command Line Options
-         9.3. [320]New Command-Line Options
-    (10) [321]C-KERMIT AND G-KERMIT
-
-III. [322]APPENDICES
-
-III.1. [323]Character Set Tables
-III.1.1. [324]The Hewlett Packard Roman8 Character Set
-III.1.2. [325]Greek Character Sets
-III.1.2.1. [326]The ISO 8859-7 Latin / Greek Alphabet
-III.1.2.2. [327]The ELOT 927 Character Set
-III.1.2.3. [328]PC Code Page 869
-III.2. [329]Updated Country Codes
-
-IV. [330]ERRATA & CORRIGENDA: Corrections to "Using C-Kermit" 2nd Edition.
-V. [331]ADDITIONAL COPYRIGHT NOTICES
-     _________________________________________________________________
-
-I. C-KERMIT DOCUMENTATION
-
-   The user manual for C-Kermit is:
-
-     Frank da Cruz and Christine M. Gianone, [332]Using C-Kermit, Second
-     Edition, Digital Press / Butterworth-Heinemann, Woburn, MA, 1997,
-     622 pages, ISBN 1-55558-164-1.
-
-   [333]CLICK HERE for reviews.
-
-   The present document is a supplement to Using C-Kermit 2nd Ed, not a
-   replacement for it.
-
-   US single-copy price: $52.95; quantity discounts available. Available
-   in bookstores or directly from Columbia University:
-
-  The Kermit Project
-  Columbia University
-  612 West 115th Street
-  New York NY  10025-7799
-  USA
-  Telephone: +1 (212) 854-3703
-  Fax:       +1 (212) 662-6442
-
-   Domestic and overseas orders accepted. Price: US $44.95 (US, Canada,
-   and Mexico). Shipping: $4.00 within the USA; $15.00 to all other
-   countries. Orders may be paid by MasterCard or Visa, or prepaid by
-   check in US dollars. Add $65 bank fee for checks not drawn on a US
-   bank. Do not include sales tax. Inquire about quantity discounts.
-
-   You can also order by phone from the publisher, Digital Press /
-   [334]Butterworth-Heinemann, with MasterCard, Visa, or American
-   Express:
-
-  +1 800 366-2665   (Woburn, Massachusetts office for USA & Canada)
-  +44 1865 314627   (Oxford, England distribution centre for UK & Europe)
-  +61 03 9245 7111  (Melbourne, Vic, office for Australia & NZ)
-  +65 356-1968      (Singapore office for Asia)
-  +27 (31) 2683111  (Durban office for South Africa)
-
-   A [335]German-language edition of the First Edition is also available:
-
-     Frank da Cruz and Christine M. Gianone, C-Kermit - Einführung und
-     Referenz, Verlag Heinz Heise, Hannover, Germany (1994). ISBN
-     3-88229-023-4. Deutsch von Gisbert W. Selke. Price: DM 88,00.
-     Verlag Heinz Heise GmbH & Co. KG, Helstorfer Strasse 7, D-30625
-     Hannover. Tel. +49 (05 11) 53 52-0, Fax. +49 (05 11) 53 52-1 29.
-
-   The [336]Kermit file transfer protocol is specified in:
-
-     Frank da Cruz, Kermit, A File Transfer Protocol, Digital Press,
-     Bedford, MA, 1987, 379 pages, ISBN 0-932376-88-6. US single-copy
-     price: $39.95. Availability as above.
-
-   News and articles about Kermit software and protocol are published
-   periodically in the journal, [337]Kermit News. Subscriptions are free;
-   contact Columbia University at the address above.
-
-   Online news about Kermit is published in the
-   [338]comp.protocols.kermit.announce and
-   [339]comp.protocols.kermit.misc newsgroups.
-     _________________________________________________________________
-
-II. NEW FEATURES
-
-   Support for the Bell Labs Plan 9 operating system was added to version
-   6.0 too late to be mentioned in the book (although it does appear on
-   the cover).
-
-   Specific changes and additions are grouped together by major topic,
-   roughly corresponding to the chapters of [340]Using C-Kermit.
-     _________________________________________________________________
-
-  0. INCOMPATIBILITIES WITH PREVIOUS RELEASES
-
-    1. C-Kermit 7.0 uses FAST Kermit protocol settings by default. This
-       includes "unprefixing" of certain control characters. Because of
-       this, file transfers that worked with previous releases might not
-       work in the new release (but it is more likely that they will
-       work, and much faster). If a transfer fails, you'll get a
-       context-sensitive hint suggesting possible causes and cures.
-       Usually SET PREFIXING ALL does the trick.
-    2. C-Kermit 7.0 transfers files in BINARY mode by default. To restore
-       the previous behavior, put SET FILE TYPE TEXT in your C-Kermit
-       initialization file.
-    3. No matter whether FILE TYPE is BINARY or TEXT by default, C-Kermit
-       7.0 now switches between text and binary mode automatically on a
-       per-file basis according to various criteria, including (a) which
-       kind of platform is on the other end of the connection (if known),
-       (b) the version of Kermit on the other end, and (c) the file's
-       name (see [341]Section 4, especially [342]4.3). To disable this
-       automatic switching and restore the earlier behavior, put SET
-       TRANSFER MODE MANUAL in your C-Kermit initialization file. To
-       disable automatic switching for a particular transfer, include a
-       /TEXT or /BINARY switch with your SEND or GET command.
-    4. The RESEND and REGET commands automatically switch to binary mode;
-       previously if RESEND or REGET were attempted when FILE TYPE was
-       TEXT, these commands would fail immediately, with a message
-       telling you they work only when the FILE TYPE is BINARY. Now they
-       simply do this for you. See [343]Section 4.23 for additional
-       (important) information.
-    5. SET PREFIXING CAUTIOUS and MINIMAL now both prefix linefeed (10
-       and 138) in case rlogin, ssh, or cu are "in the middle", since
-       otherwise <LF>~ might appear in Kermit packets, and this would
-       cause rlogin, ssh, or cu to disconnect, suspend,escape back, or
-       otherwise wreck the file transfer. Xon and Xoff are now always
-       prefixed too, even when Xon/Xoff flow control is not in effect,
-       since unprefixing them has proven dangerous on TCP/IP connections.
-    6. In UNIX, VMS, Windows, and OS/2, the DIRECTORY command is built
-       into C-Kermit itself rather than implemented by running an
-       external command or program. The built-in command might not behave
-       the way the platform-specific external one did, but many options
-       are available for customization. Of course the underlying
-       platform-specific command can still be accessed with "!", "@", or
-       "RUN" wherever the installation does not forbid. In UNIX, the "ls"
-       command can be accessed directly as "ls" in C-Kermit. See
-       [344]Section 4.5.1 for details.
-    7. SEND ? prints a list of switches rather than a list of filenames.
-       If you want to see a list of filenames, use a (system-dependent)
-       construction such as SEND ./? (for UNIX, Windows, or OS/2), SEND
-       []? (VMS), etc. See [345]Sections 1.5 and [346]4.7.1.
-    8. In UNIX, OS-9, and Kermit 95, the wildcard characters in previous
-       versions were * and ?. In C-Kermit 7.0 they are *, ?, [, ], {, and
-       }, with dash used inside []'s to denote ranges and comma used
-       inside {} to separate list elements. If you need to include any of
-       these characters literally in a filename, precede each one with
-       backslash (\). See [347]Section 4.9.
-    9. SET QUIET { ON, OFF } is now on the command stack, just like SET
-       INPUT CASE, SET COUNT, SET MACRO ERROR, etc, as described on p.458
-       of [348]Using C-Kermit, 2nd Edition. This allows any macro or
-       command file to SET QUIET ON or OFF without worrying about saving
-       and restoring the global QUIET value. For example, this lets you
-       write a script that tries SET LINE on lots of devices until it
-       finds one free without spewing out loads of error messages, and
-       also without disturbing the global QUIET setting, whatever it was.
-   10. Because of the new "." operator (which introduces assignments),
-       macros whose names begin with "." can not be invoked "by name".
-       However, they still can be invoked with DO.
-   11. The syntax of the EVALUATE command has changed. See [349]Section
-       7.9.2. To restore the previous syntax, use SET EVALUATE OLD.
-   12. The \v(directory) variable now includes the trailing directory
-       separator; in previous releases it did not. This is to allow
-       constructions such as:
-  cd \v(dir)data.tmp
-       to work across platforms that might have different directory
-       notation, such as UNIX, Windows, and VMS.
-   13. Prior to C-Kermit 7.0, the FLOW-CONTROL setting was global and
-       sticky. In C-Kermit 7.0, there is an array of default flow-control
-       values for each kind of connection, that are applied automatically
-       at SET LINE/PORT/HOST time. Thus a SET FLOW command given before
-       SET LINE/PORT/HOST is likely to be undone. Therefore SET FLOW can
-       be guaranteed to have the desired effect only if given after the
-       SET LINE/PORT/HOST command.
-   14. Character-set translation works differently in the TRANSMIT
-       command when (a) the file character-set is not the same as the
-       local end of the terminal character-set, or (b) when the terminal
-       character-set is TRANSPARENT.
-     _________________________________________________________________
-
-  1. PROGRAM AND FILE MANAGEMENT AND COMMANDS
-
-  1.0. Bug Fixes
-
-   The following patches were issued to correct bugs in C-Kermit 6.0.
-   These are described in detail in the 6.0 PATCHES file. All of these
-   fixes have been incorporated in C-Kermit 6.1 (never released except as
-   K95 1.1.16-17) and 7.0.
-
- 0001   All UNIX         C-Kermit mishandles timestamps on files before 1970
- 0002   Solaris 2.5++    Compilation error on Solaris 2.5 with Pro C
- 0003   All VMS          CKERMIT.INI Fix for VMS
- 0004   VMS/VAX/UCX 2.0  C-Kermit 6.0 can't TELNET on VAX/VMS with UCX 2.0
- 0005   All              C-Kermit Might Send Packets Outside Window
- 0006   All              MOVE from SEND-LIST does not delete original files
- 0007   Solaris 2.5++    Higher serial speeds on Solaris 2.5
- 0008   All              C-Kermit application file name can't contain spaces
- 0009   AT&T 7300 UNIXPC setuid and hardware flow-control problems
- 0010   Linux on Alpha   Patch to make ckutio.c compile on Linux/Alpha
- 0011   OS-9/68000 2.4   Patch to make ck9con.c compile on OS-9/68000 2.4
- 0012   MW Coherent 4.2  Patches for successful build on Coherent 4.2
- 0013   SINIX-Y 5.43     "delay" variable conflicts with <sys/clock.h>
- 0014   VMS/VAX/CMU-IP   Subject: Patches for VAX/VMS 5.x + CMU-IP
- 0015   All              XECHO doesn't flush its output
- 0016   VMS              CD and other directory operations might not work
- 0017   Linux 1.2.x++    Use standard POSIX interface for high serial speeds
- 0018   UNIX             SET WILDCARD-EXPANSION SHELL dumps core
- 0019   All              Hayes V.34 modem init string problem
- 0020   All              READ command does not fail if file not open
- 0021   All              Problems with long function arguments
- 0022   All              Certain \function()s can misbehave
- 0023   All              X MOD 0 crashes program
- 0024   All              Internal bulletproofing for lower() function
- 0025   OpenBSD          Real OpenBSD support for C-Kermit 6.0
- 0026   All              Incorrect checks for macro/command-file nesting depth
- 0027   All              ANSWER doesn't automatically CONNECT
- 0028   All              Overzealous EXIT warning
- 0029   All              OUTPUT doesn't echo when DUPLEX is HALF
- 0030   All              Minor problems with REMOTE DIRECTORY/DELETE/etc
- 0031   All              CHECK command broken
- 0032   All              Problem with SET TRANSMIT ECHO
- 0033   UNIX, VMS, etc   HELP SET SERVER says too much
- 0034   All              READ and !READ too picky about line terminators
- 0035   All              END from inside SWITCH doesn't work
- 0036   All              Problem telnetting to multihomed hosts
- 0037   All              Redirection failures in REMOTE xxx > file
-
-   REDIRECT was missing in many UNIX C-Kermit implementations; in version
-   7.0, it should be available in all of them.
-     _________________________________________________________________
-
-  1.1. Command Continuation
-
-   Comments that start with ";" or "#" can no longer be continued. In:
-
-  ; this is a comment -
-  echo blah
-
-   the ECHO command will execute, rather than being taken as a
-   continuation of the preceding comment line. This allows easy
-   "commenting out" of commands from macro definitions.
-
-   However, the text of the COMMENT command can still be continued onto
-   subsequent lines:
-
-  comment this is a comment -
-  echo blah
-
-   As of version 6.0, backslash is no longer a valid continuation
-   character. Only hyphen should be used for command continuation. This
-   is to make it possible to issue commands like "cd a:\" on DOS-like
-   systems.
-
-   As of version 7.0:
-
-     * You can quote a final dash to prevent it from being a continuation
-       character:
-  echo foo\-
-       This prints "foo-". The command is not continued.
-     * You can enter commands such as:
-  echo foo - ; this is a comment
-       interactively and they are properly treated as continued commands.
-       Previously this worked only in command files.
-     _________________________________________________________________
-
-  1.2. Editor Interface
-
-   SET EDITOR name [ options ]
-          Lets you specify a text-editing program. The name can be a
-          fully specified pathname like /usr/local/bin/emacs19/emacs, or
-          it can be the name of any program in your PATH, e.g. "set
-          editor emacs". In VMS, it must be a DCL command like "edit",
-          "edit/tpu", "emacs", etc. If an environment variable EDITOR is
-          defined when Kermit starts, its value is the default editor.
-          You can also specify options to be included on the editor
-          command line. Returns to Kermit when the editor exits.
-
-   EDIT [ filename ]
-          If the EDIT command is given without a filename, then if a
-          previous filename had been given to an EDIT command, it is
-          used; if not, the editor is started without a file. If a
-          filename is given, the editor is started on that file, and the
-          filename is remembered for subsequent EDIT commands.
-
-   SHOW EDITOR
-          Displays the full pathname of your text editor, if any, along
-          with any command line options, and the file most recently
-          edited (and therefore the default filename for your next EDIT
-          command).
-
-   Related variables: \v(editor), \v(editopts), \v(editfile).
-     _________________________________________________________________
-
-  1.3. Web Browser and FTP Interface
-
-   C-Kermit includes an FTP command, which simply runs the FTP program;
-   C-Kermit does not include any built-in support for Internet File
-   Transfer Protocol, nor any method for interacting directly with an FTP
-   server. In version 7.0, however, C-Kermit lets you specify your FTP
-   client:
-
-   SET FTP-CLIENT [ name [ options ] ]
-          The name is the name of the FTP executable. In UNIX, Windows,
-          or OS/2, it can be the filename of any executable program in
-          your PATH (e.g. "ftp.exe" in Windows, "ftp" in UNIX); elsewhere
-          (or if you do not have a PATH definition), it must be the fully
-          specified pathname of the FTP program. If the name contains any
-          spaces, enclose it braces. Include any options after the
-          filename; these depend the particular ftp client.
-
-   The Web browser interface is covered in the following subsections.
-     _________________________________________________________________
-
-    1.3.1. Invoking your Browser from C-Kermit
-
-   BROWSE [ url ]
-          Starts your preferred Web browser on the URL, if one is given,
-          otherwise on the most recently given URL, if any. Returns to
-          Kermit when the browser exits.
-
-   SET BROWSER [ name [ options ] ]
-          Use this command to specify the name of your Web browser
-          program, for example: "set browser lynx". The name must be in
-          your PATH, or else it must be a fully specified filename; in
-          VMS it must be a DCL command.
-
-   SHOW BROWSER
-          Displays the current browser, options, and most recent URL.
-
-   Related variables: \v(browser), \v(browsopts), \v(browsurl).
-
-   Also see [350]Section 2.15: Contacting Web Servers with the HTTP
-   Command.
-     _________________________________________________________________
-
-    1.3.2. Invoking C-Kermit from your Browser
-
-   The method for doing this depends, of course, on your browser. Here
-   are some examples:
-
-   Netscape on UNIX (X-based)
-          In the Options->Applications section, set your Telnet
-          application to:
-
-  xterm -e /usr/local/bin/kermit/kermit -J %h %p
-
-          (replace "/usr/local/bin/kermit/kermit" by C-Kermit's actual
-          pathname). -J is C-Kermit's command-line option to "be like
-          Telnet"; %h and %p are Netscape placeholders for hostname and
-          port.
-
-   Lynx on UNIX
-          As far as we know, this can be done only at compile time. Add
-          the following line to the Lynx userdefs.h file before building
-          the Lynx binary:
-
-  #define TELNET_COMMAND "/opt/bin/kermit -J"
-
-          And then add lines like the following to the Lynx.cfg file:
-
-  DOWNLOADER:Kermit binary download:/opt/bin/kermit -i -V -s %s -a %s:TRUE
-  DOWNLOADER:Kermit text download:/opt/bin/kermit -s %s -a %s:TRUE
-
-  UPLOADER:Kermit binary upload:/opt/bin/kermit -i -r -a %s:TRUE
-  UPLOADER:Kermit text upload:/opt/bin/kermit -r -a %s:TRUE
-  UPLOADER:Kermit text get:/opt/bin/kermit -g %s:TRUE
-  UPLOADER:Kermit binary get:/opt/bin/kermit -ig %s:TRUE
-
-   But none of the above is necessary if you make C-Kermit your default
-   Telnet client, which you can do by making a symlink called 'telnet' to
-   the C-Kermit 7.0 binary. See [351]Section 9.1 for details.
-     _________________________________________________________________
-
-  1.4. Command Editing
-
-   Ctrl-W ("Word delete") was changed in 7.0 to delete back to the
-   previous non-alphanumeric, rather than all the way back to the
-   previous space.
-     _________________________________________________________________
-
-  1.5. Command Switches
-
-   As of version 7.0, C-Kermit's command parser supports a new type of
-   field, called a "switch". This is an optional command modifier.
-
-    1.5.1. General Switch Syntax
-
-   A switch is a keyword beginning with a slash (/). If it takes a value,
-   then the value is appended to it (with no intervening spaces),
-   separated by a colon (:) or equal sign (=). Depending on the switch,
-   the value may be a number, a keyword, a filename, a date/time, etc.
-   Examples:
-
-  send oofa.txt                              ; No switches
-  send /binary oofa.zip                      ; A switch without a value
-  send /protocol:zmodem oofa.zip             ; A switch with a value (:)
-  send /protocol=zmodem oofa.zip             ; A switch with a value (=)
-  send /text /delete /as-name:x.x oofa.txt   ; Several switches
-
-   Like other command fields, switches are separated from other fields,
-   and from each other, by whitespace, as shown in the examples just
-   above. You can not put them together like so:
-
-  send/text/delete/as-name:x.x oofa.txt
-
-   (as you might do in VMS or DOS, or as we might once have done in
-   TOPS-10 or TOPS0-20, or PIP). This is primarily due to ambiguity
-   between "/" as switch introducer versus "/" as UNIX directory
-   separator; e.g. in:
-
-  send /delete/as-name:foo/text oofa.txt
-
-   Does "foo/text" mean the filename is "foo" and the transfer is to be
-   in text mode, or does it mean the filename is "foo/text"? Therefore we
-   require whitespace between switches to resolve the ambiguity. (That's
-   only one of several possible ambiguities -- it is also conceivable
-   that a file called "text" exists in the path "/delete/as-name:foo/").
-
-   In general, if a switch can take a value, but you omit it, then either
-   a reasonable default value is supplied, or an error message is
-   printed:
-
-  send /print:-Plaserwriter oofa.txt         ; Value included = print options
-  send /print oofa.txt                       ; Value omitted, OK
-  send /mail:kermit@columbia.edu oofa.txt    ; Value included = address
-  send /mail oofa.txt                        ; Not OK - address required
-  ?Address required
-
-   Context-sensitive help (?) and completion (Esc or Tab) are available
-   in the normal manner:
-
-  C-Kermit> send /pr? Switch, one of the following:
-    /print /protocol
-  C-Kermit> send /pro<ESC>tocol:?  File-transfer protocol,
-   one of the following:
-    kermit   xmodem   ymodem   ymodem-g   zmodem
-  C-Kermit> send /protocol:k<TAB>ermit
-
-   If a switch takes a value and you use completion on it, a colon (:) is
-   printed at the end of its name to indicate this. If it does not take a
-   value, a space is printed.
-
-   Also, if you type ? in a switch field, switches that take values are
-   shown with a trailing colon; those that don't take values are shown
-   without one.
-     _________________________________________________________________
-
-    1.5.2. Order and Effect of Switches
-
-   The order of switches should not matter, except that they are
-   evaluated from left to right, so if you give two switches with
-   opposite effects, the rightmost one is used:
-
-  send /text /binary oofa.zip                ; Sends oofa.zip in binary mode.
-
-   Like other command fields, switches have no effect whatsoever until
-   the command is entered (by pressing the Return or Enter key). Even
-   then, switches affect only the command with which they are included;
-   they do not have global effect or side effects.
-     _________________________________________________________________
-
-    1.5.3. Distinguishing Switches from Other Fields
-
-   All switches are optional. A command that uses switches lets you give
-   any number of them, including none at all. Example:
-
-  send /binary oofa.zip
-  send /bin /delete oofa.zip
-  send /bin /as-name:mupeen.zip oofa.zip
-  send oofa.zip
-
-   But how does Kermit know when the first "non-switch" is given? It has
-   been told to look for both a switch and for something else, the data
-   type of the next field (filename, number, etc). In most cases, this
-   works well. But conflicts are not impossible. Suppose, for example, in
-   UNIX there was a file named "text" in the top-level directory. The
-   command to send it would be:
-
-  send /text
-
-   But C-Kermit would think this was the "/text" switch. To resolve the
-   conflict, use braces:
-
-  send {/text}
-
-   or other circumlocutions such as "send //text", "send /./text", etc.
-
-   The opposite problem can occur if you give an illegal switch that
-   happens to match a directory name. For example:
-
-  send /f oofa.txt
-
-   There is no "/f" switch (there are several switches that begin with
-   "/f", so "/f" is ambiguous). Now suppose there is an "f" directory in
-   the root directory; then this command would be interpreted as:
-
-     Send all the files in the "/f" directory, giving each one an
-     as-name of "oofa.txt".
-
-   This could be a mistake, or it could be exactly what you intended;
-   C-Kermit has no way of telling the difference. To avoid situations
-   like this, spell switches out in full until you are comfortable enough
-   with them to know the minimum abbreviation for each one. Hint: use ?
-   and completion while typing switches to obtain the necessary feedback.
-     _________________________________________________________________
-
-    1.5.4. Standard File Selection Switches
-
-   The following switches are used on different file-oriented commands
-   (such as SEND, DIRECTORY, DELETE, PURGE) to refine the selection of
-   files that match the given specification.
-
-   /AFTER:date-time
-          Select only those files having a date-time later than the one
-          given. See [352]Section 1.6 for date-time formats. Synonym:
-          /SINCE.
-
-   /NOT-AFTER:date-time
-          Select only those files having a date-time not later than (i.e.
-          earlier or equal to) the one given. Synonym: /NOT-SINCE.
-
-   /BEFORE:date-time
-          Select only those files having a date-time earlier than the one
-          given.
-
-   /NOT-BEFORE:date-time
-          Select only those files having a date-time not earlier than
-          (i.e. later or equal to) the one given.
-
-   /DOTFILES
-          UNIX and OS-9 only: The filespec is allowed to match files
-          whose names start with (dot) period. Normally these files are
-          not shown.
-
-   /NODOTFILES
-          (UNIX and OS-9 only) Don't show files whose names start with
-          dot (period). This is the opposite of /DOTFILES, and is the
-          default. Note that when a directory name starts with a period,
-          the directory and (in recursive operations) all its
-          subdirectories are skipped.
-
-   /LARGER-THAN:number
-          Only select files larger than the given number of bytes.
-
-   /SMALLER-THAN:number
-          Only select files smaller than the given number of bytes.
-
-   /EXCEPT:pattern
-          Specifies that any files whose names match the pattern, which
-          can be a regular filename, or may contain "*" and/or "?"
-          metacharacters (wildcards), are not to be selected. Example:
-
-  send /except:*.log *.*
-
-          sends all files in the current directory except those with a
-          filetype of ".log". Another:
-
-  send /except:*.~*~ *.*
-
-          sends all files except the ones that look like Kermit or EMACS
-          backup files (such as "oofa.txt.~17~") (of course you can also
-          use the /NOBACKUP switch for this).
-
-          The pattern matcher is the same one used by IF MATCH string
-          pattern ([353]Section 7.4), so you can test your patterns using
-          IF MATCH. If you need to match a literal * or ? (etc), precede
-          it by a backslash (\). If the pattern contains any spaces, it
-          must be enclosed in braces:
-
-  send /except:{Foo bar} *.*
-
-          The pattern can also be a list of up to 8 patterns. In this
-          case, the entire pattern must be enclosed in braces, and each
-          sub-pattern must also be enclosed in braces; this eliminates
-          the need for designating a separator character, which is likely
-          to also be a legal filename character on some platform or
-          other, and therefore a source of confusion. You may include
-          spaces between the subpatterns but they are not necessary. The
-          following two commands are equivalent:
-
-  send /except:{{ck*.o} {ck*.c}} ck*.?
-  send /except:{{ck*.o}{ck*.c}} ck*.?
-
-          If a pattern is to include a literal brace character, precede
-          it with "\". Also note the apparent conflict of this list
-          format and the string-list format described in [354]Section
-          4.9.1. In case you want to include a wildcard string-list with
-          braces on its outer ends as an /EXCEPT: argument, do it like
-          this:
-
-  send /except:{{{ckuusr.c,ckuus2.c,ckuus6.c}}} ckuus*.c
-     _________________________________________________________________
-
-    1.5.5. Setting Preferences for Different Commands
-
-   Certain oft-used commands offer lots of switches because different
-   people have different requirements or preferences. For example, some
-   people want to be able to delete files without having to watch a list
-   of the deleted files scroll past, while others want to be prompted for
-   permission to delete each file. Different people prefer different
-   directory-listing styles. And so on. Such commands can be tailored
-   with the SET OPTIONS command:
-
-   SET OPTIONS command [ switch [ switch [ ... ] ] ]
-          Sets each switch as the default for the given command,
-          replacing the "factory default". Of course you can also
-          override any defaults established by the SET OPTIONS command by
-          including the relevant switches in the affected command any
-          time you issue it.
-
-   SHOW OPTIONS
-          Lists the commands that allows option-setting, and the options
-          currently in effect, if any, for each. Switches that have
-          synonyms are shown under their primary name; for example. /LOG
-          and /VERBOSE are shown as /LIST.
-
-   Commands for which options may be set include DIRECTORY, DELETE,
-   PURGE, and TYPE. Examples:
-
-  SET OPTIONS DIRECTORY /PAGE /NOBACKUP /HEADING /SORT:DATE /REVERSE
-  SET OPTIONS DELETE /LIST /NOHEADING /NOPAGE /NOASK /NODOTFILES
-  SET OPTIONS TYPE /PAGE
-
-   Not necessarily all of a command's switches can be set as options. For
-   example, file selection switches, since these would normally be
-   different for each command.
-
-   Put the desired SET OPTIONS commands in your C-Kermit customization
-   file for each command whose default switches you want to change every
-   time you run C-Kermit.
-     _________________________________________________________________
-
-  1.6. Dates and Times
-
-   Some commands and switches take date-time values, such as:
-
-  send /after:{8-Feb-2000 10:28:01}
-
-   Various date-time formats are acceptable. The rules for the date are:
-
-     * The year must have 4 digits.
-     * If the year comes first, the second field is the month.
-     * The day, month, and year may be separated by spaces, /, -, or
-       underscore.
-     * The month may be numeric (1 = January) or spelled out or
-       abbreviated in English.
-
-   If the date-time string contains any spaces, it must be enclosed in
-   braces. Examples of legal dates:
-
-                           Interpretation:
-  2000-Feb-8                8 February 2000
-  {2000 Feb 8}              8 February 2000
-  2000/Feb/8                8 February 2000
-  2000_Feb_8                8 February 2000
-  2000-2-8                  8 February 2000
-  2000-02-08                8 February 2000
-  8-Feb-2000                8 February 2000
-  08-Feb-2000               8 February 2000
-  12/25/2000                25 December 2000
-  25/12/2000                25 December 2000
-
-   The last two examples show that when the year comes last, and the
-   month is given numerically, the order of the day and month doesn't
-   matter as long as the day is 13 or greater (mm/dd/yyyy is commonly
-   used in the USA, whereas dd/mm/yyyy is the norm in Europe). However:
-
-  08/02/2000                Is ambiguous and therefore not accepted.
-
-   If a date is given, the time is optional and defaults to 00:00:00. If
-   the time is given with a date, it must follow the date, separated by
-   space, /, -, or underscore, and with hours, minutes, and seconds
-   separated by colon (:). Example:
-
-  2000-Feb-8 10:28:01       Represents 8 February 2000, 10:28:01am
-
-   If a date is not given, the current date is used and a time is
-   required.
-
-   Time format is hh:mm:ss or hh:mm or hh in 24-hour format, or followed
-   by "am" or "pm" (or "AM" or "PM") to indicate morning or afternoon.
-   Examples of times that are acceptable:
-
-                           Interpretation:
-  3:23:56                    3:23:56am
-  3:23:56am                  3:23:56am
-  3:23:56pm                  3:23:56pm = 15:23:56
- 15:23:56                    3:23:56pm = 15:23:56
-  3:23pm                     3:23:00pm = 15:23:00
-  3:23PM                     3:23:00pm = 15:23:00
-  3pm                        3:00:00pm = 15:00:00
-
-   Examples of legal date-times:
-
-  send /after:{8 Feb 2000 10:28:01}
-  send /after:8_Feb_2000_10:28:01
-  send /after:8-Feb-2000/10:28:01
-  send /after:2000/02/08/10:28:01
-  send /after:2000/02/08_10:28:01
-  send /after:2000/02/08_10:28:01am
-  send /after:2000/02/08_10:28:01pm
-  send /after:2000/02/08_10:28pm
-  send /after:2000/02/08_10pm
-  send /after:10:00:00pm
-  send /after:10:00pm
-  send /after:10pm
-  send /after:22
-
-   Finally, there is a special all-numeric format you can use:
-
-  yyyymmdd hh:mm:ss
-
-   For example:
-
-  20000208 10:28:01
-
-   This is Kermit's standard date-time format (based on ISO 8601), and is
-   accepted (among other formats) by any command or switch that requires
-   a date-time, and is output by any function whose result is a calendar
-   date-time.
-
-   There are no optional parts to this format and it must be exactly 17
-   characters long, punctuated as shown (except you can substitute
-   underscore for space in contexts where a single "word" is required).
-   The time is in 24-hour format (23:00:00 is 11:00pm). This is the
-   format returned by \fdate(filename), so you can also use constructions
-   like this:
-
-  send /after:\fdate(oofa.txt)
-
-   which means "all files newer than oofa.txt".
-
-   Besides explicit dates, you can also use the any of the following
-   shortcuts:
-
-   TODAY
-          Stands for the current date at 00:00:00.
-
-   TODAY 12:34:56
-          Stands for the current date at the given time.
-
-   YESTERDAY
-          Stands for yesterday's date at 00:00:00. A time may also be
-          given.
-
-   TOMORROW
-          Stands for tomorrow's date at 00:00:00. A time may also be
-          given.
-
-   + number { DAYS, WEEKS, MONTHS, YEARS } [ time ]
-          Is replaced by the future date indicated, relative to the
-          current date. If the time is omitted, 00:00:00 is used.
-          Examples: +3days, +2weeks, +1year, +37months.
-
-   - number { DAYS, WEEKS, MONTHS, YEARS } [ time ]
-
-          Is replaced by the past date indicated, relative to the current
-          date. If the time is omitted, 00:00:00 is used.
-
-   The time can be separated from the date shortcut by any of the same
-   separators that are allowed for explicit date-times: space, hyphen,
-   slash, period, or underscore. In switches and other space-delimited
-   fields, use non-spaces to separate date/time fields, or enclose the
-   date-time in braces, e.g.:
-
-  purge /before:-4days_12:00:00
-  purge /before:{- 4 days 12:00:00}
-
-   Of course you can also use variables:
-
-  define \%n 43
-  purge /before:-\%ndays_12:00:00
-
-   Shortcut names can be abbreviated to any length that still
-   distinguishes them from any other name that can appear in the same
-   context, e.g. "TOD" for today, "Y" for yesterday. Also, the special
-   abbreviation "wks" is accepted for WEEKS, and "yrs" for "YEARS".
-
-   (To see how to specify dates relative to a specific date, rather than
-   the current one, see the [355]\fmjd() function description below.)
-
-   You can check date formats with the DATE command. DATE by itself
-   prints the current date and time in standard format: yyyymmdd
-   hh:mm:ss. DATE followed by a date and/or time (including shortcuts)
-   converts it to standard format if it can understand it, otherwise it
-   prints an error message.
-
-   The following variables and functions deal with dates and times; any
-   function argument designated as "date-time" can be in any of the
-   formats described above.
-
-   \v(day)
-          The first three letters of the English word for the current day
-          of the week, e.g. "Wed".
-
-   \fday(date-time)
-          The first three letters of the English word for day of the week
-          of the given date. If a time is included, it is ignored.
-          Example: \fday(8 Feb 1988) = "Mon".
-
-   \v(nday)
-          The numeric day of the week: 0 = Sunday, 1 = Monday, ..., 6 =
-          Saturday.
-
-   \fnday(date-time)
-          The numeric day of the week for the given date. If a time is
-          included, it is ignored. Example: \fnday(8 Feb 1988) = "1".
-
-   \v(date)
-          The current date as dd mmm yyyy, e.g. "08 Feb 2000" (as in this
-          example, a leading zero is supplied for day-of-month less than
-          10).
-
-   \v(ndate)
-          The current date in numeric format: yyyymmdd, e.g. "20000208".
-
-   \v(time)
-          The current time as hh:mm:ss, e.g. "15:27:14".
-
-   \ftime(time)
-          The given free-format date and/or time (e.g. "3pm") returns the
-          time (without the date) converted to hh:mm:ss 24-hour format,
-          e.g. "15:00:00" (the date, if given, is ignored).
-
-   \v(ntime)
-          The current time as seconds since midnight, e.g. "55634".
-
-   \v(tftime)
-          The elapsed time of the most recent file-transfer operation in
-          seconds.
-
-   \v(intime)
-          The elapsed time for the most recent INPUT command to complete,
-          in milliseconds.
-
-   \fntime(time)
-          The given free-format date and/or time is converted to seconds
-          since midnight (the date, if given, is ignored). This function
-          replaces \ftod2secs(), which is now a synonym for \fntime().
-          Unlike \ftod2secs(), \fntime() allows a date to be included,
-          and it allows the time to be in free format (like 3pm), and it
-          allows the amount of time to be more than 24 hours. E.g.
-          \fntime(48:00:00) = 172800. Example of use:
-
-  set alarm \fntime(48:00:00) ; set alarm 48 hours from now.
-
-   \fn2time(seconds)
-          The given number of seconds is converted to hh:mm:ss format.
-
-   \fdate(filename)
-          Returns the modification date-time of the given file in
-          standard format: yyyymmdd hh:mm:ss.
-
-   \fcvtdate(date-time)
-          Converts a free-format date and/or time to Kermit standard
-          format: yyyymmdd hh:mm:ss. If no argument is given, returns the
-          current date-time in standard format. If a date is given but no
-          time, the converted date is returned without a time. If a time
-          is given with no date, the current date is supplied. Examples:
-
-  \fcvtdate(4 Jul 2000 2:21:17pm) = 20000704 14:21:17
-  \fcvtdate() = 20000704 14:21:17 (on 4 Jul 2000 at 2:21:17pm).
-  \fcvtd(4 Jul 2000) = 20000704
-  \fcvtd(6pm) = 20000704 18:00:00 (on 4 Jul 2000 at 6:00pm).
-
-   \fdayofyear(date-time)
-   \fdoy(date-time)
-          Converts a free-format date and/or time to yyyyddd, where ddd
-          is the 3-digit day of the year, and 1 January is Day 1. If a
-          time is included with the date, it is returned in standard
-          format. If a date is included but no time, the date is returned
-          without a time. If a time is given with no date, the time is
-          converted and the current date is supplied. If no argument is
-          given, the current date-time is returned. Synonym: \fdoy().
-          Examples:
-
-  \fddayofyear(4 Jul 2000 2:21:17pm) = 2000185 14:21:17
-  \fdoy() = 2000185 14:21:17 (on 4 Jul 2000 at 2:21:17pm).
-  \fdoy(4 Jul 2000) = 2000185
-  \fdoy(6pm) = 2000185 18:00:00 (on 4 Jul 2000 at 6:00pm).
-
-   Note: The yyyyddd day-of-year format is often erroneously referred to
-   as a Julian date. However, a true Julian date is a simple counting
-   number, the number of days since a certain fixed day in the past.
-   [356]See \fmjd() below.
-
-   \fdoy2date(date-time)
-          Converts a date or date-time in day-of-year format to a
-          standard format date. A yyyyddd-format date must be supplied;
-          time is optional. The given date is converted to yyyymmdd
-          format. If a time is given, it is converted to 24-hour format.
-          Examples:
-
-  \fdoy2date(2000185) = 20000704
-  \fdoy2(2000185 3pm) = 20000704 15:00:00
-
-   \fmjd(date-time)
-          Converts free-format date and/or time to a Modified Julian Date
-          (MJD), the number of days since 17 Nov 1858 00:00:00. If a time
-          is given, it is ignored. Examples:
-
-  \fmjd(4 Jul 2000) = 50998
-  \fmjd(17 Nov 1858) = 0
-  \fmjd(16 Nov 1858) = -1
-
-   \fmjd2date(mjd)
-          Converts an MJD (integer) to standard date format, yyyymmdd:
-
-  \fmjd2(50998) = 4 Jul 1998
-  \fmjd2(0) = 17 Nov 1858
-  \fmjd2(-1) = 16 Nov 1858
-  \fmjd2(-365) = 17 Nov 1857
-
-   MJDs are normal integers and, unlike DOYs, may be added, subtracted,
-   etc, with each other or with other integers, to obtain meaningful
-   results. For example, to find out the date 212 days ago:
-
-  echo \fmjd2date(\fmjd()-212)
-
-   Constructions such as this can be used in any command where a
-   date-time is required, e.g.:
-
-  send /after:\fmjd2date(\fmjd()-212)
-
-   to send all files that are not older than 212 days (this is equivalent
-   to "send /after:-212days").
-
-   MJDs also have other regularities not exhibited by other date formats.
-   For example, \fmodulus(\fmjd(any-date),7) gives the day of the week
-   for any date (where 4=Sun, 5=Mon, ..., 3=Sat). (However, it is easier
-   to use \fnday() for this purpose, and it gives the more conventional
-   result of 0=Sun, 1=Mon, ..., 6=Sat).
-
-   Note that if MJDs are to be compared, they must be compared
-   numerically (IF <, =, >) and not lexically (IF LLT, EQUAL, LGT),
-   whereas DOYs must be compared lexically if they include a time (which
-   contains ":" characters); however, if DOYs do not include a time, they
-   may also be compared numerically.
-
-   In any case, lexical comparison of DOYs always produces the
-   appropriate result, as does numeric comparison of MJDs.
-
-   The same comments apply to sorting. Also note that DOYs are fixed
-   length, but MJDs can vary in length. However, all MJDs between 3 April
-   1886 and 30 Aug 2132 are 5 decimal digits long. (MJDs become 6 digits
-   long on 31 Aug 2132, and 7 digits long on 13 Oct 4596).
-     _________________________________________________________________
-
-  1.7. Partial Completion of Keywords
-
-   Partial completion of keywords was added in C-Kermit 7.0. In prior
-   versions, if completion was attempted (by pressing the Esc or Tab key)
-   on a string that matched different keywords, you'd just get a beep.
-   Now Kermit completes up to the first character where the possibly
-   matching keywords differ and then beeps. For example:
-
-  C-Kermit> send /n<Tab>
-
-   which matches /NOT-BEFORE and /NOT-AFTER, now completes up to the
-   dash:
-
-  C-Kermit> send /n<Tab>ot-<Beep>
-
-   Partial completion works for filenames too (as it has for some years).
-     _________________________________________________________________
-
-  1.8. Command Recall
-
-   C-Kermit has had a command history buffer for some time, which could
-   be scrolled interactively using control characters or (in Kermit 95
-   only) arrow keys. Version 7.0 adds a REDO command that allows the most
-   recent command matching a given pattern to be re-executed:
-
-   { REDO, RR, ^ } [ pattern ]
-          Search the command history list for the most recent command
-          that matches the given pattern, and if one is found, execute it
-          again.
-
-   The pattern can be a simple string (like "send"), in which case the
-   last SEND command is re-executed. Or it can contain wildcard
-   characters "*" and/or "?", which match any string and any single
-   character, respectively (note that "?" must be preceded by backslash
-   to override its normal function of giving help), and in most C-Kermit
-   versions may also include [] character lists and {} string lists (see
-   [357]Section 4.9).
-
-   The match works by appending "*" to the end of the given pattern (if
-   you didn't put one there yourself). Thus "redo *oofa" becomes "redo
-   *oofa*" and therefore matches the most recent command that contains
-   "oofa" anywhere within the command. If you want to inhibit the
-   application of the trailing "*", e.g. to force matching a string at
-   the end of a command, enclose the pattern in braces:
-
-  redo {*oofa}
-
-   matches the most recent command that ends with "oofa".
-
-   REDO commands themselves are not entered into the command history
-   list. If no pattern is given, the previous (non-REDO) command is
-   re-executed. The REDOne command is reinserted at the end of the
-   command history buffer, so the command scrollback character (Ctrl-P,
-   Ctrl-B, or Uparrow) can retrieve it.
-
-   Examples:
-
-  C-Kermit> echo foo
-  foo
-  C-Kermit> show alarm
-  (no alarm set)
-  C-Kermit> echo blah
-  blah
-  C-Kermit> redo          ; Most recent command
-  blah
-  C-Kermit> redo s        ; Most recent command starting with "s"
-  (no alarm set)
-  C-Kermit> redo echo f   ; Most recent command starting with "echo f"
-  foo
-  C-Kermit> redo *foo     ; Most recent command that has "foo" in it
-  foo
-  C-Kermit> <Ctrl-P>      ; Scroll back
-  C-Kermit> echo foo      ; The REDOne command is there
-  C-Kermit> redo {*foo}   ; Most recent command that ends with "foo"
-  foo
-  C-Kermit>
-
-   Since REDO, REDIAL, and REDIRECT all start the same way, and RED is
-   the designated non-unique abbreviation for REDIAL, REDO must be
-   spelled out in full. For convenience, RR is included as an invisible
-   easy-to-type synonym for REDO. You can also use the "^" character for
-   this:
-
-  C-Kermit> ^             ; Most recent command
-  C-Kermit> ^ s           ; Most recent command starting with "s"
-  C-Kermit> ^s            ; Ditto (space not required after "^").
-  C-Kermit> ^*foo         ; Most recent command that has "foo" in it.
-  C-Kermit> ^{*foo}       ; Most recent command ends with "foo".
-
-   Unlike the manual command-history-scrolling keys, the REDO command can
-   be used in a script, but it's not recommended (since the command to be
-   REDOne might not be found, so if the REDO command fails, you can't
-   tell whether it was because REDO failed to find the requested command,
-   or because the command was found but it failed).
-     _________________________________________________________________
-
-  1.9. EXIT Messages
-
-   The EXIT and QUIT commands now accept an optional message to be
-   printed. This makes the syntax of EXIT and QUIT just like END and
-   STOP:
-
-   { EXIT, QUIT, END, STOP } [ status-code [ message ] ]
-
-   where status-code is a number (0 indicating success, nonzero
-   indicating failure). This is handy in scripts that are never supposed
-   to enter interactive mode:
-
-  dial 7654321
-  if fail exit 1 Can't make connection - try again later.
-
-   Previously this could only be done in two steps:
-
-  dial 7654321
-  xif fail { echo Can't make connection - try again later, exit 1 }
-
-   A status code must be included in order to specify a message. In the
-   case of EXIT and QUIT, the default status code is contained in the
-   variable \v(exitstatus), and is set automatically by various events
-   (file transfer failures, etc; it can also be set explicitly with the
-   SET EXIT STATUS command). If you want to give an EXIT or QUIT command
-   with a message, but without changing the exit status from what it
-   normally would have been, use the \v(exitstatus) variable, e.g.:
-
-   exit \v(existatus) Goodbye from \v(cmdfile).
-
-   The EXIT status is returned to the system shell or whatever other
-   process invoked C-Kermit, e.g. in UNIX:
-
-  C-Kermit> exit 97 bye bye
-  bye bye
-  $ echo $?
-  97
-  $
-     _________________________________________________________________
-
-  1.10. Managing Keyboard Interruptions
-
-   When C-Kermit is in command or file-transfer mode (as opposed to
-   CONNECT mode), it can be interrupted with Ctrl-C. Version 7.0 adds the
-   ability to disarm the Ctrl-C interrupt:
-
-   SET COMMAND INTERRUPT { ON, OFF }
-          COMMAND INTERRUPT is ON by default, meaning the Ctrl-C can be
-          used to interrupt a command or a file transfer in progress. Use
-          OFF to disable these interruptions, and use it with great
-          caution for obvious reasons.
-
-   SET TRANSFER INTERRUPT { ON, OFF }
-          This can be used to disable keyboard interruption of file
-          transfer when C-Kermit is in local mode, or to re-enable it
-          after it has been disabled. This applies to the X, Z, E, and
-          similar keys as well as to the system interrupt character,
-          usually Ctrl-C. This is distinct from SET TRANSFER
-          CANCELLATION, which tells whether packet mode can be exited by
-          sending a special sequence of characters.
-
-   Several other commands can be interrupted by pressing any key while
-   they are active. Version 7.0 adds the ability to disable this form of
-   interruption also:
-
-   SET INPUT CANCELLATION { ON, OFF }
-          Whether an INPUT command in progress can be interrupted by
-          pressing a key. Normally ON. Setting INPUT CANCELLATION OFF
-          makes INPUT commands uninterruptible except by Ctrl-C (unless
-          COMMAND INTERRUPTION is also OFF).
-
-   SET SLEEP CANCELLATION { ON, OFF }
-          Whether a SLEEP, PAUSE, or WAIT command in progress can be
-          interrupted by pressing a key. Normally ON. Setting SLEEP
-          CANCELLATION OFF makes these commands uninterruptible except by
-          Ctrl-C (unless COMMAND INTERRUPTION is also OFF). Synonyms: SET
-          PAUSE CANCELLATION, SET WAIT CANCELLATION.
-
-   So to make certain a script is not interruptible by the user, include
-   these commands:
-
-  SET TRANSFER INTERRUPT OFF
-  SET SLEEP CANCELLATION OFF
-  SET INPUT CANCELLATION OFF
-  SET COMMAND INTERRUPTION OFF
-
-   Make sure to turn them back on afterwards if interruption is to be
-   re-enabled.
-
-   When a PAUSE, SLEEP, WAIT, or INPUT command is interrupted from the
-   keyboard, the new variable \v(kbchar) contains a copy of the (first)
-   character that was typed and caused the interruption, provided it was
-   not the command interrupt character (usually Ctrl-C). If these
-   commands complete successfully or time out without a keyboard
-   interruption, the \v(kbchar) variable is empty.
-
-   The \v(kbchar) variable (like any other variable) can be tested with:
-
-  if defined \v(kbchar) command
-
-   The command is executed if the variable is not empty.
-
-   The \v(kbchar) variable can be reset with WAIT 0 (PAUSE 0, SLEEP 0,
-   etc).
-     _________________________________________________________________
-
-  1.11. Taming The Wild Backslash -- Part Deux
-
-   [358]Using C-Kermit, 2nd Edition, contains a brief section, "Taming
-   the Wild Backslash", on page 48, which subsequent experience has shown
-   to be inadequate for Kermit users intent on writing scripts that deal
-   with Windows, DOS, and OS/2 filenames, in which backslash (\) is used
-   as the directory separator. This section fills in the blanks.
-
-    1.11.1. Background
-
-   The Kermit command language shares a certain unavoidable but annoying
-   characteristic with most other command languages that are capable of
-   string replacement, namely the necessity to "quote" certain characters
-   when you want them to be taken literally. This is a consequence of the
-   facts that:
-
-    1. One or more characters must be set aside to denote replacement,
-       rather than acting as literal text.
-    2. We have only 96 printable characters to work with in ASCII, which
-       is still the only universally portable character set.
-    3. There is no single printable character that is unused everywhere.
-    4. Variables are not restricted to certain contexts, as they are in
-       formal programming languages like C and Fortran, but can appear
-       anywhere at all within a command, and therefore require special
-       syntax.
-
-   Thus there can be conflicts. To illustrate, the standard UNIX shell
-   uses dollar sign ($) to introduce variables. So the shell command:
-
-  echo $TERM
-
-   displays the value of the TERM variable, e.g. vt320. But suppose you
-   want to display a real dollar sign:
-
-  echo The price is $10.20
-
-   This causes the shell to evaluate the variable "$1", which might or
-   might not exist, and substitute its value, e.g.:
-
-  The price is 0.20
-
-   (in this case the $1 variable had no value.) This is probably not what
-   you wanted. To force the dollar sign to be taken literally, you must
-   apply a "quoting rule", such as "precede a character by backslash (\)
-   to force the shell to take the character literally":
-
-  echo The price is \$10.20
-  The price is $10.20
-
-   But now suppose you want the backslash AND the dollar sign to be taken
-   literally:
-
-  echo The price is \\$10.20
-
-   This doesn't work, since the first backslash quotes the second one,
-   thereby leaving the dollar sign unquoted again:
-
-  The price is \0.20
-
-   Quoting the dollar sign requires addition of a third backslash:
-
-  echo The price is \\\$10.20
-  The price is \$10.20
-
-   The first backslash quotes the second one, and the third backslash
-   quotes the dollar sign.
-
-   Every command language -- all UNIX shells, VMS DCL, DOS Batch, AOS/VS
-   CLI, etc etc -- has similar rules. UNIX shell rules are probably the
-   most complicated, since many printable characters -- not just one --
-   are special there: dollar sign, single quote, double quote, backslash,
-   asterisk, accent grave, number sign, ampersand, question mark,
-   parentheses, brackets, braces, etc -- practically every
-   non-alphanumeric character needs some form of quoting if it is to be
-   taken literally. And to add to the confusion, the UNIX shell offers
-   many forms of quoting, and many alternative UNIX shells are available,
-   each using slightly different syntax.
-     _________________________________________________________________
-
-    1.11.2. Kermit's Quoting Rules
-
-   Kermit's basic quoting rules are simple by comparison (there are, of
-   course, additional syntax requirements for macro definitions, command
-   blocks, function calls, etc, but they are not relevant here).
-
-   The following characters are special in Kermit commands:
-
-   Backslash (\)
-          Introduces a variable, or the numeric representation of a
-          special character, or a function, or other item for
-          substitution. If the backslash is followed by a digit or by any
-          of the following characters:
-
-  x, o, d, m, s, f, v, $, %, &, :, {
-
-          this indicates a special substitution item; otherwise the
-          following character is to be taken literally (exceptions: \ at
-          end of line is taken literally; \n, \b, and \n are special
-          items in the OUTPUT command only).
-
-   Semicolon (;)
-          (Only when at the beginning of a line or preceded by at least
-          one space or tab) Introduces a comment.
-
-   Number sign (#)
-          (Only when at the beginning of a line or preceded by at least
-          one space or tab) Just like semicolon; introduces a comment.
-
-   Question mark (?)
-          (Only at the command prompt - not in command files or macros)
-          Requests context-sensitive help.
-
-   To force Kermit to take any of these characters literally, simply
-   precede it by a backslash (\).
-
-   Sounds easy! And it is, except when backslash also has a special
-   meaning to the underlying operating system, as it does in DOS,
-   Windows, and OS/2, where it serves as the directory separator in
-   filenames such as:
-
-  D:\K95\KEYMAPS\READ.ME
-
-   Using our rule, we would need to refer to this file in Kermit commands
-   as follows:
-
-  D:\\K95\\KEYMAPS\\READ.ME
-
-   But this would not be obvious to new users of Kermit software on DOS,
-   Windows, or OS/2, and it would be annoying to seasoned ones. Thus
-   MS-DOS Kermit and Kermit 95 go to rather extreme lengths to allow the
-   more natural notation, as in:
-
-  send d:\k95\keymaps\read.me
-
-   The reason this is tricky is that we also need to allow for variables
-   and other expressions introduced by backslash in the same command. For
-   example, suppose \%a is a variable whose value is "oofa" (without the
-   quotes). What does the following command do?
-
-  send d:\%a
-
-   Does it send the file named "oofa" in the current directory of the D:
-   disk, or does it send a file named "%a" in the root directory of the
-   D: disk? This is the kind of trouble we get into when we attempt to
-   bend the rules in the interest of user friendliness. (The answer is:
-   if the variable \%a has definition that is the name of an existing
-   file, that file is sent; if a file d:\%a exists, it is sent; otherwise
-   if both conditions are true, the variable takes precedence, and the
-   literal filename can be forced by quoting: \\%a.)
-
-   In Kermit 95 (but not MS-DOS Kermit), we also bend the rules another
-   way by allowing you to use forward slash (/) rather than backslash (\)
-   as the directory separator:
-
-  send d:/k95/keymaps/read.me
-
-   This looks more natural to UNIX users, and in fact is perfectly
-   acceptable to the Windows 95/98/NT and OS/2 operating systems on the
-   API level. BUT (there is always a "but") the Microsoft shell,
-   COMMAND.COM, for Windows 95/98 and NT does not allow this notation,
-   and therefore it can not be used in any Kermit command -- such as RUN
-   -- that invokes the Windows command shell AND your command shell is
-   COMMAND.COM or any other shell that does not allow forward slash as
-   directory separator (some alternative shells do allow this).
-
-     NOTE: There exists a wide variety of alternative shells from third
-     parties that do not have this restriction. If you are using a shell
-     that accepts forward slash as a directory separator, you can stop
-     reading right now -- UNLESS (there is always an "unless") you want
-     your scripts to be portable to systems that have other shells. Also
-     note that some Windows shells might actually REQUIRE forward
-     slashes (instead of backslashes) as directory separators; we do not
-     treat this situation below, but the treatment is obvious -- use
-     slash rather backslash as the directory separator.
-     _________________________________________________________________
-
-    1.11.3. Passing DOS Filenames from Kermit to Shell Commands
-
-   The following Kermit commands invoke the system command shell:
-
-  RUN (and its synonyms ! and @)
-  REDIRECT
-  PIPE
-
-   Each of these commands takes a shell command as an operand. These
-   shell commands are not, and can not be, parsed by Kermit since Kermit
-   does not know the syntax of shell commands, and so can't tell the
-   difference between a keyword, a filename, a variable, a switch, or
-   other item. Therefore the rules can not be bent since Kermit doesn't
-   know where or how to bend them. To illustrate (using the regular
-   Windows shell):
-
-  run c:\\windows\\command\\chkdsk.exe
-
-   works OK, but:
-
-  run c:/windows/command/chkdsk.exe
-
-   is not accepted by COMMAND.COM. But:
-
-  run c:\windows\command\chkdsk.exe
-
-   results in Kermit applying its quoting rules before sending the text
-   to the shell. Since "w" and "c" are not in the list of backslash-item
-   codes, the backslash means "take the following character literally".
-   Thus, by the time this filename gets to the Windows shell, it has
-   become:
-
-  c:windowscommandchkdsk.exe
-
-   which is probably not what you wanted. (If "w" and "c" were in the
-   list, the results could be even stranger.) Even more confusing is the
-   case where a directory or filename starts with one or more digits:
-
-  run c:\123\lotus.exe
-
-   in which "\123" is the Kermit notation for ASCII character 123, which
-   happens to be left brace ({), resulting in "c:{lotus.exe".
-
-   So when passing filenames to a Windows shell, always use double
-   backslashes as directory separators, to ensure that the shell gets
-   single backslashes:
-
-  run c:\\windows\\command\\chkdsk.exe
-  run c:\\123\\lotus.exe
-
-   Similar problems might occur with the built-in EDIT, BROWSE, and FTP
-   commands. These commands result in Kermit building a shell command
-   internally to invoke the associated helper program; the form of this
-   command might conflict with the form demanded by certain alternative
-   shells.
-     _________________________________________________________________
-
-    1.11.4. Using Variables to Hold DOS Filenames
-
-   Now to the next level. Suppose you want to write a script in which
-   filenames are parameters, and therefore are stored in variables.
-   Example:
-
-  define \%f c:\windows\command\chkdsk.exe
-  ...
-  run \%f
-
-   Obviously this won't work for the reasons just noted; the RUN command
-   requires directory separators be coded as double backslashes:
-
-  define \%f c:\\windows\\command\\chkdsk.exe
-  ...
-  run \%f
-
-   This will work; no surprises here. However, if you had used ASSIGN
-   rather than DEFINE, you might have been surprised after all; review
-   pages 348-349 of [359]Using C-Kermit (2nd Ed) for the difference
-   between DEFINE and ASSIGN.
-
-   We have said that any Kermit 95 or MS-DOS Kermit command that parses
-   filenames itself -- SEND, for example -- does not require double
-   backslashes since it knows it is parsing a filename. So since the
-   following works:
-
-  send c:\windows\command\chkdsk.exe
-
-   Should the following also work?
-
-  define \%f c:\windows\command\chkdsk.exe
-  ...
-  send \%f
-
-   Answer: No. Why? Because \%f is evaluated "recursively", to allow for
-   the possibility that its definition contains further variable
-   references. This is true of all "backslash-percent-letter" (or -digit)
-   variables, and also for array references. So \%f becomes
-   c:\windows\command\chkdsk.exe, which becomes
-   c:windowscommandchkdsk.exe.
-
-   The trick here is to use the "other" kind of variable, that is
-   evaluated only "one level deep" rather than recursively:
-
-  define filename c:\windows\command\chkdsk.exe
-  ...
-  send \m(filename)
-
-   Similarly if you want to prompt the user for a filename:
-
-  ask filename { Please type a filename: }
-   Please type a filename: c:\windows\command\chkdsk.exe
-  send \m(filename)
-     _________________________________________________________________
-
-    1.11.5. Passing DOS Filenames as Parameters to Macros
-
-   Suppose you want to pass a DOS filename containing backslashes as a
-   parameter to a Kermit macro. This raises two issues:
-
-    1. Parameters to macros are "just text" and so are fully evaluated
-       before they are passed to the macro.
-    2. Once inside the macro, the formal parameters \%1, \%2, ... \%9 are
-       the type of variable that is evaluated recursively.
-
-   Thus a DOS filename is ruined once in the act of parsing the macro
-   invocation, and again when referring to it from within the macro. To
-   illustrate, suppose "test" is a macro. Then in the invocation:
-
-  test c:\mydir\blah.txt
-
-   "c:mydirblah.txt" is assigned to \%1. However, if we double the
-   backslashes:
-
-  test c:\\mydir\\blah.txt
-
-   "c:\mydir\blah.txt" is assigned to \%1. But then when you refer to \%1
-   in the macro, it is evaluated recursively, resulting in
-   "c:mydirblah.txt". To illustrate:
-
-  define test echo \%1
-  test c:\mydir\blah.txt
-  c:mydirblah.txt
-  test c:\\mydir\\blah.txt
-  c:mydirblah.txt
-  test c:\\\\mydir\\\\blah.txt
-  c:\mydir\blah.txt
-
-   Let's address each part of the problem separately. First, inside the
-   macro. You can use the \fcontents() function to force a
-   backslash-percent variable (such as a macro argument) to be evaluated
-   one level deep instead of recursively, for example:
-
-  define test echo { The filename is "\fcontents(\%1)"}
-
-  test c:\mydir\blah.txt               ; We don't expect this to work
-   The filename is "c:mydirblah.txt"   ; and it doesn't.
-  test c:\\mydir\\blah.txt             ; But this does...
-   The filename is "c:\mydir\blah.txt"
-
-   Thus if the filename arrives inside the macro with single backslashes,
-   the backslashes are preserved if you always refer to the parameter
-   through the \fcontents() function.
-
-   Now how to ensure that backslashes are not stripped or misinterpreted
-   when passing a filename to a macro? This brings us back to what we
-   learned in earlier sections:
-
-    1. If it is a literal filename, either double the backslashes, or (if
-       the filename is to be used only within Kermit itself and not
-       passed to a DOS shell, or it is to be passed to an alternative
-       shell that accepts forward slash as a directory separator), use
-       forward slash instead of backslash as the directory separator.
-    2. If it is a variable that contains a filename, make sure you use a
-       macro-style variable name, rather than a
-       backslash-percent-character name.
-
-   Examples:
-
-  define test echo \fcontents(\%1)
-  define filename c:\mydir\blah.txt
-
-  test c:\\mydir\\blah.txt  ; Literal filename with double backslashes
-  c:\mydir\blah.txt
-
-  test c:/mydir/blah.txt    ; Literal filename with forward slashes
-  c:/mydir/blah.txt
-
-  test \m(filename)         ; Variable
-  c:\mydir\blah.txt
-
-   But what if you don't like these rules and you still want to pass a
-   literal filename containing single backslashes to a macro? This is
-   possible too, but a bit tricky: turn command quoting off before
-   invoking the macro, and then turn it back on inside the macro.
-   Example:
-
-  define test set command quoting on, echo \fcontents(\%1)
-
-  set command quoting off
-  test c:\mydir\blah.txt
-  c:\mydir\blah.txt
-
-   Upon return from the macro, command quoting is back on (since the
-   macro turned it on).
-
-   Obviously this trick can not be used if the filename is stored in a
-   variable, since it prevents the variable from being evaluated.
-     _________________________________________________________________
-
-    1.11.6. Passing DOS File Names from Macro Parameters to the DOS Shell
-
-   Now suppose you need to pass a DOS filename to a macro, and the macro
-   needs to pass it, in turn, to the Windows shell via (say) Kermit's RUN
-   command. This works too:
-
-  define xrun run \fcontents(\%1)
-  xrun c:\\windows\\command\\chkdsk.exe
-
-   (or you can use the SET COMMAND QUOTING OFF / ON technique described
-   above to avoid the double backslashes.) But..
-
-  xrun c:/windows/command/chkdsk.exe
-
-   does not work if the Windows shell does not recognize "/" as a
-   directory separator. If there is a chance that a filename might be
-   passed to the macro in this form, the macro will need to convert it to
-   a form acceptable to the shell:
-
-  define xrun run \freplace(\fcontents(\%1),/,\\)
-
-   Here we replace all occurrences (if any) of "/" in the argument with
-   "\" prior to issuing the RUN command. Of course, in order to specify
-   "\" as a literal character in the \freplace() argument list, we have
-   to double it.
-     _________________________________________________________________
-
-    1.11.7. Passing DOS Filenames to Kermit from the Shell
-
-   As noted in the manual, the \&@[] array contains Kermit's command-line
-   arguments. Suppose one of these arguments, say \&@[3], is a DOS
-   filename such as C:\FOO\BAR\BAZ\OOFA.TXT. (Note: In C-Kermit 7.0 and
-   K95 1.1.18 and later, command-line arguments after "=" or "--" are
-   also available in the top-level \%1..9 variables; see [360]Section
-   7.5.)
-
-   Of course you can eliminate any problems by using forward slashes
-   rather than backslashes in the filename, but sometimes this is not
-   possible, as when the Kermit command line is being generated by
-   another program than can only generate "native" format DOS filenames.
-
-   As noted in the manual, "\%x" variables and \&x[] arrays are always
-   evaluated "all the way" (recursively). If the contents of one of these
-   variables contains backslashes, this causes another level of
-   evaluation.
-
-   There is another kind of variable, which is evaluated only "one level
-   deep". You can use this to prevent interpretation of the backslashes
-   in the filenames. Example:
-
-  assign filename \fcontents(\&@[3])  ; Transfer contents
-  ...
-  send \m(filename)
-
-   Or, more simply:
-
-  send \fcontents(\&@[3])
-     _________________________________________________________________
-
-  1.12. Debugging
-
-   The debug log is produced when you give a "log debug" command. This is
-   normally done at the request of the Kermit help desk, for forwarding
-   to the Kermit developers for analysis as a last resort in
-   troubleshooting problems. (Last resort because it can grow quite huge
-   in a very short time.) In cases where timing information is critical
-   to understanding a problem, you can tell C-Kermit to put a timestamp
-   on each debug log line by giving the command:
-
-  SET DEBUG TIMESTAMP ON
-
-   At any time before or after activating the debug log (SET DEBUG
-   TIMESTAMP OFF turns off timestamping). Timestamps can be turned off
-   and on as desired while logging. Obviously, they increase the size and
-   growth rate of the log significantly, and so should be used sparingly.
-   Timestamps are of the form hh:mm:ss.xxx, where .xxx is thousands of a
-   second (but is included only on platforms that include this feature).
-     _________________________________________________________________
-
-  1.13. Logs
-
-   In UNIX C-Kermit and in K-95, you can now direct any log to a pipe.
-   This not only lets you send your logs to places other than disk files,
-   but also lets you customize them to any desired degree.
-
-   LOG { DEBUG, PACKETS, SESSION, TRANSACTION, CONNECTION } { file, pipe
-          } ...
-          A "pipe" is the name of a command, preceded by a vertical bar.
-          If the pipe contains any spaces, it must be enclosed in braces.
-
-   Here are some examples for UNIX (always remember the importance of
-   getting the UNIX shell quoting rules right):
-
-   LOG TRANSACTIONS |lpr
-          This sends the transaction log to the default UNIX printer,
-          rather than to a file (use "lp" rather than "lpr" if
-          necessary).
-
-   LOG TRANSACTIONS {| myfilter > t.log}
-          For those who don't like the format of the transaction log, or
-          want to extract certain information from it; write your own
-          output filter.
-
-   LOG SESSION {| lpr -Plaserwriter}
-          This sends the session log to a specific UNIX printer, rather
-          than to a file. Note the braces around the pipeline. These are
-          required because it contains spaces.
-
-   LOG DEBUG {| tail -100 > debug.log}
-          This causes the debug log file to contain only the final 100
-          lines. Suppose C-Kermit crashes under some unpredictable
-          circumstances, and you need a debug log to catch it in the act.
-          But the debug log can grow to huge proportions very quickly,
-          possibly filling up the disk. Piping the debug log through
-          "tail" results in keeping only the last 100 lines (or other
-          number of your choice).
-
-   LOG DEBUG {| grep "^TELNET" > debug.log}
-          This one shows how to log only Telnet negotiations. Piping the
-          debug log through grep or egrep lets you log only specific
-          information, rather than everything. "man grep" for further
-          info.
-
-   LOG DEBUG {| gzip -c > debug.log.gz}
-          Creates a full debug log, but compressed by gzip to save space.
-
-   LOG PACKETS {| tr "\\01" "X" | cut -c9- > packet.log}
-          This one writes the regular packet log, but translates the
-          Ctrl-A that starts each packet to the letter "X" and removes
-          the s-nn-nn- notation from the beginning of each line. Note the
-          double backslash (normal Kermit quoting rules). "man tr" and
-          "man cut" for further info.
-
-   See [361]Section 2.12 for information about the new connection log.
-     _________________________________________________________________
-
-  1.14. Automatic File-Transfer Packet Recognition at the Command Prompt
-
-   Beginning in version 7.0, C-Kermit can recognize Kermit (and in some
-   cases also Zmodem) file-transfer packets while at its command prompt.
-   This is convenient (for example), if you escaped back from a remote
-   Kermit program and told the local Kermit program to send a file, but
-   forgot to tell the remote Kermit program to receive it (and the local
-   Kermit did not have the "send a Kermit receive command" feature
-   available). This feature is controlled by the following command:
-
-   SET COMMAND AUTODOWNLOAD { ON, OFF }
-          When ON, which is the default, the command parser recognizes
-          Kermit packets when Kermit is in remote mode. An S packet makes
-          it go into receive mode, an I packet makes it go into server
-          mode. When OFF, packet recognition is disabled and the behavior
-          when a packet is received at the command prompt is as it was in
-          C-Kermit 6.1 and earlier (namely to print an error message).
-
-   COMMAND AUTODOWNLOAD is the command-mode equivalent of TERMINAL
-   AUTODOWNLOAD, which is effective during CONNECT mode.
-     _________________________________________________________________
-
-  1.15. The TYPE Command
-
-   The TYPE command now accepts a selection of optional switches
-   ([362]Section 1.5), and also sets several variables.
-
-   Syntax: TYPE [ switches... ] filename
-
-   Variables:
-
-   \v(ty_ln)
-          Line number of current line (during TYPE command; see /PREFIX)
-
-   \v(ty_lc)
-          Line count of file most recently TYPEd.
-
-   \v(ty_mc)
-          Match count of file most recently TYPEd (see /MATCH).
-
-   Switches:
-
-   /PAGE
-          If /PAGE is included, Kermit pauses at the end of each
-          screenful and issues a "more?" prompt. You may press the space
-          bar to view the next page (screenful), or press "q" or "n" to
-          return to the C-Kermit prompt. If this switch is given, it
-          overrides the COMMAND MORE-PROMPTING setting for this command
-          only. If it is not given, paging is according to COMMAND
-          MORE-PROMPTING.
-
-   /NOPAGE
-          Do not pause at the end of each screenful; show the whole file
-          (or all selected lines) at once. If this switch is given, it
-          overrides the COMMAND MORE-PROMPTING setting for this command
-          only. If it is not given, paging is according to COMMAND
-          MORE-PROMPTING.
-
-   /HEAD[:n]
-          Only show the first n lines of the file (where n is a number).
-          If n is omitted, 10 is used.
-
-   /TAIL[:n]
-          Only show the last n lines of the file (where n is a number).
-          If nis omitted, 10 is used. Note: /HEAD and /TAIL can't be
-          combined; if you give both switches, only the most recent one
-          is used.
-
-   /MATCH:pattern
-          Only type lines from the file that match the given pattern (see
-          [363]Section 4.9.1 for pattern notation). UNIX users familiar
-          with grep should note a significant difference: there is no
-          implied "*" at the beginning and end of the pattern. Thus:
-
-  TYPE /MATCH:foo    Lists lines whose entire contents are "foo".
-  TYPE /MATCH:foo*   Lists lines that start with "foo".
-  TYPE /MATCH:*foo   Lists lines that end with "foo".
-  TYPE /MATCH:*foo*  Lists lines that have "foo" anywhere in them.
-
-          /HEAD and /TAIL apply after /MATCH, so "type /tail:20
-          /match:x*" shows the last 20 lines in the file that start with
-          "x".
-
-   /PREFIX:string
-          Print the given string at the beginning of each line. The
-          string may be a constant, a variable, or a quoted variable. If
-          it's an unquoted variable, its value at the time the TYPE
-          command was given is used as a constant. If it is a quoted
-          variable, it is re-evaluated for each line; a useful variable
-          for this context is \v(ty_ln) (the line number of the current
-          line being typed). If the prefix is to include spaces, it must
-          be enclosed in braces. Examples:
-
-        type /prefix:{oofa.txt: } /match:*thing* oofa.txt
-                Prints all lines in oofa.txt that contain "thing" with
-                the filename itself as the prefix (similar to UNIX grep).
-
-        type /prefix:{\v(time). } oofa.txt
-                Prefixes each line of oofa.txt with the time at which the
-                TYPE command was given (one backslash)
-
-        type /prefix:{\\v(time). } oofa.txt
-                Prefixes each line of oofa.txt with the time at which
-                that line is being typed (two backslashes).
-
-        type /prefix:{\\v(ty_ln). } oofa.txt
-                Prefixes each line of oofa.txt with its line number.
-
-        type /prefix:{\\flpad(\\v(ty_ln),4). } oofa.txt
-                Same as the previous example, except the line number is
-                right-adjusted in a 4-column field.
-
-   /WIDTH[:n]
-          Truncates each line at column n (which must be a number) prior
-          to printing it. This option can be used for long lines when you
-          don't want them to wrap. If nis omitted, your current screen
-          width is used.
-
-   /COUNT
-          Counts lines and -- if /MATCH was included, matches -- but does
-          not print any lines from the file. The line and match count is
-          shown at the end, and the variables \v(ty_lc) and \v(ty_lm) are
-          set accordingly.
-
-   SET OPTIONS TYPE { /PAGE, /NOPAGE, /WIDTH:n }
-          Sets the paging default for TYPE commands, which can be
-          overridden in any particular TYPE command by including the
-          desired switch.
-
-   If a TYPE command is given with no switch, and no SET OPTIONS TYPE
-   selection is in effect, paging is according to your COMMAND
-   MORE-PROMPTING setting (SHOW COMMAND).
-     _________________________________________________________________
-
-  1.16. The RESET Command
-
-   The RESET command, added in 7.0, closes all open files and logs, but
-   does not affect the open connection (if any).
-     _________________________________________________________________
-
-  1.17. The COPY and RENAME Commands
-
-   As of C-Kermit 7.0, in the UNIX version only, the COPY and RENAME
-   commands are built in and do not call the underlying platform's COPY
-   or RENAME command. This allows them to work in "NOPUSH" versions and
-   other circumstances where it can't access system commands, and it
-   allows file copying and renaming to be done portably in scripts. The
-   characteristics of the built-in COPY or RENAME include:
-     * It fails if the source file is a directory or is wild or lacks
-       read access.
-     * It fails if the source file is the destination file.
-     * It allows the destination file to be a directory, in which case
-       the source file is copied (or renamed) into it with the same name.
-     * It overwrites an existing destination file if its permission
-       allows.
-     * It sets the new file's permission according to umask but also
-       carries forward the source file's execute permission bits if the
-       destination file did not already exist.
-     * It fails if interrupted by Ctrl-C.
-     * Upon error, it prints an appropriate message.
-     * It returns standardized error codes that can be tested by IF
-       SUCCESS / FAIL.
-
-   These commands now also accept the following switches:
-
-  /LIST (/LOG, /VERBOSE)    = Print "file1 => file2 (OK)" (or error message).
-  /NOLIST (/NOLOG, /QUIET)  = Don't print anything (except error messages).
-
-   /NOLIST is the default.
-
-   The same built-in code is used by the UNIX C-Kermit server to execute
-   REMOTE COPY commands (except in this case no switches are available).
-
-   The COPY command also accepts the following additional switches. When
-   any of these are given (and they can be used in any combination except
-   /SWAP and /APPEND), some of the checks listed above are relaxed, and
-   thus it might be possible to get into trouble in certain cases, e.g.
-   when the source and target files are the same file:
-
-  /APPEND                   = Append source file to destination file.
-  /SWAP-BYTES               = Swap bytes (see [364]Section 6.6.5).
-  /FROMB64                  = Decode the source file from Base64 encoding.
-  /TOB64                    = Encode the target file in Base64.
-
-   Base64 is the encoding commonly used for enclosures in Internet email.
-     _________________________________________________________________
-
-  1.18. The MANUAL Command
-
-   The MANUAL command can be used to access the appropriate Kermit manual
-   or other manual. The general syntax is:
-
-   MANUAL [ string ]
-          If the string is omitted, C-Kermit asks the underlying system
-          to access the C-Kermit manual using whatever method is
-          appropriate for the system.
-
-   The specific action depends on the system. In UNIX, a "man" command is
-   issued; "kermit" is the default argument but other manual topics may
-   be specified. If the "man" command allows index or string searching,
-   the appropriate syntax may be included.
-
-   In Kermit 95, the MANUAL command brings up the HTML online K95 manual.
-
-   In VMS and elsewhere, "man" is simply translated to "help", with a
-   default argument of "kermit"; other and/or additional arguments may be
-   included according to the definition of the system's "help" command.
-
-   Correct operation of the "man" command in C-Kermit depends on the
-   appropriate man page or help topic having been installed in the right
-   place with the right permissions and format.
-     _________________________________________________________________
-
-  1.19. String and Filename Matching Patterns
-
-   A pattern is a string that includes special notation for matching
-   classes or sequences of characters. C-Kermit 7.0 / K95 1.1.19 supports
-   patterns in several places:
-
-     * Filenames ([365]Section 4.9)
-     * SWITCH case labels ([366]Section 7.18)
-     * The new IF MATCH statement ([367]Section 7.4)
-     * TYPE /MATCH ([368]Section 1.15)
-     * SET FILE TEXT-PATTERNS and BINARY-PATTERNS ([369]Section 4.3)
-     * The \fsearch() and \farraylook() functions ([370]Sections 7.3 and
-       [371]7.10.7)
-     * The \fpattern() function used with [M,RE]INPUT ([372]Section 7.1)
-
-   Patterns are also called wildcards, especially when used for filename
-   matching. C-Kermit's pattern syntax is explained in [373]Section
-   4.9.1, and also by the HELP WILDCARDS command.
-     _________________________________________________________________
-
-  1.20. Multiple Commands on One Line
-
-   As of C-Kermit 7.0, commands can be grouped together on one line by
-   separating the commands with commas and enclosing the list in braces.
-   For example:
-
-  C-Kermit> { echo One, echo Two, echo Three }
-  C-Kermit> do { echo One, echo Two, echo Three }
-
-   Command lists can be nested:
-
-  [ do ] { echo One, echo Two, if true { echo A, echo B}, echo Three }
-
-   and the END command works as it does in macros:
-
-  [ do ] { echo One, echo Two, if true end, echo Three }
-
-   The "one line" stricture is, of course, pliant to line-continuation
-   conventions, namely that lines ending in hyphen (-) or left brace ({)
-   are to be continued. Thus the first example can also be rendered:
-
-  [ do ] {
-      echo One
-      echo Two
-      echo Three
-  }
-
-   (the "do" is optional).
-     _________________________________________________________________
-
-  1.21. What Do I Have?
-
-   C-Kermit can be built for hundreds of different platforms with
-   practically countless configuration options. Certain commands might
-   not be available in certain configurations, etc. Even on the same
-   platform, different builds are possible: "maximum functionality",
-   "minimum size", "maximum performance", and so on. You can find out a
-   lot about the configuration of your C-Kermit program with the SHOW
-   FEATURES command. Of course, a lot of what it says, especially in the
-   bottom part, might seem like gibberish, but can be deciphered with a
-   Rosetta Stone (such as the C-Kermit source or the [374]ckccfg.txt
-   file). In any case, the output from SHOW FEATURES might easily explain
-   why some expected feature is missing, or some buffer is smaller than
-   expected. Here's a sample of the bottom section for the SunOS version:
-
-C-Kermit 7.0.196, 1 Jan 2000
-
-Major optional features included:
- Network support (type SHOW NET for further info)
- Telnet Kermit Option
- Hardware flow control
- External XYZMODEM protocol support
- Latin-1 (West European) character-set translation
- Latin-2 (East European) character-set translation
- Cyrillic (Russian, Ukrainian, etc) character-set translation
- Greek character-set translation
- Hebrew character-set translation
- Japanese character-set translation
- Unicode character-set translation
- Pseudoterminal control
- REDIRECT command
- RESEND command
- Fullscreen file transfer display
- Control-character unprefixing
- Streaming
- Autodownload
-
-Major optional features not included:
- No Kerberos(TM) authentication
- No SRP(TM) (Secure Remote Password) protocol
- No Secure Sockets Layer (SSL) protocol
- No Transport Layer Security (TLS) protocol
- No encryption
- No X Windows forwarding
-
-Host info:
- Machine:    sun4m
- Model:      (unknown)
- OS:         SunOS
- OS Release: 4.1.3_U1
- OS Version: 4
-
-Target: sunos41gsc
-GCC version: 2.7.2
-Compiled Dec 31 1999 10:38:54, options:
- __GNUC__ __STDC__ _POSIX_JOB_CONTROL _SC_JOB_CONTROL ARRAYREFLEN=1024 BIGBUFOK
- BROWSER BSD4 CK_ANSIC CK_APC CK_AUTODL CK_CURSES CK_DNS_SRV CK_ENVIRONMENT
- CK_FAST CK_LOGIN CK_MKDIR CK_NAWS CK_PCT_BAR CK_PERMS CK_RECALL CK_RTSCTS
- CK_SPEED CK_TIMERS CK_TMPDIR CK_TTGWSIZ CK_TTYFD CK_WREFRESH CKEXEC
- CKFLOAT=double CKGHNLHOST ckmaxfiles=64 CKMAXOPEN=64 CKMAXPATH=1023 CKREALPATH
- CKREGEX CKSYSLOG CKTUNING CMDBL=32763 CMDDEP=64 CONGSPD DCMDBUF DIRENT DYNAMIC
- FNFLOAT FORDEPTH=32 GFTIMER HADDRLIST HDBUUCP IFDEBUG IKS_OPTION IKSDB
- IKSDCONF INBUFSIZE=32768 INPBUFSIZ=4096 MAC_MAX=16384 MACLEVEL=128 MAXDDIR=32
- MAXDNUMS=4095 MAXGETPATH=128 MAXTAKE=54 MAXWLD=102400 MSENDMAX=1024 NETCMD
- NETCONN NETPTY NOKVERBS NOSETBUF OBUFSIZE=32768 PARSENSE PATTERNS PIPESEND
- RENAME RLOGCODE SAVEDUID SELECT SIG_V SOL_SOCKET sparc STREAMING sun SUNOS4
- SYSTIMEH TCPSOCKET TIMEH TLOG TNCODE TTLEBUF TTSPDLIST UIDBUFLEN=256 UNIX
- UNPREFIXZERO USE_LSTAT USE_MEMCPY VNAML=4096 WHATAMI XFRCAN Z_MAXCHAN=46
- z_maxchan=46 ZXREWIND
-
- byte order: big endian
-
- sizeofs: int=4 long=4 short=2 char=1 char*=4 float=4 double=8
-
- floating-point: precision=16 rounding=1
-
-   Without going into detail about what all the notation means, notice a
-   couple things:
-
-     * The Options section shows symbols ("macros") in effect during
-       compilation, together with their values (for those that have
-       values). The options are listed in alphabetical order to make any
-       particular option easier to find.
-     * MAXWLD is the maximum number of files that a wildcard can expand
-       to.
-     * Anything starting with "NO" is a feature (or something other than
-       a feature) that has been deliberately "compiled out", or omitted.
-     * Important items for script writers include: CMDBL=32763 (the size
-       of the command buffer and therefore the maximum length for a macro
-       or variable definition; CMDDEP=64 (the limit on recursion depth);
-       FORDEPTH=32 (the nesting limit on FOR loops); INBUFSIZE=32768 (the
-       size of the INPUT command circular buffer); MAC_MAX=16384 (the
-       maximum number of macros), etc.
-
-   See the [375]ckccfg.txt file for details.
-     _________________________________________________________________
-
-  1.22. Generalized File Input and Output
-
-   C-Kermit 7.0 adds a new generalized I/O system for stream files,
-   augmenting (and to some extent, overlapping with) the older OPEN,
-   READ, WRITE, and CLOSE commands. In the new file i/o system, which can
-   be used simultaneously with the old one, all commands are grouped
-   together under the new FILE keyword, and some related functions and
-   variables are added.
-
-    1.22.1. Why Another I/O System?
-
-   The well-known LOG, OPEN, READ, WRITE, and CLOSE commands have the
-   following restrictions:
-
-    1. Only one READ file and one WRITE file can be open at a time.
-    2. The READ and WRITE commands are strictly line oriented.
-    3. These commands can not be used with binary files.
-    4. They do not support read/write access or random access.
-    5. The syntax is a bit counterintuitive for programmers.
-
-   The new file i/o system allows multiple files to be open at once, in
-   any desired combination of modes (read/write/append) supported by the
-   operating system, for line, block (record), or character i/o, for
-   sequential or random access, using consistent syntax and conventions.
-
-   The new system, however, does not replace the old one, since the old
-   system still must be used for:
-
-    1. The session, packet, debug, transaction, and connection logs.
-    2. Reading and writing commands rather than files.
-    3. Existing scripts.
-
-   The new system works only with regular files, not with commands or
-   pipes or mailboxes or pseudoterminals. No special provisions are made
-   in the FILE commands for handling devices or network connections, nor
-   for preventing you from trying to open them; if the underlying
-   operating system treats them like regular stream disk files, the FILE
-   commands (except, of course SEEK, REWIND, and COUNT) might work with
-   them. (In C programming terms, the FILE commands are, at present,
-   nothing more than a front end to fopen() / fread() / fwrite() /
-   fclose() and friends, which are a portable API to sequential files,
-   but this might change in the future for platforms like VMS and VOS
-   that have more complicated file systems.)
-
-   Definitions:
-
-   Channel
-          A number assigned to a file when it is opened, by which it must
-          be referred to in all input/output operations.
-
-   Read/Write Pointer
-          The current position in an open file, expressed as the 0-based
-          byte count from the beginning.
-     _________________________________________________________________
-
-    1.22.2. The FILE Command
-
-   FILE keyword [ switches ] channel [ data ]
-          The keyword specifies the function: FILE OPEN, FILE READ, FILE
-          WRITE, FILE CLOSE, etc. For convenience (and for familiarity to
-          C programmers), the two-word FILE commands can be shortened to
-          the single words FOPEN, FREAD, FWRITE, FCLOSE, and so on.
-          Switches are optional, and modify or amplify the requested file
-          function.
-
-   As in C, Fortran, and other programming languages, open files are
-   referred to by "channels", integers such as 0, 1, 2, 3, and so on. A
-   channel number is assigned when you open a file. The number of
-   available channels depends on the underlying operating system, and can
-   be seen in the variable:
-
-  \v(f_max)
-
-   or by giving the FILE LIST (FLIST) command. Channels are discussed in
-   greater detail in [376]Section 1.22.4.
-
-   FILE command errors can be caught with IF FAIL after the FILE command.
-   In addition, the \v(f_error) variable is set to the completion code of
-   the command: 0 if no error, or a negative number if there was an
-   error. The error codes are listed in [377]Section 1.22.5.
-
-   The command to open a file is:
-
-   FILE OPEN [ switches ] variable filename
-          Opens a file for the type of access specified by the switches,
-          or for read-only access if no switches are given. Upon success,
-          a channel number is assigned to this file and stored in the
-          given variable so you can refer to the open file in subsequent
-          i/o commands. If the file can not be opened, the FILE OPEN
-          command fails. Synonym: FOPEN.
-
-   The FILE OPEN switches are:
-
-   /READ
-          Open the file for read access. If no switches are given, /READ
-          is assumed. If the file does not exist or can't be opened for
-          read access, the FILE OPEN command fails.
-
-   /WRITE
-          Allow writing. If a file of the same name already exists, it is
-          overwritten unless /READ or /APPEND is also included. If a file
-          of the given name does not exist, it is created.
-
-   /APPEND
-          Equivalent to /WRITE, except that if the file exists, it is not
-          destroyed. The read/write pointer is set to the end of the
-          file, so unless you change it with FILE SEEK or REWIND (see
-          below), the first FILE WRITE command adds to the end of the
-          file, preserving what was there already. If /WRITE is also
-          given, it is ignored.
-
-   /BINARY
-          Open the file in "binary" mode, rather than text mode. This
-          switch is meaningless (but still can be used) in UNIX. In VMS,
-          Windows, and OS/2, it inhibits end-of-line processing and
-          conversion, and so should be used for binary files and/or files
-          that are to be accessed in record or character mode rather than
-          line by line.
-
-   The variable for the channel number can be any kind of variable: the
-   \%x kind, a macro name, or an array element. But it must be a
-   variable, not a number -- C-Kermit assigns the channel number; you
-   can't tell it what number to use.
-
-   Example:
-
-  FILE OPEN \%c oofa.txt                  ; Open oofa.txt for reading.
-  IF FAIL exit 1 Can't open oofa.txt      ; Always check to see if it worked.
-  ECHO oofa.txt: channel = \%c
-
-   If the file oofa.txt is opened successfully, a channel number is
-   assigned to the variable \%c. Here's another example using a macro
-   name for the channel number:
-
-  FILE OPEN channel oofa.txt              ; Open oofa.txt for reading.
-  IF SUCCESS ECHO oofa.txt: channel = \m(channel)
-
-   Switches can be combined when it makes sense and the underlying
-   operating system allows it. For example, to open a file in binary mode
-   for reading and writing (sometimes called "update"):
-
-  FILE OPEN /READ /WRITE /BINARY \%c budget.db
-
-   Some combinations might be allowed, others not. For example /READ
-   /APPEND will usually not be allowed. /WRITE /APPEND is treated as
-   /APPEND.
-
-   A major advantage of the new system over the older one is that you can
-   have multiple files open at once. Suppose, for example, that you want
-   to open all the files in a certain directory at once:
-
-  .\%n := \ffiles(/usr/olga*,&f)          ; Get file list into array.
-  if ( > \%n \v(f_max) ) {                ; Make sure there aren't too many.
-      exit 1 {\v(dir): \%n = Too many files}
-  }
-  declare \&c[\%n]                        ; Make array for channel numbers.
-  for \%i 1 \%n 1 {                       ; Loop to open every file...
-      file open \&c[\%i] \&f[\%i]         ; Try to open this one
-      if fail exit 1 Open error: \&f[\%i] ; Check for failure
-  }
-
-   If this loop completes successfully, the \&c[] array will contain \%n
-   channel numbers of open files in elements 1 through \%n.
-
-   Any file that you open with FILE OPEN stays open until Kermit exits,
-   or you close it explicitly. The command to close a file is:
-
-   FILE CLOSE { ALL, channel }
-          If a channel number is given and the channel refers to an open
-          file, the file is closed and the channel is freed for reuse; if
-          the channel does not refer to an open file, an error message is
-          printed and the command fails. If ALL is specified instead of a
-          specific channel, all files opened with FILE OPEN are closed
-          and if all open files were closed successfully (even if no
-          files were open), the command succeeds; if any open file could
-          not be closed, the command fails; however, all open files that
-          could be closed are still closed. Synonym: FCLOSE.
-
-   FILE CLOSE might fail because, for example, the disk filled up or a
-   quota was exceeded. Example:
-
-  fopen /write \%c new.txt                ; Open new.txt for writing.
-  if fail exit 1                          ; Check for error.
-  fclose \%c                              ; Close the file we just opened.
-
-   This creates a 0-length file called new.txt.
-
-   Note that FILE OPEN /WRITE (without /READ or /APPEND) always creates a
-   new file, and therefore destroys any file with the same name that
-   might already exist (assuming you have permission to delete it). To
-   avoid overwriting existing files, simply check first:
-
-  if exist new.txt exit 1 {Fatal - new.txt already exists}
-  fopen /write \%c new.txt
-  if fail ...
-
-   The next two commands give information about open files:
-
-   FILE STATUS channel
-          Tells the name of the file, if any, open on the given channel
-          and the switches it was opened with. The read/write pointer is
-          also shown; this is where the next read or write will occur;
-          "[EOF]" is shown if the current position in the open file is
-          the end -- i.e. the next read will fail if the file was opened
-          in /READ mode; the next write will add material to the end. The
-          current line number (0-based) is also shown if known. The FILE
-          STATUS command succeeds if the channel is open, and fails if
-          there is no open file on the given channel, or if the channel
-          number is invalid or out of range. Synonym: FSTATUS.
-
-   FILE LIST
-          Lists the channel number and name of each open file, along with
-          its OPEN modes (R, W, A, B, RW, etc) and its current read/write
-          pointer or "[EOF]" if it is at the end. Also tells the number
-          of files currently opened with FILE OPEN, plus the maximum
-          number of open files allowed by the system and the maximum
-          number allowed for FILE OPEN. Synonym: FLIST.
-
-   Next come the commands for reading and writing files:
-
-   FILE READ [ switches ] channel [ variable ]
-          Reads data from the file on the given channel number into the
-          variable, if one was given; if no variable was given, the
-          result is printed on the screen. IMPORTANT: The variable should
-          normally be a macro name rather than a \%x or \&x[] variable if
-          you want backslash characters in the file to be taken literally
-          (see pp.408-412 of [378]Using C-Kermit for an explanation; you
-          can also read into a \%x or \&x[] variable, but then you must
-          remember to protect future references to by \fcontents() if you
-          don't want C-Kermit to process any backslashes it might
-          contain). The desired amount of data (according to the
-          switches) is read from the file at the current read/write
-          pointer, and upon completion the read/write position is updated
-          to first byte after the data that was read, no matter what
-          switches were given. Synonym: FREAD.
-
-   FILE WRITE [ switches ] channel text
-          Writes the given text to the file on the given channel number.
-          The text, of course, can be literal text or a variable, or any
-          combination. If the text might contain leading or trailing
-          spaces, it must be enclosed in braces if you want to preserve
-          them. Synonym: FWRITE.
-
-   Before proceeding, a caution about the NUL character. C-Kermit is so
-   named because it is a Kermit program written in the C language. In C,
-   character strings are represented as a sequence of non-NUL bytes
-   terminated by a NUL byte (a byte in which all bits are 0). Thus a C
-   string can not contain NUL bytes; it always ends with the first NUL
-   byte. C-Kermit variables are implemented as C strings and therefore
-   can't contain NUL bytes either, so the FILE READ and FILE WRITE
-   commands do not handle files or strings that contain NUL bytes, except
-   when the /CHARACTER switch is included with the FILE READ or WRITE
-   command, or when /LPAD:0 or /RPAD:0 is given with the FILE WRITE
-   command; these switches are explained below.
-
-   Also note that Kermit can not be used read or write binary numbers in
-   the machine's internal format (integer or floating-point); in general,
-   numbers can be processed only when represented as numeric or
-   floating-point strings.
-
-   FILE READ switches are:
-
-   /LINE
-          Specifies that a line of text is to be read. A line is defined
-          according to the underlying operating system's text-file
-          format. For example, in UNIX a line is a sequence of characters
-          up to and including a linefeed, or the end of the file, which
-          ever comes first. The line terminator (if any) is removed
-          before assigning the text to the variable. If no switches are
-          included with the FILE READ command, /LINE is assumed. Normally
-          this switch should not be used with files opened in /BINARY
-          mode (but nothing prevents it either).
-
-   /SIZE:number
-          Specifies that the given number of bytes (characters) is to be
-          read. The actual number of bytes returned will be less if the
-          end of file is reached (or a NUL byte is encountered). For
-          example, if a file is 514 bytes long, FILE READ /SIZE:512
-          returns 512 bytes the first time and 2 bytes the second time.
-          FILE READ /SIZE provides a kind of "record i/o" for files that
-          do not necessarily contain lines. The resulting block of
-          characters is assigned to the variable without any editing.
-          Synonym: /BLOCK.
-
-   /CHARACTER
-          Equivalent to /SIZE:1. If FILE READ /CHAR succeeds but the
-          variable is empty, this indicates a NUL byte was read. Synonym:
-          BYTE.
-
-   FILE WRITE switches are:
-
-   /LINE
-          Specifies that an appropriate line terminator is to be added to
-          the end of the text. If no switches are included, /LINE is
-          assumed.
-
-   /SIZE:number
-          Specifies that the given number of bytes (characters) is to be
-          written. If the given text is longer than the requested size,
-          it is truncated; if is shorter, it is padded according /LPAD
-          and /RPAD switches. Synonym: /BLOCK.
-
-   /LPAD[:value]
-          If /SIZE was given, but the text is shorter than the requested
-          size, the text is padded on the left with sufficient copies of
-          the character whose ASCII value is given to write the given
-          length. If no value is specified, 32 (the code for Space) is
-          used. The value can also be 0 to write the indicated number of
-          NUL bytes. If /SIZE was not given, this switch is ignored.
-
-   /RPAD[:value]
-          Like LPAD, but pads on the right.
-
-   /CHARACTER
-          Specifies that one character should be written. If the text is
-          empty or not given, a NUL character is written; otherwise the
-          first character of text is given. Synonym: /BYTE.
-
-   /STRING
-          Specifies that the text is to be written as-is, with no
-          terminator added.
-
-   Here's an example in which we copy a text file line by line:
-
-  file open /read \%c oofa.txt            ; Open input file
-  if fail exit 1 Can't open input file    ; Check that it's open
-  file open /write \%d new.txt            ; Open output file
-  if fail exit 1 Can't open output file   ; Check
-  while true {                            ; Loop to copy lines
-      file read /line \%c line            ; Read a line
-      if fail break                       ; Assume failure = end of file
-      file write /line \%d {\m(line)}     ; Write the line to output file
-      if fail exit 1 Write failure        ; Failure here is fatal
-  }
-  file close \%c                          ; Close the two files
-  file close \%d
-
-   Note that since /LINE is the default for both FILE READ and FILE
-   WRITE, it can be omitted as in the following example, where we also
-   use the short names for the FILE commands.
-
-  fopen /read \%c oofa.txt                ; Open input file
-  if fail exit 1 Can't open input file    ; Check that it's open
-  fopen /write \%d new.txt                ; Open output file
-  if fail exit 1 Can't open output file   ; Check
-  while true {                            ; Loop to copy lines
-      fread \%c line                      ; Read a line
-      if fail break                       ; Assume failure = end of file
-      fwrite \%d {\m(line)}               ; Write the line to output file
-      if fail exit 1 Write failure        ; Failure here is fatal
-  }
-  fclose \%c                              ; Close the two files
-  fclose \%d
-
-   Here's the same example using "record i/o" (the open and close
-   sequences are are omitted since they are the same as above). The
-   result is the same, but execution is much faster:
-
-  while true {                            ; Loop to copy blocks
-      fread /size:512 \%c block           ; Read a block into \%a
-      if fail break                       ; Assume failure = end of file
-      fwrite /string \%d {\m(block)}      ; Write the block to output file
-      if fail exit 1 Write failure        ; Failure here is fatal
-  }
-
-   Although record i/o is faster, it should not be used in line-oriented
-   applications, since it returns arbitrary chunks of the file to your
-   script, rather than lines. In this example, FWRITE /STRING is used
-   rather than FWRITE /SIZE:512 to avoid the last output block being
-   padded beyond the original file's length.
-
-   A file can also be copied character by character, but this is much
-   slower than line i/o and VERY much slower than block i/o:
-
-  while true {                            ; Loop to copy blocks
-      fread /char \%c c                   ; Read a character into c
-      if fail break                       ; Assume failure = end of file
-      fwrite /char \%d {\m(c)}            ; Write character to output file
-      if fail exit 1 Write failure        ; Failure is fatal
-  }
-
-   Although character i/o is slow, it is the only way to process files
-   that contain NUL characters (i.e. bytes composed of only zero bits).
-   In the example above, when "fread /char \%c c" returns a NUL, the c
-   variable is empty. But since the FREAD /CHAR command did not fail, we
-   know the result was really a NUL. FWRITE /CHAR, when given an empty
-   variable (or no variable at all) writes a NUL. Thus the loop above
-   will copy any file at all (very slowly). In non-copying applications,
-   NULs are detected like this:
-
-  fread /char \%c c
-  if fail (do something)
-  if not def c (a NUL byte was read)
-
-   Finally some advanced file operations:
-
-   FILE FLUSH channel
-          For output files only: commits all previous writes to disk, in
-          case the computer was buffering them. Synonym: FFLUSH.
-
-   FILE COUNT [ { /BYTES, /LINES, /LIST, /NOLIST } ] channel
-          By default, or if the /BYTES switch is given, counts the bytes
-          in the file, if any, open on the given channel. If the /LINES
-          switch is given, counts lines in the file. If the /LIST switch
-          is given, the result is printed. If the /NOLIST switch is
-          given, the result is not printed. /QUIET is a synonym for
-          /NOLIST. If neither /LIST nor /NOLIST is given, the result is
-          printed if the command is given at top level, i.e. not from a
-          command file or macro. In all cases, the result of the most
-          recent FILE COUNT command is stored in the variable
-          \v(f_count). Note that FILE COUNT /LINE works (and can only
-          work) by reading the entire file; expect it to take some time
-          if the file is large. Synonym: FCOUNT.
-
-   FILE REWIND channel
-          Moves the read/write pointer to the beginning of the file.
-          Equivalent to FILE SEEK channel 0. Synonym: FREWIND.
-
-   FILE SEEK [ switches ] channel { [{+,-}]number, LAST, EOF }
-          Moves the read/write pointer for the file on this channel to
-          the given position, which may be a byte (character) number or a
-          line number, expressed in either absolute or relative terms.
-          Switches:
-
-        /BYTE
-                The number given is a byte number. Synonym: /CHARACTER.
-
-        /LINE
-                The number given is a line number.
-
-        /ABSOLUTE
-                The number given is absolute.
-
-        /RELATIVE
-                The number given is relative to the current position.
-
-          By default, or if the /BYTE switch is given, the number is a
-          byte number (0 = first byte). If /LINE is given, the number is
-          a line number (0 = first line). EOF means to move to the end of
-          the file. LAST means to move to the last line or character of
-          the file, depending on whether it's a line or character seek.
-
-          If neither the /RELATIVE nor the /ABSOLUTE switch is given,
-          then if a signed number is given, the motion is relative to the
-          current position. An expression that evaluates to a negative
-          number is not considered signed for this purpose; that is, a
-          sign (+ or -) must be included as the first character of the
-          number in the command itself to force a relative seek (in the
-          absence of /RELATIVE or /ABSOLUTE).
-
-          If the number has no sign, or if the /ABSOLUTE switch is given,
-          the number represents an absolute position (relative to the
-          beginning of the file). Subsequent FILE READs or WRITEs will
-          take place at the new position.
-
-          If the read/write pointer is placed after the end of the file,
-          a subsequent FILE READ will fail, but a FILE WRITE will succeed
-          (possibly creating a file with "holes"). If a FILE SEEK /BYTE
-          command is given, the current line becomes unknown (unless the
-          position is 0) and subsequent FILE SEEK /RELATIVE /LINE
-          commands will fail until the next non-relative FILE SEEK /LINE
-          command is given. Synonym: FSEEK.
-
-   An absolute FILE SEEK to a negative position fails silently, as does a
-   relative seek to a position before the beginning of the file.
-
-   A caution about relative SEEKs: remember that the number is relative
-   to the current position. Whenever you read or write, this changes the
-   position. In each of the following examples, assume the file open on
-   channel \%c is positioned at line n (the FREAD target variable is
-   omitted for lack of space):
-
-  { FREAD \%c, FSEEK /LINE \%c -1, FREAD \%c }  <-- Reads line n twice
-  { FREAD \%c, FSEEK /LINE \%c +0, FREAD \%c }  <-- Reads lines n and n+1
-  { FREAD \%c, FSEEK /LINE \%c +1, FREAD \%c }  <-- Reads lines n and n+2
-  { FREAD \%c, FSEEK /LINE \%c -2, FREAD \%c }  <-- Reads lines n and n-1
-  { FREAD \%c, FSEEK /LINE \%c -3, FREAD \%c }  <-- Reads lines n and n-2
-
-   Another caution: Using FSEEK and FREAD /SIZE to repeatedly read the
-   same disk block (e.g. when sampling a database record that is
-   frequently updated) might not give you updated disk blocks due to the
-   internal buffering and caching of the C library (this probably varies
-   from one platform/compiler combination to another). If necessary you
-   can force a fresh disk read with a close/open sequence:
-
-  FCLOS \%c
-  FOPEN \%c samefilename
-  FSEEK \%c samespot
-  FREAD /SIZE:howmanybytes \%c variable
-     _________________________________________________________________
-
-    1.22.3. FILE Command Examples
-
-   To read the last 10 lines of a text file into an array:
-
-  fopen /read \%c oofa.txt                ; Open the file
-  if fail exit 1 Can't open oofa.txt      ; Always check for failure
-  dcl \&a[10]                             ; Declare a 10-element array
-  fcount /line \%c                        ; Count lines in the file
-  fseek /line \%c \v(f_count)-10          ; Seek to 10 lines from the end
-  if fail exit 1 Can't seek               ; Check for failure
-  for \%i 1 10 1 { fread \%c \&a[\%i] }   ; Read the last 10 lines
-  fclose \%c                              ; Close the file
-
-   Note that blank lines show up as empty (undefined) array elements, for
-   example if you give a "show array a" command at this point. This is
-   normal. You can still use these elements; e.g.:
-
-  for \%i 1 10 1 { echo \%i. \&a[\%i] }   ; Display the 10 lines
-
-   Here is how to read the last line of a file (already open on channel
-   \%c):
-
-  fseek /line \%c last                    ; Seek directly to last line
-
-   Alternatively:
-
-  fseek /line \%c eof                     ; Seek to end of file
-  fseek /line \%c -1                      ; Seek to beginning of last line
-
-   Alternatively:
-
-  fcount /line \%c                        ; Count the file's lines
-  fseek /line \%c \v(f_count)-1           ; Seek to last line
-  fread \%c                               ; Read it
-
-   To read every other line from the file (using relative SEEK), skipping
-   the first line:
-
-  fopen /read \%c oofa.txt                ; Open the file
-  while ( success ) {                     ; Loop through lines
-      fseek /line \%c +1                  ; Skip a line
-      if success fread \%c                ; Read & display a line
-  }
-  fclose \%c                              ; Close the file
-
-   Here is how to read the lines of a file in reverse order:
-
-  fopen /read \%c oofa.txt                ; Open
-  if fail exit 1                          ; Check
-  fseek /line \%c last                    ; Seek to last line
-  while success {                         ; Loop
-      fread \%c                           ; Read line
-      fseek /line \%c -2                  ; Seek backwards two lines
-  }
-  fclose \%c                              ; Close the file
-
-   The loop works because a relative SEEK outside the file fails.
-
-   It is also possible to use block i/o to manage random-access files
-   with fixed-length records (as long as they don't contain NUL
-   characters). Suppose, for example, you have a file of "card image"
-   records with fixed-field information about customers, such as:
-
-  Name:     Columns  1-32  (column numbers are 1-based)
-  Address:  Columns 33-72
-  Balance:  Columns 73-80
-
-   The records are indexed by customer number, starting with 0. There are
-   no line terminators separating them. Therefore the record for customer
-   number n starts at position nx 80 (\%n*80).
-
-   Now suppose we received a payment from customer number 173 and want to
-   update the balance:
-
-  .\%n = 173                               ; Customer (record) number
-  .\%a = 12.72                             ; Amount
-  fopen /read /write \%c customer.db       ; Open the file
-  if fail stop 1 OPEN FAILED: \f_errmsg()  ; Check
-  fseek /byte \%c 80*\%n                   ; Seek to record
-  fread /size:80 \%c r                     ; Read the record
-  if fail stop 1 READ FAILED: \f_errmsg()  ; Check (IMPORTANT)
-  .\%b := \fright(\m(r),8)                 ; Extract the balance
-  .\%b := \ffpadd(\%b,\%a,2)               ; Add the new payment
-  if fail stop 1 ARITHMETIC ERROR: \%b/\%a ; Catch bad records
-  .r := {\fleft(\m(r),72)\flpad(\%b,8)}    ; Update the record
-  fseek /byte \%c 80*\%n                   ; Reposition to same spot
-  fwrite /size:80 \%c {\m(r)}              ; Replace the record
-  if fail stop 1 WRITE FAILED: \f_errmsg() ; Check
-  fclose \%c                               ; Close the file
-
-   REMEMBER: Using FILE SEEK to move beyond the end of file can result in
-   a file with holes when writing; when reading, an end-of-file error
-   will occur -- be sure to check for it.
-     _________________________________________________________________
-
-    1.22.4. Channel Numbers
-
-   C-Kermit's channel numbers are integers from 0 to some
-   platform-dependent limit, such as 46 or 1985 (the value of \v(f_max)).
-   This is the limit placed by the operating system on the number of
-   files that may be opened by one process or user or job, minus the
-   standard input, output, and error files, and minus the number of files
-   reserved by C-Kermit for logs, OPEN READ and WRITE, and file transfer
-   (and maybe some command files -- the \v(f_max) number can't be exact).
-
-   Although you must include a variable in the FILE OPEN command, to
-   which the channel number is assigned, you don't have to use a variable
-   in the other FILE commands if you know what the number is -- you can
-   just put the number. This saves you a few keystrokes when typing
-   commands at the prompt:
-
-  fopen \%c oofa.txt
-  flist
-  0. /usr/olga.oofa.txt (R) 0
-
-   This tells the channel number is 0 (the number on the left is the
-   channel file's channel number). Of course you can also find it by
-   echoing the variable:
-
-  echo \%c
-  0
-
-   Or with "fstatus \%c". Now you can type commands like:
-
-  fread 0
-
-   to read a line from the file. Obviously, however, using digits rather
-   than a variable for the channel number would be poor practice in a
-   script.
-
-   If in commands like:
-
-  fread \%c \%a
-
-   you have trouble remembering which variable is which, note that the
-   channel number is, indeed, a number. Anywhere C-Kermit accepts a
-   number it can also accept an expression, so you can put parentheses
-   around the channel number to remind you it's the channel number and
-   not the variable into which data is to be read:
-
-  fread (\%c) \%a
-
-   Normally channel numbers are assigned sequentially as 0, 1, 2, ... up
-   to the limit. However, once you start closing files, there can be
-   holes in the sequence. New channels are assigned to fill in the holes.
-   Thus you can't depend on channel numbers being in any particular
-   sequence.
-     _________________________________________________________________
-
-    1.22.5. FILE Command Errors
-
-   Each FILE command sets the variable \v(f_error) to one of the
-   following values:
-
-    0 = No error
-   -1 = System error
-   -2 = Attempt to read after end of file
-   -3 = Channel not open
-   -4 = Channel number out of range (negative or too large)
-   -5 = Numeric argument (size, ...) out of range
-   -6 = File not found
-   -7 = Bad or missing filename
-   -8 = Too many files are already open (FILE OPEN only)
-   -9 = Forbidden operation (e.g. write to a read-only file)
-  -10 = Access denied
-  -11 = Illegal combination of OPEN modes (FILE OPEN only)
-  -12 = Buffer overflow
-  -13 = Current line number unknown (for relative line seeks)
-  -14 through -98: Reserved.
-  -99 = Requested operation not implemented in this version of C-Kermit
- -999 = Unknown error
-
-   When \v(f_error) is -1, this means the FILE command failed because
-   because of a system error, in which case you can examine the following
-   variables:
-
-  \v(errno)     = System error number.
-  \v(errstring) = Error message corresponding to \v(errno).
-
-   A special function is available for translating the \v(f_error) code
-   to an error message string:
-
-\f_errmsg([code])
-  If the code is -1, returns error message of the most recent system
-  error; otherwise if the code is a valid \v(f_error) value, the associated
-  message is returned.  If the code is omitted, the status message
-  corresponding to the current \v(f_error) value is returned.
-
-   A FILE command that fails prints the appropriate error message
-   automatically, except when the command is READ or SEEK and the error
-   is -2 (end of file); in that case, the command still fails, but does
-   not print a message. This allows constructions such as:
-
-  fopen \%c oofa.txt
-  while success { fread \%c }
-  fclose \%c
-
-   to work as expected, i.e. without an annoying message when the end of
-   file is reached.
-     _________________________________________________________________
-
-    1.22.6. File I/O Variables
-
-   The variables associated with the file i/o package are:
-
-   \v(f_count)
-          Result of the most recent FILE COUNT (FCOUNT) command.
-
-   \v(f_error)
-          Numeric error code of most recent FILE command (0 = no error).
-
-   \v(f_max)
-          Maximum number of files open simultaneously.
-     _________________________________________________________________
-
-    1.22.7. File I/O Functions
-
-   Some of the FILE commands can also be issued as function calls, which
-   makes script writing a bit more convenient, especially for C
-   programmers. Also, several functions are provided that do not have
-   command equivalents. Each of these functions takes a channel number as
-   the first argument. These functions do not work for OPEN { READ,
-   !READ, WRITE, !WRITE, and APPEND } files.
-
-   \f_status(channel)
-          Returns 0 if the channel is not open, otherwise a number
-          between 1 and 15 which is the sum of the OPEN modes:
-
-  1 = /READ
-  2 = /WRITE
-  4 = /APPEND
-  8 = /BINARY
-
-   The remaining functions work only for open channels. Each of these
-   functions can fail for the applicable reasons listed in [379]Section
-   1.22.5. For instructions on handling function errors, see [380]Section
-   7.12.
-
-   \f_pos(channel)
-          Returns the file's current read/write pointer (0-based). There
-          is no FILE command equivalent.
-
-   \f_line(channel)
-          Returns the file's current line number (0-based), if known,
-          otherwise -1. There is no FILE command equivalent. The line
-          number is known as long as no character or block i/o has been
-          done on the channel.
-
-   \f_handle(channel)
-          Returns the "file handle" of the file. That is, it translates
-          the portable C-Kermit channel number into a system-specific
-          file handle or number that can be passed to other programs on
-          the same platform. In UNIX this is a file descriptor. There is
-          no FILE command equivalent.
-
-   \f_eof(channel)
-          Returns 1 if the read/write pointer of the file on the given
-          channel is at the end of the file, 0 otherwise. Convenient in
-          WHILE statements, e.g.:
-
-    while not \f_eof(\%c) { fread \%c }
-
-   \f_getchar(channel)
-          Equivalent to FREAD /CHAR. Returns the character actually read.
-          If \f_getchar() does not fail but the return value is empty,
-          this means a NULL character was read.
-
-   \f_getline(channel)
-          Equivalent to FREAD /LINE. Returns the line actually read, but
-          with the line terminator stripped. If \f_getline() does not
-          fail but the return value is empty, this normally means an
-          empty line was read.
-
-   \f_getblock(channel,n)
-          Equivalent to FREAD /SIZE:n. Returns the block of characters
-          actually read. If the returned block is smaller than n, it
-          indicates either that the end of file was reached or a NUL
-          character is in the block.
-
-   \f_putchar(channel,c)
-          Equivalent to FWRITE /CHARACTER. Writes the character c. If c
-          contains more than one character, only the first is written. If
-          c is empty a NUL is written. Returns the number of characters
-          written on success, or a negative error code upon failure.
-
-   \f_putline(channel,string)
-          Equivalent to FWRITE /LINE. Writes the string and adds the
-          appropriate line termination character or sequence. If the
-          string is empty or omitted, an empty line is written. Returns
-          the number of characters written on success, or a negative
-          error code upon failure.
-
-   \f_putblock(channel,string)
-          Equivalent to FWRITE /STRING. Writes the string as given. If
-          the string is empty or omitted, nothing is written. Returns the
-          number of characters written on success, or a negative error
-          code upon failure.
-     _________________________________________________________________
-
-    1.22.8. File I/O Function Examples
-
-  fopen /read \%c oofa.txt            ; Open our favorite file for reading
-  if failure exit 1                   ; Check that it's open
-  while not \f_eof(\%c) {             ; Loop until EOF
-      .line := \f_getline(\%c)        ; Get a line
-      if success echo {\m(line)}      ; Echo it
-  }
-  if not \f_eof(\%c) {                ; Check reason for loop exit
-      exit 1 File Error: \f_errmsg()  ; If not EOF say so.
-  }
-
-  frewind \%c                         ; Rewind the file
-  while not \f_eof(\%c) {             ; Same thing but with block i/o
-      .block := \f_getblock(\%c,256)  ; (much faster than line i/o)
-      if success xecho {\m(block)}
-  }
-
-  frewind \%c                         ; Rewind again
-  while not \f_eof(\%c) {             ; Same deal but with character i/o
-      .c := \f_getchar(\%c)           ; (much slower than line i/o)
-      if success xecho {\m(c)}
-  }
-  close \%c
-
-   To close all open files (equivalent to FCLOSE ALL):
-
-  for \%i 0 \v(f_max)-1 1 {
-      if \f_status(\%i) fclose \%i
-  }
-     _________________________________________________________________
-
-  1.23. The EXEC Command
-
-   The EXEC command is available only in UNIX.
-
-   EXEC [ /REDIRECT ] command [ arg1 [ arg2 [ ... ] ]
-          Runs the given command with the arguments in such a way that
-          the command replaces C-Kermit in memory, and C-Kermit ceases to
-          execute. EXEC is like RUN, except instead of returning to
-          C-Kermit when finished, the command returns to whatever process
-          invoked Kermit.
-
-   In the normal case, no files are closed, so the EXEC'd command
-   inherits the open files, read/write pointers, working directory,
-   process ID, user ID (unless command is SUID), group ID (unless command
-   is SGID), groups, etc. (In UNIX, the EXEC command is simply a front
-   end for execvp().)
-
-   If the /REDIRECT switch is included, then if a connection is open (SET
-   LINE or SET HOST), it becomes the standard input and output of the
-   EXEC'd program. If no connection is open, the /REDIRECT switch has no
-   effect. For example to use C-Kermit for PPP dialing in Linux:
-
-  set modem type usr          ; Specify the kind of modem you have
-  set line /dev/ttyS1         ; Specify the device it's connected to
-  set speed 57600             ; and the speed
-  set flow rts/cts            ; and flow control.
-  set dial retries 100        ; Try the dial sequence up to 100 times.
-  dial {{9-212-555-1212}{9-212-555-1213}{9-212-555-1214}{9-212-555-1215}}
-  if fail exit 1
-  for \%i 1 16 1 {            ; Try up to 16 times to get login prompt
-      input 10 Login:         ; Wait 10 sec for it to appear
-      if success break        ; Got it - proceed...
-      output \13              ; Send a carriage return and try again
-  }
-  if ( > \%i 16 ) stop 1 NO LOGIN PROMPT
-  lineout \(myuserid)         ; Send user ID
-  input 30 assword:           ; Wait for Password prompt
-  if fail stop 1 NO PASSWORD PROMPT
-  lineout \m(mypassword)      ; Send the password.
-  exec /redirect pppd         ; Replace ourselves with pppd.
-
-   In this example we assume that the script has already set up the
-   myuserid and mypassword variables -- normally the password should be
-   prompted for, rather than stored on disk. Notice the advantages over
-   the well-known "chat script":
-     * You don't have to control the modem itself with AT commands;
-       Kermit's DIAL command does this for you.
-     * You can have Kermit automatically redial as many times as you want
-       until it gets a connection (if this is legal in your country).
-     * You can have Kermit fetch the number or numbers from a dialing
-       directory.
-     * You can have Kermit cycle through a list of phone numbers (this is
-       new in C-Kermit 7.0; see [381]Section 2.1.16) without having to
-       enter the numbers in a dialing directory.
-     * Dialing is location-independent; you can use the same script to
-       dial from different areas or countries.
-     * Once the connection is made, the full power of Kermit's script
-       language is available to manage the dialog with the terminal
-       server or other device that answers the phone call.
-
-   NOTE: PPP and SLIP dialing are not available in Windows 95/98/NT/2000,
-   whose APIs do not provide a method for an application to hand over a
-   connection to the PPP or SLIP driver.
-     _________________________________________________________________
-
-  1.24. Getting Keyword Lists with '?'
-
-   Suppose you type "te" at the C-Kermit> 6.0 prompt and then Esc or Tab
-   to request keyword completion. Kermit beeps, indicating that more than
-   one command starts with "te". But if you type '?' to see what they
-   are, Kermit shows only "telnet". So why the beep? Because of invisible
-   keywords like "telopt", "terminal", and "text". Lots of keywords are
-   invisible because they are either synonyms for other keywords or else
-   esoteric options to be used only in special circumstances, so we don't
-   want them cluttering up the menus.
-
-   But then there is no way for you to discover them. So in C-Kermit 7.0,
-   if you type '?' AFTER the beginning of a keyword field, then invisible
-   keywords are shown too:
-
-  C-Kermit> te<Esc><BEEP>
-  C-Kermit> te? Command, one of the following:
-   telnet    telopt    terminal  text
-  C-Kermit>te
-
-   But if '?' is typed at the beginning of a field, only visible keywords
-   are shown, as before (so, in this example, if '?' is typed at the
-   C-Kermit> prompt, "telnet" is the only command shown that starts with
-   "te").
-     _________________________________________________________________
-
-  2. MAKING AND USING CONNECTIONS The SET LINE, SET HOST, and SET PORT (a
-  synonym for SET LINE) commands have new synonyms, in which the word SET is
-  replaced by the word OPEN: OPEN LINE, etc. There is no new functionality
-  here, but OPEN is a better verb, since SET generally takes no action, whereas
-  these commands actually try to open a connection. Furthermore, there is the
-  symmetry with CLOSE.
-    ________________________________________________________________________
-
-  2.0. SET LINE and SET HOST Command SwitchesThe SET LINE (SET PORT) and SET
-  HOST commands now allow switches before the device or host name, in most
-  cases, and under certain circumstances, also at the end. The new syntax is
-  backwards compatible with the previous syntax; thus SET LINE, SET PORT, and
-  SET HOST commands in command files written for C-Kermit 6.0 or earlier still
-  work. The expanded syntax is:
-
-  { OPEN, SET } { LINE, PORT, HOST } [ switches ] device-or-address [ switches
-  ]
-
-  The first group of switches is:
-
-   /NETWORK-TYPE:{TCP/IP,X.25,PIPE,PTY...}
-          When more than one network type is available, this lets you
-          specify the type of network to use for this connection without
-          affecting your global SET NETWORK TYPE. See [382]Section 2.7
-          about pipes and ptys.
-
-   /USERID:[string]
-          This switch is equivalent to SET LOGIN USERID. If a string is
-          given, it sent to host during Telnet negotiations; if this
-          switch is given but the string is omitted, no user ID is sent
-          to the host. If this switch is not given, your current LOGIN
-          USERID (\v(userid) value), if any, is sent. Unlike most other
-          switches, this one is "sticky", since the value must persist
-          throughout the session in case the server requests the ID
-          string at a later time.
-
-   /CONNECT
-          Enter CONNECT mode immediately and automatically after the
-          device or connection is open. On serial devices, however, when
-          CARRIER-WATCH is not OFF, wait up to 1 second for the Carrier
-          Detect signal to appear before trying to connect, to give the
-          device time to react DTR, which might have been off prior to
-          opening the device.
-
-   /SERVER
-          Enter server mode immediately and automatically after the
-          device or connection is open. Treatment of carrier is the same
-          as for /CONNECT.
-
-   /WAIT
-   /NOWAIT
-          For Telnet connections only: Like SET TELNET WAIT { ON, OFF },
-          but applies only to this connection, and in fact applies only
-          when OPENing this connection (which is usually the only place
-          it matters). Typically you would use TELNET /NOWAIT to make a
-          connection to a misbehaving Telnet server that does not reply
-          to negotiations as required by the Telnet protocol definition.
-
-   Note: /CONNECT and /SERVER switches are not available in the RLOGIN
-   and TELNET commands, since these commands already include an implicit
-   /CONNECT and preclude automatic entry into server mode.
-
-   The /CONNECT and /SERVER switches are especially useful with "set host
-   *" connections. For example, suppose you want to start a Kermit server
-   on socket 3000 of your TCP host. Normally you would have to give the
-   command:
-
-  set host * 3000
-
-   and then wait for a connection to come in, and only then could you
-   give the SERVER command (or else define a macro to do this, and then
-   execute the macro). Now you can do it in one step:
-
-  set host /server * 3000
-
-   This tells C-Kermit to wait for the connection and then enter server
-   mode once it comes in, no matter how long it takes. Similarly, "set
-   host /conn *" can be used to wait for a "chat" connection to come in.
-
-   Another set of switches is available in VMS only, for use only with
-   SET LINE:
-
-   /SHARE
-          Allows the SET LINE device to be opened in shared mode.
-          Normally it makes no sense to open a serial device in shared
-          mode, but it's necessary when C-Kermit is running in an
-          environment such as DECIntact, that opens your job's
-          controlling terminal in such a way that C-Kermit can't open it
-          too, unless it enables SHARE privilege. Note: SHARE privilege
-          is required.
-
-   /NOSHARE
-          Requires that the SET LINE device not be in use by any other
-          process in order for it to be successfully opened by C-Kermit.
-          If neither /SHARE nor /NOSHARE is specified, /NOSHARE is used.
-
-   The second group of switches is:
-
-   /NO-TELNET-INIT
-          Do not send initial Telnet negotiations even if this is a
-          Telnet port.
-
-   /RAW-SOCKET
-          This is a connection to a raw TCP socket ([383]Section 2.3.5).
-
-   /RLOGIN
-          Use Rlogin protocol even if this is not an Rlogin port.
-
-   /TELNET
-          Send initial Telnet negotiations even if this is not a Telnet
-          port.
-
-   As of C-Kermit 7.0 and K95 1.1.19, the TELNET command includes an
-   implicit /TELNET switch. So if you TELNET to a non-TELNET port, Kermit
-   sends initial Telnet negotiations. This makes sense, since that's what
-   "telnet" means.
-
-   If you want to make a connection to a non-Telnet port without sending
-   initial Telnet negotiations, use:
-
-  set host [ /connect ] name-or-address port
-
-   or:
-
-  telnet name-or-address port /no-telnet-init
-
-   Additional switches might be added in the future; type "set host ?" or
-   "set line ?" to see a current list.
-     _________________________________________________________________
-
-  2.1. Dialing
-
-   Automatic redialing is illegal or restricted in many countries, so
-   until C-Kermit 7.0, it was disabled by default, i.e. until a SET DIAL
-   RETRIES command was given. In C-Kermit 7.0, if no SET DIAL RETRIES
-   command has been given, a default is picked dynamically at DIAL time
-   based on the calling country code, if known. At this writing, the only
-   country code known to have no restrictions on automatic redialing is
-   1. So in this case a limit of 10 is chosen; otherwise 1. If you have
-   not given an explicit SET DIAL RETRIES command, SHOW DIAL shows the
-   value as "(auto)", and then the value actually used is shown when you
-   give the DIAL command.
-
-   As of C-Kermit 7.0, automatic redialing is automatically canceled if
-   the call could not be placed because no dialtone was detected.
-     _________________________________________________________________
-
-    2.1.1. The Dial Result Message
-
-   If DIAL DISPLAY is not ON, the "Call complete" message now shows the
-   modem's call result message, for example:
-
-  Dialing: ...
-  Call complete: "CONNECT 31200/ARQ/V32/LAPM/V42BIS"
-
-   The exact format and contents of this message, of course, depends on
-   the make, model, and configuration of your modem, so use your modem
-   manual to interpret it. The call result message is also available in
-   C-Kermit's \v(dialresult) variable.
-
-  C-Kermit> echo \v(dialresult)
-  CONNECT 31200/ARQ/V32/LAPM/V42BIS
-  C-Kermit> echo Speed = \fword(\v(dialresult),2)
-  Speed = 31200
-  C-Kermit>
-
-   Suppose your modem reports the modulation speed as shown above and you
-   want to ensure your call is completed at (say) 24000 bps or more. You
-   can use a little macro to do the job:
-
-define HSDIAL {                ; High Speed DIAL
-    local \%s
-    if < \v(argc) 1 if not def \v(dialnumber) end 1 Usage: \%0 number
-    set dial retries 100
-    set dial interval 1
-    while true {
-        dial \%*
-        if fail end 1 DIAL failed.
-        asg \%s \fword(\v(dialresult),2)
-        if def \%s if numeric \%s if not < \%s 24000 break
-    }
-}
-
-   (See [384]Section 7.5 about the \%* variable.)
-     _________________________________________________________________
-
-    2.1.2. Long-Distance Dialing Changes
-
-   Due to the glut of cell phones, pagers, fax machines, ISPs, etc, area
-   codes and dialing rules are changing all the time. In the North
-   American Numbering Plan (NANP) countries (USA, Canada, etc), area
-   codes are split or overlayed with increasing frequency, and 10- and
-   11-digit dialing is gradually becoming the norm for local calls.
-   Changes are occurring In Europe, too, partly for these reasons and
-   partly because of some new EC rules.
-
-   In France, effective 18 October 1996, all calls, even local ones, must
-   be dialed with an area code. French area codes are presently 1-digit
-   numbers, 1-6, and the long-distance dialing prefix is 0. All calls
-   within France are considered long distance and begin with 01, 02, ...,
-   06.
-
-   Effective 1 May 1997, all calls within the US state of Maryland, even
-   local ones, must be dialed with an area code but without the
-   long-distance prefix -- this is the now widely-known North American
-   phenomenon of "ten digit dialing". The same is happening elsewhere --
-   many cities in Florida adopted 10-digit dialing in 1998.
-
-   In Italy beginning 19 June 1998, all calls to fixed (as opposed to
-   mobile) numbers must be prefixed by 0. When calling into Italy from
-   outside, the 0 must follow the country code (39). Calls to cell
-   phones, however, must be placed without the 0. Then on 29 December
-   2000, the 0 will become a 4 (for calling fixed numbers) and a prefix
-   of 3 must used for calling mobile phones. More info at:
-   http://www.telecomitalia.it/npnn/.
-
-   In Spain, effective 4 April 1998, with hard cutover on 18 July 1998,
-   all calls within the country must be dialed with 9 digits, and all
-   calls from outside Spain must also be dialed with 9 digits (after the
-   country code, 34). The new 9-digit numbers all begin with "9". More
-   info at: [385]http://www.telefonica.es/cambiodenumeracion/
-
-   Several new dialing features and commands have been added in version
-   6.1 and 7.0 to address these changes.
-
-   C-Kermit 6.0 and Kermit 95 1.1.11 and earlier handle the French
-   situation via a reasonable subterfuge (setting the local area code to
-   a nonexistent one), but did not handle "ten-digit dialing" well at
-   all; the recommended technique was to change the long-distance dialing
-   prefix to nothing, but this defeated Kermit's "list numbers for one
-   name" feature when the numbers were in different locations. For
-   example:
-
-  set dial ld-prefix
-  dial onlineservice
-
-   where "onlineservice" is a dialing directory entry name corresponding
-   to entries that are in (say) Maryland as well as other states, would
-   not correctly dial the numbers not in Maryland.
-
-   A new command lets you specify a list of area codes to be considered
-   local, except that the area code must be dialed:
-
-   SET DIAL LC-AREA-CODES [ areacode [ areacode [ areacode [ ... ] ] ] ]
-          The list may include up to 32 area codes. If a number is called
-          whose area code is in this list, it is dialed WITHOUT the
-          long-distance prefix, but WITH the area code.
-
-   So in Maryland, which (last time we looked) has two area codes, 410
-   and 301, the setup would be:
-
-  SET DIAL LC-AREA-CODES 410 301
-
-   Example:
-
-  SET DIAL LD-PREFIX 1
-  SET DIAL AREA-CODE 301
-  SET DIAL LC-AREA-CODES 410 301 <-- Area codes in 10-digit dialing region
-  DIAL +1 (301) 765-4321         <-- Dials 3017654321  (local with area code)
-  DIAL +1 (410) 765-4321         <-- Dials 4107654321  (local with area code)
-  DIAL +1 (212) 765-4321         <-- Dials 12127654321 (long distance)
-
-   The SET DIAL LC-AREA-CODES command does not replace the SET DIAL
-   AREA-CODE command. The latter specifies the area code you are dialing
-   from. If the called number is in the same area code, then the area
-   code is dialed if it is also in the LC-AREA-CODES list, and it is not
-   dialed otherwise. So if "301" had not appeared in the LC-AREA-CODES
-   list in the previous example:
-
-  SET DIAL LD-PREFIX 1
-  SET DIAL AREA-CODE 301
-  SET DIAL LC-AREA-CODES 410     <-- Area codes in 10-digit dialing region
-  DIAL +1 (301) 765-4321         <-- Dials 7654321     (local)
-  DIAL +1 (410) 765-4321         <-- Dials 4107654321  (local with area code)
-  DIAL +1 (212) 765-4321         <-- Dials 12127654321 (long distance)
-
-   The new Kermit versions also add a Local Call Prefix and Local Call
-   Suffix, in case you have any need for it. These are added to the
-   beginning and of local phone numbers (i.e. numbers that are not
-   long-distance or international). Examples:
-
-  SET DIAL LD-PREFIX 1
-  SET DIAL LC-PREFIX 9
-  SET DIAL LC-SUFFIX *
-  SET DIAL LC-AREA-CODES 410     <-- Area codes in 10-digit dialing region
-  SET DIAL AREA-CODE 301
-  DIAL +1 (301) 765-4321         <-- Dials 97654321*     (local)
-  DIAL +1 (410) 765-4321         <-- Dials 94107654321*  (local with area code)
-  DIAL +1 (212) 765-4321         <-- Dials 12127654321   (long distance)
-     _________________________________________________________________
-
-    2.1.3. Forcing Long-Distance Dialing
-
-   Suppose a number is in your country and area, but for some reason you
-   need to dial it long-distance anyway (as is always the case in
-   France). There have always been various ways to handle this:
-
-    1. Temporarily set your area code to a different (or nonexistent or
-       impossible) one (but this required knowledge of which area codes
-       were nonexistent or impossible in each country).
-    2. Dial the number literally instead of using the portable format,
-       but this defeats the purpose of the portable dialing directory.
-
-   Now there is also a new command that, very simply, can force
-   long-distance dialing:
-
-   SET DIAL FORCE-LONG-DISTANCE { ON, OFF }
-          If a call is placed to a portable phone number within the same
-          country code as the calling number, it is dialed with the
-          long-distance prefix and the area code if FORCE-LONG-DISTANCE
-          is ON. If OFF, the regular rules and procedures apply.
-
-   Example (France):
-
-  SET DIAL COUNTRY-CODE 33
-  SET DIAL AREA-CODE 6
-  SET DIAL FORCE-LONG-DISTANCE ON
-
-   (In fact, SET DIAL COUNTRY-CODE 33 automatically sets DIAL
-   FORCE-LONG-DISTANCE ON...)
-
-   Example (USA, for a certain type of reverse-charge calling in which
-   the called number must always be fully specified):
-
-  SET DIAL PREFIX 18002666328$     ; 1-800-COLLECT
-  SET DIAL COUNTRY-CODE 1
-  SET DIAL AREA-CODE 212
-  SET DIAL FORCE-LONG-DISTANCE ON
-
-   Example (Toronto, where calls to exchange 976 within area code 416
-   must be dialed as long distance, even when you are dialing from area
-   code 416):
-
-  SET DIAL COUNTRY-CODE 1
-  SET DIAL AREA-CODE 416
-  SET DIAL FORCE-LONG-DISTANCE ON
-  DIAL +1 (416) 976-xxxx
-
-   If dialing methods were consistent and sensible, of course it would be
-   possible to always dial every domestic call as if it were long
-   distance. But in many locations this doesn't work or if it does, it
-   costs extra. The following macro can be used for dialing any given
-   number with forced long-distance format:
-
-  define LDIAL {
-      local \%x
-      set dial force-long-distance on
-      dial \%*
-      asg \%x \v(success)
-      set dial force-long-distance off
-      end \%x
-  }
-
-   (See [386]Section 7.5 about the \%* variable.)
-     _________________________________________________________________
-
-    2.1.4. Exchange-Specific Dialing Decisions
-
-   This applies mainly to the North American Numbering Plan (NANP). Refer
-   to the section "Alternative notations" in [387]Using C-Kermit 2nd
-   Edition, pages 106-107, and the story about Toronto on page 110. Using
-   the new LC-AREA-CODES list, we can address the problem by treating the
-   exchange as part of the area code:
-
-  SET DIAL LD-PREFIX 1
-  SET DIAL AREA-CODE 416
-  SET DIAL LC-AREA-CODES 905276
-  DIAL +1 416 765 4321               <-- 7654321      (local)
-  DIAL +1 905 276 4321               <-- 9052764321   (local with area code)
-  DIAL +1 905 528 4321               <-- 19055284321  (long distance)
-
-   The same technique can be used in Massachusetts (story at top of page
-   111) and in any other place where dialing to some exchanges within a
-   particular area code is local, but to others in the same area code is
-   long distance.
-     _________________________________________________________________
-
-    2.1.5. Cautions about Cheapest-First Dialing
-
-   Kermit does not maintain a knowledge base of telephony information; it
-   only provides the tools to let you enter a phone number in a standard
-   format and dial it correctly from any location in most cases.
-
-   In particular, Kermit does not differentiate the charging method from
-   the dialing method. If a call that is DIALED as long-distance (e.g.
-   from 212 to 718 in country code 1) is not CHARGED as long distance, we
-   have no way of knowing that without keeping a matrix of charging
-   information for every area-code combination within every country, and
-   any such matrix would be obsolete five minutes after it was
-   constructed. Thus, "cheapest-first" sorting is only as reliable as our
-   assumption that the charging method follows the dialing method. A good
-   illustration would be certain online services that have toll-free
-   dialup numbers which they charge you a premium (in your online service
-   bill) for using.
-     _________________________________________________________________
-
-    2.1.6. Blind Dialing (Dialing with No Dialtone)
-
-   C-Kermit's init string for Hayes-like modems generally includes an X4
-   command to enable as many result codes as possible, so that Kermit can
-   react appropriately to different failure reasons. One of the result
-   codes that X4 enables is "NO DIALTONE". A perhaps not obvious side
-   effect of enabling this result code that the modem must hear dialtone
-   before it will dial.
-
-   It is becoming increasingly necessary to force a modem to dial even
-   though it does not hear a dialtone on the phone line; for example,
-   with PBXs that have strange dialtones, or with phone systems in
-   different countries, or with ISDN phones, etc. This is called "blind
-   dialing".
-
-   C-Kermit 7.0 has two new commands to cope with this situation:
-
-   SET DIAL IGNORE-DIALTONE { ON, OFF }
-          OFF (the default) means to tell the modem to wait for dialtone
-          before dialing. ON means to enable "blind dialing", i.e. tell
-          the modem NOT to wait for dialtone before dialing. Generally
-          this is accomplished by sending ATX3 to the modem just prior to
-          dialing. SET MODEM TYPE xxx and then SHOW MODEM displays
-          Kermit's built-in "ignore dialtone" command.
-
-   SET DIAL COMMAND IGNORE-DIALTONE text
-          This lets you change the built-in ignore-dialtone command (such
-          as ATX3) to whatever you choose, in case the built-in one does
-          not work, or another command works better.
-
-   Notes:
-    1. The ignore-dialtone command is not sent unless SET DIAL
-       IGNORE-DIALTONE is ON.
-    2. The ATX3 command generally disables not only NO DIALTONE, but also
-       BUSY. So this will prevent Kermit from detecting when the line is
-       busy. This is a property of the modem, not of Kermit.
-     _________________________________________________________________
-
-    2.1.7. Trimming the Dialing Dialog
-
-   The command:
-
-  SET MODEM COMMAND action [ command ]
-
-   is used to override Kermit's built-in modem commands for each action,
-   for each kind of modem in its internal database. If you include a
-   command, this is used instead of the built-in one. If you omit the
-   command, this restores the original built-in command.
-
-   If you want to omit the command altogether, so Kermit doesn't send the
-   command at all, or wait for a response, use:
-
-  SET MODEM COMMAND action {}
-
-   That is, specify a pair of empty braces as the command, for example:
-
-  SET MODEM COMMAND ERROR-CORRECTION ON {}
-     _________________________________________________________________
-
-    2.1.8. Controlling the Dialing Speed
-
-   The rate at which characters are sent to the modem during dialing is
-   normally controlled by the built-in modem database. You might want to
-   override this if Kermit seems to be dialing too slowly, or it is
-   sending characters to the modem faster than the modem handle them. A
-   new command was added for this in C-Kermit 7.0:
-
-   SET DIAL PACING number
-          Specifies the number of milliseconds (thousandths of seconds)
-          to pause between each character when sending commands to the
-          modem during DIAL or ANSWER command execution. 0 means no pause
-          at all, -1 (the default) or any other negative number means to
-          use the value from the database. Any number greater than 0 is
-          the number of milliseconds to pause.
-
-   HINT: You might also need to control the rate at which the modem
-   generates Touch Tones during dialing, for example when sending a
-   numeric page. There are two ways to do this. One way is to insert
-   pause characters into the dialing string. For modems that use the AT
-   command set, the pause character is comma (,) and causes a 2-second
-   pause. On most modems, you can use the S8 register to change the pause
-   interval caused by comma in the dialing string. The other way is to
-   set your modem's tone generation interval, if it has a command for
-   that. Most AT-command-set modems use S11 for this; the value is in
-   milliseconds. For example on USR modems:
-
-  ATS11=200
-
-   selects an interval of 200 milliseconds to separate each dialing tone.
-
-   Hint: To add S-Register settings or other commands to your dialing
-   procedure, use the new SET MODEM COMMAND PREDIAL-INIT command
-   ([388]Section 2.2.2).
-     _________________________________________________________________
-
-    2.1.9. Pretesting Phone Number Conversions
-
-   The LOOKUP command now accepts telephone numbers as well as
-   directory-entry names, for example:
-
-  LOOKUP +1 (212) 7654321
-
-   When given a phone number, LOOKUP prints the result of converting the
-   phone number for dialing under the current dialing rules. For example,
-   if my country code is 1 and my area code is 212, and I am dialing out
-   from a PBX whose outside-line prefix is "93,":
-
-  C-Kermit> lookup +1 (212) 7654321
-  +1 (212) 7654321 => 93,7654321
-  C-Kermit>
-
-   You can also use the \fdialconvert(phone-number) function
-   ([389]Section 2.1.11) to do this programmatically:
-
-  C-Kermit> echo "\fdialconvert(+1 (212) 7654321)"
-  "93,7654321"
-  C-Kermit>
-
-   So the new LOOKUP behaves as follows:
-
-   LOOKUP portable-format-phone-number
-          Displays how the number would actually be dialed Sets FAILURE
-          if there was a conversion error, otherwise SUCCESS.
-
-   LOOKUP literal-format-phone-number
-          Displays the same literal-format-phone-number Always sets
-          SUCCESS.
-
-   LOOKUP dialing-directory-name
-          Displays all matching entries and converts portable phone
-          numbers. Sets SUCCESS if at least one entry was found,
-          otherwise FAILURE.
-
-   LOOKUP =anything
-          Displays "=anything" and sets SUCCESS.
-
-   There is, at present, no programmatic way to fetch numbers from the
-   dialing directory. This will be considered for a future release.
-     _________________________________________________________________
-
-    2.1.10. Greater Control over Partial Dialing
-
-   The following rules now apply to partial dialing:
-
-     * Phone number transformations based on country and area code,
-       application of prefixes, etc, are performed only on the first
-       PDIAL.
-     * Each PDIAL argument is looked up in the dialing directory, so it
-       is possible have directory entries for pieces of phone numbers or
-       other information.
-     * Suffixes are not applied automatically, since there is no way for
-       C-Kermit to know in which PDIAL segment you want them to be
-       applied.
-
-   However, the suffix that *would* have been applied, based on the
-   dialing rules that were invoked when processing the first PDIAL
-   command, is stored in the variable:
-
-  \v(dialsuffix)
-
-   which you can include in any subsequent PDIAL or DIAL commands.
-
-   Example:
-
-  pdial {\m(my_long_distance_pager_number_part_1)}
-  pdial {\m(my_long_distance_pager_number_part_2)}
-  pdial {\v(dialsuffix)}
-  pdial {\m(my_long_distance_pager_number_part_3)}
-  pdial {@\m(numeric_pager_code)#}
-     _________________________________________________________________
-
-    2.1.11. New DIAL-related Variables and Functions
-
-   \fdialconvert(s)
-          s is a phone number in either literal or portable format (not a
-          dialing directory entry name). The function returns the dial
-          string that would actually be used by the DIAL command when
-          dialing from the current location, after processing country
-          code, area code, and other SET DIAL values, and should be the
-          same as the result of LOOKUP when given a telephone number.
-
-   \v(dialsuffix)
-          Contains the suffix, if any, that was applied in the most
-          recent DIAL command, or the suffix that would have been applied
-          in the most recent PDIAL command. Use this variable to send the
-          dial suffix at any desired point in a PDIAL sequence.
-
-   \v(dialtype)
-          A number indicating the type of call that was most recently
-          placed. Can be used after a normal DIAL command, or after the
-          first PDIAL command in a PDIAL sequence. Values are:
-
-  -2: Unknown because TAPI handled the phone number translation.
-  -1: Unknown because some kind of error occured.
-   0: Internal within PBX.
-   1: Toll-free.
-   2: Local within calling area.
-   3: Unknown (e.g. because a literal-format phone number was given).
-   4: Long distance within country.
-   5: International
-
-   \v(dialcount)
-          The current value of the DIAL retry counter, for use in a DIAL
-          macro ([390]Section 2.1.13).
-
-   \v(d$px)
-          PBX Exchange (see [391]Section 2.1.12).
-
-   Other dial-related variables, already documented in [392]Using
-   C-Kermit (or other sections of this document, e.g. [393]Section
-   2.1.1), include \v(dialnumber), \v(dialstatus), etc. A convenient way
-   to display all of them is:
-
-  show variable dial  ; hint: abbreviate "sho var dial"
-
-   This shows the values of all the variables whose names start with
-   "dial". Also "show variable d$" (to show the \v(d$...) variables).
-     _________________________________________________________________
-
-    2.1.12. Increased Flexibility of PBX Dialing
-
-   Refer to [394]Using C-Kermit, 2nd Edition, pages 107-108. Recall that
-   three commands are needed to configure C-Kermit for dialing from a
-   PBX:
-
-  SET DIAL PBX-EXCHANGE number
-  SET DIAL PBX-INSIDE-PREFIX number
-  SET DIAL PBX-OUTSIDE-PREFIX number
-
-   Unfortunately, this model does not accommodate PBXs that have more
-   than one exchange. For example our PBX at Columbia University (which
-   must handle more than 10,000 phones) has 853-xxxx and 854-xxxx
-   exchanges.
-
-   Beginning in C-Kermit 7.0, the SET DIAL PBX-EXCHANGE command accepts a
-   list of exchanges, e.g.:
-
-  SET DIAL PBX-EXCHANGE 853 854
-
-   (multiple exchanges are separated by spaces, not commas).
-
-   So now when dialing a portable-format number that has the same country
-   and area codes as those of your dialing location, C-Kermit compares
-   the exchange of the dialed number with each number in the PBX Exchange
-   list (rather than with a single PBX Exchange number, as it did
-   formerly) to determine whether this is an internal PBX number or an
-   external call. If it is an external call, then the PBX Outside Prefix
-   is applied, and then the normal dialing rules for local or
-   long-distance calls.
-
-   If it is an inside call, the exchange is replaced by the PBX Inside
-   Prefix. But if the PBX has more than one exchange, a single fixed PBX
-   Inside Prefix is probably not sufficient. For example, at Columbia
-   University, we must dial 3-xxxx for an internal call to 853-xxxx, but
-   4-xxxx for a call to 854-xxxx. That is, the inside prefix is the final
-   digit of the exchange we are dialing. For this reason, C-Kermit 7.0
-   provides a method to determine the inside prefix dynamically at
-   dialing time, consisting of a new variable and new syntax for the SET
-   DIAL PBX-INSIDE-PREFIX command:
-
-   \v(d$px)
-          This variable contains the exchange that was matched when a PBX
-          internal call was detected. For example, if the PBX exchange
-          list is "853 854" and a call is placed to +1 (212) 854-9999,
-          \v(d$px) is set to 854.
-
-   SET DIAL PBX-INSIDE-PREFIX \fxxx(...)
-          If the PBX Inside Prefix is defined to be a function, its
-          evaluation is deferred until dialing time. Normally, this would
-          be a string function having \v(d$px) as an operand. Of course,
-          you can still specify a constant string, as before.
-
-   So given the following setup:
-
-  SET DIAL COUNTRY-CODE 1
-  SET DIAL AREA-CODE 212
-  SET DIAL PBX-OUTSIDE-PREFIX 93,
-  SET DIAL PBX-EXCHANGE 853 854
-  SET DIAL PBX-INSIDE-PREFIX \fright(\v(d$px),1)
-
-   The following numbers give the results indicated:
-
- Number                   Result
-  +1 (212) 854-9876        4-9876
-  +1 (212) 853-1234        3-1234
-  +1 (212) 765-4321        93,765-4321
-  +1 (333) 765-4321        93,1333765-4321
-
-   Furthermore, the K_PBX_XCH environment variable may now be set to a
-   list of exchanges to automatically initialize C-Kermit's PBX exchange
-   list, for example (in UNIX ksh or bash):
-
-  export K_PBX_XCH="853 854"
-
-   (Quotes required because of the space.) Of course, this variable can
-   also be set to a single exchange, as before:
-
-  export K_PBX_XCH=853
-     _________________________________________________________________
-
-    2.1.13. The DIAL macro - Last-Minute Phone Number Conversions
-
-   After a DIAL or LOOKUP command is given, a list of phone numbers is
-   assembled from the dialing directory (if any), with all
-   location-dependent conversion rules applied as described in Chapter 5
-   of [395]Using C-Kermit.
-
-   However, additional conversions might still be required at the last
-   minute based on local or ephemeral conditions. So that you can have
-   the final word on the exact format of the dial string, C-Kermit 7.0
-   lets you pass the converted string through a macro of your own design
-   for final processing before dialing. The relevant command is:
-
-   SET DIAL MACRO [ name ]
-          Specifies the name of a macro to be run on each phone number
-          after all built-in conversions have been applied, just before
-          the number is dialed. If no name is given, no macro is run. The
-          phone number, as it would have been dialed if there were no
-          dial macro, is passed to the macro.
-
-   The dial macro can do anything at all (except start a file transfer).
-   However, the normal use for the macro would be to modify the phone
-   number. For this reason the phone number is passed to the macro as
-   argument number 1 (\%1). To cause a modified number to be dialed, the
-   macro should terminate with a RETURN statement specifying a return
-   value. To leave the number alone, the macro should simply end.
-   Example:
-
-  define xxx return 10108889999$\%1
-  set dial macro xxx
-  dial xyzcorp
-
-   This defines a DIAL MACRO called xxx, which puts an access code on the
-   front of the number. Another example might be:
-
-  def xxx if equal "\v(modem)" "hayes-1200" return \freplace(\%1,$,{,,,,,})
-  set dial macro xxx
-  dial xyzcorp
-
-   which replaces any dollar-sign in the dial string by a series of five
-   commas, e.g. because this particular modem does not support the "wait
-   for bong" feature (remember that commas that are to be included
-   literally in function arguments must be enclosed in braces to
-   distinguish them from the commas that separate the arguments) and when
-   the IF condition is not satisfied, the macro does not return a value,
-   and so the number is not modified. Then when a DIAL command is given
-   referencing a dialing directory entry, "xyzcorp". The macro is
-   automatically applied to each matching number.
-
-   Numerous dial-, modem-, communications-, and time-related variables
-   are available for decision making your dial macro. Type SHOW VARIABLES
-   for a list. Of particular interest is the \v(dialcount) variable,
-   which tells how many times the DIAL command gone through its retry
-   loop: 1 on the first try, 2 on the second, 3 on the third, and so on,
-   and the \v(dialresult) and \v(dialstatus) variables.
-
-   Here are some other applications for the DIAL MACRO (from users):
-
-     * Phone numbers in the dialing directory are formatted with '-' for
-       readability, but some modems don't like the hyphens, so the DIAL
-       macro is used to remove them before dialing; e.g
-       0090-123-456-78-99 becomes 00901234567899: "def xxx return
-       \freplace(\%1,-)".
-     * To set some specific modem (or other) options depending on the
-       called customer or telephone number.
-     * Choosing the most appropriate provider based on (e.g.) time of
-       day, or cycling through a list of providers in case some providers
-       might be busy.
-
-   To illustrate the final item, suppose you have a choice among many
-   phone service providers; the provider is chosen by dialing an access
-   code before the number. Different providers might be better (e.g.
-   cheaper) for certain times of day or days of the week, or for dialing
-   certain locations; you can use the DIAL macro to add the access for
-   the most desirable provider.
-
-   Similarly, when the same number might be reached through multiple
-   providers, it's possible that one provider might not be able to
-   complete the call, but another one can. In that case, you can use the
-   DIAL macro to switch providers each time through the DIAL loop --
-   that's where the \v(dialcount) variable comes in handy.
-
-   The following command can be used to debug the DIAL macro:
-
-   SET DIAL TEST { ON, OFF }
-          Normally OFF, so the DIAL command actually dials. When ON, the
-          DIAL command performs all lookups and number conversions, and
-          then goes through the number list and retry loop, but instead
-          of actually dialing, lists the numbers it would have called if
-          none of the DIAL attempts succeeded (or more precisely, every
-          number was always busy).
-     _________________________________________________________________
-
-    2.1.14. Automatic Tone/Pulse Dialing Selection
-
-   SET DIAL METHOD { AUTO, DEFAULT, PULSE, TONE }
-          Chooses the dialing method for subsequent calls.
-
-   Prior to version 7.0, C-Kermit's DIAL METHOD was DEFAULT by default,
-   meaning it does not specify a dialing method to the modem, but relies
-   on the modem to have an appropriate default dialing method set. So,
-   for example, when using Hayes compatible modems, the dial string would
-   be something like ATD7654321, rather than ATDT7654321 or ATDP7654321.
-
-   In C-Kermit 7.0 and K95 1.1.19, the dial method can be set from the
-   environment variable:
-
-  K_DIAL_METHOD
-
-   when Kermit starts. The values can be TONE, PULSE, or DEFAULT, e.g.
-   (UNIX):
-
-  set K_DIAL_METHOD=TONE; export K_DIAL_METHOD
-
-   In the absence of a K_DIAL_METHOD definition, the new default SET DIAL
-   METHOD is AUTO rather than DEFAULT. When DIAL METHOD is AUTO and the
-   local country code is known, then if tone dialing is universally
-   available in the corresponding area, tone dialing is used; if dialing
-   from a location where pulse dialing is mandatory, pulse dialing is
-   used.
-
-   The "tone country" and "pulse country" lists are preloaded according
-   to our knowledge at the time of release. You can see their contents in
-   the SHOW DIAL listing. You can change the lists with:
-
-   SET DIAL TONE-COUNTRIES [ cc [ cc [ ... ] ] ]
-          Replaces the current TONE-COUNTRIES list with the one given.
-          Each cc is a country code; separate them with spaces (not
-          commas). Example:
-
-  set dial tone-countries 1 358 44 46 49
-
-          If no country codes are given, the current list, if any, is
-          removed, in which case SET DIAL METHOD AUTO is equivalent to
-          SET DIAL METHOD DEFAULT.
-
-   SET DIAL PULSE-COUNTRIES [ cc [ cc [ ... ] ] ]
-          Replaces the current PULSE-COUNTRIES list with the one give.
-          Syntax and operation is like SET DIAL TONE-COUNTRIES.
-
-   If the same country code appears in both lists, Pulse takes
-   precedence.
-
-   The SET DIAL TONE- and PULSE-COUNTRIES commands perform no
-   verification whatsoever on the cc's, since almost any syntax might be
-   legal in some settings. Furthermore, there is no facility to edit the
-   lists; you can only replace the whole list. However, since the only
-   purpose of these lists is to establish a basis for picking tone or
-   pulse dialing automatically, all you need to override the effect of
-   the list is to set a specific dialing method with SET DIAL METHOD TONE
-   or SET DIAL METHOD PULSE.
-     _________________________________________________________________
-
-    2.1.15. Dial-Modifier Variables
-
-   As of C-Kermit 7.0, dial modifiers are available in the following
-   variables:
-
- \v(dm_lp) Long pause
- \v(dm_sp) Short pause
- \v(dm_pd) Pulse dial
- \v(dm_td) Tone dial
- \v(dm_wa) Wait for answer
- \v(dm_wd) Wait for dialtone
- \v(dm_rc) Return to command mode
-
-   You can use these in your dial strings in place of hardwired modifiers
-   like "@", ",", etc, for increased portability of scripts. Example:
-
-  C-Kermit>set modem type usrobotics
-  C-Kermit>sho variables dm
-   \v(dm_lp) = ,
-   \v(dm_sp) = /
-   \v(dm_pd) = P
-   \v(dm_td) = T
-   \v(dm_wa) = @
-   \v(dm_wd) = W
-   \v(dm_rc) = ;
-  C-Kermit>exit
-     _________________________________________________________________
-
-    2.1.16. Giving Multiple Numbers to the DIAL Command
-
-   Prior to C-Kermit 7.0, the only way to give a DIAL command a list of
-   phone numbers to try until one answers was to create a dialing
-   directory that had multiple entries under the same name, and then use
-   that entry name in the DIAL command. Now a list of numbers can be
-   given to the DIAL command directly in the following format:
-
-  dial {{number1}{number2}{number3}...}
-
-   This is the same list format used by SEND /EXCEPT: and other commands
-   that allow a list where normally a single item is given. Restrictions
-   on this form of the DIAL command are:
-
-     * The first two braces must be adjacent; spacing is optional
-       thereafter.
-     * Each number must be an actual number to dial, not a dialing
-       directory entry.
-     * Dialing directory entries may not contain number lists in this
-       format.
-
-   In all other respects, the numbers are treated as if they had been
-   fetched from the dialing directory; they can be in literal or portable
-   format, etc. Example:
-
-  dial {{7654321} {+1 (212) 5551212} { 1-212-5556789 }}
-
-   The list can be any length at all, within reason.
-
-   This feature is especially handy for use with the K95 Dialer, allowing
-   a list of phone numbers to be specified in the Telephone Number box
-   without having to set up or reference a separate dialing directory.
-
-   You can also use it to add commonly-dialed sequences as variables in
-   your C-Kermit customization file, e.g.:
-
-  define work {{7654321}{7654322}{7654323}}
-
-   and then:
-
-  dial {\m(work)}
-
-   (the variable name must be enclosed in braces).
-
-   Or more simply:
-
-  define work dial {{7654321}{7654322}{7654323}}
-
-   and then:
-
-  work
-     _________________________________________________________________
-
-  2.2. Modems
-
-    2.2.1. New Modem Types
-
-   Since C-Kermit 6.0:
-
-  atlas-newcom-33600ifxC Atlas/Newcom 33600
-  att-keepintouch        AT&T KeepinTouch PCMCIA V.32bis Card Modem
-  att-1900-stu-iii       AT&T Secure Data STU-III Model 1900
-  att-1910-stu-iii       AT&T Secure Data STU-III Model 1910
-  bestdata               Best Data
-  cardinal               Cardinal V.34 MVP288X series.
-  compaq                 Compaq Data+Fax (e.g. in Presario)
-  fujitsu                Fujitsu Fax/Modem Adapter
-  generic-high-speed     Any modern error-correcting data-compressing modem
-  itu-t-v25ter/v250      ITU-T (CCITT) V.25ter (V.250) standard command set
-  megahertz-att-v34      Megahertz AT&T V.34
-  megahertz-xjack        Megahertz X-Jack
-  motorola-codex         Motorola Codex 326X Series
-  motorola-montana       Motorola Montana
-  mt5634zpx              Multitech MT5634ZPX
-  rockwell-v90           Rockwell V.90 56K
-  rolm-244pc             Siemens/Rolm 244PC (AT command set)
-  rolm-600-series        Siemens/Rolm 600 Series (AT command set)
-  spirit-ii              QuickComm Spirit II
-  suprasonic             SupraSonic V288+
-  supra-express-v90      Supra Express V.90
-
-   One of the new types, "generic-high-speed" needs a bit of explanation.
-   This type was added to easily handle other types that are not
-   explicitly covered, without going through the bother of adding a
-   complete user-defined modem type. This one works for modern modems
-   that use the AT command set, on the assumption that all the default
-   ("factory") settings of the modem (a) are appropriate for Kermit, (b)
-   include error correction, data compression, and speed buffering; and
-   (c) are recallable with the command AT&F.
-
-   If the command to recall your modem's profile is not AT&F, use the SET
-   MODEM COMMAND INIT-STRING command to specify the appropriate modem
-   command. The default init-string is AT&F\13 (that is, AT, ampersand,
-   F, and then carriage return); a survey of about 20 modern modem types
-   shows they all support this, but they might mean different things by
-   it. For example, the USR Sportster or Courier needs AT&F1 (not AT&F,
-   which is equivalent to AT&F0, which recalls an inappropriate profile),
-   so for USR modems:
-
-  set modem type generic-high-speed
-  set modem command init AT&F1\13
-
-   Of course, USR modems already have their own built-in modem type. But
-   if you use this one instead, it will dial faster because it has fewer
-   commands to give to the modem; in that sense "&F1" is like a macro
-   that bundles numerous commands into a single one. See your modem
-   manual for details about factory profiles and commands to recall them.
-
-   WARNING: Do not use the generic-high-speed modem type in operating
-   systems like VMS where hardware flow control is not available, at
-   least not unless you change the init string from AT&F\13 to something
-   else that enables local Xon/Xoff or other appropriate type of flow
-   control.
-
-   Also see [396]Section 2.1.7 for additional hints about making dialing
-   go faster.
-     _________________________________________________________________
-
-    2.2.2. New Modem Controls
-
-   SET MODEM CAPABILITIES list
-          In C-Kermit 7.0, this command automatically turns MODEM
-          SPEED-MATCHING OFF if SB (Speed Buffering) is in the list, and
-          turns it ON if SB is absent.
-
-   SET MODEM COMMAND PREDIAL-INIT [ text ]
-          Commands to be sent to the modem just prior to dialing.
-          Normally none.
-
-   SET MODEM SPEAKER { ON, OFF }
-          Determines whether modem speaker is on or off while call is
-          being placed. ON by default. Note: This command does not
-          provide fine-grained control over when the speaker is on or
-          off. Normally, ON means while the call is being placed, until
-          the point at which carrier is successfully established. If your
-          modem has a different speaker option that you want to choose,
-          then use the SET MODEM COMMAND SPEAKER ON text command to
-          specify this option.
-
-   SET MODEM COMMAND SPEAKER { ON, OFF } [ text ]
-          Specify or override the commands to turn your modem's speaker
-          on and off.
-
-   SET MODEM VOLUME { LOW, MEDIUM, HIGH }
-          When MODEM SPEAKER is on, select volume. Note: In some modems,
-          especially internal ones, these commands have no effect; this
-          is a limitation of the particular modem, not of Kermit.
-
-   SET MODEM COMMAND VOLUME { LOW, MEDIUM, HIGH } [ text ]
-          Specify or override the commands to set your modem's speaker
-          volume.
-
-   SET MODEM COMMAND IGNORE-DIALTONE [ text ]
-          The command to enable blind dialing ([397]Section 2.1.6).
-
-   SET MODEM ESCAPE-CHARACTER code
-          Has been augmented to allow codes of 0 or less: < 0 means the
-          escape mechanism is disabled. = 0 means to use (restore) the
-          default value from the modem database. > 0 and < 128 is a
-          literal value to be used instead of the default one. > 127
-          means the escape mechanism is disabled. This affects "modem
-          hangup". When the escape mechanism is disabled, but SET MODEM
-          HANGUP-METHOD is MODEM-COMMAND, it sends the hangup command
-          immediately, without the <pause>+++<pause> business first. This
-          is useful (for example) when sending lots of numeric pages, a
-          process in which never we go online, and so never need to
-          escape back. Eliminating the unnecessary pauses and escape
-          sequence allows a lot more pages to be sent per unit time.
-
-   Recall that C-Kermit can dial modems to which it is connected via
-   TCP/IP (Telnet or Rlogin) as described on page 126 of [398]Using
-   C-Kermit, 2nd Ed. In this case the MODEM HANGUP-METHOD should be
-   MODEM-COMMAND, since RS-232 signals don't work over TCP/IP
-   connections. As noted in the manual, such connections are set up by
-   the following sequence:
-
-  set host host [ port ]
-  set modem type name
-  dial number
-
-   But this can cause complications when you use Kermit to switch between
-   serial and TCP/IP connections. In the following sequence:
-
-  set host name
-  set modem type name
-  set port name
-
-   the first two commands obey the rules for dialing out over Telnet.
-   However, the SET PORT command requires that Kermit close its current
-   (Telnet) connection before it can open the serial port (since Kermit
-   can only have one connection open at a time). But since a modem type
-   was set after the "set host" command was given, Kermit assumes it is a
-   Telnet dialout connection and so sends the modem's hangup sequence is
-   sent to the Telnet host. To avoid this, close the network connection
-   explicitly before opening the serial one:
-
-  set host name
-  close
-  set modem type name
-  set port name
-     _________________________________________________________________
-
-  2.3. TELNET and RLOGIN
-
-   For additional background, please also read the [399]TELNET.TXT file,
-   also available on the Web in [400]HTML format.
-
-   Cautions:
-
-     * If making a Telnet connection with C-Kermit takes a very long
-       time, like over a minute, whereas the system Telnet program makes
-       the same connection immediately, try including the /NOWAIT switch:
-  C-Kermit> telnet /nowait hostname
-       See [401]TELNET.TXT or [402]TELNET.HTM for details. If it also
-       takes a very long time to make a Telnet connection with system
-       Telnet, then the delay is most likely caused by reverse DNS
-       lookups when your host is not properly registered in DNS.
-     * When supplying numeric IP addresses to C-Kermit or to any other
-       application (regular Telnet, Rlogin, etc), do not include leading
-       0's in any fields unless you intend for those fields to be
-       interpreted as octal (or hex) numbers. The description of the
-       Internet address interpreter (the sockets library inet_addr()
-       routine) includes these words:
-
-     All numbers supplied as "parts" in a "." notation may be decimal,
-     octal, or hexadecimal, as specified in the C language (that is, a
-     leading 0x or 0X implies hexadecimal; otherwise, a leading 0
-     implies octal; otherwise, the number is interpreted as decimal).
-       To illustrate, 128.59.39.2 and 128.059.039.002 are not the same
-       host! Even though most of the fields contain non-octal digits.
-       Using system Telnet (not Kermit):
-  $ telnet 128.059.039.002
-  Trying 128.49.33.2 ...
-       Of course the same thing happens with Kermit because it uses (as
-       it must) the same system service for resolving network addresses
-       that Telnet, FTP, and all other TCP/IP applications use.
-     * The RLOGIN section on page 123 does not make it clear that you can
-       use the SET TELNET TERMINAL-TYPE command to govern the terminal
-       type that is reported by C-Kermit to the RLOGIN server.
-     * Note that the SET TCP commands described on pages 122-123 might be
-       absent; some platforms that support TCP/IP do not support these
-       particular controls.
-
-   New commands:
-
-   TELOPT { AO, AYT, BREAK, CANCEL, EC, EL, EOF, EOR, GA, IP, DMARK,
-          DO, DONT, NOP, SB, SE, SUSP, WILL, WONT }
-          This command was available previously, but supported only DO,
-          DONT, WILL, and WONT. Now it lets you send all the Telnet
-          protocol commands. Note that certain commands do not require a
-          response, and therefore can be used as nondestructive "probes"
-          to see if the Telnet session is still open; e.g.:
-
-  set host xyzcorp.com
-  ...
-  telopt nop
-  if fail stop 1 Connection lost
-
-   SET TCP ADDRESS [ ip-address ]
-          Specifies the IP address of the computer that C-Kermit is
-          running on. Normally this is not necessary. The exception would
-          be if your machine has multiple network adapters (physical or
-          virtual) with a different address for each adapter AND you want
-          C-Kermit to use a specific address when making outgoing
-          connections or accepting incoming connections.
-
-   SET TCP DNS-SERVICE-RECORDS { ON, OFF }
-          Tells C-Kermit whether to try to use DNS SRV records to
-          determine the host and port number upon which to find an
-          advertised service. For example, if a host wants regular Telnet
-          connections redirected to some port other than 23, this feature
-          allows C-Kermit to ask the host which port it should use. Since
-          not all domain servers are set up to answer such requests, this
-          feature is OFF by default.
-
-   SET TCP REVERSE-DNS-LOOKUP { ON, OFF, AUTO }
-          Tells Kermit whether to perform a reverse DNS lookup on TCP/IP
-          connections. This allows Kermit to determine the actual
-          hostname of the host it is connected to, which is useful for
-          connections to host pools, and is required for Kerberos
-          connections to host pools and for incoming connections. If the
-          other host does not have a DNS entry, the reverse lookup could
-          take a long time (minutes) to fail, but the connection will
-          still be made. Turn this option OFF for speedier connections if
-          you do not need to know exactly which host you are connected to
-          and you are not using Kerberos. AUTO, the default, means the
-          lookup is done on hostnames, but not on numeric IP addresses.
-
-   SET TELNET WAIT-FOR-NEGOTIATIONS { ON, OFF }
-          Each Telnet option must be fully negotiated either On or Off
-          before the session can continue. This is especially true with
-          options that require sub-negotiations such as Authentication,
-          Encryption, and Kermit; for proper support of these options
-          Kermit must wait for the negotiations to complete. Of course,
-          Kermit has no way of knowing whether a reply is delayed or not
-          coming at all, and so will wait a minute or more for required
-          replies before continuing the session. If you know that
-          Kermit's Telnet partner will not be sending the required
-          replies, you can set this option of OFF to avoid the long
-          timeouts. Or you can instruct Kermit to REFUSE specific options
-          with the SET TELOPT command.
-
-   SET TELOPT [ { /CLIENT, /SERVER } ] option
-          { ACCEPTED, REFUSED, REQUESTED, REQUIRED }
-          [ { ACCEPTED, REFUSED, REQUESTED, REQUIRED } ]
-          SET TELOPT lets you specify policy requirements for Kermit's
-          handling of Telnet option negotiations. Setting an option is
-          REQUIRED causes Kermit to offer the option to the peer and
-          disconnect if the option is refused. REQUESTED causes Kermit to
-          offer an option to the peer. ACCEPTED results in no offer but
-          Kermit will attempt to negotiate the option if it is requested.
-          REFUSED instructs Kermit to refuse the option if it is
-          requested by the peer.
-
-          Some options are negotiated in two directions and accept
-          separate policies for each direction; the first keyword applies
-          to Kermit itself, the second applies to Kermit's Telnet
-          partner; if the second keyword is omitted, an appropriate
-          (option-specific) default is applied. You can also include a
-          /CLIENT or /SERVER switch to indicate whether the given
-          policies apply when Kermit is the Telnet client or the Telnet
-          server; if no switch is given, the command applies to the
-          client.
-
-          Note that some of Kermit's Telnet partners fail to refuse
-          options that they do not recognize and instead do not respond
-          at all. In this case it is possible to use SET TELOPT to
-          instruct Kermit to REFUSE the option before connecting to the
-          problem host, thus skipping the problematic negotiation.
-
-          Use SHOW TELOPT to view current Telnet Option negotiation
-          settings. SHOW TELNET displays current Telnet settings.
-     _________________________________________________________________
-
-    2.3.0. Bug Fixes
-
-   If "set host nonexistent-host" was given (and it properly failed),
-   followed by certain commands like SEND, the original line and modem
-   type were not restored and C-Kermit thought that it still had a
-   network hostname; fixed in 7.0.
-
-    2.3.1. Telnet Binary Mode Bug Adjustments
-
-   SET TELNET BUG BINARY-ME-MEANS-U-TOO { ON, OFF } was added to edit 192
-   after the book was printed. Also SET TELNET BUG BINARY-U-MEANS-ME-TOO.
-   The default for both is OFF. ON should be used when communicating with
-   a Telnet partner (client or server) that mistakenly believes that
-   telling C-Kermit to enter Telnet binary mode also means that it, too,
-   is in binary mode, contrary to the Telnet specification, which says
-   that binary mode must be negotiated in each direction separately.
-
-    2.3.2. VMS UCX Telnet Port Bug Adjustment
-
-   A new command, SET TCP UCX-PORT-BUG, was added for VMS versions with
-   UCX (DEC TCP/IP), applying only to early versions of UCX, like 2.2 or
-   earlier. If you try to use VMS C-Kermit to make a Telnet connection
-   using a port name (like "telnet", which is used by default), the
-   underlying UCX getservbyname() function might return the service
-   number with its bytes swapped and the connection will fail. If "telnet
-   hostname 23" works, then your version of UCX has this bug and you can
-   put "set tcp ucx-port-bug on" in your CKERMIT.INI file to get around
-   it.
-
-    2.3.3. Telnet New Environment Option
-
-   The TELNET NEW-ENVIRONMENT option ([403]RFC 1572) is supported as 7.0.
-   This option allows the C-Kermit Telnet client to send certain
-   well-known variables to the Telnet server, including USER, PRINTER,
-   DISPLAY, and several others. This feature is enabled by default in
-   Windows and OS/2, disabled by default elsewhere. The command to enable
-   and disable it is:
-
-  SET TELNET ENVIRONMENT { ON, OFF }
-
-   When ON, and you Telnet to another computer, you might (or might not)
-   notice that the "login:" or "Username:" prompt does not appear --
-   that's because your username was sent ahead, in which case the remote
-   system might prompt you only for your password (similar to Rlogin).
-   Use "set telnet environment off" to defeat this feature, particularly
-   in scripts where the dialog must be predictable. You can also use this
-   command to specify or override specific well-known environment
-   variable values:
-
- SET TELNET ENVIRONMENT { ACCT,DISPLAY,JOB,PRINTER,SYSTEMTYPE,USER } [ text ]
-
-    2.3.4. Telnet Location Option
-
-   The TELNET LOCATION option ([404]RFC 779) is supported in 7.0. This
-   option allows the C-Kermit Telnet client to send a location string to
-   the server if the server indicates its willingness to accept one. If
-   an environment variable named LOCATION exists at the time C-Kermit
-   starts, its value is used as the location string. If you want to
-   change it, use:
-
-  SET TELNET LOCATION text
-
-   If you omit the text from this command, the Telnet location feature is
-   disabled.
-
-   SET TELNET ENVIRONMENT DISPLAY is used to set the DISPLAY variable
-   that is sent to the host, as well as the the XDISPLAY location.
-
-    2.3.5. Connecting to Raw TCP Sockets
-
-   The SET HOST and TELNET commands now accept an optional switch,
-   /RAW-SOCKET, at the end, only if you first give a host and a port.
-   Example:
-
-  set host xyzcorp.com 23 /raw-socket
-  set host 128.49.39.2:2000 /raw-socket
-  telnet xyzcorp.com 3000 /raw
-
-   Without this switch, C-Kermit behaves as a Telnet client when (a) the
-   port is 23 or 1649, or (b) the port is not 513 and the server sent
-   what appeared to be Telnet negotiations -- that is, messages starting
-   with 0xFF (IAC). With this switch, Kermit should treat all incoming
-   bytes as raw data, and will not engage in any Telnet negotiations or
-   NVT CRLF manipulations. This allows transparent operation through
-   (e.g.) raw TCP ports on Cisco terminal servers, through the 'modemd'
-   modem server, etc.
-
-    2.3.6. Incoming TCP Connections
-
-   Accomplished via SET HOST * port, were introduced in C-Kermit 6.0, but
-   for UNIX only. In Version 7.0, they are also available for VMS.
-     _________________________________________________________________
-
-  2.4. The EIGHTBIT Command
-
-   EIGHTBIT is simply a shorthand for: SET PARITY NONE, SET TERMINAL
-   BYTESIZE 8, SET COMMAND BYTESIZE 8; that is, a way to set up an 8-bit
-   clean connection in a single command.
-     _________________________________________________________________
-
-  2.5. The Services Directory
-
-   Chapter 7 of [405]Using C-Kermit does not mention the ULOGIN macro,
-   which is used by our sample services directory, CKERMIT.KND. Unlike
-   UNIXLOGIN, VMSLOGIN, etc, this one is for use with systems that
-   require a user ID but no password. Therefore it doesn't prompt for a
-   password or wait for a password prompt from the remote service.
-
-   In version 7.0, the CALL macro was changed to not execute a SET MODEM
-   TYPE command if the given modem type was the same as the current one;
-   otherwise the new SET MODEM TYPE command would overwrite any
-   customizations that the user had made to the modem settings. Ditto for
-   SET LINE / SET PORT and SET SPEED.
-     _________________________________________________________________
-
-  2.6. Closing Connections
-
-   Until version 7.0, there was never an obvious and general way to close
-   a connection. If a serial connection was open, it could be closed by
-   "set line" or "set port" (giving no device name); if a network
-   connection was open, it could be closed by "set host" (no host name).
-
-   In version 7.0, a new command closes the connection in an obvious and
-   straightforward way, no matter what the connection type:
-
-  CLOSE [ CONNECTION ]
-
-   The CLOSE command was already present, and required an operand such as
-   DEBUG-LOG, WRITE-FILE, etc, and so could never be given by itself. The
-   new CONNECTION operand is now the default operand for CLOSE, so CLOSE
-   by itself closes the connection, if one is open, just as you would
-   expect, especially if you are a Telnet or Ftp user.
-
-   Also see the description of the new SET CLOSE-ON-DISCONNECT command in
-   [406]Section 2.10.
-     _________________________________________________________________
-
-  2.7. Using C-Kermit with External Communication Programs
-
-   C-Kermit 7.0 includes a new ability to create and conduct sessions
-   through other communications programs. Two methods are available:
-
-    1. Pty (pseudoterminal): The external program is run on a
-       "pseudoterminal", which is controlled by Kermit. This method works
-       with practically any external program, but it is not portable. At
-       this writing, it works only on some (not all) UNIX versions, and
-       not on any non-UNIX platforms.
-    2. Pipe: The external program's standard input and output are
-       redirected through a "pipe" controlled by Kermit. This method is
-       relatively portable -- it should work across all UNIX versions,
-       and it also works in Windows and OS/2 -- but it is effective only
-       when the external program actually uses standard i/o (and many
-       don't).
-
-   The two methods are started differently but are used the same way
-   thereafter.
-
-   The purpose of this feature is to let you use C-Kermit services like
-   file transfer, character-set translation, scripting, automatic
-   dialing, etc, on connections that Kermit can't otherwise make itself.
-
-   This feature is the opposite of the REDIRECT feature, in which
-   C-Kermit makes the connection, and redirects an external (local)
-   command or program over this connection. In a pty or pipe connection,
-   C-Kermit runs and controls a local command or program, which makes the
-   connection. (The same method can be used to simply to control a local
-   program without making a connection; see [407]Section 2.8.)
-
-   To find out if your version of Kermit includes PTY support, type "show
-   features" and look for NETPTY in the alphabetical list of options. For
-   pipes, look for NETCMD.
-
-   The commands are:
-
-   SET NETWORK TYPE PTY or SET NETWORK TYPE PIPE
-   SET HOST command
-          where command is any interactive command. If the command does
-          not use standard i/o, you must use SET NETWORK TYPE PTY.
-
-   Notes:
-
-     * COMMAND is an invisible synonym for PIPE.
-     * The command and its arguments are case-sensitive in UNIX.
-
-   The SET NETWORK TYPE, SET HOST sequence sets the given network type
-   for all subsequent SET HOST commands until another SET NETWORK TYPE
-   command is given to change it.
-
-   You can also use the new /NETWORK-TYPE:PTY or /NETWORK-TYPE:PIPE (or
-   simply /PIPE or /PTY) switches on the SET HOST command itself:
-
-  SET HOST /NETWORK-TYPE:PIPE command  ; These two are the same
-  SET HOST /PIPE command
-
-  SET HOST /NETWORK-TYPE:PTY command   ; Ditto
-  SET HOST /PTY command
-
-   These are like SET NETWORK TYPE followed by SET HOST, except they
-   apply only to the connection being made and do not change the global
-   network type setting (see [408]Section 1.5 about the difference
-   between switches and SET commands).
-
-   Include any command-line options with the command that might be
-   needed, as in this example where C-Kermit uses another copy of itself
-   as the communications program:
-
-  SET HOST /PIPE /CONNECT kermit -YQJ xyzcorp.com
-
-   As usual, if you include the /CONNECT switch, SET HOST enters CONNECT
-   mode immediately upon successful execution of the given command.
-   Therefore new commands are available as a shorthand for SET HOST
-   /CONNECT /PTY and /PIPE:
-
-   PTY [ command ]
-   PIPE [ command ]
-          The PTY and PIPE commands work like the TELNET and RLOGIN
-          commands: they set up the connection (in this case, using the
-          given command) and then enter CONNECT mode automatically (if
-          the PIPE or PTY command is given without a command, it
-          continues the current session if one is active; otherwise it
-          gives an error message).
-
-   The PIPE command is named after the mechanism by which C-Kermit
-   communicates with the command: UNIX pipes. C-Kermit's i/o is "piped"
-   through the given command. Here is a typical example:
-
-  PIPE rlogin -8 xyzcorp.com
-
-   This is equivalent to:
-
-  SET HOST /PIPE rlogin -8 xyzcorp.com
-  CONNECT
-
-   and to:
-
-  SET HOST /PIPE /CONNECT rlogin -8 xyzcorp.com
-
-   IMPORTANT:
-          If you are writing a script, do not use the PIPE, PTY, TELNET,
-          or RLOGIN command unless you really want C-Kermit to enter
-          CONNECT mode at that point. Normally SET HOST is used in
-          scripts to allow the login and other dialogs to be controlled
-          by the script itself, rather than by an actively participating
-          human at the keyboard.
-
-   Throughput of pty and pipe connections is limited by the performance
-   of the chosen command or program and by the interprocess communication
-   (IPC) method used and/or buffering capacity of the pipe or pty, which
-   in turn depends on the underlying operating system.
-
-   In one trial (on SunOS 4.1.3), we observed file transfer rates over an
-   rlogin connection proceeding at 200Kcps for downloads, but only 10Kcps
-   for uploads on the same connection with the same settings (similar
-   disparities were noted in HP-UX). Examination of the logs revealed
-   that a write to the pipe could take as long as 5 seconds, whereas
-   reads were practically instantaneous. On the other hand, using Telnet
-   as the external program rather than rlogin, downloads and uploads were
-   better matched at about 177K each.
-
-   Most external communication programs, like C-Kermit itself, have
-   escape characters or sequences. Normally these begin with (or consist
-   entirely of) a control character. You must be sure that this control
-   character is not "unprefixed" when uploading files, otherwise the
-   external program will "escape back" to its prompt, or close the
-   connection, or take some other unwanted action. When in CONNECT mode,
-   observe the program's normal interaction rules. Of course C-Kermit's
-   own escape character (normally Ctrl-\) is active too, unless you have
-   taken some action to disable it.
-
-   On PTY connections, the underlying PTY driver is not guaranteed to be
-   transparent to control characters -- for example, it might expand
-   tabs, translate carriage returns, generate signals if it sees an
-   interrupt character, and so on. Similar things might happen on a PIPE
-   connection. For this reason, if you plan to transfer files over a PTY
-   or PIPE connection, tell the file sender to:
-
-   SET PREFIXING ALL
-          This causes all control characters to be prefixed and
-          transmitted as printable ASCII characters.
-
-   If the external connection program is not 8-bit clean, you should
-   also:
-
-   SET PARITY SPACE
-          This causes 8-bit data to be encoded in 7 bits using single
-          and/or locking shifts.
-
-   And if it does not make a reliable connection (such as those made by
-   Telnet, Rlogin, Ssh, etc), you should:
-
-   SET STREAMING OFF
-          This forces C-Kermit to treat the connection as unreliable and
-          to engage in its normal ACK/NAK protocol for error detection
-          and correction, rather than "streaming" its packets, as it
-          normally does on a network connection ([409]Section 4.20).
-
-   In some cases, buffer sizes might be restricted, so you might also
-   need to reduce the Kermit packet length to fit; this is a
-   trial-and-error affair. For example, if transfers always fail with
-   4000-byte packets, try 2000. If that fails too, try 1000, and so on.
-   The commands are:
-
-   SET RECEIVE PACKET-LENGTH number
-          This tells the file receiver to tell the file sender the
-          longest packet length it can accept.
-
-   SET SEND PACKET-LENGTH number
-          This tells the file sender not to send packets longer than the
-          given length, even if the receiver says longer ones are OK. Of
-          course, if the receiver's length is shorter, the shorter length
-          is used.
-
-   If none of this seems to help, try falling back to the bare minimum,
-   lowest-common-denominator protocol settings:
-
-   ROBUST
-          No sliding windows, no streaming, no control-character
-          unprefixing, packet length 90.
-
-   And then work your way back up by trial and error to get greater
-   throughput.
-
-   Note that when starting a PIPE connection, and the connection program
-   (such as telnet or rlogin) prints some greeting or information
-   messages before starting the connection, these are quite likely to be
-   printed with a stairstep effect (linefeed without carriage return).
-   This is because the program is not connected with the UNIX terminal
-   driver; there's not much Kermit can do about it. Once the connection
-   is made, everything should go back to normal. This shouldn't happen on
-   a PTY connection because a PTY is, indeed, a terminal.
-
-   On a similar note, some connection programs (like Solaris 2.5 rlogin)
-   might print lots of error messages like "ioctl TIOCGETP: invalid
-   argument" when used through a pipe. They are annoying but usually
-   harmless. If you want to avoid these messages, and your shell allows
-   redirection of stderr, you can redirect stderr in your pipe command,
-   as in this example where the user's shell is bash:
-
-  PIPE rlogin xyzcorp.com 2> /dev/null
-
-   Or use PTY rather than PIPE, since PTY is available on Solaris.
-     _________________________________________________________________
-
-    2.7.0. C-Kermit over tn3270 and tn5250
-
-   Now you can make a connection from C-Kermit "directly" to an IBM
-   mainframe and transfer files with it, assuming it has Kermit-370
-   installed. Because tn3270 is neither 8-bit clean nor transparent to
-   control characters, you must give these commands:
-
-  SET PREFIXING ALL   ; Prefix all control characters
-  SET PARITY SPACE    ; Telnet connections are usually not 8-bit clean
-
-   and then:
-
-  SET HOST /PTY /CONNECT tn3270 abccorp.com
-
-   or simply:
-
-  pty tn3270 abccorp.com
-
-   SET HOST /PIPE does not work in this case, at least not for file
-   transfer. File transfer does work, however, with SET HOST /PTY,
-   provided you use the default packet length of 90 bytes; anything
-   longer seems to kill the session.
-
-   You can also make connections to IBM AS/400 computers if you have a
-   tn5250 program installed:
-
-  pty tn5250 hostname
-
-   In this case, however, file transfer is probably not in the cards
-   since nobody has ever succeeded in writing a Kermit program for the
-   AS/400. Hint:
-
-  define tn3270 {
-      check pty
-      if fail end 1 Sorry - no PTY support...
-      pty tn3270 \%*
-  }
-
-   Similarly for tn5250. Note that CHECK PTY and CHECK PIPE can be used
-   in macros and scripts to test whether PTY or PIPE support is
-   available.
-     _________________________________________________________________
-
-    2.7.1. C-Kermit over Telnet
-
-   Although C-Kermit includes its own Telnet implementation, you might
-   need to use an external Telnet program to make certain connections;
-   perhaps because it has access or security features not available in
-   C-Kermit itself. As noted above, the only precautions necessary are
-   usually:
-
-  SET PREFIXING ALL   ; Prefix all control characters
-  SET PARITY SPACE    ; Telnet connections might not be 8-bit clean
-
-   and then:
-
-  SET HOST /PTY (or /PIPE) /CONNECT telnet abccorp.com
-
-   or, equivalently:
-
-  PTY (or PIPE) telnet abccorp.com
-     _________________________________________________________________
-
-    2.7.2. C-Kermit over Rlogin
-
-   C-Kermit includes its own Rlogin client, but this can normally be used
-   only if you are root, since the rlogin TCP port is privileged. But
-   ptys and pipes let you make rlogin connections with C-Kermit through
-   your computer's external rlogin program, which is normally installed
-   as a privileged program:
-
-  SET PREFIXING ALL
-
-   and then:
-
-  SET HOST /PTY (or /PIPE) /CONNECT rlogin -8 abccorp.com
-
-   or, equivalently:
-
-  PTY (or PIPE) rlogin -8 abccorp.com
-
-   The "-8" option to rlogin enables transmission of 8-bit data. If this
-   is not available, then include SET PARITY SPACE if you intend to
-   transfer files.
-
-   Note that the normal escape sequence for rlogin is Carriage Return
-   followed by Tilde (~), but only when the tilde is followed by certain
-   other characters; the exact behavior depends on your rlogin client, so
-   read its documentation.
-     _________________________________________________________________
-
-    2.7.3. C-Kermit over Serial Communication Programs
-
-   Ptys and pipes also let you use programs that make serial connections,
-   such as cu or tip. For example, C-Kermit can be used through cu to
-   make connections that otherwise might not be allowed, e.g. because
-   C-Kermit is not installed with the required write permissions to the
-   dialout device and the UUCP lockfile directory.
-
-   Suppose your UUCP Devices file contains an entry for a serial device
-   tty04 to be used for direct connections, but this device is protected
-   against you (and Kermit when you run it). In this case you can:
-
-  SET CONTROL PREFIX ALL
-  PTY (or PIPE) cu -l tty04
-
-   (Similarly for dialout devices, except then you also need to include
-   the phone number in the "cu" command.)
-
-   As with other communication programs, watch out for cu's escape
-   sequence, which is the same as the rlogin program's: Carriage Return
-   followed by Tilde (followed by another character to specify an action,
-   like "." for closing the connection and exiting from cu).
-     _________________________________________________________________
-
-    2.7.4. C-Kermit over Secure Network Clients
-
-     DISCLAIMER: There are laws in the USA and other countries regarding
-     use, import, and/or export of encryption and/or decryption or other
-     forms of security software, algorithms, technology, and
-     intellectual property. The Kermit Project attempts to follow all
-     known statutes, and neither intends nor suggests that Kermit
-     software can or should be used in any way, in any location, that
-     circumvents any regulations, laws, treaties, covenants, or other
-     legitimate canons or instruments of law, international relations,
-     trade, ethics, or propriety.
-
-   For secure connections or connections through firewalls, C-Kermit 7.0
-   can be a Kerberos, SRP, and/or SOCKS client when built with the
-   appropriate options and libraries. But other application-level
-   security acronyms and methods -- SSH, SSL, SRP, TLS -- pop up at an
-   alarming rate and are (a) impossible to keep up with, (b) usually
-   mutually incompatible, and (c) have restrictions on export or
-   redistribution and so cannot be included in C-Kermit itself.
-
-   However, if you have a secure text-based Telnet (or other) client that
-   employs one of these security methods, you can use C-Kermit "through"
-   it via a pty or pipe.
-     _________________________________________________________________
-
-    2.7.4.1. SSH
-
-   C-Kermit does not and can not incorporate SSH due to licensing,
-   patent, and USA export law restrictions.
-
-   The UNIX SSH client does not use standard input/output, and therefore
-   can be used only by Kermit's PTY interface, if one is present. The
-   cautions about file transfer, etc, are the same as for Rlogin.
-   Example:
-
-  SET PREFIXING ALL
-  PTY ssh XYZCORP.COM
-
-   Or, for a scripted session:
-
-  SET PREFIXING ALL
-  SET HOST /PTY ssh XYZCORP.COM
-
-   Hint:
-
-  define ssh {
-      check pty
-      if fail end 1 Sorry - no PTY support...
-      pty ssh \%*
-  }
-     _________________________________________________________________
-
-    2.7.4.2. SSL
-
-   Secure Sockets Layer (SSL) is another TCP/IP security overlay, this
-   one designed by and for Netscape. An SSL Telnet client is available
-   for UNIX from the University of Queensland. More info at:
-
-  [410]http://www.psy.uq.oz.au/~ftp/Crypto/
-
-   Interoperability with C-Kermit is unknown. C-Kermit also includes its
-   own built-in SSL/TLS support, but it is not exportable; [411]CLICK
-   HERE file for details.
-     _________________________________________________________________
-
-    2.7.4.3. SRP
-
-   SRP(TM) is Stanford University's Secure Remote Password protocol. An
-   SRP Telnet client is available from Stanford:
-
-  [412]http://srp.stanford.edu/srp/
-
-   Stanford's SRP Telnet client for UNIX has been tested on SunOS and
-   works fine with C-Kermit, as described in [413]Section 2.7.1, e.g.
-
-  SET PREFIX ALL
-  PTY (or PIPE) srp-telnet xenon.stanford.edu
-
-   C-Kermit itself can be built as an SRP Telnet client on systems that
-   have libsrp.a installed; the C-Kermit support code, however, may not
-   be exported outside the USA or Canada.
-     _________________________________________________________________
-
-    2.7.4.4. SOCKS
-
-   C-Kermit can be built as a SOCKS-aware client on systems that have a
-   SOCKS library. See section 8.1.1 of the [414]ckccfg.txt file.
-
-   C-Kermit 7.0 can also be run over SOCKSified Telnet or rlogin clients
-   with SET NETWORK TYPE COMMAND. Suppose the Telnet program on your
-   system is SOCKS enabled but C-Kermit is not. Make Kermit connections
-   like this:
-
-  SET PREFIX ALL
-  PTY (or PIPE) telnet zzz.com
-     _________________________________________________________________
-
-    2.7.4.5. Kerberos
-
-   UNIX C-Kermit can be built with MIT Kerberos IV or V authentication
-   and encryption. Instructions are available in a [415]separate
-   document. Additional modules are required that can not be exported
-   from the USA to any country except Canada, by US law.
-
-   If you have Kerberos installed but you don't have a Kerberized version
-   of C-Kermit, you can use ktelnet as C-Kermit's external communications
-   program to make secure connections without giving up C-Kermit's
-   services:
-
-  SET PREFIX ALL
-  PTY (or PIPE) ktelnet cia.gov
-     _________________________________________________________________
-
-  2.8. Scripting Local Programs
-
-   If your version of Kermit has PTY support built in, then any
-   text-based program can be invoked with SET HOST /PTY or equivalent
-   command and controlled using the normal sequence of OUTPUT, INPUT, IF
-   SUCCESS commands (this is the same service that is provided by the
-   'expect' program, but controlled by the Kermit script language rather
-   than Tcl).
-
-   When PTY service is not available, then any program that uses standard
-   input and output can be invoked with SET HOST /PIPE.
-
-   Here's an example in which we start an external Kermit program, wait
-   for its prompt, give it a VERSION command, and then extract the
-   numeric version number from its response:
-
-  set host /pty kermit -Y
-  if fail stop 1 {Can't start external command}
-  input 10 C-Kermit>
-  if fail stop 1 {No C-Kermit> prompt}
-  output version\13
-  input 10 {Numeric: }
-  if fail stop 1 {No match for "Numeric:"}
-  clear input
-  input 10 \10
-  echo VERSION = "\fsubstr(\v(input),1,6)"
-  output exit\13
-
-   This technique could be used to control any other interactive program,
-   even those that do screen formatting (like Emacs or Vi), if you can
-   figure out the sequence of events. If your Kermit program doesn't have
-   PTY support, then the commands are restricted to those using standard
-   i/o, including certain shells, interactive text-mode "hardcopy"
-   editors like ex, and so on.
-
-   If you are using the PTY interface, you should be aware that it runs
-   the given program or command directly on the pty, without any
-   intervening shell to interpret metacharacters, redirectors, etc. If
-   you need this sort of thing, include the appropriate shell invocation
-   as part of your command; for example:
-
-  pty echo *
-
-   just echoes "*"; whereas:
-
-  pty ksh -c "echo *"
-
-   echoes all the filenames that ksh finds matching "*".
-
-   Similarly for redirection:
-
-  set host /pty ksh -c "cat > foo"  ; Note: use shell quoting rules here
-  set transmit eof \4
-  transmit bar
-
-   And for that matter, for built-in shell commands:
-
-  set host /pty ksh -c "for i in *; do echo $i; done"
-
-   The PIPE interface, on the other hand, invokes the shell
-   automatically, so:
-
-  pipe echo *
-
-   prints filenames, not "*".
-     _________________________________________________________________
-
-  2.9. X.25 Networking
-
-   X.25 networking is documented in [416]Using C-Kermit, 2nd Edition.
-   When the book was published, X.25 was available only in SunOS,
-   Solaris, and Stratus VOS. Unlike TCP/IP, X.25 APIs are not
-   standardized; each vendor's X.25 libraries and services (if they have
-   them at all) are unique.
-
-   This section describes new additions.
-     _________________________________________________________________
-
-    2.9.1. IBM AIXLink/X.25 Network Provider Interface for AIX
-
-   Support for X.25 was added via IBM's Network Provider Interface (NPI),
-   AIXLink/X.25 1.1, to the AIX 4.x version of C-Kermit 7.0.
-   Unfortunately, AIXLink/X.25 is a rather bare-bones facility, lacking
-   in particular any form of PAD support (X.3, X.28, X.29). Thus, the AIX
-   version of C-Kermit, when built to include X.25 networking, has
-   neither a PAD command, nor a SET PAD command. The same is true for the
-   underlying AIX system: no PAD support. Thus it is not possible to have
-   an interactive shell session over an X.25 connection into an AIX
-   system (as far as we know), even from X.25-capable Kermit versions
-   (such as Solaris or VOS) that do include PAD support.
-
-   Thus the X.25 capabilities in AIX C-Kermit are limited to peer-to-peer
-   connections, e.g. from a C-Kermit client to a C-Kermit server. Unlike
-   the Solaris, SunOS, and VOS versions, the AIX version can accept
-   incoming X.25 connections:
-
-  set network type x.25
-  if fail stop 1 Sorry - no X.25 support
-  ; Put any desired DISABLE or ENABLE or SET commands here.
-  set host /server *
-  if fail stop 1 X.25 "set host *" failed
-
-   And then access it from the client as follows:
-
-  set network type x.25
-  if fail stop 1 Sorry - no X.25 support
-  set host xxxxxxx ; Specify the X.25/X.121 address
-  if fail stop 1 Can't open connection
-
-   And at this point the client can use the full range of client
-   commands: SEND, GET, REMOTE xxx, FINISH, BYE.
-
-   The AIX version also adds two new variables:
-
-   \v(x25local_nua)
-          The local X.25 address.
-
-   \v(x25remote_nua)
-          The X.25 address of the host on the other end of the
-          connection.
-
-   C-Kermit's AIX X.25 client has not been tested against anything other
-   than a C-Kermit X.25 server on AIX. It is not known if it will
-   interoperate with C-Kermit servers on Solaris, SunOS, or VOS.
-
-   To make an X.25 connection from AIX C-Kermit, you must:
-
-  set x25 call-user-data xxxx
-
-   where xxxx can be any even-length string of hexadecimal digits, e.g.
-   123ABC.
-     _________________________________________________________________
-
-    2.9.2. HP-UX X.25
-
-   Although C-Kermit presently does not include built-in support for
-   HP-UX X.25, it can still be used to make X.25 connections as follows:
-   start Kermit and tell it to:
-
-  set prefixing all
-  set parity space
-  pty padem address
-
-   This should work in HP-UX 9.00 and later (see [417]Section 2.7). If
-   you have an earlier HP-UX version, or the PTY interface doesn't work
-   or isn't available, try:
-
-  set prefixing all
-  set parity space
-  pipe padem address
-
-   Failing that, use Kermit to telnet to localhost and then after logging
-   back in, start padem as you would normally do to connect over X.25.
-     _________________________________________________________________
-
-  2.10. Additional Serial Port Controls
-
-   C-Kermit 7.0 adds the following commands for greater control over
-   serial ports. These commands are available only in C-Kermit versions
-   whose underlying operating systems provide the corresponding services
-   (such as POSIX and UNIX System V), and even then their successful
-   operation depends on the capabilities of the specific device and
-   driver.
-
-   SET DISCONNECT { ON, OFF }
-          On a SET LINE or SET PORT connection with SET CARRIER ON or
-          AUTO, if the carrier signal drops during the connection,
-          indicating that the connection has been lost, and C-Kermit
-          notices it, this setting governs what happens next. With SET
-          DISCONNECT OFF, which is consistent with previous behavior, and
-          therefore the default, C-Kermit continues to keep the device
-          open and allocated. With SET DISCONNECT ON, C-Kermit
-          automatically closes and releases the device when it senses a
-          carrier on-to-off transition, thus allowing others to use it.
-          However, it remains the default device for i/o (DIAL, REDIAL,
-          INPUT, SEND, CONNECT, etc), so if a subsequent i/o command is
-          given, the device is reopened if it is still available. When it
-          has been automatically closed in this manner, SHOW
-          COMMUNICATIONS puts "(closed)" after its name, and in UNIX, the
-          lockfile disappears -- both from SHOW COMM and from the
-          lockfile directory itself. Synonym: SET CLOSE-ON-DISCONNECT.
-
-   SET EXIT ON-DISCONNECT { ON, OFF }
-          Like DISCONNECT, but makes the program exit if a connection
-          drops.
-
-   Note that SET CLOSE-ON-DISCONNECT and SET EXIT ON-DISCONNECT apply
-   only to connections that drop; they do not apply to connections that
-   can't be made in the first place. For example, they have no effect
-   when a SET LINE, SET HOST, TELNET, or DIAL command fails.
-
-   HANGUP
-          If [CLOSE-ON-]DISCONNECT is ON, and the HANGUP command is given
-          on a serial device, and the carrier signal is no longer present
-          after the HANGUP command, the device is closed and released.
-
-   SET PARITY HARDWARE { EVEN, ODD }
-          Unlike SET PARITY { EVEN, ODD, MARK, SPACE }, which selects 7
-          data bits plus the indicated kind of parity (to be done in
-          software by Kermit itself), SET PARITY HARDWARE selects 8 data
-          bits plus even or odd parity, to be done by the underlying
-          hardware, operating system, or device driver. This command is
-          effective only with a SET LINE or SET PORT device. That is, it
-          has no effect in remote mode, nor on network connections. There
-          is presently no method for selecting 8 data bits plus mark or
-          space parity. If hardware parity is in effect, the variable
-          \v(hwparity) is set to "even" or "odd". Note: some platforms
-          might also support settings of SPACE, MARK, or NONE.
-
-   SET STOP-BITS { 1, 2 }
-          This tells the number of 1-bits to insert after an outbound
-          character's data and parity bits, to separate it from the next
-          character. Normally 1. Choosing 2 stop bits should do no harm,
-          but will slow down serial transmission by approximately 10
-          percent. Historically, 2 stop bits were used with Teletypes (at
-          110 bps or below) for print-head recovery time. There is
-          presently no method for choosing any number of stop bits
-          besides 1 and 2.
-
-   SET SERIAL [ dps ]
-          dps stands for Data-bits, Parity, Stop-bits. This is the
-          notation familiar to many people for serial port configuration:
-          7E1, 8N1, 7O2, etc. The data bits number also becomes the
-          TERMINAL BYTESIZE setting. The second character is E for Even,
-          O for Odd, M for Mark, S for Space, or N for None. The list of
-          available options depends on the capabilities of the specific
-          platform. If dps is omitted, 8N1 is used. Type "set serial ?"
-          for a list of available choices. Examples:
-
-        SET SERIAL 7E1
-                Equivalent to SET PARITY EVEN, SET STOP-BITS 1, SET TERM
-                BYTE 7.
-
-        SET SERIAL 8N1
-                Equivalent to SET PARITY NONE, SET STOP-BITS 1, SET TERM
-                BYTE 8.
-
-        SET SERIAL 7E2
-                Equivalent to SET PARITY EVEN and SET STOP-BITS 2, SET
-                TERM BYTE 7.
-
-        SET SERIAL 8E2
-                Same as SET PARITY HARDWARE EVEN, SET STOP-BITS 2, SET
-                TERM BYTE 8.
-
-        SET SERIAL
-                Same as SET PARITY NONE and SET STOP-BITS 1, SET TERM
-                BYTE 8.
-
-   Notes:
-
-     * The SET SERIAL xx2 options are available only in Kermit versions
-       where the SET PARITY HARDWARE command is also available. (SHOW
-       FEATURES includes "HWPARITY" in its options list.)
-     * The SET SERIAL 7xx and 8N1 options affect the software parity
-       setting, even for network connections.
-     * As noted in the manual, selecting 8 data bits does not give you
-       8-bit terminal sessions in CONNECT mode unless you also SET
-       TERMINAL BYTESIZE 8. The default terminal bytesize remains 7, to
-       protect against the situation where the remote host is generating
-       parity but you don't know about it. If the terminal bytesize was 8
-       by default and you CONNECTed to such a host, you would see only
-       garbage on your screen.
-     * If you do not give a SET STOP-BITS or SET SET SERIAL command,
-       C-Kermit does not attempt to set the device's stop bits; instead,
-       it uses whatever setting the device uses when not given explicit
-       instructions about stop bits.
-
-   SHOW COMMUNICATIONS displays the current settings. Stop bits and
-   hardware parity are shown only for SET PORT / SET LINE (serial)
-   devices, since they do not apply to network connections or to remote
-   mode. STOP-BITS is shown as "(default)" if you have not given an
-   explicit SET STOP-BITS or SET SERIAL command.
-
-   The \v(serial) variable shows the SET SERIAL setting (8N1, 7E1, etc).
-     _________________________________________________________________
-
-  2.11. Getting Access to the Dialout Device
-
-     This section is for UNIX only; note the special words about QNX at
-     the end. Also see [418]Section 2.0 for SET LINE switches,
-     particularly the /SHARE switch for VMS only.
-
-   C-Kermit does its best to obey the UUCP lockfile conventions of each
-   platform (machine, operating system, OS version) where it runs, if
-   that platform uses UUCP.
-
-   But simply obeying the conventions is often not good enough, due to
-   the increasing likelihood that a particular serial device might have
-   more than one name (e.g. /dev/tty00 and /dev/term/00 are the same
-   device in Unixware 7; /dev/cua and /dev/cufa are the same device in
-   NeXTSTEP), plus the increasingly widespread use of symlinks for device
-   names, such as /dev/modem.
-
-   C-Kermit 7.0 goes to greater lengths than previous versions to
-   successfully interlock with other communications program (and other
-   instances of Kermit itself); for example, by:
-
-     * Creation of dual lockfiles whenever a symlink is used; one for the
-       link name and one for the real name.
-     * Creation of dual lockfiles in HP-UX according to HP rules.
-     * Creation of dual uppercase/lowercase lockfile names in SCO
-       UNIX/ODT/OSR5.
-     * The use of ttylock() in versions of AIX where it works.
-     * The use, wherever possible, of lockfile names based on
-       inode/major/minor device number rather than device name.
-
-   See the [419]ckuins.txt and [420]ckubwr.txt files for details.
-
-   QNX is almost unique among UNIX varieties in having no UUCP programs
-   nor UUCP-oriented dialout-device locking conventions. QNX does,
-   however, allow a program to get the device open count. This can not be
-   a reliable form of locking unless all applications do it (and they
-   don't), so by default, Kermit uses this information only for printing
-   a warning message such as:
-
-  C-Kermit>set line /dev/ser1
-  WARNING - "/dev/ser1" looks busy...
-
-   However, if you want to use it as a lock, you can do so with:
-
-  SET QNX-PORT-LOCK { ON, OFF }
-
-   QNX-PORT-LOCK is OFF by default; if you set in ON, C-Kermit fails to
-   open any dialout device when its open count indicates that another
-   process has it open. SHOW COMM (in QNX only) displays the setting, and
-   if you have a port open, it also shows the current open count (with
-   C-Kermit's own access always counting as 1).
-     _________________________________________________________________
-
-  2.12. The Connection Log
-
-   C-Kermit 7.0 adds the ability to log connections, so you can see where
-   you've been and have a record of calls you've made. A connection is
-   defined as any communications session that is begun by SET LINE, SET
-   PORT, DIAL, SET HOST, TELNET, or RLOGIN. Connections are not logged
-   unless you request it; the command is:
-
-   LOG CX [ filename [ { NEW, APPEND } ] ]
-          Enables logging of connections in the given file. If the
-          trailing { NEW, APPEND } keyword is omitted, the file is opened
-          for appending; i.e. new records are written to the end. If NEW
-          is specified, a new file is created; if a file of the same name
-          already existed, it is overwritten. If the filename is omitted,
-          CX.LOG in your home (login) directory is used (note:
-          uppercase). To accept all defaults, just use "log connections"
-          (or "l c" for short). Synonym: LOG CONNECTIONS.
-
-   CLOSE CX-LOG
-          This closes the connection log if it was open. (Note, the CLOSE
-          CONNECTION command closes the connection itself).
-
-   SHOW CX
-          This shows your current connection, if any, including the
-          elapsed time (since you opened it). Synonym: SHOW CONNECTION.
-
-   \v(cx_time)
-          This variable shows the elapsed time of your current
-          connection, or if there is no current connection, of your most
-          recent connection, of if there have been no connections, 0.
-
-   The connection contains one line per connection, of the form:
-
-  yyyymmdd hh:mm:ss username pid p=v [ p=v [ ... ] ]
-
-   where the timestamp (in columns 1-18) shows when the connection was
-   made; username is the login identity of the person who made the
-   connection; pid is Kermit's process ID when it made the connection.
-   The p's are parameters that depend on the type of connection, and the
-   v's are their values:
-
-  T = Connection Type (TCP, SERIAL, DIAL, DECNET, etc).
-  H = The name of the Host from which the connection was made.
-  N = Destination phone Number or Network host name or address.
-  D = Serial connections only: Device name.
-  O = Dialed calls only: Originating country code & area code if known.
-  E = Elapsed time in hh:mm:ss format (or hhh:mm:ss, etc).
-
-   If you always want to keep a connection log, simply add:
-
-  log connections
-
-   to your C-Kermit customization file. Note, however, that if you make a
-   lot of connections, your CX.LOG will grow and grow. You can handle
-   this by adding a "logrotate" procedure like the following to your
-   customization file, before the "log connections" command:
-
-  define LOGROTATE {                    ; Define LOGROTATE macro
-      local \%i \%m \%d \%n \%f MAX
-      def MAX 4                         ; How many months to keep
-      if not def \%1 -                  ; No argument given
-        end 1 \%0: No filename given
-      if not = 1 \ffiles(\%1) -         ; Exactly 1 file must match
-        end 1 \%0: \%1 - File not found
-      .\%d := \fsubstr(\fdate(\%1),1,6) ; Arg OK - get file year & month
-      if = \%d -                        ; Compare file year & month
-        \fsubstr(\v(ndate),1,6) -       ; with current year & month
-          end 0                         ; Same year & month - done
-      rename \%1 \%1.\%d                ; Different - rename file
-      .\%n := \ffiles(\%1.*)            ; How many old files
-      if < \%n \m(MAX) end 0            ; Not enough to rotate
-      .\%m := \%1.999999                ; Initial compare string
-      for \%i 1 \%n 1 {                 ; Loop thru old logs
-         .\%f := \fnextfile()           ; Get next file name
-         if llt \%f \%m .\%m := \%f     ; If this one older remember it
-      }
-      delete \%m                        ; Delete the oldest one
-  }
-  log connections                       ; Now open the (possibly new) log
-  logrotate \v(home)CX.LOG              ; Run the LOGROTATE macro
-
-   As you can see, this compares the yyyymm portion of the modification
-   date (\fdate()) of the given file (\%1) with the current yyyymm. If
-   they differ, the current file has the yyyymm suffix (from its most
-   recent modification date) appended to its name. Then we search through
-   all other such files, find the oldest one, and delete it. Thus the
-   current log, plus the logs from the most recent four months, are kept.
-   This is all done automatically every time you start C-Kermit.
-
-   On multiuser systems, it is possible to keep a single, shared,
-   system-wide connection log, but this is not recommended since (a) it
-   requires you keep a publicly write-accessible logfile (a glaring
-   target for mischief), and (b) it would require each user to log to
-   that file and not disable logging. A better method for logging
-   connections, in UNIX at least, is syslogging (see [421]ckuins.txt
-   Section 15 and [422]Section 4.2 of the [423]IKSD Administration Guide
-   for details).
-     _________________________________________________________________
-
-  2.13. Automatic Connection-Specific Flow Control Selection
-
-   Beginning in C-Kermit 7.0, the appropriate flow-control method for
-   each connection type is kept in a table, for example:
-
-  Remote:           NONE
-  Modem:            RTS/CTS
-  Direct-Serial:    NONE
-  TCPIP:            NONE
-
-   The size of the table and values for each connection type can vary
-   from platform to platform. Type "set flow ?" for a list of available
-   flow-control types.
-
-   The table is used to automatically select the appropriate kind of flow
-   control whenever you make a connection. You can display the table
-   with:
-
-  SHOW FLOW-CONTROL
-
-   The defaults are as follows:
-
-   Remote:
-          NONE or XON/XOFF. This is because C-Kermit is not allowed to
-          find out what type of connection the incoming user has (*). No
-          kind of flow control will work on every kind of connection,
-          including (unexpectedly) KEEP, which we would have liked to
-          use, but not turning off flow control at the remote end during
-          file transfer on TCP/IP connections is fatal to the transfer
-          (except in VMS and HP-UX, where it must be set to Xon/Xoff!)
-          Therefore if you are dialing in to a serial port on a server
-          (UNIX or VMS) where C-Kermit is running, you will need to tell
-          C-Kermit to "set flow keep" before transferring files (assuming
-          the modem and port are configured correctly by the system
-          administrator; otherwise you'll need to give a specific kind of
-          flow control, e.g. "set flow xon/xoff"), so in this case
-          C-Kermit will not disable flow control, as it must do when you
-          are coming via Telnet (directly or through a terminal server,
-          except on VMS and HP-UX).
-
-   Modem:
-          This applies when you dial out with a modem. In this case, the
-          MODEM FLOW-CONTROL setting takes affect after the SET FLOW
-          setting, so it can pick the most appropriate flow control for
-          the combination of the particular modem and the
-          computer/port/driver that is dialing.
-
-   Direct-Serial:
-          The default here is NONE because C-Kermit has no way of knowing
-          what kind of flow control, if any, is or can be done by the
-          device at the other end of the connection. RTS/CTS would be a
-          bad choice here, because if the CTS signal is not asserted, the
-          connection will hang. And since direct connections are often
-          made with 3-wire cables, there is a good chance the CTS signal
-          will not be received.
-
-   TCPIP:
-          NONE, since TCP and IP provide their own flow control
-          transparently to the application, except in VMS, where Xon/Xoff
-          is the default due to the requirements of the VMS TCP/IP
-          products.
-
-   Other networks:
-          NONE, since networks should provide their flow control
-          transparently to the application.
-
-   (*) This is possibly the worst feature of UNIX, VMS, and other
-   platforms where C-Kermit runs. If C-Kermit was able to ask the
-   operating system what kind of connection it had to the user, it could
-   set up many things for you automatically.
-
-   You can modify the default-flow-control table with:
-
-  SET FLOW-CONTROL /xxx { NONE, KEEP, RTS/CTS, XON/XOFF, ... }
-
-   where "xxx" is the connection type, e.g.
-
-  SET FLOW /REMOTE NONE
-  SET FLOW /DIRECT RTS/CTS
-
-   If you leave out the switch, SET FLOW works as before, choosing the
-   flow control method to be used on the current connection:
-
-  SET FLOW XON/XOFF
-
-   Thus, whenever you make a connection with SET PORT, SET LINE, DIAL,
-   SET HOST, TELNET, RLOGIN, etc, an appropriate form of flow control is
-   selected automatically. You can override the automatic selection with
-   a subsequent SET FLOW command, such as SET FLOW NONE (no switch
-   included).
-
-   The flow control is changed automatically too when you give a SET
-   MODEM TYPE command. For example, suppose your operating system (say
-   Linux) supports hardware flow control (RTS/CTS). Now suppose you give
-   the following commands:
-
-  set line /dev/ttyS2    ; Automatically sets flow to NONE
-  set modem type usr     ; Automatically sets flow to RTS/CTS
-  set modem type rolm    ; Doesn't support RTS/CTS so now flow is XON/XOFF
-
-   IMPORTANT: This new feature tends to make the order of SET LINE/HOST
-   and SET FLOW commands matter, where it didn't before. For example, in
-   VMS:
-
-  SET FLOW KEEP
-  SET LINE TTA0:
-
-   the SET LINE undoes the SET FLOW KEEP command; the sequence now must
-   be:
-
-  SET FLOW /DIRECT KEEP
-  SET LINE TTA0:
-
-   or:
-
-  SET LINE TTA0:
-  SET FLOW KEEP
-     _________________________________________________________________
-
-  2.14. Trapping Connection Establishment and Loss
-
-   If you define a macro called ON_OPEN, it is executed any time that a
-   SET LINE, SET PORT, SET HOST, TELNET, RLOGIN or similar command
-   succeeds in opening a connection. The argument is the host or device
-   name (as shown by SHOW COMMUNICATIONS, and the same as \v(line)). This
-   macro can be used for all sorts of things, like automatically setting
-   connection- or host-specific parameters when the connection is opened.
-   Example:
-
-  def ON_OPEN {
-      switch \%1 {
-        :abccorp.com, set reliable off, break
-        :xyzcorp.com, set receive packet-length 1000, break
-        etc etc...
-      }
-  }
-
-   If you define a macro called ON_CLOSE, it will be executed any time
-   that a SET LINE, SET PORT, SET HOST, TELNET, RLOGIN or any other kind
-   of connection that C-Kermit has made is closed, either by the remote
-   or by a local CLOSE, HANGUP, or EXIT command or other local action,
-   such as when a new connection is opened before an old one was
-   explicitly closed.
-
-   As soon as C-Kermit notices the connection has been closed, the
-   ON_CLOSE macro is invoked at (a) the top of the command parsing loop,
-   or (b) when a connection is closed implicitly by a command such as SET
-   LINE that closes any open connection prior to making a new connection,
-   or (c) when C-Kermit closes an open connection in the act of exiting.
-
-   The ON_CLOSE macro was inspired by the neverending quest to unite
-   Kermit and SSH. In this case using the "tunnel" mechanism:
-
-  def TUNNEL {                                ; \%1 = host to tunnel to
-      local \%p
-      if not def \%1 stop 1
-      assign tunnelhost \%1                   ; Make global copy
-      undef on_close
-      set macro error off
-      close connection                        ; Ignore any error
-      open !read tunnel start \%1
-      read \%p                                ; Get port number
-      if fail stop 1 Tunnel failure: \%1
-      close read
-      if fail stop 1 Tunnel failure: \%1      ; See [424]Section 4.2.8.1
-      assign on_close {                       ; Set up close handler
-          echo Closing tunnel: \m(tunnelhost)
-          !tunnel stop \m(tunnelhost)
-          undef on_close
-      }
-      set host localhost:\%p /telnet
-      if success end 0
-      undef on_close
-      stop 1 Connection failure: \%1
-  }
-
-   In this case, when the connection stops, we also need to shut down the
-   tunnel, even if it is at a later time after TUNNEL has finished
-   executing. This way we can escape back, reconnect, transfer files, and
-   so on until the connection is broken by logging out from the remote,
-   or by explicitly closing it, or by EXITing from C-Kermit, at which
-   time the tunnel is shut down.
-
-   When the connection is closed, no matter how, the ON_CLOSE macro
-   executes and then undefines (destroys) itself, since we don't want to
-   be closing tunnels in the future when we close subsequent connections.
-
-   Other such tricks can be imagined, including ending ON_CLOSE with a
-   STOP command to force the command stack to be peeled all the way back
-   to the top, for example in a deeply nested script that depends on the
-   connection being open:
-
-  def on_close { stop 1 CONNECTION LOST }
-
-   When C-Kermit invokes the ON_CLOSE macro, it supplies one argument
-   (\%1): the reason the connection was closed as a number, one of the
-   following:
-
-  2 - Fatal failure to negotiate a required item on a network connection.
-  1 - Closed by C-Kermit command.
-  0 - All others (normally closed by remote).
-
-   which may be used for any purpose; for example, to add a comment to
-   the connection log:
-
-  def on_close {
-      local \%m
-      if not open cx end 0
-      switch \%1 {
-        :0, .\%m = Closed by remote, break
-        :1, .\%m = Closed by me, break
-        :2, .\%m = Network protocol negotiation failure, break
-      }
-      if def \%m writeln cx {# \%m}
-  }
-     _________________________________________________________________
-
-  2.15. Contacting Web Servers with the HTTP Command
-
-   C-Kermit 7.0 (at this writing, the UNIX version only) supports direct
-   contact and interaction with Web servers via HTTP 1.0 protocol. To
-   make a connection, use Kermit's normal method for making a TCP/IP
-   connection, but specify the HTTP port:
-
-  SET HOST host http [ switches ]
-
-   where host is the IP hostname or address, and http is the name of the
-   TCP port for the Web server. Relevant switches include:
-
-   /RAW
-          Treat the connection as a transparent binary pipe. This switch
-          may be required if a port other than 'http' is used.
-
-   /SSL
-          Make an secure private connection with SSL (only if SSL support
-          is included in your version of Kermit). In this case the port
-          name might need to be https rather than http, e.g. "set host
-          secureserver.xyxcorp.com https /ssl".
-
-   /TLS
-          Make an secure private connection with TLS (only if TLS support
-          is included in your version of Kermit). In this case the port
-          name would be https rather than http.
-
-   Then you can issue an HTTP command. In most cases, the server closes
-   the connection when the command is complete. Example:
-
-  SET HOST www.columbia.edu http
-  IF FAIL EXIT 1 Can't contact server
-  HTTP GET kermit/index.html
-
-   At this point the connection is closed, since that's how HTTP 1.0
-   works. If you want to perform additional operations, you must
-   establish a new connection with another SET HOST command.
-
-   The HTTP command acts as a client to the Web server, except instead of
-   displaying the results like a Web browser would, it stores them. Any
-   HTTP command can (but need not) include any or all of the following
-   switches:
-
-   /AGENT:user-agent
-          Identifies the client to the server; "C-Kermit" or "Kermit-95"
-          by default.
-
-   /HEADER:header-line
-          Used for specifying any optional headers. A list of headers is
-          provided using braces for grouping:
-
-  /HEADER:{{tag:value}{tag:value}...}
-
-          For a listing of valid tag value and value formats see [425]RFC
-          1945: Hypertext Transfer Protocol -- HTTP/1.0. A maximum of
-          eight headers may be specified.
-
-   /USER:name
-          In case a page requires a username for access.
-
-   /PASSWORD:password
-          In case a page requires a password for access.
-
-   /ARRAY:arrayname
-          Tells Kermit to store the response headers in the given array,
-          one line per element. The array need not be declared in
-          advance. Example:
-
-  C-Kermit? http /array:c get kermit/index.html
-  C-Kermit? show array c
-  Dimension = 9
-  1. Date: Fri, 26 Nov 1999 23:12:22 GMT
-  2. Server: Apache/1.3.4 (Unix)
-  3. Last-Modified: Mon, 06 Sep 1999 22:35:58 GMT
-  4. ETag: "bc049-f72-37d441ce"
-  5. Accept-Ranges: bytes
-  6. Content-Length: 3954
-  7. Connection: close
-  8. Content-Type: text/html
-
-   As you can see, the header lines are like MIME e-mail header lines:
-   identifier, colon, value. The /ARRAY switch is the only method
-   available to a script to process the server responses for a POST or
-   PUT command.
-
-   The HTTP commands are:
-
-   HTTP [ switches ] GET remote-filename [ local-filename ]
-          Retrieves the named file. If a local-filename is given, the
-          file is stored locally under that name; otherwise it is stored
-          with its own name.
-
-   HTTP [ switches ] HEAD remote-filename local-filename
-          Like GET except without actually getting the file; instead it
-          gets only the headers, storing them into the given file, whose
-          name must be given, one line per header item, as shown above in
-          the /ARRAY: switch description.
-
-   HTTP [ switches ] INDEX remote-directory [ local-filename ]
-          Retrieves the file listing for the given server directory.
-          NOTE: This command is not supported by most Web servers.
-
-   HTTP [ switches ] POST [ /MIME-TYPE:type ] local-file remote-file
-          Used to send a response as if it were sent from a form. The
-          data to be posted must be read from a file.
-
-   HTTP [ switches ] PUT [ /MIME-TYPE:type ] local-file remote-file
-          Uploads a local file to a server file.
-
-   HTTP [ switches ] DELETE remote-filename
-          Instructs the server to delete the specified filename.
-     _________________________________________________________________
-
-  3. TERMINAL CONNECTION
-
-  3.1. CONNECT Command Switches
-
-   The following switches (see [426]Section 1.5) were added to the
-   CONNECT command in 7.0:
-
-   /QUIETLY
-          Don't print the "Connecting to..." or "Back at..." messages. CQ
-          is an invisible command synonym for CONNECT /QUIETLY.
-
-   /TRIGGER:string
-          Specify a trigger or triggers ([427]Section 3.2) effective for
-          this CONNECT command only, temporarily overriding any current
-          SET TERMINAL TRIGGER values ([428]Section 3.2).
-
-   Note: Other switches might also be available; type "connect ?" for a
-   list, "help connect" for a description of each.
-     _________________________________________________________________
-
-  3.2. Triggers
-
-   Triggers were added for UNIX, VMS, AOS/VS, and K95 in C-Kermit 7.0.
-
-   SET TERMINAL TRIGGER string
-          Tells C-Kermit to look for the given string during all
-          subsequent CONNECT sessions, and if seen, to return to command
-          mode automatically, as if you had escaped back manually. If the
-          string includes any spaces, you must enclose it in braces.
-          Example:
-
-  set terminal trigger {NO CARRIER}
-
-   Comparisons are made after character-set translation.
-
-   If a string is to include a literal brace character, precede it with a
-   backslash:
-
-  ; My modem always makes this noise when the connection is lost:
-  set terminal trigger |||ppp\{\{\{\{UUUUUUU
-
-   If you want Kermit to look for more than one string simultaneously,
-   use the following syntax:
-
-  set terminal trigger {{string1}{string2}...{stringn}}
-
-   In this case, C-Kermit will return to command mode automatically if
-   any of the given strings is encountered. Up to 8 strings may be
-   specified.
-
-   If the most recent return to command mode was caused by a trigger, the
-   new variable, \v(trigger), shows the trigger value; otherwise
-   \v(trigger) is empty.
-
-   The SHOW TRIGGER command displays the SET TERMINAL TRIGGER values as
-   well as the \v(trigger) value.
-     _________________________________________________________________
-
-  3.3. Transparent Printing
-
-   As noted in the manual, C-Kermit's CONNECT command on UNIX is not a
-   terminal emulator, but rather a "semitransparent pipe" between the
-   terminal or emulator you are using to access C-Kermit, and the remote
-   host to which C-Kermit is connected. The "semitransparent" qualifier
-   is because of character-set translation as well as several actions
-   taken by the emulator in response to the characters or strings that
-   pass through it, such as APCs, Kermit packets (autodownload),
-   triggers, etc.
-
-   The UNIX version of C-Kermit 7.0 adds another such action: Transparent
-   printing, also called Controller printing (as distinct from Autoprint
-   or line or screen print). It is intended mainly for use on UNIX
-   workstation consoles (as opposed to remote logins), but with some care
-   can also be used when accessing C-Kermit remotely.
-
-   Transparent printing is related to APC by sharing C-Kermit's built-in
-   ANSI escape-sequence parser to detect "printer on" and "printer off"
-   sequences from the host. When the printer-on sequence is received, all
-   subsequent arriving characters -- including NUL, control characters,
-   and escape sequences -- are sent to the SET PRINTER device instead of
-   to your screen until the printer-off sequence is received, or you
-   escape back, whichever happens first. These bytes are not translated
-   or modified or filtered in any way by Kermit (except for possibly
-   stripping of the 8th bit, as noted below), but if filtering or
-   translation is desired, this can be accomplished by your SET PRINTER
-   selection (e.g. by choosing a pipeline of filters).
-
-   By default, your SET PRINTER device is your default UNIX printer, but
-   it can also be a file, a command, or the null device (which causes all
-   printer material to be discarded). See [429]Using C-Kermit, 2nd Ed.,
-   p.41 for details.
-
-   Transparent printing is controlled by the command:
-
-   SET TERMINAL PRINT { ON, OFF }
-          When ON, transparent-print sequences are obeyed, and printing
-          occurs on the system where C-Kermit is running. When OFF,
-          transparent print sequences are ignored and passed through to
-          your actual terminal or emulator, along with the data they
-          enclose. OFF is the default, for compatibility with earlier
-          C-Kermit releases. As noted in the manual, when the current SET
-          PRINTER device is a file, transparent-print material is
-          appended to it; the file is not overwritten.
-
-   SET TERMINAL BYTESIZE { 7, 8 }
-   SET PARITY { EVEN, ODD, MARK, SPACE, NONE }
-          If the terminal bytesize is 7, or PARITY is not NONE, the 8th
-          bit of each byte is stripped prior to printing.
-
-   The transparent-print escape sequences are:
-
-   <ESC>[5i
-          Printer On. Send all subsequent incoming bytes to the printer
-          without any kind of filtering, translation, or alteration.
-          Note: <ESC> stands for ASCII character number 27 (decimal),
-          Escape.
-
-   <ESC>[4i
-          Printer Off. Resume displaying incoming bytes on the screen.
-
-   These are the same sequences used by DEC VT100 and higher terminals
-   and other ANSI X3.64 and ISO 6429 compatible terminals. There is no
-   provision for selecting other printer-control sequences.
-
-   Restrictions:
-
-    1. You must SET TERM TRANSPARENT-PRINT ON before you can use this
-       feature.
-    2. Only the 7-bit forms of the escape sequences are supported. The
-       8-bit CSI C1 control is not recognized.
-    3. Autoprint is not supported, since this requires a full-fledged
-       terminal emulator with direct access to the screen.
-    4. The start-print and stop-print sequences pass through to the
-       screen (there is no way to avoid this without causing unacceptable
-       delays or deadlocks in CONNECT mode). Thus if your terminal or
-       emulator also supports transparent printing via these same
-       sequences, an empty file will be sent to its printer. Normally
-       this has no effect.
-
-   Point (4) is similar to the situation with autodownload and APC --
-   when you have several Kermit clients in a chain, you should take care
-   that these features are enabled in only one of them.
-
-   Example 1:
-
-  set printer {|lpr -Plaser}  ; Specify the printer (if not default).
-  set term print on           ; Enable transparent printing.
-  set term byte 8             ; Enable 8-bit characters.
-  connect                     ; Enter CONNECT mode.
-
-   Example 2:
-
-  set printer /home/users/olga/printer.log  ; Send printer material to a file.
-
-   Example 3:
-
-  set printer {| grep -v ^Received | lpr}   ; Filter out some lines
-
-   Then use "pcprint" or "vtprint" commands on the host to initiate
-   transparent print operations. See [430]Using C-Kermit, 2nd Ed., p.406
-   for details.
-
-   Here is a sample "pcprint" shell script for UNIX:
-
-  #!/bin/sh
-  echo -n '<ESC>[5i'
-  if [ $# -eq 0 ]; then
-    cat
-  else
-    cat $*
-  fi
-  echo -n '<FF><ESC>[4i'
-  # (end)
-
-   (Replace "<ESC>" by the actual ASCII Escape character and "<FF>" by
-   the ASCII Formfeed character).
-
-   If you always want transparent printing enabled, put "set term print
-   on" in your C-Kermit customization file (~/.mykermrc in UNIX). The
-   "set term bytesize" selection, however, is a property of each separate
-   connection.
-     _________________________________________________________________
-
-  3.4. Binary and Text Session Logs
-
-   C-Kermit 7.0 corrects an oversight in earlier releases, in which
-   binary session logs (SET SESSION-LOG BINARY) translated character sets
-   and performed various formatting transformations (e.g. "newline mode")
-   before writing characters to the session log. In C-Kermit 7.0,
-   binary-mode session logging writes characters as they come in, before
-   anything (other that parity-bit stripping) is done to them. Text-mode
-   session logging records the characters after processing.
-     _________________________________________________________________
-
-  4. FILE TRANSFER
-
-   Every file is transferred either in text mode (which implies
-   record-format and character-set translation) or binary mode (in which
-   each byte is sent literally without any kind of conversion). The mode
-   in which a file is transferred is controlled by (a) the default mode,
-   in the absence of any other indications; (b) the SET FILE TYPE
-   command; (c) various automatic mechanisms based on client/server
-   negotiations, directory information or filename patterns, etc.
-
-   The default FILE TYPE was changed from TEXT to BINARY in C-Kermit 7.0
-   because:
-
-     * Transferring a text file in binary mode does less damage than
-       transferring a binary file in text mode.
-     * Only binary-mode transfers can be recovered from the point of
-       failure.
-     * The automatic transfer-mode mechanisms switch to text mode on a
-       per-file basis anyway, so only those files that are not covered by
-       the automatic mechanisms are affected.
-     * All file transfers on the Web are done in binary mode, so people
-       are accustomed to it and expect it.
-     _________________________________________________________________
-
-  4.0. BUG FIXES, MINOR CHANGES, AND CLARIFICATIONS
-
-    4.0.0. Filenames with Spaces
-
-   Filenames that contain spaces are a major nuisance to a program like
-   Kermit, whose command language is line- and word-oriented, in which
-   words are separated by spaces and a filename is assumed to be a
-   "word". In general (unless noted otherwise in the description of a
-   particular command), there is only one way to refer to such files in
-   Kermit commands, and that is to enclose the name in braces:
-
-  send {this file}
-
-   Tells Kermit to send the file whose name is "this file" (two words, no
-   quotes). Of course, various circumlocutions are also possible, such
-   as:
-
-  define \%a this file
-  send \%a
-
-   BUT, perhaps contrary to expectation, you can't use "\32" to represent
-   the space:
-
-  send this\32file
-
-   does not work. Why? Because the Kermit parser, which must work on many
-   operating systems including Windows, has no way of knowing what you
-   mean by "this\32file". Do you mean a file whose name is "this file" in
-   the current directory? Or do you mean a file whose name is "32file" in
-   the "this" subdirectory of the current directory? Guessing won't do
-   here; Kermit must behave consistently and deterministically in all
-   cases on all platforms.
-
-   Note that you can't use Esc or Tab within {...} for filename
-   completion, or question mark to get a filename list. However, you can
-   include wildcards; for example:
-
-  send {* *}
-
-   sends all files whose name contains a space.
-
-   All things considered, it is best to avoid spaces in file and
-   directory names if you can. Also see [431]Section 5.4 on this topic.
-     _________________________________________________________________
-
-    4.0.1. Packet out of Window
-
-   C-Kermit 6.0 could send packets "out of window" if the window size was
-   greater than 1 and ACKs had arrived out of order. Fixed in 6.1.
-     _________________________________________________________________
-
-    4.0.2. MOVE after ADD SEND-LIST
-
-   ADD SEND-LIST followed by MOVE did not delete original files; fixed in
-   6.1. Carrier loss was not detected during transfer; in 7.0 C-Kermit
-   checks for this (but results can not be guaranteed). In any case, the
-   protocol will eventually time out if the connection is lost.
-     _________________________________________________________________
-
-    4.0.3. GET and RECEIVE As-Names
-
-   In 5A(190) through 6.0.192, the GET and RECEIVE as-name did not
-   properly override the RECEIVE PATHNAMES setting. In 7.0 it does.
-     _________________________________________________________________
-
-    4.0.4. New Brief Statistics Listing
-
-   Version 7.0 adds a /BRIEF switch to the STATISTICS command, to display
-   a short file-transfer statistics report. /BRIEF is now the default.
-   Use /VERBOSE to see the full display, which is about 25 lines long.
-     _________________________________________________________________
-
-    4.0.5. Improved FAST Command
-
-   The preinstalled definition of the FAST macro did not take enough
-   factors into account. Now it sets packet lengths and window sizes
-   appropriate to the configuration. Furthermore, in IRIX only, it might
-   restrict the SEND packet length to 4000, to work around a bug in the
-   IRIX Telnet server, depending on the IRIX version (see
-   [432]ckubwr.txt, IRIX section). To see the built-in definition of the
-   FAST macro, type "show macro fast". To change it, simply define it to
-   be whatever you want -- it's just a macro, like any other.
-     _________________________________________________________________
-
-    4.0.6. The SET SEND BACKUP Command
-
-   Version 7.0 adds SET SEND BACKUP { ON, OFF }. This tells whether
-   backup files should be sent. Backup files are the ones created by
-   Kermit (and EMACS, and possibly other applications) to preserve old
-   copies of files when creating new ones with the same name. Kermit does
-   this when receiving a file and its FILE COLLISION setting is BACKUP
-   (or RENAME, in which case it the new file gets the backup name). On
-   most platforms, the backup name is formed by adding:
-
-  .~n~
-
-   to the end of the filename, where "n" is a number. For example, if the
-   original file is oofa.txt, a backup file might be called:
-
-  oofa.txt.~1~
-
-   (or oofa.txt.~2~, etc). If you SET SEND BACKUP OFF, this tells Kermit
-   not to send files that have backup names. Normally, SET SEND BACKUP is
-   ON (as shown by SHOW PROTOCOL), and backup files are sent if their
-   names match the SEND file specification.
-
-   Also see PURGE, SET FILE COLLISION, SEND /NOBACKUP, DIRECTORY
-   /[NO]BACKUP.
-     _________________________________________________________________
-
-    4.0.7. The SET { SEND, RECEIVE } VERSION-NUMBERS Command
-
-   VMS Only. Normally when sending files, VMS C-Kermit strips the version
-   number. For example, if the file is FOO.BAR;34, the name is sent as
-   FOO.BAR (without the ";34"). If you want to keep version numbers on
-   when sending files, use SET SEND VERSION-NUMBERS ON. The effect
-   depends on the receiver.
-
-   Normally when receiving files, and an incoming filename includes a
-   VMS-style version number (such as FOO.BAR;34) VMS C-Kermit strips it
-   before trying to create the new file; this way the new file receives
-   the next highest version number in the customary manner for VMS. If
-   you want version numbers on incoming filenames to be used in creating
-   the new files, use SET RECEIVE VERSION-NUMBERS ON.
-
-   Normally these commands would be effective only when VMS C-Kermit is
-   exchanging files with a non-VMS Kermit program, since VMS-to-VMS
-   transfers use labeled mode unless you have gone out of your way to
-   defeat it.
-
-   Example: You want to send all versions of all files in the current
-   directory from a VMS C-Kermit client to a UNIX C-Kermit server. Use:
-
-  set send version-numbers on
-  send *.*;*
-
-   The resulting Unix files will have VMS-style version numbers as part
-   of their name, for example "foo.bar;1", "foo.bar;2", etc.
-
-   Now suppose you want to send these files from Unix to another VMS
-   system and preserve the version numbers. Again we have a Unix C-Kermit
-   server and VMS C-Kermit client. Give these commands to the client:
-
-  set receive version-numbers on
-  get *
-     _________________________________________________________________
-
-    4.0.8. The SET { SEND, RECEIVE } { MOVE-TO, RENAME-TO } Commands
-
-   These commands are persistent global versions of the /MOVE-TO: and
-   /RENAME-TO: switches of the SEND, GET, and RECEIVE commands. They
-   should normally be used only when setting up a dedicated
-   transaction-processing application, in which each file is to be moved
-   or renamed immediately after, and only if, it is transferred
-   successfully, so that (for example) an independent, concurrent process
-   can notice when new files appear and process them immediately without
-   having to guess whether they are complete.
-     _________________________________________________________________
-
-    4.0.9. SET FILE INCOMPLETE AUTO
-
-   SET FILE INCOMPLETE { KEEP, DISCARD }, which tells whether to keep or
-   discard incompletely received files, has a new option, AUTO, which is
-   also the default. It means KEEP the incomplete file if the transfer is
-   in binary mode, otherwise DISCARD it. This reduces the chances that a
-   subsequent recovery operation (RESEND, REGET, etc) could produce a
-   corrupt file, since recovery works only for binary-mode transfers.
-     _________________________________________________________________
-
-  4.1. FILE-TRANSFER FILENAME TEMPLATES
-
-   File-transfer filename templates allow files to be renamed
-   automatically by the file sender, the receiver, or both, during
-   transfer of groups of files.
-
-    4.1.1. Templates in the As-Name
-
-   Prior to C-Kermit 6.1 and Kermit 95 1.1.12 the only options that could
-   be used to affect the names of files being transferred were SET
-   FILENAMES { LITERAL, CONVERTED } and SET { SEND, RECEIVE } PATHNAMES {
-   ON, OFF }, plus the "as-name" feature of the SEND (MOVE, etc) and
-   RECEIVE commands.
-
-   Previously, the as-name could be used only for a single file. For
-   example:
-
-  SEND FOO BAR
-
-   would send the file FOO under the name BAR, but:
-
-  SEND *.TXT anything
-
-   was not allowed, since it would give the same name to each file that
-   was sent. When receiving:
-
-  RECEIVE FOO
-
-   would rename the first incoming file to FOO before storing it on the
-   disk, but subsequent files would not be renamed to FOO, since this
-   would result in overwriting the same file repeatedly. Instead, they
-   were stored under the names they arrived with.
-
-   Beginning in C-Kermit 6.1 and Kermit 95 1.1.12, it is possible to
-   specify as-names in SEND, RECEIVE, and related commands even for file
-   groups. This is accomplished by using replacement variables in the
-   as-name, along with optional material such character-string functions
-   and/or constant strings. An as-name containing replacement variables
-   is called a filename template.
-
-   The key to filename templates is the new variable:
-
-  \v(filename)
-
-   During file transfer it is replaced by the name of each file currently
-   being transferred (after transfer, it is the name of the last file
-   transferred).
-
-   So, for example:
-
-  send *.txt \v(filename).new
-
-   sends each file with its own name, but with ".new" appended to it. Of
-   course if the name already contains periods, this could confuse the
-   file receiver, so you can also achieve fancier effects with
-   constructions like:
-
-  send *.txt \freplace(\v(filename),.,_).new
-
-   which replaces all periods in the original filename by underscores,
-   and then appends ".new" to the result. So, for example, oofa.txt would
-   be sent as oofa_txt.new.
-
-   Another new variable that is useful in this regard is \v(filenumber),
-   which is the ordinal number of the current file in the file group, so
-   you can also:
-
-  send *.txt FILE\flpad(\v(filenum),2,0)
-
-   resulting in a series of files called FILE00, FILE01, FILE02, etc. (At
-   the end of the transfer, \v(filenum) tells the number of files that
-   were transferred).
-
-   If you specify a constant as-name when sending a file group:
-
-  send *.txt thisnameonly
-
-   Kermit complains and asks you to include replacement variables in the
-   as-name. You should generally use \v(filename) or \v(filenumber) for
-   this purpose, since other variables (with the possible exception of
-   date/time related variables) do not change from one file to the next.
-   But Kermit accepts any as-name at all that contains any kind of
-   variables for file group, even if the variable will not change. So:
-
-  send *.txt \%a
-
-   is accepted, but all files are sent with the same name (the value of
-   \%a, if it has one and it is constant). If the variable has no value
-   at all, the files are sent under their own names.
-
-   Of course, the value of \%a in the previous example need not be
-   constant:
-
-  define \%a FILE\flpad(\v(filenum),2,0)_at_\v(time)
-  send *.txt \%a
-
-   The RECEIVE command, when given without an as-name, behaves as always,
-   storing all incoming files under the names they arrive with, subject
-   to SET FILE NAME and SET RECEIVE PATHNAMES modifications ([433]Section
-   4.10).
-
-   However, when an as-name is given in the RECEIVE command, it is
-   applied to all incoming files rather than to just the first. If it
-   does not contain replacement variables, then the current FILE
-   COLLISION setting governs the result. For example:
-
-  receive foo
-
-   will result in incoming files named foo, foo.~1~, foo.~2~, and so on,
-   with the default FILE COLLISION setting of BACKUP. If it does contain
-   replacement variables, of course they are used.
-
-   When receiving files, the \v(filename) variable refers to the name
-   that was received in the incoming file-header packet, BEFORE any
-   processing by SET FILE NAMES or SET RECEIVE PATHNAMES. Since the
-   filenames in file-header packets are usually in uppercase, you would
-   need to convert them explicitly if you want them in lowercase, e.g.:
-
-  receive \flower(\v(filename)).new
-     _________________________________________________________________
-
-    4.1.2. Templates on the Command Line
-
-   On the command-line, use templates as shown above as the -a option
-   argument, bearing in mind the propensity of UNIX and perhaps other
-   shells to treat backslash as a shell escape character. So in UNIX (for
-   example):
-
-  kermit -s oofa.* -a x.\\v(filenum)
-
-   By the way, this represents a change from 6.0 and earlier releases in
-   which the as-name (-a argument or otherwise) was not evaluated by the
-   command parser. Thus, for example, in VMS (where the shell does not
-   care about backslashes), it was possible to:
-
-  kermit -s oofa.txt -a c:\tmp\oofa.txt
-
-   Now backslashes in the as-name must be quoted not only for the shell
-   (if necessary) but also for Kermit itself:
-
-  kermit -s oofa.txt -a c:\\tmp\\oofa.txt      ; Kermit only
-  kermit -s oofa.txt -a c:\\\\tmp\\\\oofa.txt  ; Shell and Kermit
-
-   You can also use the \fliteral() function for this:
-
-  kermit -s oofa.txt -a \fliteral(c:\tmp\oofa.txt)      ; Kermit only
-  kermit -s oofa.txt -a \\fliteral(c:\\tmp\\oofa.txt)   ; Shell and Kermit
-     _________________________________________________________________
-
-    4.1.3. Post-Transfer Renaming
-
-   Filename templates are now also useful in SET { SEND, RECEIVE }
-   RENAME-TO and in the /RENAME-TO: switch, that can be given to the
-   SEND, GET, or RECEIVE commands; this is similar to an as-name, but is
-   effective on a per-file basis if and only if the file was transferred
-   successfully.
-
-   MOVE-TO and RENAME-TO address a requirement commonly stated for
-   transaction processing and similar systems. Suppose, for example, a
-   central system "X" accepts connections from multiple clients
-   simultaneously; a process on X waits for a file to appear and then
-   processes the file. This process must have a way of knowing when the
-   file has been completely and successfully transferred before it starts
-   to process it. This can be accomplished easily using C-Kermit's SET {
-   SEND, RECEIVE } { MOVE-TO, RENAME-TO } command or /MOVE-TO: or
-   /RENAME-TO: switches, described in [434]Sections 4.7.1 through
-   [435]4.7.3.
-
-   Here's an example for the client side, in which files to be sent are
-   placed in a certain directory (/usr/olga/tosend in this example) by
-   another process when they are ready to go. This might be in a hospital
-   or big doctor's office, where medical insurance claims are entered at
-   a number of workstations, and then deposited in the "tosend"
-   directory, from which they are sent to a claims clearinghouse. We
-   assume the connection is already made and a Kermit server is on the
-   other end.
-
-  local srcdir findir              ; Declare local (automatic) variables
-  assign srcdir /usr/olga/tosend   ; Local source directory (files to send)
-  assign findir /usr/olga/sent     ; Where to move files after they are sent
-  log transactions                 ; Keep a log of transfers
-  cd \m(srcdir)                    ; Change to the source directory
-  while true {                     ; Loop forever...
-      send /move-to:\m(findir) *   ; Send all files
-      sleep 60                     ; Sleep a minute
-  }                                ; Go back and do it again
-
-   Note how simple this is. Once each file is sent, it is moved so it
-   won't be sent again (you could also use SEND /RENAME-TO: or even SEND
-   /DELETE). If a transfer fails, the file is not moved and so we try
-   again to send it next time around. If there are no files to send, the
-   SEND command does nothing but a message is printed; you can avoid the
-   message by checking first to see if any files are in the directory:
-
-  while true {                     ; Loop forever...
-      if > \ffiles(*) 0 -          ; If there are any files
-        send /move-to:\m(findir) * ; send them.
-      sleep 60                     ; Sleep a minute.
-  }                                ; Go back and do it again.
-
-   It's even simpler on the server side (here again we assume the
-   connection is already in place):
-
-  local rcvdir findir              ; Declare local (automatic) variables
-  assign rcvdir /usr/ivan/tmp      ; Temporary receiving directory
-  assign findir /usr/ivan/new      ; Where to move files after reception
-  log transactions                 ; Keep a log of transfers
-  cd \m(rcvdir)                    ; Change to the source directory
-  set receive move-to \m(findir)   ; Declare move-to directory.
-  server                           ; Enter server mode.
-
-   A separate process (e.g. the medical claim-form decoder) can look for
-   files appearing in the /usr/ivan/new directory and process them with
-   every confidence that they have been completely received.
-
-   Note that the use of MOVE-TO can result in moved files overwriting one
-   another (the application would normally avoid this by assigning each
-   transaction a unique, e.g. based on customer number and claim number).
-   But if filename collisions are a possibility in your application,
-   RENAME-TO might be a better choice; you can use any variables you like
-   in the template to ensure uniqueness of the RENAME-TO filename; for
-   example:
-
-  SET RECEIVE RENAME-TO \v(filename)_\v(ndate)_\v(ntime)_\v(userid)_\v(pid)
-     _________________________________________________________________
-
-  4.2. FILE-TRANSFER PIPES AND FILTERS
-
-    4.2.1. INTRODUCTION
-
-   Beginning in C-Kermit 6.1 and Kermit 95 1.1.12, it is possible to send
-   from a command, or "pipe", as well as from a file, and to receive to a
-   pipe or command. In a typical example, we might want to transfer an
-   entire directory tree from one UNIX system to another (but without
-   using the methods described in [436]Sections 4.3 , [437]4.10,
-   [438]4.11, and [439]4.15). We could do this in multiple steps as
-   follows:
-
-  1. Create a tar archive of the desired directory tree
-  2. Compress the tar archive
-  3. Transfer it in binary mode to the other computer
-  4. Decompress it
-  5. Extract the directory tree from the tar archive
-
-   But this is inconvenient and it requires a temporary file, which might
-   be larger than we have room for.
-
-   The new pipe-transfer feature lets you do such things in a single
-   step, and without intermediate files.
-
-   Additional new features, also discussed here, let you specify pre- and
-   post- processing filters for outbound and incoming files, and give you
-   a way to insert the output from shell or system commands into C-Kermit
-   commands.
-
-   The file-transfer related features are available only with Kermit
-   protocol, not with any external protocols, nor with K95's built-in
-   XYZMODEM protocols (because XYZMODEM recovers from transmission errors
-   by rewinding the source file, and you can't rewind a pipe).
-
-   This section begins by discussing the simple and straightforward use
-   of these features in UNIX, in which pipes and input/output redirection
-   are a fundamental component and therefore "just work", and then goes
-   on to discuss their operation in Windows and OS/2, where matters are
-   much more complicated.
-     _________________________________________________________________
-
-    4.2.1.1. TERMINOLOGY
-
-   Standard Input
-          This is a precise technical term denoting the normal source of
-          input for a command or program, which is the keyboard of your
-          terminal by default, but which can be redirected to a file or
-          pipe.
-
-   Stdin
-          Abbreviation for Standard Input.
-
-   Standard Output
-          A precise technical term denoting the normal destination for
-          output from a command or program, which is your terminal screen
-          by default, but which can be redirected to a file.
-
-   Stdout
-          Abbreviation for Standard Output.
-
-   Stdio
-          Abbreviation for Standard Input / Standard Output.
-
-   I/O
-          Abbreviation for Input / Output.
-
-   Shell
-          Text-based system command processor, such as the UNIX shell,
-          DOS COMMAND.COM, etc.
-
-   Pipe
-          A mechanism by which the standard output of one program is sent
-          to the standard input of another.
-
-   Pipeline
-          A series of programs connected by pipes.
-     _________________________________________________________________
-
-    4.2.1.2. NOTATION
-
-   In command descriptions, "command" is replaced by a shell or system
-   command or pipeline. The command names specified in these commands are
-   interpreted by your shell, just as if you were typing them at the
-   shell prompt, and so if they are in your PATH, they will be found in
-   the expected manner. Therefore you don't have to specify complete
-   pathnames for commands that are programs (but it shouldn't hurt if you
-   do).
-
-   The normal notation for I/O redirection is as follows:
-
-  <  Read Stdin from the given file.
-  >  Send Stdout to the given file.
-  |  Send Stdout from the command on the left to the command on the right.
-
-   Examples:
-
-   sort < foo > bar
-          Sorts the lines in file "foo" and writes the results to file
-          "bar"
-
-   grep -c "some text" *.txt | grep -v ":0" | sort | pr -3 | lpr
-          This is a command pipeline composed of 5 commands:
-
-   grep -c "some text" *.txt
-          Looks in all files whose names end with ".txt" for the string
-          "some text" and writes to Stdout the names of each file
-          followed by a colon and the number of occurrences in each.
-
-   grep -v ":0"
-          Prints to Stdout the lines from Stdin that do NOT contain the
-          string ":0", in this case, it removes the names of files that
-          do not contain "some text".
-
-   sort
-          Sorts the lines from Stdin alphabetically to Stdout.
-
-   pr -3
-          Arranges the lines from Stdin in three columns.
-
-   lpr
-          Prints its Stdin on the default printer.
-
-   Note that the Kermit features described here work only with commands
-   that use Stdio. If you attempt to use them with commands whose input
-   and output can not be redirected, Kermit will most likely get stuck.
-   Kermit has no way of telling how an external command works, nor what
-   the syntax of the shell is, so it's up to you to make sure you use
-   these features only with redirectable commands.
-
-   The quoting rules of your shell apply to the command. Thus in UNIX,
-   where C-Kermit tries to use your preferred shell for running commands,
-   shell "metacharacters" within commands must be escaped if they are to
-   be taken literally, using the methods normal for your shell. For
-   example, the UNIX tr (translate) command must have its arguments in
-   quotes:
-
-  tr "[a-z]" "[A-Z]"
-
-   otherwise the shell is likely to replace them by all filenames that
-   match, which is probably not what you want. This is also true when
-   using your shell directly, and has nothing to do with Kermit.
-     _________________________________________________________________
-
-    4.2.1.3. SECURITY
-
-   Some sites might not wish to allow access to system commands or
-   external programs from within Kermit. Such access, including all the
-   features described here, can be disabled in various ways:
-
-    1. When building from source code, include -DNOPUSH among the CFLAGS.
-    2. At runtime, give the NOPUSH command.
-    3. For server mode, give the DISABLE HOST command.
-    4. Implicit use of pipes can be disabled as described in [440]Section
-       4.2.4.
-
-   Note: 3 and 4 are not necessary if you have done 1 or 2.
-     _________________________________________________________________
-
-    4.2.2. Commands for Transferring from and to Pipes
-
-   SEND /COMMAND sends data from a command or command pipeline, and
-   RECEIVE /COMMENT writes data to a command or pipeline. The GET
-   /COMMAND command asks a server to send material, and then writes the
-   incoming material to a command or pipeline. These features, along with
-   switches (like "/COMMAND", described in [441]Section 4.7) are new to
-   C-Kermit 6.1. The following synonyms are also provided:
-
-  CSEND    = SEND /COMMAND
-  CRECEIVE = RECEIVE /COMMAND
-  CGET     = GET /COMMAND
-
-   None of these commands can be used if a SEND or RECEIVE FILTER
-   (respectively, [442]Section 4.2.3) is in effect, or if a NOPUSH
-   command ([443]Section 4.2.1.3) has been given, or if the current
-   protocol is not Kermit.
-     _________________________________________________________________
-
-    4.2.2.1. Sending from a Command
-
-   SEND /COMMAND command [ as-name ]
-   SEND /AS-NAME:as-name /COMMAND command
-   CSEND command [ as-name ]
-          These three forms are the same. They work like the SEND
-          command, but instead of sending a file, it sends the standard
-          output of the given command, either under the command's own
-          name, or else with the given as-name. If the command contains
-          spaces, it must be enclosed in braces. Braces should also be
-          used for the as-name if it contains spaces. If braces are
-          included around either the command or the as-name, they are
-          removed after parsing but before use. As with SEND, the
-          transfer is in text or binary mode according the current FILE
-          TYPE setting, unless you override the global transfer mode by
-          including a /TEXT or /BINARY switch. The command must require
-          no input.
-
-   When sending from a command or pipeline, C-Kermit has no way of
-   knowing in advance how much data will be sent, and so it can not send
-   the size to the other Kermit in the Attribute packet, and so the
-   receiving Kermit has no way of displaying "percent done" or a progress
-   bar (thermometer).
-
-   Examples that make sense in text mode (illustrated by common UNIX
-   commands):
-
-   SEND /COMMAND finger
-   CSEND finger
-          sends the current "finger" listing (who's logged in) under the
-          name "finger". The two forms "send /command" and "csend" are
-          equivalent; we won't bother showing them both in the rest of
-          the examples.
-
-   SEND /COMMAND:{finger}
-   CSEND {finger}
-          Same as previous example (braces are removed from "{finger}").
-
-   SEND /COMMAND:{ finger }
-   CSEND { finger }
-          Same as previous example, but note that the spaces are kept.
-          This does not prevent the shell from running the "finger"
-          program, but its output is sent under the name " finger " (with
-          a leading and trailing space).
-
-   SEND /COMMAND:finger /AS-NAME:userlist
-   CSEND finger userlist
-          sends the current finger listing under the name "userlist".
-
-   SEND /COMMAND:{finger | sort -r} /AS-NAME:userlist
-   CSEND {finger | sort -r} userlist
-          sends the current finger listing, sorted in reverse order,
-          under the name "userlist". The braces are needed to distinguish
-          the command from the as-name.
-
-   SEND /COMMAND:{finger | sort -r} /AS-NAME:{userlist}
-   CSEND {finger | sort -r} {userlist}
-          Same as previous example (braces are removed from
-          "{userlist}").
-
-   SEND /COMMAND:{finger | sort -r}
-          /AS-NAME:{\freplace(\v(filename),\32,_)}
-
-   CSEND {finger | sort -r} {\freplace(\v(filename),\32,_)}
-          Like the previous example, but sends the output of the command
-          under the name of the command, but with all spaces (\32)
-          replaced by underscores, so the as-name is "finger_|_sort_-r".
-
-   Examples that make sense in binary mode (three equivalent forms are
-   shown):
-
-   SEND /COMMAND /BINARY {tar cf - . | gzip -c} mydir.tar.gz
-   SEND /COMMAND /BINARY /AS-NAME:mydir.tar.gz {tar cf - . | gzip -c}
-   CSEND /BINARY {tar cf - . | gzip -c} mydir.tar.gz
-          Makes a tar archive of the current directory, compresses it
-          with the GNU gzip program, and sends it as "mydir.tar.gz". The
-          other Kermit can, of course, just store it as a file, or it can
-          use CRECEIVE to uncompress and dearchive it as part of the
-          transfer process.
-
-   When using a "pipeline" of commands in the command field, obviously,
-   the first command must not require any input, and the last command
-   should produce some output, and all intermediate commands should get
-   some input and produce some output.
-     _________________________________________________________________
-
-    4.2.2.2. Receiving to a Command
-
-   RECEIVE /COMMAND command
-   CRECEIVE command
-          This is like RECEIVE, except incoming material is written to
-          the standard input of the given command, in text or binary mode
-          according to the normal rules for file reception. Be sure to
-          include a redirector to a file (if the command normally writes
-          to standard output), or the output of the command won't go
-          anywhere. The command may contain spaces; braces are not
-          needed, but they are removed if used.
-
-   WARNING: C-Kermit has no way of knowing anything about the command, or
-   even whether it is a command. Thus this command will always cause
-   C-Kermit to enter protocol mode, as long as some text is specified in
-   the command field. However, if the text does not correspond to a
-   command, the transfer will eventually fail with a message such as
-   "Error writing data" or "Failure to close file".
-
-   Examples for text mode (in UNIX):
-
-   RECEIVE /COMMAND sort -r > reverse.txt
-   CRECEIVE sort -r > reverse.txt
-          The text that is received is sorted in reverse order and stored
-          in the file "reverse.txt". The two forms shown are equivalent.
-
-   RECEIVE /COMMAND {sort -r > reverse.txt}
-   CRECEIVE {sort -r > reverse.txt}
-          The same as the previous example; if braces are included, they
-          are simply removed.
-
-   RECEIVE /COMMAND {sort -r > \flower(\v(filename)).reverse}
-   CRECEIVE {sort -r > \flower(\v(filename)).reverse}
-          Same but stores result under the incoming filename, lowercased,
-          and with ".reverse" appended to it.
-
-   RECEIVE /COMMAND sort
-   CRECEIVE sort
-          Does nothing useful, since the output of sort has nowhere to
-          go.
-
-   RECEIVE /COMMAND sort -r | pr -3 | lpr -Plaserjet
-   CRECEIVE sort -r | pr -3 | lpr -Plaserjet
-          The text that is received is sorted in reverse order, arranged
-          into three columns, and sent to the "laserjet" printer.
-
-   Examples for binary mode:
-
-   RECEIVE /COMMAND:{gunzip -c | tar xf -}
-   CRECEIVE {gunzip -c | tar xf -}
-          Assuming the data that is received is a compressed tar archive,
-          uncompresses the archive and passes it to tar for extraction.
-          In this case the braces are needed because otherwise the final
-          "-" would be taken as a command continuation character (see
-          [444]Using C-Kermit, 2nd Edition, p.33).
-
-   GET /COMMAND remote-file command
-   GET /COMMAND /AS-NAME:command remote-file
-   CGET remote-file command
-          This command tells the Kermit client to send a GET request for
-          the given remote file to a Kermit server. Unlike GET, however,
-          the incoming material is written to a command, rather than to a
-          file. If the remote-file or the command contain spaces, they
-          must be enclosed in braces. The same cautions about the command
-          apply as for CRECEIVE.
-
-   Examples (for UNIX):
-
-   GET /COMMAND oofa.txt sort -r > oofa.new
-   GET /COMMAND {oofa.txt} {sort -r > oofa.new}
-   CGET oofa.txt sort -r > oofa.new
-   CGET {oofa.txt} {sort -r > oofa.new}
-          These four are equivalent. Each of them requests the server to
-          send its "oofa.txt" file, and as it arrives, it is sorted in
-          reverse order and written to "oofa.new".
-
-   GET /COMMAND {profile exec a} lpr
-   GET /COMMAND {profile exec a} {lpr}
-   GET /COMMAND /AS-NAME:lpr {profile exec a}
-   GET /COMMAND /AS-NAME:{lpr} {profile exec a}
-   GET /COMMAND /AS:lpr {profile exec a}
-   CGET {profile exec a} lpr
-   CGET {profile exec a} {lpr}
-          Here the remote filename contains spaces so it MUST be enclosed
-          in braces. As it arrives it is sent to the lpr program for
-          printing. Braces are optional around "lpr" since it contains no
-          spaces.
-
-   GET /COMMAND *.txt {cat >> new.txt}
-   GET /AS-NAME:{cat >> new.txt} /COMMAND *.txt
-   CGET *.txt {cat >> new.txt}
-          This gets all the ".txt" files from the server and concatenates
-          them all into a single "new.txt" file on the client.
-
-   GET /COMMAND *.txt {echo \v(filename)>>new.txt;cat>>new.txt}
-   CGET *.txt {echo \v(filename)>>new.txt;cat>>new.txt}
-          As above, but inserts each file's name before its contents.
-     _________________________________________________________________
-
-    4.2.3. Using File-Transfer Filters
-
-   The commands described in [445]Section 4.2.2 let you send the output
-   of a command, or receive data into a command. But what if you want to
-   specify preprocessing for files that you send, or postprocessing of
-   files that you receive, even when multiple files are involved? For
-   this you need a way to specify send and receive filters. The commands
-   are SET SEND FILTER and SET RECEIVE FILTER; SHOW PROTOCOL displays the
-   current settings.
-
-    4.2.3.1. The SEND Filter
-
-   SET SEND FILTER [ command ]
-          This command specifies a command to be run on any file that you
-          SEND (or MOVE, MSEND, etc). It also applies to files sent when
-          in server mode, in response to GET commands, but not to the
-          results of REMOTE commands like REMOTE DIRECTORY, REMOTE TYPE,
-          REMOTE HOST, etc. The command may be, but need not be, enclosed
-          in braces; if it is, the braces are stripped before use. The
-          output of this command is sent, rather than the file itself.
-          The current FILE TYPE setting (TEXT or BINARY) applies to the
-          output of the command. The command must contain at least one
-          instance of \v(filename), for which the name of the actual file
-          is substituted. If the command is omitted, the send filter is
-          removed and files are sent in the normal manner.
-
-   The SET SEND FILTER sets up a "global" filter -- that is, one that
-   applies to all subsequent file-sending commands until you change or
-   remove it. You can also specify a "local" filter to be used in a
-   specific file-sending command by using the /FILTER switch (see
-   [446]Section 1.5); for example:
-
-  SEND /FILTER:command [ other-switches ] filename
-
-   Besides \v(filename), you can include any other script programming
-   notation in the send filter: variable names, array references, calls
-   to built-in string or other functions, and so on. These are evaluated
-   during file transfer, NOT during parsing, and they are evaluated
-   separately for each file.
-
-   When the SEND or MOVE (SEND /DELETE) command is used with a send
-   filter, the output from the filter is sent under the file's original
-   name unless you specify an "as-name" or template. The Attribute packet
-   (if any) contains the original file's attributes (size, creation date,
-   etc). So (for example) if the filter changes the file's size, the
-   progress thermometer might be wrong. (We can't send the size of the
-   output from the filter, because it is not known until the transfer is
-   finished.) If you prefer that the size not be sent, use "set
-   attributes size off".
-
-   You can not use send filters with RESEND (SEND /RECOVER) or PSEND
-   (SEND /START).
-
-   Examples for text mode:
-
-   SET SEND FILTER sort -r \v(filename) ; Braces may be omitted
-   SET SEND FILTER {sort -r \v(filename)} ; Braces may be included
-   SEND *.txt
-          This sends every file in the current directory whose name ends
-          with ".txt" under its own name, but with its lines sorted in
-          reverse order.
-
-   SEND /FILTER:{sort -r \v(filename)} *.txt
-          Same as above, but the filter applies only to this SEND
-          command. Braces are required in this case.
-
-   SET SEND FILTER {sort -r \v(filename)}
-   SEND oofa.txt reverse.txt
-          Sends the oofa.txt file with its lines sorted in reverse order
-          under the name "reverse.txt".
-
-   SET SEND FILTER {sort -r \v(filename)}
-   SEND oofa.* \v(filename).reverse
-          Sends all the oofa.* files with their lines sorted in reverse
-          order; each file is sent under its own name but with ".reverse"
-          appended to it.
-
-   SET SEND FILTER {tr "[a-z]" "[A-Z]" < \v(filename)}
-   SEND *.txt
-          Sends all ".txt" files under their own names, but uppercasing
-          their contents.
-
-   Note that the SEND FILTER applies not only to files that are sent with
-   SEND, MOVE, MSEND, etc, but also to files sent by the C-Kermit server
-   in response to GET requests.
-
-   Examples for binary mode:
-
-   SET SEND FILTER {gzip -c \v(filename)}
-   SEND /BINARY oofa.txt oofa.txt.gz
-          Sends the oofa.txt file, compressed by gzip, as oofa.txt.gz.
-
-   SEND /BINARY /FILTER:{gzip -c \v(filename)} oofa.txt oofa.txt.gz
-          As above, but the filter applies only to this SEND command.
-
-   SET SEND FILTER {gzip -c \v(filename)}
-   SEND /BINARY oofa.* \fupper(\replace(\v(filename),.,_)).GZ
-          Sends all the oofa.* files, compressed by gzip, each under its
-          own name, but with the name uppercased, all periods within the
-          name converted to underscores, and ".GZ" appended to it. So,
-          for example, "oofa.txt" is sent as "OOFA_TXT.GZ".
-
-   In the gzip examples, note that the amount of data that is sent is
-   normally less than the original file size because gzip compresses the
-   file. But Kermit sends the original file size ahead in the attribute
-   packet anyway (unless you tell it not too). Thus the transfer will
-   probably appear to terminate early, e.g. when the receiver's
-   file-transfer display thermometer is only at 40%. If this annoys you,
-   tell Kermit to "set attribute length off". On the other hand, you can
-   use the final position of the thermometer as a measure of the
-   effectiveness of compression.
-     _________________________________________________________________
-
-    4.2.3.2. The RECEIVE Filter
-
-   SET RECEIVE FILTER [ command ]
-          This command specifies that the given command will be run on
-          any file that is received before it is written to disk. The
-          command may be, but need not be, enclosed in braces; if it is
-          the braces are stripped before use. The following two commands
-          are equivalent:
-
-  SET RECEIVE FILTER sort -r > \v(filename)
-  SET RECEIVE FILTER {sort -r > \v(filename)}
-
-   The RECEIVE filter command may contain a "\v(filename)" sequence to be
-   replaced by the incoming filename from the file header packet, but it
-   is not required. However you must use it whenever your filter would
-   normally write to Stdout, otherwise its output will be lost.
-
-   The RECEIVE filter command may contain one or more "\v(filename)"
-   sequence to be replaced by the incoming filename from the file header
-   packet, but it is not required. However you must use it whenever your
-   filter would normally write to Stdout, otherwise its output will be
-   lost.
-
-   RECEIVE /FILTER:command and GET /FILTER:command can also be used to
-   specify a filter to be used for only one file-transfer operation.
-
-   UNIX examples for text mode:
-
-   SET RECEIVE FILTER lpr
-   RECEIVE
-          All the files that are received are sent to the default UNIX
-          print spooler.
-
-   RECEIVE /FILTER:lpr
-          Same as above, except the lpr filter is used only with this
-          RECEIVE command.
-
-   RECEIVE lpr
-          This is probably not what you want; it creates a file called
-          lpr.
-
-   SET RECEIVE FILTER {sort -r > \v(filename)}
-   RECEIVE
-          Stores each incoming file with its lines sorted in reverse
-          order, under its own name.
-
-   RECEIVE /FILTER:{sort -r > \v(filename)}
-          As above, but the filter is used only for this RECEIVE command.
-
-   SET RECEIVE FILTER sort -r > \v(filename)
-   RECEIVE reverse.txt
-          Stores each incoming file with its lines sorted in reverse
-          order, under the name "reverse.txt". The actual result depends
-          on the FILE COLLISION setting. If it is OVERWRITE and multiple
-          files arrive, then each incoming file destroys the previous
-          one. If it is BACKUP (the default), filename conflicts are
-          resolve by adding "version numbers" to the filenames:
-          reverse.txt, reverse.txt.~1~, reverse.txt.~2~, etc.
-
-   SET RECEIVE FILTER sort -r > \v(filename)
-   RECEIVE \v(filename).reverse
-          Stores each incoming file with its lines sorted in reverse
-          order, under the name it arrived with, but with ".reverse"
-          appended to it.
-
-   SET RECEIVE FILTER sort -r > \v(filename)
-   RECEIVE \flower(\v(filename)).reverse
-          Like the previous example, but ensures that the filename is
-          lowercase.
-
-          Examples for binary mode:
-
-   SET RECEIVE FILTER gunzip -c > \v(filename)
-   RECEIVE
-          This receives one or more presumably compressed file and
-          uncompresses each one into a file having the same name it was
-          sent with. For example, if the file is sent with the name
-          OOFA.TXT.GZ, it is stored with that name, even after
-          decompression.
-
-   SET RECEIVE FILTER gunzip -c > \v(filename)
-   RECEIVE \flower(\fsubstring(\v(filename),1,\flength(\v(filename))-3))
-          Like the previous example, but the resulting filename has its
-          rightmost three characters removed from it and the remainder is
-          lowercased. So if the incoming filename is OOFA.TXT.GZ, it is
-          stored as oofa.txt after decompression.
-
-   Of course you don't want to type such long hideous commands, so we
-   have also introduced several new functions:
-
-   \fstripx(string[,character])
-          This function removes the rightmost segment of the string that
-          starts with the given character. If no character is given,
-          period (.) is used. Thus it is most conveniently used for
-          stripping the extension from a filename (or the decimal portion
-          from a floating-point number written in US/UK style). Examples:
-
-   \fstripx(OOFA.TXT.GZ)             => OOFA.TXT
-   \fstripx(OOFA.TXT.GZ,.)           => OOFA.TXT
-   \fstripx(OOFA.TXT.GZ,X)           => OOFA.T
-   \fstripx(\fstripx(OOFA.TXT.GZ))   => OOFA
-   \fstripx($100.00)                 => $100
-
-   \fstripn(string,number)
-          Removes the rightmost number characters from the string.
-          Examples:
-
-   \fstripn(OOFA.TXT.GZ)             => OOFA.TXT.GZ
-   \fstripn(OOFA.TXT.GZ,3)           => OOFA.TXT
-   \fstripn(OOFA.TXT.GZ,7)           => OOFA
-
-   \fstripb(string[,c1[,c2]])
-          Strips enclosing matching braces, brackets, parentheses, or
-          quotes from the string. The second argument, c1, specifies
-          which kind of enclosure to look for; if not specified, any
-          enclosing (), [], <>, {}, "", '', or `' are removed. If c1 is
-          specified and c2 is not, then if c1 is an opening brace,
-          bracket, or parenthesis, the matching closing one is supplied
-          automatically as c2. If both c1 and c2 are specified, then to
-          be stripped the string must begin with c1 and end with c2. If
-          the string is not enclosed in the indicated manner, the result
-          is the original string. Examples:
-
-   \fstripb("abc")                   => abc
-   \fstripb([abc])                   => abc
-   \fstripb([abc)                    => [abc
-   \fstripb(<abc>)                   => abc
-   \fstripb(<abc>,[)                 => <abc>
-   \fstripb((abc))                   => abc
-   \fstripb((abc),[)                 => (abc)
-   \fstripb((abc),{(})               => abc
-   \fstripb(+abc+)                   => +abc+
-   \fstripb(+abc+,+)                 => abc
-   \fstripb(+abc+,+,^)               => +abc+
-   \fstripb(+abc^,+,^)               => abc
-   \fstripb('abc')                   => abc
-   \fstripb(`abc')                   => abc
-   \fstripb(``abc'')                 => `abc'
-   \fstripb(\fstripb(``abc''))       => abc
-
-          Notice the special syntax required for including a literal
-          parenthesis in the argument list. As the last two examples
-          illustrate, \fstripb() strips only one level at at a time;
-          nesting can be used to strip a small fixed number of levels;
-          loops can be used to strip larger or indeterminate numbers of
-          levels.
-
-   \flop(string[,char])
-          Removes the leftmost segment of the string that ends with the
-          given character. If no character is given, period (.) is used.
-          Examples:
-
-  \flop(OOFA.TXT.GZ)               => TXT.GZ
-  \flop(OOFA.TXT.GZ,.)             => TXT.GZ
-  \flop(OOFA.TXT.GZ,X)             => T.GZ
-
-          To remove the leftmost number characters, just use
-          \fsubstring(s,number+1). To return the rightmost number
-          characters, use \fright(s,number).
-
-   So the hideous example:
-
-  receive \flower(\fsubstring(\v(filename),1,\flength(\v(filename))-3))
-
-   can now be written as:
-
-  receive \flower(\fstripx(\v(filename)))
-
-   That is, the filename stripped of its extension and then lowercased.
-   This is not only shorter and less hideous, but also does not depend on
-   the length of the extension being 3.
-
-   Note that when a receive filter is in effect, this overrides your FILE
-   COLLISION setting, since Kermit has no way of knowing what the final
-   destination filename will be (because it does not know, and can not be
-   expected to know, the syntax of every version of every command shell
-   on every platform on the planet).
-     _________________________________________________________________
-
-    4.2.4. Implicit Use of Pipes
-
-   If you wish, C-Kermit can also examine incoming filenames to see if
-   they start with "!", and if so, the subsequent text is treated as a
-   command to read from or write to. For example, if a Kermit client is
-   given the following command:
-
-  get {!finger | sort}
-
-   the server on the other end, if it supports this feature, will run the
-   "finger" program, pipe its standard output to the "sort" program, and
-   send sort's standard output back to you. Similarly, if you:
-
-  send oofa.txt !sort -r > oofa.new
-
-   or, equivalently:
-
-  send oofa.txt {!sort -r > oofa.new}
-
-   or:
-
-  send /as-name:{!sort -r > oofa.new} oofa.txt
-
-   this has the receiver send the contents of the incoming oofa.txt file
-   to the sort program, which sorts the text in reverse order and stores
-   the result in oofa.new.
-
-   This use of the exclamation mark should be familiar to UNIX users as
-   the "bang" feature that lets you run an external application or
-   command from within another application.
-
-   Kermit's "bang" feature is disabled by default, since it is not
-   unheard for filenames to actually begin with "!". So if you want to
-   use this feature, you must enable it with the following command:
-
-   SET TRANSFER PIPES { ON, OFF }
-          ON enables the recognition of "!" notation in incoming
-          filenames during file transfer as an indicator that the
-          remaining text is the name of a command. OFF, the default,
-          disables this feature and uses the text as a filename in the
-          normal fashion. This command does NOT affect SEND /COMMAND, GET
-          /COMMAND, CSEND, etc.
-
-   So using a combination of CSEND (SEND /COMMAND) and the "bang"
-   feature, you can transfer a directory tree all in one command
-   (assuming the remote Kermit supports pipe transfers and has them
-   enabled):
-
-  CSEND {tar cf - . | gzip -c} {!gunzip -c | tar xf -}
-
-   or:
-
-  SEND /COMMAND:{tar cf - . | gzip -c} /as:{!gunzip -c | tar xf -}
-
-   Pay close attention to the syntax. Braces are needed around the
-   command because it contains spaces; braces are needed around the
-   as-name because it ends with "-". The as-name must begin with "!" or
-   receiving Kermit will not recognize it as a command. The CSEND command
-   must NOT begin with "!" unless you are running a command whose name
-   really does start that character.
-
-   Similarly, you have a Kermit server send a directory tree to be
-   unpacked on the client end:
-
-  CGET {!tar cf - . | gzip -c} {gunzip -c | tar xf -}
-
-   or:
-
-  GET /COMMAND {!tar cf - . | gzip -c} /as:{gunzip -c | tar xf -}
-
-   Notice how, in this case, the bang is required in the remote command,
-   to distinguish it from a filename, but not in the local command, since
-   by definition of CGET (or GET /COMMAND), it is known to be a command.
-
-   SEND and RECEIVE FILTERs supersede the bang feature. For example, if a
-   file arrives under the name "!gunzip -c | tar xf -", but the receiving
-   Kermit also has been given a command like:
-
-  set receive filter sort -r > \v(filename)
-
-   then the incoming data will be sorted rather than gunzipped.
-
-   Finally, if SET TRANSFER PIPES is ON (and in this case, this must be
-   done in your C-Kermit initialization file), you can send from a pipe
-   on the C-Kermit command line:
-
-  kermit -s "!finger | sort -r" -a userlist
-
-   In this case the "filename" contains spaces and so must be quoting
-   using your shell's quoting rules.
-     _________________________________________________________________
-
-    4.2.5. Success and Failure of Piped Commands
-
-   Commands or programs started by Kermit as a result of CSEND or
-   CRECEIVE commands, CGET, SEND /COMMAND, REDIRECT commands (see
-   [447]Section 4.2.8.2), implicit use of pipes, RUN commands, and so
-   forth, should return their exit status codes to the Kermit command
-   that caused them to be run, and therefore IF SUCCESS and IF FAILURE
-   tests after these commands should work as expected. For example:
-
-  CSEND blah < filename
-
-   should fail if there is no command called "blah" or if there is no
-   file called "filename". However, this is not foolproof and sometimes
-   C-Kermit might think a command succeeded when it failed, or vice
-   versa. This is most likely to happen when the highly system-dependent
-   methods that Kermit must use to determine a command's exit status code
-   do not supply the right information.
-
-   It can also happen because some commands might define success and
-   failure differently from what you expect, or because you are using a
-   pipeline composed of many commands, and one of them fails to pass
-   failing exit status codes up the chain. The most likely culprit is the
-   shell itself, which in most cases must be interposed between Kermit
-   and any external program to be run.
-
-   In any case, you can examine the following variable to find out the
-   exit status code returned to Kermit by the process most recently run
-   by any command that runs external commands or programs, including
-   CSEND, CRECEIVE, REDIRECT, RUN, etc:
-
-  \v(pexitstat)
-
-   In UNIX, Windows and OS/2, the value should be -2 if no command has
-   been run yet, 0 if the most recent command succeeded, -1, -3, or -4 if
-   there was an internal error, and a positive number returned by the
-   command itself if the command failed. If the number is in the range
-   1-127, this is the program's exit status code. If it is 128 or
-   greater, this is supposed to indicate that the command or program was
-   interrupted or terminated from outside itself.
-
-   In Windows 95 and 98, the return values of the default shell are
-   unreliable; various third-party shells can be used to work around this
-   deficiency.
-
-   In VMS, it is the actual exit status code of the command that was run.
-   This is an odd number if the command succeeded, and an even number if
-   it failed. You can see the associated message as follows:
-
-  run write sys$output f$message(\v(pexitstat))
-
-   Or, more conveniently, use the new Kermit function:
-
-  echo \ferrstring(\v(pexitstat))
-
-   which converts a system error code (number) to the corresponding
-   message.
-     _________________________________________________________________
-
-    4.2.6. Cautions about Using Pipes to Transfer Directory Trees
-
-   Although utilities such as tar and zip/unzip might be available on
-   different platforms (such as UNIX and Windows), this does not
-   necessarily mean you can use them successfully to transfer directory
-   trees between unlike platforms. For example:
-
-  CSEND {tar cf - . | gzip -c} {!gunzip -c | tar xf -}
-
-   when used from UNIX to Windows will have satisfactory results for
-   binary files, but not for text files. UNIX text files have lines
-   ending with Linefeed (LF) only, whereas Windows text files have lines
-   ending in Carriage Return and Linefeed (CRLF). Thus any text files
-   that were in the archive formed by the first tar command will be
-   unpacked by the second tar command in their original form, and will
-   display and print incorrectly in Windows (except in applications that
-   have been explicitly coded to handle UNIX-format text files). On the
-   other hand if you told gzip to use "text mode" to do record format
-   conversion (assuming there was a way to tell it, as there is with most
-   "zip" programs), this would destroy any binary files in the archive.
-
-   Furthermore, if the archive contains text files that are written in
-   languages other than English, the "special" (accented and/or
-   non-Roman) characters are NOT translated, and are therefore likely
-   show up as gibberish on the target system. For example, West European
-   languages are usually encoded in ISO Latin Alphabet 1 in UNIX, but in
-   PC code page 850 on the PC. Capital A with acute accent is code point
-   193 (decimal) Latin-1, but 181 in CP850. So A-acute in the UNIX file
-   becomes Middle Box Bottom on the PC, and similarly for all the other
-   special characters, and for all other languages -- Greek, Russian,
-   Hebrew, Japanese, etc.
-
-   So when transferring text files between unlike platforms, you should
-   use direct Kermit file transfers so Kermit can apply the needed
-   record-format and character-set transformations. Use pipelines
-   containing archivers like tar or zip only if all the files are binary
-   or the two systems use the same record format and character set for
-   text files.
-
-   Also see [448]Sections 4.3, [449]4.10, [450]4.11, and [451]4.15 for
-   how to transfer directory trees between both like and unlike systems
-   directly with Kermit.
-     _________________________________________________________________
-
-    4.2.7. Pipes and Encryption
-
-   Of course pipelines could be used for encrypted file transfers,
-   assuming proper precautions could be taken concerning the transmission
-   of the key. But there is rarely a good way to do this. To illustrate
-   using UNIX crypt:
-
-  csend {crypt key < filename} {!crypt key > filename}
-
-   Or, more ambitiously:
-
-  csend {tar cf - . | gzip -c | crypt key} {!crypt key | gunzip -c | tar xf -}
-
-   transmits the key in the file header packet as part of the
-   (clear-text) remote command, defeating the entire purpose of
-   encrypting the file data.
-
-   But if you are connected in terminal mode to the remote computer and
-   type:
-
-  creceive {crypt key > filename}
-
-   at the remote Kermit prompt, you have also transmitted the key in
-   clear text over the communications link.
-
-   At present, the only secure way to use CSEND and CRECEIVE with an
-   encryption filter is to have a human operator at both ends, so the key
-   does not have to be transmitted.
-
-   Theoretically it would be possible to use PGP software (Pretty Good
-   Privacy, by Phil Zimmerman, Phil's Pretty Good Software) to avoid key
-   transmission (since PGP uses separate public and private key and "lets
-   you communicate securely with people you've never met, with no secure
-   channels needed for prior exchange of keys"), but the specific method
-   has yet to be worked out.
-
-     HINT: See the PGP User's Guide, e.g. at:
-     [452]http://www.telstra.com.au/docs/PGP/
-     Especially the topic "Using PGP as a UNIX-Style Filter":
-     [453]http://www.telstra.com.au/docs/PGP/pgpdoc2/pgpdoc2_17.html
-
-   In any case, better and more convenient security options are now
-   available: Kerberos authentication and encryption ([454]CLICK HERE for
-   details) and the new ability to run C-Kermit "though" other
-   communication programs, described in [455]Section 2.7.
-     _________________________________________________________________
-
-    4.2.8. Commands and Functions Related to Pipes
-
-    4.2.8.1. The OPEN !READ and OPEN !WRITE Commands
-
-   These are described in [456]Using C-Kermit, and are generally useful
-   with reading output from commands that produce more than one line on
-   their standard output, or writing multiple lines into commands that
-   accept them on their standard input.
-
-   In C-Kermit 7.0 CLOSE !READ is accepted as a synonym for CLOSE READ,
-   and CLOSE !WRITE for CLOSE WRITE.
-
-   Testing the success and failure of these commands, however, can be a
-   bit tricky. Consider:
-
-  open !read lalaskjfsldkfjsldkfj
-
-   (where "lalaskjfsldkfjsldkfj" is neither a valid command nor the name
-   of a program or script that can be run). OPEN !READ, in UNIX at least,
-   translates this into execl(shellpath,shellname,"-c",command). This
-   means it starts your preferred shell (e.g. from the SHELL environment
-   variable) and asks it to execute the given command. It must be this
-   way, because your command can be a either an internal shell command
-   (which only your shell can execute) or an external command, which only
-   your shell knows how to find (it knows your PATH and interprets, etc).
-   Therefore unless OPEN !READ can't start your shell, it always
-   succeeds.
-
-   Continuing with the nonexistent-command example:
-
-  C-Kermit> open !read lalaskjfsldkfjsldkfj
-  C-Kermit> status
-   SUCCESS
-  C-Kermit> read line
-  C-Kermit> status
-   SUCCESS
-  C-Kermit> echo "\m(line)"
-  "bash: lalaskjfsldkfjsldkfj: command not found"
-  C-Kermit> close read
-  C-Kermit> status
-   FAILURE
-  C-Kermit>
-
-   In other words, the failure can not be detected on OPEN, since the
-   OPEN command succeeds if it can start your shell. It can't be detected
-   on READ, since all this does is read output from the shell, which in
-   this case happens to be an error message. However, failure IS detected
-   upon close, since this is the occasion upon which the shell gives
-   Kermit its exit status code.
-
-   For an illustration of this situation, see [457]Section 2.14.
-     _________________________________________________________________
-
-    4.2.8.2. The REDIRECT Command
-
-   A second method of I/O redirection is offered by the REDIRECT command.
-   This is a rather advanced and tricky feature that is presently
-   supported only in UNIX C-Kermit, in OS-9 C-Kermit, and in Kermit 95.
-   Syntax:
-
-   REDIRECT command
-          Runs the given command, sending its standard output to the
-          current communications channel (SET LINE, SET PORT, or SET HOST
-          connection), and reading its standard input from the same
-          connection. Works only in local mode -- i.e. a connection is
-          required -- and then only if the given command uses Standard
-          I/O.
-
-   Example:
-
-  redirect finger
-
-   runs the local "finger" command and sends its output over the
-   connection as plain text, where presumably there is a process set up
-   to read it. Another example:
-
-  redirect finger | sort -r
-
-   shows the use of a pipeline.
-
-   Note: REDIRECT differs from CSEND/CRECEIVE in two important ways: (1)
-   it does not use the Kermit protocol, and (2) it uses a bidirectional
-   pipe rather than a one-way pipe.
-
-   The primary use of the REDIRECT command is to run external protocols,
-   such as sz/rz in UNIX for ZMODEM, when they work over Standard I/O(*).
-   Example:
-
-  set host xyzcorp.com
-  (login, etc)
-  redirect sz oofa.zip
-
-   lets you make a Telnet connection with C-Kermit and then do a ZMODEM
-   transfer over it. ZMODEM protocol messages go both ways over the same
-   connection simultaneously.
-
-   It is possible to use C-Kermit on UNIX as your PPP dialer and then to
-   REDIRECT the connection to the PPP software, but C-Kermit 7.0 offers a
-   better approach to PPP dialing in its new EXEC command ([458]Section
-   1.23).
-
-   In theory, you can also redirect an interactive process. For example,
-   suppose you tell Kermit 95 to wait for an incoming TCP/IP connection:
-
-  set host * 3000
-
-   and then tell C-Kermit on UNIX to:
-
-  set host kermit95hostname 3000
-  redirect ksh
-
-   and then tell Kermit 95 to CONNECT: now you are talking to the UNIX
-   K-shell; you can give commands (pwd, ls, etc) and see the results. In
-   practice, the K-shell's terminal modes are messed up because (a) it is
-   not going through the Unix terminal driver, and (b) it is "smart" and
-   knows it is being redirected, and so acts in a decidedly inhospitable
-   manner (other applications like EMACS, vi, etc, simply refuse to run
-   if their standard i/o has been redirected).
-
-     (*) The publicly-distributed sz/rz programs do not work as clients.
-     However, Omen Technology does offer an up-to-date redirectable
-     client XYZMODEM program called crzsz.
-     _________________________________________________________________
-
-    4.2.8.3. Receiving Mail and Print Jobs
-
-   As of 7.0, and in UNIX only, files that are sent to C-Kermit as mail
-   (when the other Kermit uses a MAIL or SEND /MAIL command) or to be
-   printed (via REMOTE PRINT or SEND /PRINT) are now piped directly to
-   the mail or print program, rather than written to temporary files and
-   then mailed or printed and then deleted. This has the advantages of
-   (a) not requiring a temporary file, and (b) allowing mail to have a
-   proper subject in place of the filename. Temporary files were bad not
-   only because they required (a) space, and (b) writeability of the
-   current directory, but also because using them could result in wiping
-   out an existing file. See [459]Section 4.7 for more about SEND /MAIL
-   and SEND /PRINT.
-     _________________________________________________________________
-
-    4.2.8.4. Pipe-Related Functions
-
-   The \fcommand(command) function runs the given shell or system command
-   and returns the command's standard output as its value (with any
-   newline characters stripped from the end), unless the result is too
-   long, in which case it returns the empty string. The maximum length
-   for the result is at least 1022 bytes, and it might be longer on some
-   platforms. Examples (UNIX):
-
-  C-Kermit> echo "\fcommand(date)"
-  "Fri Apr 18 13:31:42 1997"
-  C-Kermit> echo "\fcommand(finger | wc -l)" ; how many users logged in?
-  "      83"
-  C-Kermit> evaluate \fcommand(finger | wc -l) * 2
-  166
-  C-Kermit> echo Welcome to \fcommand(tty) on \fcommand(date)
-  Welcome to /dev/ttyre on Fri Apr 18 13:31:42 1997
-  C-Kermit> echo "\fcommand(ls oofa.*)"
-  "oofa.c
-  oofa.h
-  oofa.o"
-  C-Kermit> cd /directory-with-thousands-of-files
-  C-Kermit> echo "\fcommand(ls -l)" ; This would be too long
-  ""
-  C-Kermit>
-
-   If a command's output would be too long, you can use the other, more
-   laborious method of reading from a command: OPEN !READ command, READ
-   each line, CLOSE !READ.
-
-   The \frawcommand(command) function is identical to \fcommand(command),
-   except it does not remove trailing newline characters:
-
-  C-Kermit> echo "\frawcommand(date)"
-  "Fri Apr 18 13:31:42 1997
-  "
-  C-Kermit> echo "\frawcommand(ls oofa.*)"
-  "oofa.c
-  oofa.h
-  oofa.o
-  "
-  C-Kermit>
-
-   Use \frawcommand() if you want to retain the final line terminators,
-   or if the command's output is "binary". But remember that if the
-   result of this (or any other) function contains any NUL (ASCII code 0)
-   characters, the first NUL will terminate the result string because
-   this is how C strings work (it's "C-Kermit", remember?).
-
-   These functions are useful not only locally, but also in the
-   client/server arena. If you need to get the results from a system
-   command on the server end into a variable on the client end, just do:
-
-  [ remote ] query kermit command(date)
-
-   The result is in the local \v(query) variable; see [460]Using
-   C-Kermit, 2nd Ed., pp.359-360 for details.
-     _________________________________________________________________
-
-  4.3. Automatic Per-File Text/Binary Mode Switching
-
-   When transferring files between like systems (e.g. UNIX-to-UNIX),
-   binary mode can be used for all files unless character-set translation
-   is needed, and in fact Kermit programs of recent vintage recognize
-   each others' platforms and switch to binary mode automatically when it
-   is appropriate (e.g. DOS to OS/2, or UNIX to UNIX). (Exception:
-   LABELED mode is chosen for VMS-to-VMS and OS/2-to-OS/2 transfers so
-   complex file formats can be preserved.)
-
-   On a client/server connection between like systems, the transfer mode
-   is currently determined by the file sender, rather than always by the
-   client. If the client is sending, it controls the transfer mode. If a
-   GET command is sent to the server, the server sends all files in
-   binary mode if its TRANSFER CHARACTER-SET is TRANSPARENT; otherwise it
-   uses text mode for text files (according to its text-pattern list) and
-   binary mode for binary files. Of course, the client can control the
-   server's transfer character-set with the REMOTE SET TRANSFER
-   CHARACTER-SET command.
-
-   When transferring files between unlike systems, however, (e.g.
-   UNIX-to-DOS), some files (such as executable program images) must be
-   transferred in binary mode but others (such as plain-text files) must
-   be transferred in text mode so their record format and character sets
-   can be appropriately converted. If a binary file is transferred in
-   text mode, it is ruined. If a text file is transferred in binary mode,
-   then at the very least, its format can be incorrect; at worst it is
-   also corrupted because its character set was not converted (in extreme
-   cases the corruption is total, e.g. because one system is ASCII-based
-   and the other EBCDIC).
-     _________________________________________________________________
-
-    4.3.1. Exceptions
-
-   VMS C-Kermit, when sending files to a non-VMS system, switches to text
-   or binary mode automatically for each file, based on the record format
-   in the file's directory entry; thus the mechanisms described in this
-   section do not apply to VMS C-Kermit, yet the effect is the same:
-   automatic text/binary mode switching when VMS C-Kermit is sending
-   files. See the VMS Appendix of [461]Using C-Kermit for details.
-
-   Kermit versions that support LABELED or IMAGE transfer mode are
-   likewise not affected by this feature when one of those modes is
-   selected (normally used only when transferring between like systems).
-
-   Kermit versions that support file-transfer pipes and filters are not
-   affected by this feature when pipes or filters are used, since the
-   output of a pipe or filter (such as gzip) is likely to require
-   transfer in a different mode than the original file.
-
-   Finally, SEND /TEXT or SEND /BINARY will force files to be sent in the
-   indicated mode, overriding all automatic transfer-mode-choosing
-   mechanisms.
-     _________________________________________________________________
-
-    4.3.2. Overview
-
-   Suppose you give C-Kermit a command like:
-
-  SEND *.*
-
-   And suppose the pattern *.* matches a mixture of text files (such as
-   program source code) and binary files (such os object modules or
-   executable programs).
-
-   C-Kermit 6.0 and earlier (except on VMS) send all files in the same
-   mode: whatever you said in your most recent SET FILE TYPE command, or
-   else whatever mode was chosen automatically according to the rules on
-   page 236 of Using C-Kermit, 2nd Ed.
-
-   But when text and binary files are mixed in the same group, and the
-   files are being transferred to an unlike system (e.g. UNIX to IBM
-   Mainframe), this results in corruption of either all the text files or
-   all the binary files.
-
-   Stream-oriented file systems such as in UNIX and DOS do not record any
-   information about the file to tell us whether the file should be
-   transferred in binary or text mode, making it impossible to select the
-   transfer mode for each file in a group automatically with any
-   certainty.
-
-   However, we can use some fairly-well established file naming
-   conventions for this purpose. C-Kermit 7.0 lets you provide lists of
-   filename patterns that are used to separately determine the file type
-   for each individual file being transfered. A pattern is a string,
-   possibly containing the special characters "*" (asterisk, which
-   matches any string of zero of more characters) and/or "?" (question
-   mark, which matches any single character). For example "a*b" matches
-   all files whose names start with "a" and end with "b", such as "ab",
-   "arb", "ababababab", etc, but not "abba". And "a?b" matches any file
-   whose name starts with "a", ends with "b", and is exactly 3 characters
-   long.
-
-     NOTE: When typing commands at the C-Kermit prompt, you must prefix
-     "?" with \ to override its normal function of giving help.
-
-   (Also see [462]Section 4.9 for additional pattern-matching notations
-   that might be available in your version of C-Kermit.)
-
-   When you have specified filename recognition patterns, C-Kermit can
-   transfer the ones whose names match any of the binary-mode patterns in
-   binary mode, and those with names that match any of the text-mode
-   patterns in text mode, and those whose names match neither in the
-   prevailing mode you have chosen, or that was chosen automatically via
-   peer recognition.
-     _________________________________________________________________
-
-    4.3.3. Commands
-
-   SET FILE PATTERNS { ON, OFF, AUTO }
-          This tells Kermit whether to do per-file filename
-          pattern-matching to determine text or binary mode. The normal
-          and default setting is AUTO, which means to use pattern lists
-          to switch transfer mode only when it is certain that the other
-          Kermit program supports automatic notification of transfer mode
-          (via Attribute packets) on a per-file basis (this information
-          is obtained automatically during protocol startup negotiation).
-          ON means to always determine the transfer mode from the
-          filename and pattern list when sending files. Use OFF to
-          disable this feature (without resetting your pattern lists).
-          Also note that if you have selected LABELED file transfer (SET
-          FILE TYPE LABELED), this takes precedence over
-          filename-matching patterns and all files are sent in labeled
-          mode.
-
-   SET TRANSFER MODE MANUAL
-          Disables the use of filename patterns, no matter what the FILE
-          PATTERNS setting.
-
-   REMOTE SET TRANSFER MODE MANUAL
-          Client command to disable automatic transfer mode, and
-          therefore also filename patterns, in the server. Synonym:
-          REMOTE SET XFER MODE MANUAL.
-
-   { GET, SEND, etc } { /BINARY, /TEXT }
-          Including a /BINARY or /TEXT (or, where supported, /IMAGE or
-          /LABELED) switch with a file-transfer command changes the
-          transfer mode to manual for that command only, and therefore
-          disables patterns that that command.
-
-   SET FILE BINARY-PATTERNS [ pattern [ pattern [ pattern ... ] ] ]
-          A list of zero or more patterns, separated by spaces (not
-          commas). Letters in a pattern are case-sensitive if the
-          underlying filenames are case sensitive (as in UNIX), and
-          case-insensitive otherwise (as in Windows). If a file's name is
-          matched by any pattern in the list and SET FILE PATTERNS is ON,
-          the file is sent in binary mode. Examples:
-
-  SET FILE BINARY-PATTERNS *.gz *.Z *.tar *.zip *.o *.so *.a *.out ; UNIX
-  SET FILE BINARY-PATTERNS *.EXE *.ZIP *.OBJ *.COM ; DOS or OS/2 or Windows
-
-          If a pattern contains spaces, enclose it in braces.
-
-   SET FILE TEXT-PATTERNS [ pattern [ pattern [ pattern ... ] ] ]
-          Like SET FILE BINARY-PATTERNS, but the patterns choose text
-          files rather than binary ones. Examples:
-
-  SET FILE TEXT-PATTERNS *.TXT *.KSC *.HTM* *.BAT ; DOS, Windows, OS/2
-
-   ADD BINARY-PATTERNS [ pattern [ pattern [ pattern ... ] ] ]
-          Adds one or more patterns to the BINARY-PATTERN list.
-
-   ADD TEXT-PATTERNS [ pattern [ pattern [ pattern ... ] ] ]
-          Adds one or more patterns to the TEXT-PATTERN list.
-
-   REMOVE BINARY-PATTERNS [ pattern [ pattern [ pattern ... ] ] ]
-          Removes one or more patterns from the BINARY-PATTERN list. The
-          given patterns are matched with the ones in the BINARY-PATTERNS
-          list with case sensitivity if the underlying file system has
-          case-sensitive names (as do UNIX and OS-9), otherwise with case
-          independence.
-
-   REMOVE TEXT-PATTERNS [ pattern [ pattern [ pattern ... ] ] ]
-          Removes one or more patterns from the TEXT-PATTERN list.
-
-   SHOW PATTERNS
-          Displays the current pattern selections.
-
-   Whenever you give a SET FILE BINARY-PATTERNS or SET FILE TEXT-PATTERNS
-   command, the previous list is replaced. If you give one of these
-   commands without a pattern list, the previous list is removed.
-
-   When patterns are active and files are being sent, text patterns (if
-   any) are applied first (but only if not RESENDing and not sending in
-   LABELED mode), then binary patterns, so if the same pattern appears in
-   both lists, binary mode is chosen.
-     _________________________________________________________________
-
-    4.3.4. Examples
-
-   Here's an example that might be used when sending files from UNIX:
-
-  set file type binary
-  set file text-patterns *.c *.h *.w *.txt makefile
-  set file binary-patterns *.o
-  msend makefile wermit wart ck*.[cwho] ck*.txt
-
-   Note that "wermit" and "wart" do not match any patterns so they are
-   sent in the prevailing mode, which is binary. Also note the use of
-   "makefile" as a pattern that does not contain any wildcard characters
-   (there is no other convention to distinguish among "wermit" and
-   "wart", which are binary executables, and "makefile", which is a text
-   file, purely by their names).
-
-   Most C-Kermit implementations have a default pattern list built in,
-   which includes patterns that are almost certain to succeed in picking
-   the right transfer mode. Others are omitted due to ambiguity. For
-   example ".hlp", and ".ini" are generally binary types in Windows but
-   text types everywhere else.
-
-     NOTE: ".doc", used for decades to denote plain-text documentation
-     files, now more often than not denotes a Microsoft Word Document,
-     so ".doc" is now considered a binary type since it does less harm
-     to transfer a plain-text document in binary mode than it does to
-     transfer an MS Word file in text mode (except when IBM mainframes
-     are involved!)
-
-     ANOTHER NOTE: ".com" files are binary in DOS-like operating
-     systems, but they are text (DCL command procedures) in VMS. VMS
-     C-Kermit sends .COM files in text mode; K95 sends them in binary
-     mode. If you download a .COM file from VMS to DOS or Windows, and
-     then upload it to another VMS system, be sure to use SEND /TEXT to
-     preserve its textness.
-
-   You can see the default pattern list by starting C-Kermit without its
-   initialization file (e.g. "kermit -Y") and using the SHOW PATTERNS
-   command. If you will be depending on this feature, be sure to examine
-   the list carefully in conjunction with the applications that you use.
-
-   The default pattern list does not take "backup files" into account
-   because (a) people usually don't want to transfer them; and (b) it
-   would make the pattern lists more than twice as long. For example, we
-   would need to include both *.txt and *.txt.~[0-9]*~ for ".txt" files,
-   and similarly for all the others. Instead, you can use SEND /NOBACKUP
-   (or SET SEND BACKUP OFF) to skip over all backup files.
-
-   Put your most commonly-used safe pattern declarations in your C-Kermit
-   customization file (ckermod.ini, .mykermrc, k95custom.ini, etc).
-
-   As noted, SET FILE PATTERNS is ON by default. Sometimes, however, it
-   is desirable, or necessary, to force files to be sent in a particular
-   mode, and often this must be done from the command line (e.g. when
-   using Kermit as a download helper in a Web browser like Lynx). The -V
-   command-line options is equivalent to SET FILE PATTERNS OFF and SET
-   TRANSFER MODE MANUAL. Example:
-
-  kermit -Vis oofa.txt
-
-   forces oofa.txt to be sent in binary mode, even though ".txt" might
-   match a text pattern.
-     _________________________________________________________________
-
-  4.4. File Permissions
-
-   "Permissions" refers to a code associated with a file that specifies
-   who is allowed to access it, and in what manner. For example, the
-   owner, the members of one or more groups, the system administrator,
-   and everybody else, might be allowed various combinations of Read,
-   Write, Append, Execute, or Listing access.
-
-   The permission code goes by different names on different platforms. In
-   UNIX, it might be called the filemode. In VMS, it is called the file
-   protection (or protection mask).
-
-   The comments in this section presently apply only to the UNIX and VMS
-   versions of C-Kermit, to which these features were added in version
-   7.0; the DOS, Windows, and OS/2 file systems embody no notions of
-   protection, and so MS-DOS Kermit and Kermit 95 do not send file
-   permissions, and ignore them when received.
-
-   The permissions for a received file are determined by a combination of
-   the file transfer mode (VMS-to-VMS transfers only), whether a file of
-   the same name exists already, whether permissions of the file are
-   received in the file attribute packet, and the setting of ATTRIBUTES
-   PROTECTION.
-
-   The default for ATTRIBUTES PROTECTION is ON. If no attributes are
-   received, the effect is the same as if attributes PROTECTION were OFF.
-
-   For VMS-to-VMS transfers, the default LABELED mode simply copies the
-   protection code from source to destination.
-     _________________________________________________________________
-
-    4.4.1. When ATTRIBUTES PROTECTION is OFF
-
-   If no file of the same name exists, system defaults determine the
-   permissions of the new file. Otherwise, the actions taken depend on
-   the current FILE COLLISION setting: BACKUP, OVERWRITE, RENAME, etc, as
-   documented in [463]Using C-Kermit. But now the new file (if it is
-   created at all) automatically inherits the permissions (mode bits) of
-   the existing file in a way that is appropriate for the platform.
-
-    4.4.1.1. Unix
-
-   All mode bits are inherited except the directory bit, since the
-   incoming file can not possibly be a directory. (In any case, it is not
-   possible to receive a file that has the same name as an existing
-   directory unless FILE COLLISION is set to RENAME).
-
-    4.4.1.2. VMS
-
-   Files with the same name as an existing file, transferred in modes
-   other than LABELED between VMS systems, inherit the protection of the
-   prior version.
-     _________________________________________________________________
-
-    4.4.2 When ATTRIBUTES PROTECTION is ON
-
-   File permissions can be conveyed as part of the file transfer process,
-   in accordance with the Kermit protocol definition. If the file sender
-   puts system-dependent and/or system-independent versions of the file
-   protection (permissions) into the Attribute (A) packet, the file
-   receiver can set the new file's permissions from them. Otherwise, the
-   permissions are set the same as for ATTRIBUTES PROTECTION OFF.
-
-   When the incoming A packet contains system-dependent permissions, the
-   file receiver checks to see if the sender has the same system ID (e.g.
-   both the sending and receiving systems are UNIX, or both are VMS); if
-   so, it decodes and uses the system-dependent permissions; otherwise it
-   uses the generic ones (if any) and applies them to the owner field,
-   setting the other fields appropriately as described in the following
-   sections.
-
-   Setting the incoming file's protection from the A packet is controlled
-   by SET ATTRIBUTES PROTECTION (or PERMISSION), which is ON by default,
-   and its status is displayed by SHOW ATTRIBUTES.
-
-   The main benefit of this feature is to not have to "chmod +x" an
-   executable file after transfer from UNIX to UNIX. Its cross-platform
-   benefits are less evident, perhaps to retain the status of the Unix
-   'x' bit on a VMS system, for subsequent transfer back to a Unix
-   system.
-     _________________________________________________________________
-
-    4.4.2.1. System-Specific Permissions
-
-   System-specific file permissions are used when the two Kermit programs
-   recognize each other as running on the same type of system. For
-   example, both are running under some form of UNIX (it doesn't matter
-   which UNIX variation -- HP-UX, Solaris, AIX, etc -- all use the same
-   scheme for file permissions); or both are running under VMS (even if
-   one is on an Alpha and the other on a VAX, and/or one is old and the
-   other is new).
-
-    4.4.2.1.1. UNIX
-
-   UNIX supports three categories of users, File Owner, Group, and World,
-   and three types of file access permission: Read, Write, and Execute.
-   Thus, a UNIX file's permissions are expressed in 9 bits.
-
-   The system-dependent permission string for UNIX is a 3-digit octal
-   string, the low-order 9 bits of the st_mode member of the stat struct;
-   we deliberately chop off the "file format" bits because they are not
-   permissions, nor do we convey the setuid/setgid bits, lock bit, sticky
-   bit, etc.
-
-    4.4.2.1.2. VMS
-
-   VMS supports four categories of users, System, File Owner, Group, and
-   World, and four types of file access permission: Read, Write, Execute,
-   and Delete. Thus, a VMS file's permissions are expressed in 16 bits.
-
-   The system-dependent protection string for VMS is a 4-digit
-   hexadecimal string, corresponding to the internal-format protection
-   word of the file (RWED for each of World,Group,Owner,System). A new
-   file normally gets all 16 protection bits from the original file of
-   the same name.
-
-   Note: VMS-to-VMS transfers take place in LABELED mode when the two
-   C-Kermits recognize each other's platform as VMS (unless you have
-   disabled LABELED-mode transfers). In this case, all of a file's
-   attributes are preserved in the transfer and the protection mask (and
-   other information) is taken from the file's internal information, and
-   this takes precedence over any information in the Attribute packets.
-   You can defeat the automatic switching into LABELED mode (if you want
-   to) with SET TRANSFER MODE MANUAL.
-     _________________________________________________________________
-
-    4.4.2.2. System-Independent Permissions
-
-   The system-independent ("generic") protection is used when the system
-   IDs of the two Kermit programs do not agree (e.g. one is UNIX, the
-   other is VMS). The generic protection attribute includes the following
-   permissions (not all are applicable to every file system): Read,
-   Write, Append, Execute, Delete, Search. The generic permissions are
-   derived from the owner permissions of the source file, thus, a Unix
-   'w' permission becomes VMS Write,Delete.
-
-   The Owner field of the new file's permissions is set from the incoming
-   generic protection attribute.
-
-   In UNIX, the Group and World permissions are set according to your
-   umask, except that execute permission is NOT set in these fields if it
-   was not also set in the generic protection (and consequently, is set
-   in the Owner field).
-
-   In VMS, the System, Group, and World permissions are set according to
-   the process default file permission (as shown in VMS by SHOW
-   PROTECTION), except that no permissions are allowed in these fields
-   that are not included in the generic permissions.
-
-   Note that the VMS and UNIX interpretations of Execute permission are
-   not identical. In UNIX, a file (binary executable, shell script, etc)
-   may not be executed unless it has Execute permission, and normally
-   files that are not intended for execution do not have Execute
-   permission. In VMS, Read permission implicitly supplies Execute
-   capability. Generally files that have Read permission also have
-   explicit Execute permission, but files (binary executables, DCL
-   command procedures) that have Read permission and not Execute
-   permission can still be executed.
-     _________________________________________________________________
-
-  4.5. File Management Commands
-
-    4.5.1. The DIRECTORY Command
-
-   Prior to C-Kermit 7.0, the DIRECTORY command always ran an external
-   system command (such as "ls" on UNIX) or program to product the
-   directory listing. This had certain advantages, mostly that you could
-   include system-dependent options for customized listings, e.g. on
-   UNIX:
-
-  dir -lt c* | more
-
-   or in VMS:
-
-  directory /size/date/protection/except=*.obj oofa.*;0
-
-   This approach, however, carries some disadvantages: C-Kermit can't
-   return SUCCESS or FAILURE status for (e.g.) "dir foo" according to
-   whether the file "foo" exists; and it runs an inferior process, which
-   might be a problem in some environments for resource and/or security
-   reasons, and won't work at all in a "nopush" environment (e.g. one in
-   which C-Kermit is configured to forbid access to exterior commands and
-   programs, e.g. in a VMS "captive account").
-
-   In C-Kermit 7.0 on VMS and UNIX, and in K95 1.1.19 and later, the
-   DIRECTORY command is internal to Kermit. It can be run in a "nopush"
-   environment and returns SUCCESS or FAILURE status appropriately. In
-   UNIX it prints all dates and times in a consistent way (unlike ls). In
-   VMS it prints precise file sizes, rather than "blocks". It offers
-   several formatting and other options, but it is not necessarily more
-   flexible than the corresponding external commands or programs (the
-   UNIX "ls" program, the VMS "directory" command). The syntax is:
-
-   DIRECTORY [ switch [ switch [ ... ] ] ] [ filespec ]
-
-   If no filespec is given, all files in the current directory are
-   listed.
-
-   Optional switches include all the standard file-selection switches
-   presented in [464]Section 1.5.4, plus:
-
-   /ALL
-          Show both regular files and directories; this is the default.
-
-   /ARRAY:x
-          Instead of displaying a directory listing, put the files that
-          would have been shown (based on the filespec and other
-          selection switches) in the given array. The array need not (and
-          should not) be predeclared; if the array already exists, it is
-          destroyed and reused. The array name can be a single letter,
-          like "a", or any fuller form, such as "&a", "\&a", "\&a[]",
-          etc. If the /ARRAY switch is included, the following other
-          switches are ignored: /BRIEF, /VERBOSE, /HEADING, /PAGE,
-          /ENGLISHDATE, /ISODATE, /XFERMODE, /MESSAGE, /SORT, /REVERSE,
-          /ASCENDING. In other words, only file selection switches are
-          meaningful with /ARRAY: /FILES, /DIRECTORIES, /ALL, /DOTFILES,
-          /NOBACKUP, /RECURSIVE, /SMALLER, /LARGER, /AFTER, /BEFORE,
-          /EXCEPT, etc. The resulting array has the number of files (n)
-          as its 0th element, and the filenames in elements 1 through n
-          Example:
-
-  dir /array:&a /files /nobackup /after:19990101 /larger:10000 [ab]*
-  show array &a
-
-   /FILES
-          Only show regular files.
-
-   /DIRECTORIES
-          Only show directories.
-
-   /BACKUP
-          In UNIX, OS-9, K-95, and other versions that support SET FILE
-          COLLISION BACKUP and create backup files by appending .~n~ to
-          the filename (where "n" is a number), /BACKUP means to include
-          these files in directory listings. This is the default.
-
-   /NOBACKUP
-          This is the opposite of /BACKUP: that is, do not include backup
-          files in the listing.
-
-   /BRIEF
-          List filenames only; use a compact format, as many filenames as
-          will fit across the screen (based on the longest name). A brief
-          listing is always sorted alphabetically.
-
-   /VERBOSE
-          List one file per line, and include date, size, and (in UNIX
-          only) permissions of each file. This is the opposite of /BRIEF,
-          and is the default.
-
-   /PAGE
-          Pause at the end of each screenful and give a "more?" prompt,
-          even if SET COMMAND MORE-PROMPTING is OFF.
-
-   /NOPAGE
-          Don't pause at the end of each screenful and give a "more?"
-          prompt, even if SET COMMAND MORE-PROMPTING is ON. If neither
-          /PAGE or /NOPAGE is given, paging is according to the
-          prevailing COMMAND MORE-PROMPTING setting (which can be
-          displayed with SHOW COMMAND).
-
-   /ENGLISHDATE
-          Show dates in dd-mmm-yyyy format; mmm is the first three
-          letters of the English month name.
-
-   /ISODATE
-          Show dates in yyyy-mm-dd format; mm is the month number, 1-12.
-          This is the opposite of /ENGLISHDATE, and is the default.
-
-   /HEADINGS
-          Print a heading before the listing and a summary at the end.
-
-   /NOHEADINGS
-          Don't print a heading before the listing or a summary at the
-          end. This is the opposite of /HEADINGS, and is the default.
-
-   /XFERMODE
-          Only in Kermit programs that support SET FILE PATTERNS. If this
-          switch is included, and the filename matches any FILE
-          BINARY-PATTERN ([465]Section 4.3), "(B)" is printed after the
-          filename; otherwise, if it matches a FILE TEXT-PATTERN, "(T)"
-          is printed.
-
-   /NOXFERMODE
-          Don't display transfer-mode indicators. This is the opposite of
-          /XFERMODE and is the default.
-
-   /RECURSIVE
-          Show files not only in the given directory, but also in its
-          subdirectories (if any), their subdirectories, etc.
-
-   /NORECURSIVE
-          Don't show files in subdirectories. This is the opposite of
-          /RECURSIVE, and is the default.
-
-   /MESSAGE:text
-          This lets you specify a short text string to be appended to the
-          end of each directory listing line (a space is supplied
-          automatically). If the text contains any spaces, enclose it in
-          braces, e.g. /MESSAGE:{two words}.
-
-   /NOMESSAGE
-          Don't append any message to the end of each directory listing
-          line (default).
-
-   /SORT:[{NAME,SIZE,DATE}]
-          Sort the listing by name, size, or date. If the /SORT switch is
-          given but the "sort-by" keyword is omitted, the listing is
-          sorted by name. /SORT:NAME /ASCENDING (alphabetic sort by name)
-          is the default.
-
-   /NOSORT
-          Don't sort the listing. Files are listed in whatever order they
-          are supplied by the operating system, e.g. inode order in UNIX.
-
-   /REVERSE
-          If the /SORT switch is given, reverse the order of the sort.
-          Synonym: /DESCENDING.
-
-   /ASCENDING
-          If the /SORT switch is given, sort the listing in normal order.
-          This is the opposite of /REVERSE and is the default.
-
-   Note that most of the DIRECTORY-specific switches come in pairs, in
-   which one member of a pair (e.g. /NOHEADINGS) is the opposite of the
-   other (e.g. /HEADINGS).
-
-   If you always want to use certain options, you can set them with the
-   SET OPTIONS DIRECTORY command ([466]Section 1.5.5). Use SHOW OPTIONS
-   to list the options currently in effect. To make the desired options
-   apply every time you run C-Kermit, put a SET OPTIONS DIRECTORY command
-   in your C-Kermit customization file, specifying the desired options.
-   Options set in this manner apply to every subsequent DIRECTORY
-   command. Of course, if you include switches in a DIRECTORY command,
-   these override any defaults, built-in or custom. Example:
-
-  DIRECTORY            ; Use "factory defaults"
-  SET OPTIONS DIRECTORY /SORT:SIZE /REVERSE /HEADINGS  ; Customize defaults
-  DIRECTORY            ; Use customized defaults
-  DIR /SORT:NAME       ; Override customized default SORT key
-  SET OPT DIR /RECURS  ; Add /RECURSIVE to customized defaults
-  DIR /ASCEND          ; Override customized default SORT order
-
-   Notes:
-
-     * Only a single sort key is supported; there is presently no way to
-       have multiple sort keys.
-     * If the /BRIEF switch is given, all other switches (except
-       /[NO]RECURSIVE, /[NO]DOTFILES, /DIRECTORIES, /FILES, and /ALL) are
-       ignored.
-     * /SORT:anything gives incorrect results if any files have lengths
-       greater than 10 digits (i.e. that are more than 9999999999 bytes
-       long, i.e. if they are 10GB or more in size) because the overlong
-       length field causes the date and name fields to be misaligned.
-     * /SORT:NAME is redundant in VMS since VMS returns filenames in
-       alphabetic order anyway.
-     * /SORT:NAME ignores alphabetic case on platforms where case does
-       not matter in filenames, but this works only for unaccented Roman
-       letters A-Z.
-     * /SORT:NAME is currently based on code values, and so works fine
-       for ASCII, but will probably produce unexpected results for files
-       with non-ASCII or 8-bit characters in their names. (Locale-based
-       sorting raises rather significant issues of portability, size,
-       performance, etc.)
-     * /SORT:DATE works right only for ISO-format dates, not English
-       ones.
-     * /SORT:SIZE sorts the size field lexically. On some platforms (e.g.
-       Windows), the size of a directory file is listed as "<DIR>" rather
-       than as a number; in this case, the "<DIR>" files are gathered at
-       the end (or beginning, depending on the sort order) of the
-       listing.
-     * /RECURSIVE is accepted but ignored in AOS/VS. Use the normal
-       system-specific filespec notation, e.g. "dir #.txt".
-     * /RECURSIVE has no affect when a full, absolute pathname is given;
-       e.g. "dir /recursive /tmp/foo" (where "foo" is a regular file)
-       only shows the "/tmp/foo" file. If you want to see all "foo" files
-       in the /tmp tree, do "cd /tmp" and then "dir /recursive foo".
-     * If a file size of -1 is shown, or date-time of 0000-00-00
-       00:00:00, this means the file was located, but access to
-       information about the file was denied to C-Kermit.
-     * In VMS, if FOO.DIR;1 is a directory within your current directory,
-       "directory foo" and "directory [.foo]" list the files in the
-       [.FOO] subdirectory, but "directory foo.dir" lists the directory
-       file itself; similarly for "*.dir" versus "[.*]", etc.
-     * In UNIX, if "foo" is a directory within your current directory,
-       "directory foo" lists the files in the foo directory. If you want
-       to list the foo directory file itself, put an asterisk at the end:
-       "dir foo*".
-
-   Hint: How to find the biggest files in a directory tree:
-
-  cd xxx ; (root of tree)
-  directory /sort:size /recursive /reverse /dotfiles /page
-
-   Another hint: If you often use several different directory-listing
-   formats, define macro shortcuts for them:
-
-  DEFINE WD DIRECTORY /SORT:DATE /REVERSE \%*  ; Reverse chronological order
-  DEFINE SD DIRECTORY /SORT:SIZE /REVERSE \%*  ; Reverse order of size
-  DEFINE ND DIRECTORY /SORT:NAME /ASCEND \%*   ; Alphabetical by name
-  DEFINE DL DIR /DIR /SORT:NAME /ASCEND \%*    ; Alphabetical directory list
-
-   Put these definitions in your C-Kermit customization file. Note that
-   "\%*" ([467]Section 7.5) in these definitions lets you include other
-   switches in your macro invocations, e.g.:
-
-  wd /headings *.txt
-
-   Of course you can still access your external directory listing program
-   by using RUN or "!", e.g. in VMS:
-
-  run directory /size/date/protection/except=*.obj oofa.*;0
-
-   or:
-
-  !dir /size/date/prot/exc=*.obj oofa.*;0
-
-   In UNIX, use "!ls" or just "ls" (which is a special synonym for
-   "!ls").
-     _________________________________________________________________
-
-    4.5.2. The CD and BACK Commands
-
-   In C-Kermit 7.0, the CD command has a new friend, the BACK command.
-   BACK means "CD to my previous current directory". A second BACK brings
-   you back to where you were before the first one; thus successive BACK
-   commands switch back and forth between two directories.
-
-    4.5.2.1. Parsing Improvements
-
-   The CD command, as well as other commands that parse a directory name,
-   were changed in 7.0 to provide all the expected functions: completion
-   on Tab or Esc, directory-name lists on ?, etc. Other affected commands
-   include SET SERVER GET-PATH, SET TEMP-DIRECTORY, SET FILE
-   DOWNLOAD-DIRECTORY, and SPACE. CD and REMOTE CD also now work with
-   logical names.
-
-   In VMS, the situation is a bit complicated since a directory name can
-   look like "DEV:", "[FOO.BAR]", "DEV:[FOO.BAR]", "[FOO]BAR.DIR;1", etc.
-   Completion and ?-help might not always work, but they do in many
-   cases. Examples:
-
-  cd ?           Lists all subdirectories of the current directory
-  cd []?         Ditto
-  cd k?          Ditto, but only those starting with K
-  cd [foo]?      Lists all subdirectories of the [FOO] directory
-  cd [-]?        Lists all subdirectories of the superior directory
-  cd [--]?       Lists all subdirectories of the directory 2 levels up
-  cd [...]?      Lists all directories below the current one
-  cd [foo.?      Does not work.
-
-   C-Kermit allows all of the following in VMS:
-
-  cd bar         CD to subdirectory BAR of the current directory
-  cd .bar        Ditto
-  cd [.bar]      Ditto
-  cd bar.dir     etc...
-  cd bar.dir;
-  cd bar.dir;1
-  cd [foo.bar]
-  cd bar.baz     This can go more than 1 level deep...
-  cd dir:        (where logical name DIR is defined as [FOO.BAR])
-
-   As well as the following:
-
-  cd ..          Go up one level as in UNIX
-  cd .           The current directory
-  cd             My login directory
-
-   Note that "cd -" (go up one level) does not work as expected, because
-   "-" is Kermit's command continuation character. However, "cd [-]", and
-   "
-   cd {-}" have the desired effect (and so does "cd ..", which is easier
-   to type).
-     _________________________________________________________________
-
-    4.5.2.2. The CDPATH
-
-   The CD command in the UNIX, Windows, OS/2, and VMS versions of
-   C-Kermit, as of version 6.1 / 1.1.12, searches the CDPATH for the
-   given directory, if it is not absolute and if a CDPATH environment
-   variable is defined. Example (in UNIX ksh or bash):
-
-  $ export CDPATH=$HOME:$HOME/kermit:/tmp
-
-   Now if you give a "cd xxx" command, no matter what your current
-   directory is, if the "xxx" directory is not a subdirectory of your
-   current directory, then the xxx subdirectory of your home directory is
-   used or if that does not exist, then the xxx subdirectory of the
-   kermit subdirectory of your home directory is used or if that does not
-   exist, then /tmp/xxx is used. This is how the ksh "cd" command works,
-   and now the C-Kermit CD command works the same way.
-
-   In VMS, you can define CDPATH to be a list of directories that contain
-   actual directory delimiters, and/or logical names representing
-   directories, using commas to separate them, e.g.:
-
-  $ define cdpath [HOME],[SOMEOTHERDIR],[HOME.MISC]
-  $ define cdpath SYS$LOGIN:,DISK1:[HOME],DISK2:[SCRATCH.IVAN]
-
-   Example:
-
-  $ define cdpath SYS$LOGIN:,[IVAN],[OLAF],[OLGA.MISC]
-  $ kermit
-  DISK1:[OLGA] C-Kermit> cd blah
-
-   tries the BLAH subdirectory of the user's login directory, then
-   [OLGA.BLAH], [IVAN.BLAH], [OLAF.BLAH], and [OLGA.MISC.BLAH], in that
-   order, using the first one it finds, failing if it finds none.
-
-   In C-Kermit 7.0, you may also set the CDPATH from the Kermit prompt:
-
-   SET CD PATH path
-          Allows the CD PATH to be set from within C-Kermit.
-
-   SHOW CD shows the CD path and all other information relevant to the CD
-   command.
-     _________________________________________________________________
-
-    4.5.2.3. CD Messages
-
-   Whenever you change directory, you can have C-Kermit display a "Read
-   Me" file from the new directory automatically. The commands are:
-
-   SET CD MESSAGE { ON, OFF, FILE list }
-          ON enables this feature; OFF (the default) disables it. File
-          lets you specify the name of the "Read Me" file. A list of
-          names to look for can be given in the following format:
-
-  {{name1}{name2}{name3}{...}}
-
-          e.g.:
-
-  SET SERVER CD-MESSAGE FILE {{./.readme}{README.TXT}{READ.ME}}
-
-          The default list of CD-message files is system dependent.
-
-   SHOW CD shows your current directory, previous directory, CD path, and
-   CD message info.
-     _________________________________________________________________
-
-    4.5.3. Creating and Removing Directories
-
-   The MKDIR command now allows you to create multiple directories at
-   once:
-
-  C-Kermit> mkdir a/b/c/d
-
-   creates the directory a in the current directory (if it doesn't exist
-   already), and then creates subdirectory b in the a directory (if it
-   didn't exist already), and so on.
-
-   If you use MKDIR to try to create a directory that already exists,
-   C-Kermit will print a warning ("?Directory already exists"), but the
-   MKDIR command will still succeed. If you want to avoid the warning
-   message, use IF DIRECTORY first to check if the directory already
-   exists.
-
-   The RMDIR command, however, will not remove more than one directory,
-   nor will it remove a directory that contains any files. (There is, as
-   yet, no RMDIR /RECURSIVE command, although one might be added later.)
-
-   In VMS, these commands (like CD) are more forgiving of your syntax
-   than is the DCL command shell; "mkdir oofa" is equivalent to "mkdir
-   [.oofa]" and so on. Also in VMS, you'll find that C-Kermit's RMDIR
-   command is easier than deleting a directory in DCL, since it
-   automatically first gives it owner delete permission if you are the
-   owner.
-     _________________________________________________________________
-
-    4.5.4. The DELETE and PURGE Commands
-
-   The DELETE command now offers a selection of switches, and has a new
-   companion, the PURGE command. First, DELETE:
-
-   DELETE [ switches... ] filespec
-          Deletes the file or files that match the filespec, which may
-          contain wildcards ([468]Section 4.9).
-
-   Optional switches include the standard file-selection switches
-   presented in [469]Section 1.5.4, plus:
-
-   /ASK
-          Before deleting each file, ask permission interactively.
-          Answers are Yes or OK (delete the file), No (don't delete it),
-          or Quit (stop executing the DELETE command).
-
-   /NOASK
-          Don't ask permission to delete each file.
-
-   /LIST
-          List each file and show whether it was deleted. Synonyms: /LOG,
-          /VERBOSE.
-
-   /NOLIST
-          Don't list files while deleting them. Synonyms: /NOLOG, /QUIET.
-
-   /HEADING
-          Print a heading and summary line.
-
-   /NOHEADING
-          Don't print a heading and summary line.
-
-   /PAGE
-          When listing, pause at the end of each screenful and give the
-          "More?" prompt. If you reply "n" (no), the DELETE command
-          terminates.
-
-   /SIMULATE
-          Do everything implied by the given switches and filespec,
-          except do not actually delete any files. This lets you preview
-          which files would be deleted; implies /LIST.
-
-   Now the PURGE command:
-
-   PURGE [ switches... ] [ filespec ]
-          (VMS only) Runs the DCL PURGE command. Switches and filespec,
-          if any, are passed directly to DCL without parsing or
-          verification. Deletes excess versions of the given (or all)
-          files. The rest of this section does not apply to VMS.
-
-   PURGE [ switches... ] [ filespec ]
-          (UNIX only) Deletes "backup files" that match the filespec,
-          which may contain wildcards ([470]Section 4.9). If no filespec
-          is given, all backup files in the current directory are
-          selected (subject to modification by any switches). Do not
-          include backup notation in the filespec.
-
-   Explanation:
-
-   To avoid destroying preexisting files when a new file arrives that has
-   the same name, C-Kermit backs up the old file by appending a "backup
-   number" to its name. In UNIX, the backup suffix consists of a period,
-   a tilde, a number, and another tilde. For example, if a file called
-   oofa.txt exists and a new oofa.txt file arrives, the original is
-   renamed to oofa.txt.~1~. If another oofa.txt file arrives, the
-   existing one is renamed to oofa.txt.~2~. And so on. This system is
-   compatible with the one used by EMACS. Thus over time, if you receive
-   a lot of files with C-Kermit or edit them with EMACS, backup files can
-   build up. The new PURGE command lets you clean out accumulated backup
-   files:
-
-   Optional switches include the standard file-selection switches
-   presented in [471]Section 1.5.4, plus all the switches listed above
-   for the DELETE command, plus:
-
-   /KEEP:n
-          Retains the n most recent (highest-numbered) backup files for
-          each file. For example, if oofa.txt, oofa.txt.~1~,
-          oofa.txt.~2~, oofa.txt.~10~, oofa.txt.~12~, and oofa.txt.~100~
-          exist, "purge /keep:2 oofa.txt" deletes oofa.txt.~1~,
-          oofa.txt.~2~, and oofa.txt.~10~, and keeps oofa.txt,
-          oofa.txt.~12~, and oofa.txt.~100~. If /KEEP is given without a
-          number, one (the highest numbered) backup file is kept.
-
-   CAUTION: The PURGE command should be used only when *.~*~ files truly
-   are backup files. This is the case for EMACS, and it is the DEFAULT
-   for C-Kermit. However, if C-Kermit's FILE COLLISION has been set to
-   RENAME, newly received files will look like backup files. In that
-   case, don't use the PURGE command or you'll be removing new files
-   rather than old ones. (Use SHOW FILE to find the FILE COLLISION
-   setting.)
-
-   The PURGE command is presently available only in UNIX. The command
-   succeeds if it deleted any files, or if it deleted no files but there
-   were no errors. It fails if it deleted no files and there were errors
-   (i.e. deletion was attempted but failed). In VMS, backup file versions
-   are handled automatically by the OS, and a PURGE command can be used
-   at the VMS prompt to clean them up.
-
-   If you want certain switches to be supplied automatically with each
-   DELETE or PURGE command, you can set them with SET OPTIONS
-   ([472]Section 1.5.5) and you can display any such settings with SHOW
-   OPTIONS. Of course you can override them on a per-command basis by
-   including switches in your PURGE or DELETE command.
-
-   Also see SET FILE COLLISION, SHOW FILE, SEND /NOBACKUP, SET SEND
-   BACKUP, and DIRECTORY /[NO]BACKUP.
-     _________________________________________________________________
-
-  4.6. Starting the Remote Kermit Server Automatically
-
-   As noted on pages 275-276 of [473]Using C-Kermit 2nd edition, you can
-   have Kermit send "kermit receive" commands automatically when it is in
-   local mode and you give a SEND or similar command, to start the remote
-   Kermit receiver in case it is not already started. The "kermit
-   receive" commands are specified by:
-
-  SET PROTOCOL KERMIT binary-receive-command text-receive-command
-
-   As of version 7.0, a Kermit protocol option has been added to send a
-   string to the host in advance of any Kermit packets when you give a
-   GET-class or REMOTE command. This will switch the remote C-Kermit into
-   the appropriate mode or, if the remote system is at a system command
-   (shell) prompt, execute the string on the remote system. The new
-   syntax of the SET PROTOCOL KERMIT command is:
-
-  SET PROTOCOL KERMIT [ s1 [ s2 [ s3 ] ] ]
-
-   where:
-
-       Default         Meaning
-  s1  {kermit -ir}     Remote "kermit receive in binary mode" command.
-  s2  {kermit -r}      Remote "kermit receive in text mode" command.
-  s3  {kermit -x}      Remote "start kermit server" command.
-
-   NOTE: If the remote Kermit is 6.0, the following are recommended for
-   fast startup and high-performance file transfer (see Appendix I in
-   [474]Using C-Kermit, second Edition, for command-line options):
-
-  s1   kermit -YQir   (Kermit receive binary, skip init file, fast.)
-  s2   kermit -YQTr   (Kermit receive text, skip init file, fast.)
-  s3   kermit -YQx    (Kermit server, skip init file, fast.)
-
-   If the remote is C-Kermit 7.0 or later, change the -x option (enter
-   server mode) to -O (uppercase letter O), which means "enter server
-   mode for One transaction only); this way, it is not stuck in server
-   after the transfer. Also note that the Q is redundant in version 7.0,
-   since fast Kermit protocol settings are now the default.
-
-   Note that in case the C-Kermit executable is called "wermit" or
-   "ckermit" you can change "kermit" in the strings above to "wermit" or
-   "ckermit" and C-Kermit 7.0 or later will recognize these as synonyms
-   for "kermit", in case it is at its command prompt when one of these
-   strings is sent to it.
-     _________________________________________________________________
-
-  4.7. File-Transfer Command Switches
-
-   Over the years, various new methods of transferring a file have
-   accumulated, until we had, in addition to the SEND command, also MOVE
-   (send and then delete), MAIL (send as email), REMOTE PRINT (send to be
-   printed), CSEND (send the output of a command), PSEND (send a part of
-   a file), BSEND (send in binary mode), RESEND (resume an interrupted
-   SEND), etc etc. Similarly: GET, REGET, CGET, RETRIEVE, and so on.
-
-   Not only is it confusing to have different names for these commands,
-   many of which are not real words, but this also does not allow all
-   combinations, like "send a file as mail, then delete it".
-
-   In C-Kermit 7.0, the SEND, GET, and RECEIVE commands were restructured
-   to accept modifier switches (switches are explained in [475]Section
-   1.5).
-     _________________________________________________________________
-
-    4.7.1. SEND Command Switches
-
-   Without switches, the SEND command still works exactly as before:
-
-  send oofa.txt      ; send a single file
-  send oofa.*        ; send multiple files
-  send oofa.txt x.x  ; send oofa.txt as x.x (tell receiver its name is x.x)
-  send               ; send from SEND-LIST
-
-   But now the following modifier switches may be included between "send"
-   and the filename. Zero, one, two, or more switches may be included in
-   any combination that makes sense. Switch names (such as /BINARY) can
-   be abbreviated, just like any other keywords. Most of these switches
-   work only when using Kermit protocol (/TEXT and /BINARY are the
-   exceptions).
-
-   /AFTER:date-time
-          Specifies that only those files modified (or, in VMS, created)
-          after the given date-time (see [476]Section 1.6) are to be
-          sent. Examples:
-
-  send /text /after:{2-Feb-1997 10:28:30} *.txt
-  send /text /after:\fdate(oofa.txt) *.txt
-
-          Synonym: /SINCE.
-
-   /ARRAY:arrayname
-          Specifies that instead of sending a file, C-Kermit is to send
-          the contents of the given array. Since an array does not have a
-          filename, you should include an /AS-NAME switch to specify the
-          name under which the array is to be sent (if you do not, the
-          name "_array_x_" is used, where 'x' is replaced by the array
-          designator). See [477]section 7.10 for array-name syntax. As
-          noted in that section, you can also include a range to have a
-          segment of the array sent, rather than the whole thing; for
-          example: "send /array:&a[100:199]". It is strongly recommended
-          that you accompany the /ARRAY switch with a /TEXT or /BINARY
-          switch to force the desired transfer mode, since otherwise the
-          various automatic mechanisms might switch to binary mode when
-          you really wanted text, or vice versa. In text mode a line
-          terminator is added to the end of each array element, but not
-          in binary mode. For details and examples see [478]Section
-          7.10.11.
-
-   /AS-NAME:text
-          Specifies "text" as the name to send the file under. You can
-          also still specify the as-name as the second filename on the
-          SEND command line. The following two commands are equivalent:
-
-  send oofa.txt oofa.new
-  send /as:oofa.new oofa.txt
-
-   /BEFORE:date-time
-          Specifies that only those files modified (or, in VMS, created)
-          before the given date-time ([479]Section 1.6) are to be sent.
-
-   /BINARY
-          Performs this transfer in binary mode without affecting the
-          global transfer mode, overriding not only the FILE TYPE and
-          TRANSFER MODE settings, but also the FILE PATTERN setting, but
-          for this SEND command only. In other words, SEND /BINARY means
-          what it says: send the file in binary mode, regardless of any
-          other settings. Example:
-
-  set file type text      ; Set global transfer mode to text
-  send /binary oofa.zip   ; Send a file in binary
-  send oofa.txt           ; This one is sent in text mode
-
-   /COMMAND
-          SEND /COMMAND is equivalent to CSEND ([480]Section 4.2.2) -- it
-          says to send the output from a command, rather than the
-          contents of a file. The first "filename" on the SEND command
-          line is interpreted as the name of a command; the second (if
-          any) is the as-name. Examples:
-
-  send /command {grep Sunday oofa.txt} sunday.txt
-  send /as-name:sunday.txt /command {grep Sunday oofa.txt}
-  send /bin /command {tar cf - . | gzip -c} {!gunzip -c | tar xf -}
-
-   /DELETE
-          Deletes the file (or each file in the group) after it has been
-          sent successfully (but does not delete it if it was not sent
-          successfully). SEND /DELETE is equivalent to MOVE. Has no
-          effect when used with /COMMAND. Example:
-
-  send /delete *.log
-
-   /DOTFILES
-          (UNIX and OS-9 only) Normally files whose names begin with "."
-          are skipped when matching wildcards that do not also beging
-          with ".". Include /DOTFILES to force these files to be included
-          too.
-
-   /RECURSIVE
-          Descend the through the directory tree when locating files to
-          send. Automatically sets /PATHNAMES:RELATIVE. Explained in
-          [481]Section 4.11 .
-
-   /EXCEPT:pattern
-          See [482]Section 1.5.4.
-
-   /NOBACKUP
-          This means to skip backup files when sending, even if they
-          match the SEND file specification. This is equivalent to using
-          SEND /EXCEPT and including *.~[0-9]*~ in the exception list (or
-          *.~*~ if Kermit was built without pattern-matching support; see
-          [483]Section 4.9.1). Including this switch is equivalent to
-          giving SET SEND BACKUP OFF ([484]Section 4.0.6) prior to SEND,
-          except its effect is local to the SEND command with which it
-          was given.
-
-   /NODOTFILES
-          The opposite of /DOTFILES (q.v.)
-
-   /FILENAMES:{CONVERTED,LITERAL}
-          Use this switch to override the current global SET FILE NAMES
-          setting for this transfer only.
-
-   /FILTER:command
-          This specifies a filter to pass the file through before sending
-          it. See the [485]section on file-transfer pipes and filters.
-          The /FILTER switch applies only to the file-transfer command it
-          is given with; it does not affect the global SEND FILTER
-          setting, if any.
-
-   /IMAGE
-          VMS: Sends in image mode. Non-VMS: same as /BINARY.
-
-   /LABELED
-          VMS and OS/2 only: Sends in labeled mode.
-
-   /LARGER-THAN:number
-          Specifies that only those files that are longer than the given
-          number of bytes are to be sent.
-
-   /LISTFILE:filename
-          Specifies that the files to be sent are listed in a file with
-          the given filename. The file contains one filename per line.
-          These filenames are not checked in any way; each filename is
-          taken and does not use or depend on any Kermit-specific syntax.
-          In particular, backslashes are not treated specially, leading
-          and trailing spaces are not stripped, etc. However, if a
-          filename contains wildcards, they are expanded. Example: If a
-          file named files.txt contains the following lines:
-
-  blah.txt
-  oofa*
-  x.x
-
-          (but without leading or trailing spaces), then the C-Kermit
-          command "send /listfile:files.txt" will send the files
-          blah.txt, x.x, and all files whose names start with "oofa",
-          assuming the files exist and are readable. The /LISTFILE
-          switch, can, of course, be used with other switches when it
-          makes sense, for example, /EXCEPT, /BINARY, /AFTER, /SMALLER,
-          /MOVE-TO, /DELETE, /AS-NAME with a template, etc.
-
-   /MAIL:address
-          Sends the file as e-mail to the given address or addresses.
-          "send /mail:address filename" is equivalent to "mail filename
-          address". You can include multiple addresses separated by
-          commas. Examples:
-
-  send /mail:kermit-support@columbia.edu packet.log
-  send /mail:cmg,fdc,jrd oofa.txt
-
-          As with any switch argument, if the address or address list
-          contains any spaces, you must enclose it in braces. The format
-          of the addresses must agree with that understood by the
-          mail-sending program on the receiver's computer.
-
-   /MOVE-TO:directory-name
-          Specifies that after each (or the only) source file is sent
-          successfully, and ONLY if it is sent successfully, it should be
-          moved to the named directory. If the directory name contains
-          spaces, enclose it in braces. If the directory does not exist,
-          it is created if possible; if it can't be created, the command
-          fails and an error message is printed. Example:
-
-  send /text /move-to:/users/olga/backup/ *.txt
-
-   /NOT-AFTER:date-time
-          Specifies that only those files modified at or before the given
-          date and time are to be sent.
-
-   /NOT-BEFORE:date-time
-          Specifies that only those files modified at or after the given
-          date and time are to be sent.
-
-   /PATHNAMES:{OFF,ABSOLUTE,RELATIVE}
-          Use this switch to override the current global SET SEND
-          PATHNAMES setting for this transfer only. /PATHNAMES:ABSOLUTE
-          or RELATIVE also sets /FILENAMES:LITERAL (also for this
-          transfer only) since pathnames are not sent otherwise.
-
-   /RENAME-TO:text
-          Specifies that after the (or each) source file is sent
-          successfully, and ONLY if it is sent successfully, it should be
-          renamed to the name given. If the name contains spaces, enclose
-          it in braces. If a file group is being sent, then the "text"
-          must contain a variable reference such as \v(filename) (see
-          [486]Section 4.1). Example:
-
-  send /rename-to:ok_\v(filename) *.*
-
-          This sends each file in the current directory and if it was
-          sent successfully, changes its name to begin with "ok_".
-
-   /SMALLER-THAN:number
-          Specifies that only those files that are smaller than the given
-          number of bytes are to be sent.
-
-   /SUBJECT:text
-          Subject for email. Actually, this is just a synonym for
-          /AS-NAME. If the text includes spaces, you must enclose it in
-          braces. If you don't specify a subject (or as-name), the name
-          of the file is used as the subject. Example:
-
-  send /mail:kermit-support@columbia.edu /subj:{As requested} packet.log
-
-   /PRINT:options
-          Sends the file to be printed, optionally specifying options for
-          the printer. Equivalent to REMOTE PRINT filename options.
-          Examples:
-
-  send /print oofa.txt              ; No options.
-  send /print:/copies=3 oofa.txt    ; "/copies=3" is a VMS PRINT switch.
-  send /print:-#3 oofa.txt          ; "-#3" is a UNIX lpr switch.
-
-   /PROTOCOL:name
-          Uses the given protocol to send the file (Kermit, Zmodem, etc)
-          for this transfer without changing global protocol. Only
-          available in Kermit 95, UNIX, and OS-9. Example:
-
-  set protocol kermit               ; Set global protocol
-  send /proto:zmodem /bin oofa.zip  ; Send just this file with Zmodem
-  send oofa.txt                     ; This file is sent with Kermit
-
-   /QUIET
-          When sending in local mode, this suppresses the file-transfer
-          display.
-
-   /RECOVER
-          Used to recover from a previously interrupted transfer; SEND
-          /RECOVER is equivalent to RESEND. Recovery only works in binary
-          mode; SEND /RECOVER and RESEND include an implied /BINARY
-          switch. Even then, recovery will successful only if (a) the
-          original (interrupted) transfer was also in binary mode, or (b)
-          if it was in text mode, the two Kermit programs run on
-          platforms where text-mode transfers are not length-changing.
-
-   /STARTING:number
-          Starts sending the file from the given byte position. SEND
-          /STARTING:n filename is equivalent to PSEND filename n.
-
-   /TEXT
-          Performs this transfer in text mode without affecting the
-          global transfer mode, overriding not only the FILE TYPE and
-          TRANSFER MODE settings, but also the FILE PATTERN setting, for
-          this SEND command only. In other words, SEND /TEXT really send
-          the file in text mode, regardless of any other settings or
-          negotiations.
-
-   About mail... Refer to [487]Section 4.7.1. The same rules apply as for
-   file transfer. If you are mailing multiple files, you can't use an
-   as-name (in this case, a subject) unless it contains replacement
-   variables like \v(filenum). For example, if you:
-
-  send /mail:somebody@xyz.com *.txt
-
-   Then each file will arrive as a separate email message with its name
-   as the subject. But if you:
-
-  send /mail:somebody@xyz.com /subject:{Here is a file} *.txt
-
-   Then each file message will have the same subject, which is probably
-   not what you want. You can get around this with constructions like:
-
-  send /mail:somebody@xyz.com /subject:{Here is \v(filename)} *.txt
-
-   which embed the filename in the subject.
-
-   The MOVE, CSEND, MAIL, and RESEND commands now also accept the same
-   switches. And the switches are also operative when sending from a
-   SEND-LIST (see [488]Using C-Kermit, 2nd Ed, pp.191-192), so, for
-   example, it is now possible to SEND /PRINT or SEND /MAIL from a
-   SEND-LIST.
-
-   The MSEND and MMOVE commands also take switches, but not all of them.
-   With these commands, which take an arbitrary list of filespecs, you
-   can use /BINARY, /DELETE, /MAIL, /PRINT, /PROTOCOL, /QUIET, /RECOVER,
-   and /TEXT (and /IMAGE or /LABELED, depending on the platform). MMOVE
-   is equivalent to MSEND /DELETE. (If you want to send a group of files,
-   but in mixed transfer modes with per-file as-names, use ADD SEND-LIST
-   and then SEND.)
-
-   The MSEND/MMOVE switches come before the filenames, and apply to all
-   of them:
-
-  msend /print /text *.log oofa.txt /etc/motd
-
-   If you type any of these commands (SEND, CSEND, MSEND, etc) followed
-   by a question mark (?), you will see a list of the switches you can
-   use. If you want to see a list of filenames, you'll need to type
-   something like "send ./?" (UNIX, OS/2, Windows, etc), or "send []?"
-   (VMS), etc. Of course, you can also type pieces of a filename
-   (anything that does not start with "/") and then "?" to get a list of
-   filenames that start that way; e.g. "send x.?" still works as before.
-
-   In UNIX, where "/" is also the directory separator, there is usually
-   no ambiguity between a fully-specified pathname and a switch, except
-   when a file in the root directory has the same name as a switch (as
-   noted in [489]Section 1.5):
-
-  send /etc/motd                        ; Works as expected
-  send /command                         ; ???
-
-   The second example interprets "/command" as a switch, not a filename.
-   To send a file actually called "command" in the root directory, use:
-
-  send {/command}
-
-   or other system-dependent forms such as //command, /./command,
-   c:/command, etc, or cd to / and then "send command".
-     _________________________________________________________________
-
-    4.7.2. GET Command Switches
-
-   Without switches, the GET command still works about the same as
-   before:
-
-  get oofa.txt                          ; GET a single file
-  get oofa.*                            ; GET multiple files
-
-   However, the mechanism for including an "as-name" has changed.
-   Previously, in order to include an as-name, you were required to use
-   the "multiline" form of GET:
-
-  get
-  remote-filespec
-  local-name
-
-   This was because the remote filespec might contain spaces, and so
-   there would be no good way of telling where it ended and where the
-   local name began, e.g:
-
-  get profile exec a foo
-
-   But now since we can use {braces} for grouping, we don't need the
-   multiline GET form any more, and in fact, support for it has been
-   removed. If you give a GET command by itself on a line, it fails and
-   an error message is printed. The new form is:
-
-   GET [ switches... ] remote-name [ local-name ]
-          Ask the server to send the file whose name is remote-name. If
-          the optional local-name is given, store it locally under this
-          name. If the remote-name or local-name contains spaces, they
-          must be enclosed in braces:
-
-  get {profile exec a} foo
-  get oofa.txt {~/My Files/Oofa text}
-
-   If you want to give a list of remote file specifications, use the MGET
-   command:
-
-   MGET [ switches... ] remote-name [ remote-name [ remote-name ... ] ]
-          Ask the server to send the files whose names are given.
-
-   Now you can also include modifier switches between GET or MGET and the
-   remote-name; most of the same switches as SEND:
-
-   /AS-NAME:text
-          Specifies "text" as the name to store the incoming file under.
-          (This switch is not available for MGET.) You can also still
-          specify the as-name as the second filename on the GET command
-          line. The following two commands are equivalent:
-
-  get oofa.txt oofa.new
-  get /as:oofa.new oofa.txt
-
-   /BINARY
-          Tells the server to send the given file(s) in binary mode
-          without affecting the global transfer mode. Example:
-
-  set file type text      ; Set global transfer mode to text
-  get /binary oofa.zip    ; get a file in binary mode
-  get oofa.txt            ; This one is transferred in text mode
-
-          Or, perhaps more to the point:
-
-  get /binary foo.txt     ; where "*.txt" is a text-pattern
-
-          This has the expected effect only if the server is C-Kermit 7.0
-          or later or K95 1.1.19 or later.
-
-   /COMMAND
-          GET /COMMAND is equivalent to CGET ([490]Section 4.2.2) -- it
-          says to receive the file into the standard input of a command,
-          rather than saving it on disk. The /AS-NAME or the second
-          "filename" on the GET command line is interpreted as the name
-          of a command. Examples:
-
-  get /command sunday.txt {grep Sunday oofa.txt}
-  get /command /as-name:{grep Sunday oofa.txt} sunday.txt
-  get /bin /command {!gunzip -c | tar xf -} {tar cf - . | gzip -c}
-
-   /DELETE
-          Asks the Kermit server to delete the file (or each file in the
-          group) after it has been transferred successfully (but not to
-          delete it if it was not sent successfully). GET /DELETE is
-          equivalent to RETRIEVE. Example:
-
-  get /delete *.log
-
-   /EXCEPT:pattern
-          Specifies that any files whose names match the pattern, which
-          can be a regular filename, or may contain "*" and/or "?"
-          metacharacters, are to be refused upon arrival. To specify
-          multiple patterns (up to 8), use outer braces around the group,
-          and inner braces around each pattern:
-
-  /EXCEPT:{{pattern1}{pattern2}...}
-
-          See the description of SEND /EXCEPT in [491]Section 4.7.1 for
-          examples, etc. Refusal is accomplished using the Attribute
-          Rejection mechanism (reason "name"), which works only when
-          Attribute packets have been successfully negotiated.
-
-   /FILENAMES:{CONVERTED,LITERAL}
-          Use this switch to override the current global SET FILE NAMES
-          setting for this transfer only.
-
-   /FILTER:command
-          This specifies a filter to pass the incoming file through
-          before writing to disk. See the [492]section on file-transfer
-          pipes and filters. The /FILTER switch applies only to the
-          file-transfer command it is given with; it does not affect the
-          global RECEIVE FILTER setting, if any.
-
-   /IMAGE
-          VMS: Transfer in image mode. Non-VMS: same as /BINARY.
-
-   /LABELED
-          VMS and OS/2 only: Specifies labeled transfer mode.
-
-   /MOVE-TO:directory
-          This tells C-Kermit to move each file that is successfully
-          received to the given directory. Files that are not
-          successfully received are not moved. By default, files are not
-          moved.
-
-   /PATHNAMES:{OFF,ABSOLUTE,RELATIVE,AUTO}
-          Use this switch to override the current global SET RECEIVE
-          PATHNAMES setting for this transfer only. /PATHNAMES:ABSOLUTE
-          or RELATIVE also sets /FILENAMES:LITERAL (also for this
-          transfer only) since incoming pathnames would not be treated as
-          pathnames otherwise. See [493]Section 4.10.
-
-   /QUIET
-          When sending in local mode, this suppresses the file-transfer
-          display.
-
-   /RECOVER
-          Used to recover from a previously interrupted transfer; GET
-          /RECOVER is equivalent to REGET. Recovery only works in binary
-          mode; SEND /RECOVER and RESEND include an implied /BINARY
-          switch. Even then, recovery will successful only if (a) the
-          original (interrupted) transfer was also in binary mode, or (b)
-          if it was in text mode, the two Kermit programs run on
-          platforms where text-mode transfers are not length-changing.
-
-   /RECURSIVE
-          Tells the server that the GET file specification applies
-          recursively. This switch also automatically sets
-          /PATHNAMES:RELATIVE in both the server AND the client. When
-          used in conjunction with /DELETE, this "moves" a directory tree
-          from the server's computer to the client's computer (except
-          that only regular files are deleted from the server's computer,
-          not directories; thus the original directories will be left,
-          but will contain no files). Note that all servers that support
-          /RECURSIVE do not necessarily do so in combination with other
-          switches, such as /RECOVER. (Servers that do include C-Kermit
-          7.0 and later, K95 1.1.19 and later.)
-
-   /RENAME-TO:string
-          This tells C-Kermit to rename each file that is successfully
-          received to the given string. Files that are not successfully
-          received are not renamed. By default, files are not renamed.
-          The string can be a literal string, which is appropriate when
-          only one file is being received, or it can contain one or more
-          variables that are to be evaluated at the time each file is
-          received, such as \v(filename), \v(filenumber), \v(ntime),
-          \v(pid), \v(user), etc. WARNING: if you give a literal string
-          and more than one file arrives, each incoming file will be
-          given the same name (but SET FILE COLLISION BACKUP or RENAME
-          can be used to keep the incoming files from overwriting each
-          other).
-
-   /TEXT
-          Tells the server to perform this transfer in text mode without
-          affecting its global transfer mode. See /BINARY for additional
-          info.
-
-   The /MAIL and /PRINT options are not available (as they are for SEND),
-   but you can use /COMMAND to achieve the same effect, as in these UNIX
-   examples:
-
-  get /command oofa.txt {mail kermit@columbia.edu}
-  get /command oofa.txt lpr
-
-   In OS/2 or Windows, you can GET and print like this:
-
-  get oofa.txt prn
-
-   The CGET, REGET, RETRIEVE commands also accept the same switches as
-   GET. CGET automatically sets /COMMAND; REGET automatically sets
-   /RECOVER and /BINARY, and RETRIEVE automatically sets /DELETE.
-     _________________________________________________________________
-
-    4.7.3. RECEIVE Command Switches
-
-   Without switches, the RECEIVE command still works as before:
-
-  receive            ; Receives files under their own names
-  receive /tmp       ; Ditto, but into the /tmp directory
-  r                  ; Same as "receive"
-  receive foo.txt    ; Receives a file and renames to foo.txt
-
-   Now you can also include modifier switches may be included between
-   "receive" and the as-name; most of the same switches as GET:
-
-   /AS-NAME:text
-          Specifies "text" as the name to store the incoming file under.
-          You can also still specify the as-name as a filename on the
-          command line. The following two commands are equivalent:
-
-  r oofa.new
-  r /as:oofa.new
-
-   /BINARY
-          Performs this transfer in binary mode without affecting the
-          global transfer mode. NOTE: This does not override the incoming
-          filetype (as it does with GET), so this switch is useful only
-          if ATTRIBUTE TYPE is OFF, or if the other Kermit does not send
-          a TYPE (text or binary) attribute. In any case, it has no
-          affect whatsoever on the file sender.
-
-   /COMMAND
-          RECEIVE /COMMAND is equivalent to CRECEIVE ([494]Section 4.2.2)
-          -- it says to receive the file into the standard input of a
-          command, rather than saving it on disk. The /AS-NAME or the
-          "filename" on the RECEIVE command line is interpreted as the
-          name of a command.
-
-  r /command {grep Sunday oofa.txt}
-  r /command /as-name:{grep Sunday oofa.txt}
-  r /bin /command {tar cf - . | gzip -c}
-
-   /EXCEPT:pattern
-          Specifies that any files whose names match the pattern, which
-          can be a regular filename, or may contain "*" and/or "?"
-          metacharacters, are to be refused upon arrival. To specify
-          multiple patterns (up to 8), use outer braces around the group,
-          and inner braces around each pattern:
-
-  /EXCEPT:{{pattern1}{pattern2}...}
-
-          See the description of SEND /EXCEPT in [495]Section 4.7.1 for
-          examples, etc. Refusal is accomplished using the Attribute
-          Rejection mechanism (reason "name"), which works only when
-          Attribute packets have been successfully negotiated.
-
-   /FILENAMES:{CONVERTED,LITERAL}
-          Use this switch to override the current global SET FILE NAMES
-          setting for this transfer only.
-
-   /FILTER:command
-          This specifies a filter to pass the incoming file through
-          before writing to disk. See the [496]section on file-transfer
-          pipes and filters. The /FILTER switch applies only to the
-          file-transfer command it is given with; it does not affect the
-          global RECEIVE FILTER setting, if any.
-
-   /IMAGE
-          VMS: Transfer in image mode. Non-VMS: same as /BINARY. See
-          comments under RECEIVE /BINARY.
-
-   /LABELED
-          VMS and OS/2 only: Specifies labeled transfer mode. See
-          comments under RECEIVE /BINARY.
-
-   /MOVE-TO:directory
-          This tells C-Kermit to move each file that is successfully
-          received to the given directory. Files that are not
-          successfully received are not moved. By default, files are not
-          moved.
-
-   /PATHNAMES:{ABSOLUTE,RELATIVE,OFF,AUTO}
-          Use this switch to override the current global SET RECEIVE
-          PATHNAMES setting for this transfer only. See [497]Section
-          4.10.
-
-   /RECURSIVE
-          When used with the RECEIVE command, /RECURSIVE is simply a
-          synonym for /PATHNAMES:RELATIVE.
-
-   /RENAME-TO:string
-          This tells C-Kermit to rename each file that is successfully
-          received to the given string. Files that are not successfully
-          received are not renamed. By default, files are not renamed.
-          The string can be a literal string, which is appropriate when
-          only one file is being received, or it can contain one or more
-          variables that are to be evaluated at the time each file is
-          received, such as \v(filename), \v(filenumber), \v(ntime),
-          \v(pid), \v(user), etc. WARNING: if you give a literal string
-          and more than one file arrives, each incoming file will be
-          given the same name (but SET FILE COLLISION BACKUP or RENAME
-          can be used to keep the incoming files from overwriting each
-          other).
-
-   /QUIET
-          When receiving in local mode, this suppresses the file-transfer
-          display.
-
-   /TEXT
-          Receives in text mode without affecting the global transfer
-          mode. See comments under RECEIVE /BINARY.
-
-   The /MAIL and /PRINT options are not available, but you can use
-   /COMMAND to achieve the same effect, as in these UNIX examples:
-
-  r /command {mail kermit@columbia.edu}
-  r /command lpr
-
-   In OS/2 or Windows, you can RECEIVE and print like this:
-
-  receive prn
-
-   The CRECEIVE command now also accepts the same switches.
-     _________________________________________________________________
-
-  4.8. Minor Kermit Protocol Improvements
-
-    4.8.1. Multiple Attribute Packets
-
-   C-Kermit 7.0 now sends more than one Attribute packet if a file's
-   attributes do not fit into a single packet of the negotiated length.
-   If a particular attribute (such as file creation date-time) does not
-   fit within the negotiated length (which will only happen when the
-   negotiated length is around 20 or less), that attribute is not sent at
-   all.
-
-    4.8.2. Very Short Packets
-
-   There are certain situations where extremely short packets must be
-   used; 20 or 30 bytes at most. This can happen when one or more devices
-   along the communication path have very small buffers and lack an
-   effective means of flow control. Examples are sometimes cited
-   involving radio modems.
-
-   When the maximum packet length is shorter than certain packets that
-   would be sent, those packets are either truncated or else broken up
-   into multiple packets. Specifically:
-
-    1. Parameter negotiation packets (I, S, and their ACKs) are truncated
-       to the negotiated length. Any parameters that do not fit are reset
-       to their default values. There is no provision in the Kermit
-       protocol for fragmentation and reassembly of parameter strings.
-    2. File header packets (containing the filename) are simply
-       truncated. There is no provision in the Kermit protocol for
-       fragmentation and reassembly of filenames.
-    3. Attribute packets are fragmented and reassembled as described in
-       4.8.1 without loss of data, except in case a field will not fit at
-       all in the negotiated length (the longest attribute is usually the
-       date and time of file creation/modification) because of the rule
-       that attributes may not be broken across packets.
-    4. Data packets and other packets are unaffected -- they can be as
-       short as they need to be, within reason.
-     _________________________________________________________________
-
-  4.9. Wildcard / File Group Expansion
-
-   "Wildcard" refers to the notation used in filenames to specify a group
-   of files by pattern matching.
-
-    4.9.1. In UNIX C-Kermit
-
-   Prior to C-Kermit 7.0, C-Kermit was capable of expanding wildcard
-   strings containing only the "metacharacters" '*' and '?':
-
-   *
-          Matches any sequence of zero or more characters. For example:
-          "ck*.c" matches all files whose names start with "ck" and end
-          with ".c", including "ck.c".
-
-   ?
-          Matches any single character. For example, "ck?.c" matches all
-          files whose names are exactly 5 characters long and start with
-          "ck" and end with ".c". When typing commands at the prompt, you
-          must precede any question mark to be used for matching by a
-          backslash (\) to override the normal function of question mark,
-          which is providing menus and file lists.
-
-   C-Kermit 7.0 adds the additional features that users of ksh, csh, and
-   bash are accustomed to:
-
-   [abc]
-          Square brackets enclosing a list of characters matches any
-          single character in the list. Example: ckuusr.[ch] matches
-          ckuusr.c and ckuusr.h.
-
-   [a-z]
-          Square brackets enclosing a range of characters; the hyphen
-          separates the low and high elements of the range. For example,
-          [a-z] matches any character from a to z.
-
-   [acdm-z]
-          Lists and ranges may be combined. This example matches a, c, d,
-          or m through z.
-
-   {string1,string2,...}
-          Braces enclose a list of strings to be matched. For example:
-          ck{ufio,vcon,cmai}.c matches ckufio.c, ckvcon.c, or ckcmai.c.
-          The strings may themselves contain metacharacters, bracket
-          lists, or indeed, other lists of strings, but (when matching
-          filenames) they may not contain directory separators.
-
-          Thus, the metacharacters in filenames (and in any other field
-          that can be a pattern, such as the IF MATCH pattern, SEND or
-          GET exception lists, etc) are:
-
- * ? [ {
-
-          And within braces only, comma (,) is a metacharacter.
-
-   To include a metacharacter in a pattern literally, precede it with a
-   backslash '\' (or two if you are passing the pattern to a macro).
-   Examples:
-
-  send a*b      ; Send all files whose names start with 'a' and end with 'b'.
-  send a?b      ; Ditto, but the name must be exactly three characters long.
-  send a[a-z]b  ; Ditto, but the second character must be a lowercase letter.
-  send a[x\-z]b ; Ditto, except the second character must be 'x', '-', or 'y'.
-  send a[ghi]b  ; Ditto, except the second character must be 'g', 'h', or 'i'.
-  send a[?*]b   ; Ditto, except the second character must be '?' or '*'.
-  send a[\?\*]b ; Same as previous.
-  send *?[a-z]* ; All files with names containing at least one character
-                ; that is followed by a lowercase letter.
-
-   Or, more practically:
-
-  send ck[cuw]*.[cwh]  ; Send the UNIX C-Kermit source files.
-
-   To refer to the C-Kermit sources files and makefile all in one
-   filespec:
-
-  {{makefile,ck[cuw]*.[cwh]}}
-
-   (NOTE: if the entire pattern is a {stringlist}, you must enclose it it
-   TWO pairs of braces, since the SEND command strips the outer brace
-   pair, because of the "enclose in braces if the filename contains
-   spaces" rule).
-
-   If the makefile is called ckuker.mak:
-
-  ck[cuw]*.{[cwh],mak}
-
-   (NOTE: double braces are not needed here since the pattern does not
-   both begin and end with a brace.)
-
-   To add in all the C-Kermit text files:
-
-  ck[cuw]*.{[cwh],mak,txt}
-
-   All of these features can be used anywhere you would type a filename
-   that is allowed to contain wildcards.
-
-   When you are typing at the command prompt, an extra level of quoting
-   is required for the '?' character to defeat its regular function of
-   producing a list of files that match what you have typed so far, for
-   example:
-
-  send ck[cu]?
-
-   lists all the files whose names start with ckc and cku. If you quote
-   the question mark, it is used as a pattern-matching character, for
-   example:
-
-  send ck\?[ft]io.c
-
-   sends all the file and communications i/o modules for all the
-   platforms: ckufio.c, ckutio.c, ckvfio.c, ckvtio.c, etc.
-
-   If, however, a filename actually contains a question mark and you need
-   to refer to it on the command line, you must use three (3)
-   backslashes. For example, if the file is actually called ck?fio.c, you
-   would use:
-
-  send ck\\\?fio.c
-
-   Further notes on quoting:
-
-     * A single backslash is sufficient for quoting a special character
-       at the command prompt or in a command file. However, when passing
-       patterns to macros you'll need double backslashes, and when
-       referring to these patterns within the macro, you'll need to use
-       \fcontents(\%1) (see [498]Section 1.11.5). You should enclose
-       macro argument references in braces in case grouped arguments were
-       passed. Example:
- define ismatch {
-     if match {\fcont(\%1)} {\fcont(\%2)} {
-         end 0 MATCH
-     } else {
-         end 1 NO MATCH
-     }
- }
- ismatch ab*yz a*\\**z           ; Backslash must be doubled
- ismatch {abc def xyz} *b*e*y*   ; Braces must be used for grouping
-     * Watch out for possible conflicts between {} in filename patterns
-       and {} used for grouping multiple words into a single field, when
-       the pattern has outer braces. For example, in:
-     if match {abc xyz} {a* *z} echo THEY MATCH
-       braces must be used to group "abc xyz" into a single string.
-       Kermit strips off the braces before comparing the string with the
-       pattern. Therefore:
- if match makefile {makefile,Makefile} echo THEY MATCH
-       does not work, but:
- if match makefile {{makefile,Makefile}} echo THEY MATCH
-       does.
-     * If you use a pattern that has outer braces, like {*.txt,*.doc}, in
-       a field that accepts a pattern list (like SEND /EXCEPT:xxx),
-       you'll need to add two extra sets of outer braces:
- send /except:{{{*.txt,*.doc}}} *.*
-
-   C-Kermit's new pattern matching capabilities are also used when
-   C-Kermit is in server mode, so now you can send requests such as:
-
-  get ck[cuw]*.[cwh]
-
-   to a C-Kermit server without having to tell it to SET WILD SHELL
-   first. Previously this would have required:
-
-  mget ckc*.c ckc*.w ckc*.h cku*.c cku*.w cku*.h ckw*.c ckw*.w ckw*.h
-
-   The new pattern matching features make SET WILD SHELL redundant, and
-   barring any objections, it will eventually be phased out. (One
-   possible reason for retaining it would be as an escape mechanism when
-   Kermit does not understand the underlying file system.)
-
-   By the way, patterns such as these are sometimes referred to as
-   "regular expressions", but they are not quite the same. In a true
-   regular expression (for example), "*" means "zero or more repetitions
-   of the previous item", so (for example), "([0-9]*)" would match zero
-   or more digits in parentheses. In Kermit (and in most shells), this
-   matches one digit followed by zero or more characters, within
-   parentheses. Here are some hints:
-
-     * Although you can't match any sequence of digits (or letters, etc),
-       you can match (say) 1, 2, or 3 of them in row. For example, the
-       following pattern matches Kermit backup files (with backup numbers
-       from 1 to 999):
- *.~{[1-9],[1-9][0-9],[1-9][0-9][0-9]}~
-     * There is presently no NOT operator, so no way to match any
-       character or string EXCEPT the one(s) shown.
-
-   In other wildcarding news...
-
-     * You may now "send xxx" where "xxx" is a directory name, and this
-       will send all the files from the directory xxx, as if you had
-       typed "send xxx/*". You can also use the special shorthand "send
-       ." to send all the files from the current directory.
-     * To easily skip over backup files (the ones whose names end like
-       .~22~) when sending, you can use SEND /NOBACKUP (see [499]Section
-       4.0.6 for details).
-     * When choosing Kermit to expand wildcards, rather than the shell,
-       you can choose whether "dot files" -- files whose names begin with
-       ".", which are normally "invisible" -- should be matched:
- SET WILD KERMIT /NO-MATCH-DOT-FILES (this is the default)
- SET WILD KERMIT /MATCH-DOT-FILES    (this allows matching of "." files)
-       or include the /DOTFILES or /NODOTFILES switch on the command you
-       are using, such as SEND or DIRECTORY.
-     * Commands such as DIRECTORY and SEND allow recursive directory
-       traversal. There are also new functions for this to use in
-       scripts. See [500]Section 4.11 for details.
-
-   When building file lists in UNIX, C-Kermit follows symbolic links.
-   Because of this, you might encounter any or all of the following
-   phenomena:
-
-     * Multiple copies of the same file; e.g. one from its real directory
-       and others from links to its real directory, if both the real
-       directory and the links to it are in the wildcard expansion list.
-     * A command might unexpectedly "hang" for a long time because an NFS
-       link might not be responding, or the directory you are looking at
-       contains a link to a huge directory tree (example: "directory
-       /recursive /etc" when /etc/spool is a symlink to /var/spool, which
-       is a large organization's incoming email directory, containing
-       tens of thousands of subdirectories).
-
-   The size of the file list that Kermit can build is limited in most
-   C-Kermit implementations. The limit, if any, depends on the
-   implementation. Use the SHOW FEATURES command and look in the
-   alphabetized options list for MAXWLD to see the value.
-
-    4.9.2. In Kermit 95
-
-   Kermit 95 1.1.19 and later uses the same pattern matching syntax as in
-   UNIX, but (as always) you will encounter numerous difficulties if you
-   use backslash (\) as the directory separator. In any command where K95
-   parses filenames itself (that is, practically any file-oriented
-   command except RUN), you can use forward slash (/) as the directory
-   separator to avoid all the nasty conflicts.
-
-    4.9.3. In VMS, AOS/VS, OS-9, VOS, etc.
-
-   Platforms other than UNIX, Windows 95/98/NT, and OS/2 have their own
-   filename matching capabilities that are, in general, different from
-   Kermit's built-in ones and in any case might conflict with them. For
-   example, [] encloses directory names in VMS.
-
-   Nevertheless you can still use all the pattern-matching capabilities
-   described in [501]Section 4.9.1 by loading a file list into an array
-   (e.g. with \ffiles(*,&a), see [502]Section 4.11.3) and then using IF
-   MATCH on the members.
-     _________________________________________________________________
-
-  4.10. Additional Pathname Controls
-
-   In version 6.0 and earlier, C-Kermit's SET { SEND, RECEIVE } PATHNAMES
-   command had only ON and OFF as options. In version 7.0, there are more
-   choices:
-
-   SET SEND PATHNAMES OFF
-          When sending a file, strip all disk/directory information from
-          the name. Example: "send /usr/olga/letters/oofa.txt" sends the
-          file as "oofa.txt". This applies to actual filenames, not to
-          any as-name you might specify.
-
-   SET SEND PATHNAMES RELATIVE
-          When sending a file, leave the pathname on as given. For
-          example, if your current directory is /usr/olga, "send
-          letters/oofa.txt" sends the file as "letters/oofa.txt", not
-          "/usr/olga/letters/oofa.txt" or "letters.txt".
-
-   SET SEND PATHNAMES ABSOLUTE
-          When sending a file, convert its name to the full, absolute
-          local pathname. For example, if your current directory is
-          /usr/olga, "send letters/oofa.txt" sends the file as
-          "/usr/olga/letters/oofa.txt". NOTE: Even with this setting,
-          device and/or node names are not included. For example, in VMS,
-          any node or device name is stripped; in Windows or OS/2, any
-          disk letter is stripped.
-
-   SET RECEIVE PATHNAMES OFF
-          When receiving a file, strip all disk/directory information
-          from the name before attempting to store it. This applies to
-          incoming filename, not to any as-name you might specify.
-          Example: If a file arrives under the name
-          "/usr/olga/letters/oofa.txt" it is stored simply as "oofa.txt"
-          in your download directory or, if no download directory has
-          been specified, in your current directory.
-
-   SET RECEIVE PATHNAMES RELATIVE
-          When receiving a file, leave the pathname on as it appears in
-          the incoming name, but if the incoming name appears to be
-          absolute, make it relative to your current or download
-          directory. Examples:
-
-          + "oofa.txt" is stored as "oofa.txt".
-          + "letters/oofa.txt" is stored as "letters/oofa.txt"; the
-            "letters" subdirectory is created if it does not already
-            exist.
-          + "/usr/olga/letters/oofa.txt" is stored as
-            "usr/olga/letters/oofa.txt" in your current or download
-            directory, and the "usr", "usr/olga", etc, directories are
-            created if they do not exist.
-
-   SET RECEIVE PATHNAMES ABSOLUTE
-          The incoming filename is used as given. Thus it cannot be
-          stored unless the given path (if any) already exists or can be
-          created. In this case, node, device, or disk designations are
-          NOT stripped, since they most likely were given explicitly by
-          the user as an as-name, meant to be used as given.
-
-   SET RECEIVE PATHNAMES AUTO
-          This is the default, and means RELATIVE if the sender tells me
-          it is a recursive transfer, OFF otherwise.
-
-   Set FILE NAMES CONVERTED now also affects pathnames too. When
-   PATHNAMES are RELATIVE or ABSOLUTE and FILE NAMES are CONVERTED, the
-   file sender converts its native directory-name format to UNIX format,
-   and the file receiver converts from UNIX format to its native one;
-   thus UNIX format is the common intermediate representation for
-   directory hierarchies, as it is in the ZIP/UNZIP programs (which is
-   why ZIP archives are transportable among, UNIX, DOS, and VMS).
-
-   Here's an example in which a file is sent from Windows to UNIX with
-   relative pathnames and FILE NAMES CONVERTED:
-
-  Source name                Intermediate name      Destination Name
-  C:\K95\TMP\OOFA.TXT        K95/TMP/OOFA.TXT       k95/tmp/oofa.txt
-
-   In a more complicated example, we send the same file from Windows to
-   VMS:
-
-  Source name                Intermediate name      Destination Name
-  C:\K95\TMP\OOFA.TXT        K95/TMP/OOFA.TXT       [.K95.TMP]OOFA.TXT
-
-   (Note that disk letters and device designations are always stripped
-   when pathnames are relative).
-
-   As you can imagine, as more and more directory formats are considered,
-   this approach keeps matters simple: on each platform, Kermit must know
-   only its own local format and the common intermediate one. In most
-   cases, the receiver can detect which format is used automatically.
-     _________________________________________________________________
-
-  4.11. Recursive SEND and GET: Transferring Directory Trees
-
-   C-Kermit 7.0 in selected versions (UNIX, VMS, VOS, AOS/VS, Windows,
-   and OS/2 at this writing) now permits the SEND command to traverse
-   directories "recursively" if you ask it to; that is, to send files
-   from the current or specified directory and all of its subdirectories
-   too, and their subdirectories, etc. (Some other commands can do this
-   too, including DIRECTORY.)
-
-   This feature is new to UNIX, Windows, VOS, and OS/2. VMS and AOS/VS
-   have always included "wildcard" or "template" characters that allow
-   this, and in this case, recursive directory traversal could happen
-   behind Kermit's back, i.e. Kermit does not have to do it itself (in
-   VMS, the notation is "[...]" or "[directory...]"; in AOS/VS is "#").
-   In C-Kermit 7.0, however, SEND /RECURSIVE is supported by C-Kermit
-   itself for VMS.
-     _________________________________________________________________
-
-    4.11.1. Command-Line Options
-
-   To descend a directory tree when sending files, use the -L
-   command-line option to indicate that the send operation is to be
-   recursive, and include a name or pattern to be sent. When giving a
-   pattern, you should enclose it in quotes to prevent the shell from
-   expanding it. Examples:
-
-  $ kermit -Ls "/usr/olga/*" # send all of Olga's files in all her directories
-  $ kermit -Ls foo.txt       # send all foo.txt files in this directory tree
-  $ kermit -Ls "*.txt"       # send all .txt files in this directory tree
-  $ kermit -Ls "letters/*"   # send all files in the letters directory tree
-  $ kermit -Ls letters       # send all files in the letters directory tree
-  $ kermit -Ls "*"           # send all files in this directory tree
-  $ kermit -Ls .             # UNIX only: send all files in this directory tree
-  $ kermit -s .              # UNIX only: a filename of . implies -L
-
-   If you let the shell expand wildcards, Kermit only sends files whose
-   names match files in the current or given directory, because the shell
-   replaces an unquoted wildcard expression with the list of matching
-   files -- and the shell does not build recursive lists. Note that the
-   "." notation for the tree rooted at the current directory is allowed
-   only in UNIX, since in Windows and OS/2, it means "*.*"
-   (nonrecursive).
-     _________________________________________________________________
-
-    4.11.2. The SEND /RECURSIVE Command
-
-   If you include the /RECURSIVE switch in a SEND (or MOVE, or similar)
-   command, it means to descend the current or specified directory tree
-   searching for files whose names match the given name or pattern. Since
-   this is not terribly useful unless you also include pathnames with the
-   outbound files, the /RECURSIVE switch also includes an implicit
-   /PATHNAMES:RELATIVE switch (which you can undo by including an
-   explicit /PATHNAMES switch after the /RECURSIVE switch).
-
-   Examples:
-
-   SEND /RECURSIVE *
-          Sends all of the files in the current directory and all the
-          files in all of its subdirectories, and all of their
-          subdirectories, etc, including their relative pathnames. Empty
-          directories are not sent.
-
-   SEND /RECURSIVE /PATHNAMES:ABSOLUTE *
-          Sends all of the files in the current directory and all the
-          files in all of its subdirectories, and all of their
-          subdirectories, etc, including their absolute pathnames.
-
-   SEND /RECURSIVE /PATHNAMES:OFF *
-          Sends all of the files in the current directory and all the
-          files in all of its subdirectories, and all of their
-          subdirectories, etc, without pathnames.
-
-   SEND /RECURSIVE /usr/olga/*
-          Sends all of the files in the /usr/olga directory and all the
-          files in all of its subdirectories, and all of their
-          subdirectories, etc.
-
-   SEND /RECURSIVE /usr/olga (or /usr/olga/)
-          Same as above. If the name is a directory name (with or without
-          a trailing slash), its files are sent, and those of its
-          subdirectories, and their subdirectories, etc (see [503]Section
-          4.9).
-
-   SEND /RECURSIVE /TEXT /usr/olga/*.txt
-          As above, but only files whose names end with ".txt" are sent,
-          and they are sent in text mode (as they would be by default
-          anyway if SET FILE PATTERNS is ON or AUTO).
-
-   SEND .
-          UNIX only: Send all the files in the current directory.
-
-   SEND /RECURSIVE .
-          UNIX only: Sends all of the files in the current directory and
-          all of its subdirectories, etc ([504]Section 4.9).
-
-   The /RECURSIVE switch is different from most other switches in that
-   its effect is immediate (but still local to the command in which it is
-   given), because it determines how filenames are to be parsed. For
-   example, "send *.txt" fails with a parse error ("No files match") if
-   there are no *.txt files in the current directory, but "send
-   /recursive *.txt" succeeds if there are ".txt" files anywhere in the
-   tree rooted at the current directory.
-
-   The /RECURSIVE switch also affects the file lists displayed if you
-   type "?" in a filename field. "send ./?" lists the regular files in
-   the current directory, but "send /recursive ./?" lists the entire
-   directory tree rooted at the current directory.
-     _________________________________________________________________
-
-    4.11.3. The GET /RECURSIVE Command
-
-   In a client/server setting, the client can also request a recursive
-   transfer with:
-
-   GET /RECURSIVE [ other switches ] remote-filespec [ local-spec ]
-
-   In which remote file specification can be a directory name, a
-   filename, a wildcard, or any combination. If the local-spec is not
-   given (and PATHNAMES are RELATIVE), incoming files and directories go
-   into the current local directory. If local-spec is given and is a
-   directory, it becomes the root of the tree into which the incoming
-   files and directories are placed. If local-spec has the syntax of a
-   directory name (e.g. in UNIX it ends with /), C-Kermit creates the
-   directory and then places the incoming files into it. If local-spec is
-   a filename (not recommended), then all incoming files are stored with
-   that name with collisions handled according to the FILE COLLISION
-   setting.
-
-   Again, the normal method for transferring directory trees uses
-   relative pathnames, and this is the default when the sender has been
-   given the /RECURSIVE switch. The action at the receiver depends on its
-   RECEIVE PATHNAMES setting. The default is AUTO, meaning that if the
-   sender tells it to expect a recursive transfer, then it should
-   automatically switch to relative pathnames for this transfer only;
-   otherwise it obeys the RECEIVE PATHNAMES setting of OFF, ABSOLUTE, or
-   RELATIVE.
-
-   What happens if a file arrives that has an absolute pathname, when the
-   receiver has been told to use only relative pathnames? As a security
-   precaution, in this case the receiver treats the name as if it was
-   relative. For example, if a file arrives as:
-
-  /usr/olga/oofa.txt
-
-   The receiver creates a "usr" subdirectory in its current directory,
-   and then an "olga" subdirectory under the "usr" subdirectory in which
-   to store the incoming file.
-
-   Suppose, however there is a sequence of directories:
-
-  /usr/olga/a/b/c/d/
-
-   in which "a" contains nothing but a subdirectory "b", which in turn
-   contains nothing but a subdirectory "c", which in turn contains
-   nothing but a subdirectory "d", which contains nothing at all. Thus
-   there are no files in the "/usr/olga/a/" tree, and so it is not sent,
-   and therefore it is not reproduced on the target computer.
-     _________________________________________________________________
-
-    4.11.4. New and Changed File Functions
-
-   C-Kermit 7.0 adds the following functions:
-
-   \ffiles(pattern[,&a])
-          This function has been changed to match only regular files in
-          the current or given directory, and to take an optional array
-          name as a second argument (explained below).
-
-   \fdirectories(pattern[,&a])
-          Returns the number of directories that match the given pattern.
-          If the pattern does not include a directory, then the search is
-          performed in the current directory.
-
-   \frfiles(pattern[,&a])
-          Returns the number of files in the current or given directory
-          and all of its subdirectories, and their subdirectories, etc,
-          that match the given pattern. Warning -- this one can take
-          quite some time if performed at the root of a large directory
-          tree.
-
-   \frdirectories(pattern[,&a])
-          Returns the number of directories in the current or given
-          directory and all of its subdirectories, and their
-          subdirectories, etc, that match the given pattern.
-
-   Each of these functions builds up a list of files to be returned by
-   the \fnextfile() function, just as \ffiles() always has done. (This
-   can also be done with the /ARRAY switch of the DIRECTORY command; see
-   [505]Sections 4.5.1 and [506]7.10).
-
-   Each of these functions can be given an array name as an optional
-   second argument. If an array name is supplied, the array will contain
-   the number of files as its 0th element, and the filenames in elements
-   1 through last. If the array already existed, its previous contents
-   are lost. For example, if the current directory contains two files,
-   oofa.txt and foo.bar, then "\ffiles(*,&a)" creates an array \&a[] with
-   a dimension of 2, containing the following elements:
-
- \&a[0] = 2
- \&a[1] = oofa.txt
- \&a[2] = foo.bar
-
-   If no files match the specification given in the first argument, the
-   array gets a dimension of 0, which is the same as undeclaring the
-   array.
-
-   Note that the order in which the array is filled (and in which
-   \fnextfile() returns filenames) is indeterminate (but see [507]Section
-   7.10.5).
-
-   Here's an example that builds and prints a list of all the file whose
-   names end in .txt in the current directory and all its descendents:
-
-  asg \%n \frfiles(*.txt)
-  declare \&a[\%n]
-  for \%i 1 \%n 1 {
-      asg \&a[\%i] \fnextfile()
-      echo \flpad(\%i,4). "\&a[\%i]"
-  }
-
-   Alternatively, using the array method, and then printing the filenames
-   in alphabetic order (see [508]Section 7.10.3 and [509]7.10.5):
-
-  asg \%n \frfiles(*.txt,&a)
-  sort &a
-  for \%i 1 \%n 1 {
-      echo \flpad(\%i,4). "\&a[\%i]"
-  }
-
-   Or even more simply:
-
-  asg \%n \frfiles(*.txt,&a)
-  sort &a
-  show array &a
-
-   As noted elsewhere, the file lists built by \ffiles(), \frfiles(),
-   etc, are now "safe" in the sense that SEND and other file-related
-   commands can reference \fnextfile() without resetting the list:
-
-  set send pathnames relative
-  for \%i 1 \frfiles(*.txt) 1 {
-      asg \%a \fnextfile()
-      echo Sending \%a...
-      send \%a
-      if fail break
-  }
-
-   Copying to an array (as shown on p.398 of [510]Using C-Kermit 2nd Ed)
-   is no longer necessary.
-     _________________________________________________________________
-
-    4.11.5. Moving Directory Trees Between Like Systems
-
-    4.11.5.1. UNIX to UNIX
-
-   Transferring a directory tree from one computer to another replicates
-   the file sender's arrangement of files and directories on the file
-   receiver's computer. Normally this is done using relative pathnames,
-   since the user IDs might not be identical on the two computers. Let's
-   say both computers are UNIX based, running C-Kermit 7.0 or later. On
-   the sending computer (leaving out the connection details, etc):
-
-  C-Kermit> cd /usr/olga
-  C-Kermit> send /recursive .
-
-   The /RECURSIVE switch tells C-Kermit to descend through the directory
-   tree and to include relative pathnames on outbound filenames.
-
-   On the receiving computer:
-
-  C-Kermit> mkdir olgas-files           ; Make a new directory.
-  C-Kermit> cd olgas-files              ; CD to it.
-  C-Kermit> receive /recursive          ; = /PATHNAMES:RELATIVE
-
-   Each Kermit program recognizes that the other is running under UNIX
-   and switches to binary mode and literal filenames automatically.
-   Directories are automatically created on the receiving system as
-   needed. File dates and permissions are automatically reproduced from
-   source to destination.
-
-    4.11.5.2. VMS to VMS
-
-   To send recursively from VMS, simply include the /RECURSIVE switch,
-   for example at the sender:
-
-  $ kermit
-  C-Kermit> cd [olga]
-  C-Kermit> send /recursive *.*;0
-
-   And at the receiver:
-
-  C-Kermit> cd [.olga]
-  C-Kermit> receive /recursive
-
-   The notation "..." within directory brackets in VMS means "this
-   directory and all directories below it"; the /RECURSIVE switch, when
-   given to the sender, implies the use of "..." in the file
-   specification so you don't have to include "..."; but it makes no
-   difference if you do:
-
-  $ kermit
-  C-Kermit> send /recursive [olga...]*.*;0
-
-   And at the receiver:
-
-  C-Kermit> cd [.olga]
-  C-Kermit> receive /recursive
-
-   In either case, since both systems recognize each other as VMS, they
-   switch into LABELED transfer mode automatically.
-     _________________________________________________________________
-
-    4.11.6. Moving Directory Trees Between Unlike Systems
-
-   There are several difficulties with recursive transfers between unlike
-   systems:
-
-     * File formats can be different, especially text files character
-       sets and record formats. This can now be handled by using SET FILE
-       PATTERN, SET FILE TEXT-PATTERNS, and SET FILE BINARY-PATTERNS
-       ([511]Section 4.3).
-     * File naming conventions are different. For example, one system
-       might allow (and use) longer filenames than the other. You can
-       tell Kermit how to handle file names with the normal "set file
-       names" and "set file collision" mechanisms. Most modern Kermits
-       are fairly tolerant of illegal filenames and should not fail
-       simply because of an incoming filename; rather, it will do its
-       best to convert it to a recognizable and unique legal filename.
-     * Directory notations can be different, e.g. backslashes instead of
-       slashes, brackets, parentheses, spaces, etc. But this is now
-       handled by converting pathnames to a standard format during
-       transfer ([512]Section 4.10).
-
-   So now, for the first time, it is possible to send directory trees
-   among any combination of UNIX, DOS, Windows, OS/2, VMS, AOS/VS, etc.
-   Here's an example sending files from an HP-UX system (where text files
-   are encoded in the HP Roman8 character set) to a PC with K95 (where
-   text files are encoded in CP850):
-
- Sender:
-  cd xxx                           ; CD to root of source tree
-  set file type binary             ; Default transfer mode
-  set file character-set hp-roman8 ; Local character set for text files
-  set xfer character-set latin1    ; Transfer character set
-  set file patterns on             ; Enable automatic file-type switching...
-  set file binary-patterns *.Z *.gz *.o  ; based on these patterns...
-  set file text-patterns *.txt *.c *.h   ; for binary and text files.
-  send /recursive *                ; Send all the file in this directory tree
-
- Receiver:
-  cd yyy                           ; CD to root of destination tree
-  set file character-set cp850     ; Local character set for text files
-  receive /pathnames:relative      ; Receive with pathnames
-
-   Notes:
-     * Replace "xxx" and "yyy" with the desired directories.
-     * Replace the file character sets appropriately.
-     * Change the patterns as needed (or just use the built-in default
-       lists).
-     * SEND /RECURSIVE also implies /PATHNAMES:RELATIVE.
-     * The file sender tells the file receiver the transfer mode of each
-       file.
-     * The file sender tells the file receiver the transfer character
-       set.
-     * By default, destination file dates will be the same as on the
-       source.
-     * Many of the settings shown might already be set by default.
-     * See [513]Sections 4.3, [514]4.10, and [515]4.15 for additional
-       explanation.
-
-   If you are refreshing an existing directory on the destination
-   computer, use "set file collision update" or other appropriate file
-   collision option to handle filename collisions.
-     _________________________________________________________________
-
-  4.12. Where Did My File Go?
-
-   Now that Kermit can be started by clicking on desktop icons (thus
-   obscuring the concept of "current directory"), and can have a download
-   directory, and can create directories for incoming files on the fly,
-   etc, sometimes it is easy to lose a file after transfer. Of course, if
-   you keep a transaction log:
-
-  LOG TRANSACTIONS
-
-   it will record the fate and final resting place of each file. But in
-   case you did not keep a log, the new command:
-
-  WHERE
-
-   added in C-Kermit 7.0, gives you as much information as it has about
-   the location of the last files transferred, including the pathname
-   reported by the receiving Kermit, if any, when C-Kermit is the sender.
-   This information was also added to SHOW FILE in somewhat less detail.
-     _________________________________________________________________
-
-  4.13. File Output Buffer Control
-
-   (UNIX only). The new command SET FILE OUTPUT lets you control how
-   incoming files are written to disk:
-
-   SET FILE OUTPUT BUFFERED [ size ]
-          Chooses buffered file output; this is the default. UNIX does
-          its normal sort of disk buffering. The optional size specifies
-          Kermit's own file output buffer size, and therefore the
-          frequency of disk accesses (write() system calls) -- the bigger
-          the size, the fewer the disk accesses.
-
-   SET FILE OUTPUT UNBUFFERED [ size ]
-          This forces each file output write() call to actually commit
-          the data to disk immediately. Choosing this option will usually
-          slow file reception down.
-
-   SET FILE OUTPUT BLOCKING
-          Write() calls should not return until they are complete. This
-          is the normal setting, and it lets Kermit detect disk-write
-          errors immediately.
-
-   SET FILE OUTPUT NONBLOCKING
-          Write() calls should return immediately. This can speed up file
-          reception, but also delay the detection of disk-write errors.
-
-   Experimentation with these parameters should be harmless, and might
-   (or might not) have a perceptible, even dramatic, effect on
-   performance.
-     _________________________________________________________________
-
-  4.14. Improved Responsiveness
-
-   In version 7.0, C-Kermit's file-transfer protocol engine has been
-   tuned for additional speed and responsiveness.
-
-     * Binary-mode transfers over 8-bit connections, a very common case,
-       are now handled in a special way that minimizes overhead.
-     * SET TRANSFER CRC-CALCULATION is now OFF by default, rather than
-       ON. (This affects only the overall per-transfer CRC, \v(crc16),
-       not the per-packet CRCs)
-     * Connection loss during file transfer is now detected immediately
-       in most cases on Internet connections and on serial connections
-       when CARRIER-WATCH is not set to OFF.
-     _________________________________________________________________
-
-  4.15. Doubling and Ignoring Characters for Transparency
-
-   The following commands were added in 7.0, primarily to allow
-   successful file transfer through ARPAnet TACs and with Honeywell DPS6
-   systems, but can be used in any setting where they might be needed:
-
-   SET SEND DOUBLE-CHAR { [ char [ char [ ... ] ] ], NONE }
-          Tells C-Kermit to double the specified characters (use decimal
-          notation) in packets that it sends. For example, if you are
-          sending files through a device that uses @ as an escape
-          character, but allows you to send a single copy of @ through by
-          doubling it, use "set send double 64".
-
-   SET RECEIVE IGNORE-CHAR [ char [ char [ ... ] ] ]
-          Tells C-Kermit to ignore the specified character(s) in incoming
-          packets. Use this, for example, when something between the
-          sender and receiver is inserting linefeeds for wrapping, NULs
-          for padding, etc.
-     _________________________________________________________________
-
-  4.16. New File-Transfer Display Formats
-
-   SET TRANSFER DISPLAY { BRIEF, CRT, FULLSCREEN, NONE, SERIAL }
-          Selects the file-transfer display format.
-
-   BRIEF is the new one. This writes one line to the screen per file,
-   showing the file's name, transfer mode, size, the status of the
-   transfer, and when the transfer is successful, the effective data rate
-   in characters per second (CPS). Example:
-
-  SEND ckcfn3.o (binary) (59216 bytes): OK (0.104 sec, 570206 cps)
-  SEND ckcfns.o (binary) (114436 bytes): OK (0.148 sec, 772006 cps)
-  SEND ckcmai.c (text) (79147 bytes): OK (0.180 sec, 438543 cps)
-  SEND ckcmai.o (binary) (35396 bytes): OK (0.060 sec, 587494 cps)
-  SEND ckcnet.o (binary) (62772 bytes): REFUSED
-  SEND ckcpro.o (binary) (121448 bytes): OK (0.173 sec, 703928 cps)
-  SEND ckcpro.w (text) (63687 bytes): OK (0.141 sec, 453059 cps)
-  SEND makefile (text) (186636 bytes): OK (0.444 sec, 420471 cps)
-  SEND wermit (binary) (1064960 bytes): OK (2.207 sec, 482477 cps)
-
-   Note that transfer times are now obtained in fractional seconds,
-   rather than whole seconds, so the CPS figures are more accurate (the
-   display shows 3 decimal places, but internally the figure is generally
-   precise to the microsecond).
-     _________________________________________________________________
-
-  4.17. New Transaction Log Formats
-
-   The new command:
-
-  SET TRANSACTION-LOG { VERBOSE, FTP, BRIEF [ separator ] }
-
-   lets you choose the format of the transaction log. VERBOSE (the
-   default) indicates the traditional format described in the book. BRIEF
-   and FTP are new. This command must be given prior to the LOG
-   TRANSACTION command if a non-VERBOSE type is desired.
-
-    4.17.1. The BRIEF Format
-
-   BRIEF chooses a one-line per file format suitable for direct
-   importation into databases like Informix, Oracle, or Sybase, in which:
-
-     * Each record has 8 fields.
-     * Fields are separated by a non-alphanumeric separator character.
-     * The default separator character is comma (,).
-     * Any field containing the separator character is enclosed in
-       doublequotes.
-     * The final field is enclosed in doublequotes.
-
-   The fields are:
-
-    1. Date in yyyymmdd format
-    2. Time in hh:mm:ss format
-    3. Action: SEND or RECV
-    4. The local filename
-    5. The size of the file
-    6. The transfer mode (text, binary, image, labeled)
-    7. The status of the transfer: OK or FAILED
-    8. Additional status-dependent info, in doublequotes.
-
-   Examples:
-
-  20000208,12:08:52,RECV,/u/olga/oofa.txt,5246,text,OK,"0.284sec 18443cps"
-  20000208,12:09:31,SEND,/u/olga/oofa.exe,32768,binary,OK,"1.243sec 26362cps"
-  20000208,12:10:02,SEND,"/u/olga/a,b",10130,text,FAILED,"Refused: date"
-
-   Note how the filename is enclosed in doublequotes in the final
-   example, because it contains a comma.
-
-   To obtain BRIEF format, you must give the SET TRANSACTION-LOG BRIEF
-   command before the LOG TRANSACTIONS command. (If you give them in the
-   opposite order, a heading is written to the log by the LOG command.)
-     _________________________________________________________________
-
-    4.17.2. The FTP Format
-
-   SET TRANSACTION-LOG FTP (available only in UNIX) chooses a format that
-   is compatible with the WU-FTPD (Washington University FTP daemon) log,
-   and so can be processed by any software that processes the WU-FTPD
-   log. It logs only transfers in and out, both successful and failed
-   (but success or failure is not indicated, due to lack of a field in
-   the WU-FTPD log format for this purpose). Non-transfer events are not
-   recorded.
-
-   Unlike other logs, the FTP-format transaction log is opened in append
-   mode by default. This allows you to easily keep a record of all your
-   kermit transfers, and it also allows the same log to be shared by
-   multiple simultaneous Kermit processes or (permissions permitting)
-   users. You can, of course, force creation of a new logfile by
-   specifying the NEW keyword after the filename, e.g.
-
-  log transactions oofa.log new
-
-   All records in the FTP-style log are in a consistent format. The first
-   field is fixed-length and contains spaces; subsequent fields are
-   variable length, contain no spaces, and are separated by one or more
-   spaces. The fields are:
-
-   Timestamp
-          This is an asctime-style timestamp, example: "Wed Sep 16
-          20:19:05 1999" It is always exactly 24 characters long, and the
-          subfields are always in fixed positions.
-
-   Elapsed time
-          The whole number of seconds required to transfer the file, as a
-          string of decimal digits, e.g. "24".
-
-   Connection
-          The name of the network host to which C-Kermit is connected, or
-          the name of the serial device through which it has dialed (or
-          has a direct connection), or "/dev/tty" for transfers in remote
-          mode.
-
-   Bytes transferred
-          The number of bytes transferred, decimal digits, e.g.
-          "1537904".
-
-   Filename
-          The name of the file that was transferred, e.g.
-          "/pub/ftp/kermit/a/README.TXT". If the filename contains any
-          spaces or control characters, each such character is replaced
-          by an underscore ('_') character.
-
-   Mode
-          The letter 'b' if the file was transferred in binary mode, or
-          'a' if it was transferred in text (ASCII) mode.
-
-   Options
-          This field always contains an underscore ('_') character.
-
-   Direction
-          The letter 'o' if the file was transferred Out, and 'i' if the
-          file was transferred In.
-
-   User class
-          The letter 'r' indicates the file was transferred by a Real
-          user.
-
-   User identification
-          The ID of the user who transferred the file.
-
-   Server identification
-          The string "kermit". This distinguishes a Kermit transfer log
-          record from a WU-FTPD record, which contains "ftp" in this
-          field.
-
-   Authentication class
-          The digit '1' if we know the user's ID on the client system,
-          otherwise '0'. Currently, always '0'.
-
-   Authenticated user
-          If the authentication class is '1', this is the user's ID on
-          the client system. Otherwise it is an asterisk ('*'). Currently
-          it is always an asterisk.
-
-   Examples:
-
-  Thu Oct 22 17:42:48 1998 0 * 94 /usr/olga/new.x a _ i r olga kermit 0 *
-  Thu Oct 22 17:51:29 1998 1 * 147899 /usr/olga/test.c a _ o r olga kermit 0 *
-  Thu Oct 22 17:51:44 1998 1 * 235 /usr/olga/test.o b _ i r olga kermit 0 *
-  Fri Oct 23 12:10:25 1998 0 * 235 /usr/olga/x.ksc a _ o r olga kermit 0 *
-
-   Note that an ftp-format transaction log can also be selected on the
-   Kermit command line as follows:
-
-  kermit --xferfile:filespec
-
-   This is equivalent to:
-
-  SET TRANSACTION-LOG FTP
-  LOG TRANSACTIONS filespec APPEND
-
-   Conceivably it could be possible to have a system-wide shared Kermit
-   log, except that UNIX lacks any notion of an append-only file; thus
-   any user who could append to the log could also delete it (or alter
-   it). This problem could be worked around using setuid/setgid tricks,
-   but these would most likely interfere with the other setuid/setgid
-   tricks C-Kermit must use for getting at dialout devices and UUCP
-   logfiles.
-     _________________________________________________________________
-
-  4.18. Unprefixing NUL
-
-   As of 6.1.193 Alpha.10, C-Kermit can finally send and receive
-   file-transfer packets in which NUL (ASCII 0) is unprefixed (no more
-   NUL-terminated packets!). NUL is, of course, extremely prevalent in
-   binary files such as executables, and this has been a significant
-   source of packet overhead. For example, when transferring itself (the
-   SunOS C-Kermit executable) with minimal prefixing and 9000-byte
-   packets, we see:
-
-  File size:                       1064960
-  Packet chars with 0 prefixed:    1199629  overhead = 12.65%
-  Packet chars with 0 unprefixed:  1062393  overhead = -0.03%
-
-   Transfer rates go up accordingly, not only because of the reduced
-   amount of i/o, but also because less computation is required on each
-   end.
-     _________________________________________________________________
-
-  4.19. Clear-Channel Protocol
-
-   Now that C-Kermit itself is capable of sending and receiving any byte
-   at all on a clear channel ([516]Section 4.18), it is, for the first
-   time, in a position to negotiate a clear channel with the other
-   Kermit, giving it permission (but not requiring it) to unprefix any
-   and all characters that it knows are safe. In general this means all
-   but the Kermit start-of-packet character (normally Ctrl-A), Carriage
-   Return (not only Kermit's end-of-packet character, but also treated
-   specially on Telnet NVT links), and IAC (255, also special to Telnet).
-
-   By default, C-Kermit will say it has a clear channel only if it has
-   opened a TCP socket. Since the Kermit program on the far end of a
-   TCP/IP connection generally does not know it has a TCP/IP connection,
-   it will not announce a clear channel unless it has been told to do so.
-   The command is:
-
-   SET CLEAR-CHANNEL { ON, OFF, AUTO }
-
-   AUTO is the default, meaning that the clear-channel status is
-   determined automatically from the type of connection. ON means to
-   announce a clear channel, OFF means not to announce it. Use SHOW
-   STREAMING ([517]Section 4.20) to see the current CLEAR-CHANNEL status.
-   Synonym: SET CLEARCHANNEL.
-
-   CLEAR-CHANNEL is also set if you start C-Kermit with the -I switch
-   (see [518]Section 4.20).
-
-   Whenever a clear channel is negotiated, the resulting
-   control-character unprefixing is "sticky"; that is, it remains in
-   effect after the transfer so you can use SHOW CONTROL to see what was
-   negotiated.
-
-   You can also see whether a clear channel was negotiated in the
-   STATISTICS /VERBOSE Display.
-
-   The advantage of the clear channel feature is that it can make file
-   transfers go faster automatically. The disadvantage would be
-   file-transfer failures if the channel is not truly clear, for example
-   if C-Kermit made a Telnet connection to a terminal server, and then
-   dialed out from there; or if C-Kermit made an Rlogin connection to
-   host and then made a Telnet connection from there to another host. If
-   a file transfer fails on a TCP/IP connection, use SHOW CONTROL to
-   check whether control characters became unprefixed as a result of
-   protocol negotiations, and/or SHOW STREAMING ([519]Section 4.20) to
-   see if "clear-channel" was negotiated. If this happened, use SET
-   CLEAR-CHANNEL OFF and SET PREFIXING CAUTIOUS (or whatever) to prevent
-   it from happening again.
-     _________________________________________________________________
-
-  4.20. Streaming Protocol
-
-   A new Kermit protocol option called "streaming" was added in C-Kermit
-   7.0. The idea is that if the two Kermit partners have a reliable
-   transport (such as TCP/IP or X.25) between them, then there is no need
-   to send ACKs for Data packets, or NAKs, since a reliable transport
-   will, by definition, deliver all packets in order and undamaged. On
-   such a connection, streaming cuts down not only on Kermit program
-   overhead (switching back and forth between reading and sending
-   packets), but also tends to make the underlying transport use itself
-   more efficiently (e.g. by defeating the Nagle algorithm and/or Delayed
-   ACK stratagem of the TCP layer). Furthermore, it allows transfers to
-   work smoothly on extremely slow network congestions that would
-   otherwise cause timeouts and retransmissions, and even failure when
-   the retry limit was exceeded.
-
-   The trick is knowing when we can stream:
-
-    1. If C-Kermit has opened a TCP socket or X.25 connection, it offers
-       stream.
-    2. If C-Kermit has been started with the -I (uppercase) option, or if
-       it has been told to SET RELIABLE ON, it offers to stream.
-    3. If C-Kermit is in remote mode, and has been told to SET RELIABLE
-       AUTO (or ON), it always offers to stream, and also always agrees
-       to stream, if the other Kermit offers. Unless you take explicit
-       actions to override the defaults, this allows the local Kermit
-       (the one that made the connection, and so knows whether it's
-       reliable) to control streaming.
-
-   (Note that an offer to stream also results in a Clear-Channel
-   announcement if CLEAR-CHANNEL is set to AUTO; see [520]Section 4.19.)
-
-   When BOTH Kermits offer to stream, then they stream; otherwise they
-   don't. Thus streaming-capable Kermit programs interoperate
-   automatically and transparently with nonstreaming ones. If the two
-   Kermits do agree to stream, you'll see the word "STREAMING" on the
-   fullscreen file-transfer display in the Window Slots field. You can
-   also find out afterwards with the STATISTICS or SHOW STREAMING
-   commands.
-
-     WARNING: Automatic choice of streaming is based on the assumption
-     of a "direct" end-to-end network connection; for example, a Telnet
-     or Rlogin connection from host A to host B, and transferring files
-     between A and B. However, if your connection has additional
-     components -- something "in the middle" (B) that you have made a
-     network connection to, which makes a separate connection to the
-     destination host (C), then you don't really have a reliable
-     connection, but C-Kermit has no way of knowing this; transferring
-     files between A and C will probably fail. In such cases, you'll
-     need to tell the *local* C-Kermit to "set reliable off" before
-     transferring files (it does no good to give this command to the
-     remote Kermit since the local one controls the RELIABLE setting).
-
-   Streaming is like using an infinite window size, with no timeouts and
-   no tolerance for transmission errors (since there shouldn't be any).
-   It relies on the underlying transport for flow control, error
-   correction, timeouts, and retransmission. Thus it is very suitable for
-   use on TCP/IP connections, especially slow or bursty ones, since
-   Kermit's packet timeouts won't interfere with the transfer -- each
-   packet takes as long to reach its destination as it takes TCP to
-   deliver it. If TCP can't deliver the packet within its own timeout
-   period (over which Kermit has no control), it signals a fatal error.
-   Just like FTP.
-
-   Streaming goes much faster than non-streaming when a relatively small
-   packet length is used, and it tends to go faster than non-streaming
-   with even the longest packet lengths. The Kermit window size is
-   irrelevant to streaming protocol, but still might affect performance
-   in small ways since it can result in different paths through the code.
-
-   The definition of "reliable transport" does not necessarily demand
-   8-bit and control-character transparency. Streaming can work with
-   parity and/or control-character prefixing just as well (but not as
-   fast) as without them; in such cases you can leave RELIABLE set to ON,
-   but set CLEARCHANNEL and/or PARITY appropriately.
-
-   Maximum performance -- comparable to and often exceeding FTP -- is
-   achieved on socket-to-socket connections (in which the considerable
-   overhead of the terminal driver and Telnet or Rlogin server is
-   eliminated) with long packets and the new "brief" file-transfer
-   display ([521]Section 4.16).
-     _________________________________________________________________
-
-    4.20.1. Commands for Streaming
-
-   SET RELIABLE { ON, OFF, AUTO }
-          SET RELIABLE ON tells Kermit that it has a reliable transport.
-          SET RELIABLE OFF tells Kermit the transport is not reliable.
-          SET RELIABLE AUTO tells Kermit that it should SET RELIABLE ON
-          whenever it makes a reliable connection (e.g. TELNET or SET
-          HOST on a TCP/IP or X.25 network), and when in remote mode it
-          should believe the transport is reliable if the other Kermit
-          says it is during Kermit protocol negotiation.
-
-   AUTO is the default; the Kermit program that makes the connection
-   knows whether it is reliable, and tells the remote Kermit.
-
-   The RELIABLE setting has several effects, including:
-
-     * It can affect the timeouts used during normal ACK/NAK protocol.
-     * It can affect the clear-channel announcement.
-     * It can affect streaming.
-
-   If you TELNET or SET HOST somewhere, this includes an implicit SET
-   RELIABLE ON command. The -I command-line option is equivalent to SET
-   RELIABLE ON.
-
-   Since SET RELIABLE ON (and -I) also implies SET CLEAR CHANNEL ON, you
-   might find that in certain cases you need to tell Kermit that even
-   though the connection is reliable, it doesn't have a clear channel
-   after all:
-
-  SET CLEAR-CHANNEL OFF
-  SET PREFIXING CAUTIOUS ; or whatever...
-
-   You can control streaming without affecting the other items with:
-
-  SET STREAMING { ON, OFF, AUTO }
-
-   AUTO is the default, meaning streaming will occur if Kermit has made a
-   TCP/IP connection or if RELIABLE is ON (or it was started with the -I
-   command line option). OFF means don't stream; ON means offer to stream
-   no matter what.
-     _________________________________________________________________
-
-    4.20.2. Examples of Streaming
-
-   Here we look at the use and behavior of streaming on several different
-   kinds of connections, and compare its performance with non-streaming
-   transfers.
-
-    4.20.2.1. Streaming on Socket-to-Socket Connections
-
-   Here we get streaming automatically when both Kermit programs are
-   capable of it, since they both make socket connections. For example,
-   on the far end:
-
-  C-Kermit> set host * 3000
-  C-Kermit> server
-
-   and on the near end:
-
-  C-Kermit> set host foo.bar.xyz.com 3000
-  (now give SEND and GET command)
-
-   All subsequent file transfers use streaming automatically.
-
-   Here are the results from 84 trials, run on a production network,
-   disk-to-disk, in which a 1-MB binary file (the SunOS C-Kermit Sparc
-   executable) was sent from a Sun Sparc-10 with SunOS 4.1.3 to an IBM
-   Power Server 850 with AIX 4.1, socket-to-socket, over a 10Mbps 10BaseT
-   Ethernet, using minimal control-character unprefixing, window sizes
-   from 10 to 32, and packet sizes from 1450 to 9010:
-
-                Streaming    Nonstreaming
-  Max CPS         748955        683354
-  Min CPS         221522        172491
-  Mean CPS        646134        558680
-  Median CPS      678043        595874
-  Std Dev         101424        111493
-
-   Correlations:
-
-  CPS and window size:   -0.036
-  CPS and packet length:  0.254
-  CPS and streaming:      0.382
-
-   Note that the relationship between streaming and throughput is
-   significantly stronger than that between CPS and window size or packet
-   length.
-
-   Also note that this and all other performance measurements in this
-   section are snapshots in time; the results could be much different at
-   other times when the load on the systems and/or the network is higher
-   or lower.
-
-   In a similar socket-to-socket trial, but this time over a wide-area
-   TCP/IP connection (from New York City to Logan, Utah, about 2000
-   miles), the following results were obtained:
-
-                Streaming    Nonstreaming
-  Max CPS         338226        318203
-  Min CPS         191659        132314
-  Mean CPS        293744        259240
-  Median CPS      300845        273271
-  Std Dev          41914         52351
-
-   Correlations:
-
-  CPS and window size:    0.164
-  CPS and packet length:  0.123
-  CPS and streaming:      0.346
-     _________________________________________________________________
-
-    4.20.2.2. Streaming on Telnet Connections
-
-   In this case the local copy of Kermit is told to TELNET or SET HOST,
-   and so it knows it has a reliable connection and -- unless it has been
-   told not to -- will offer to stream, and the other Kermit program,
-   since it has STREAMING set to AUTO, agrees.
-
-   Since we have a reliable connection, we'll also get control-character
-   unprefixing automatically because of the new clear-channel protocol
-   ([522]Section 4.19).
-
-   Any errors that occur during streaming are fatal to the transfer. The
-   message is "Transmission error on reliable link". Should this happen:
-
-    1. Check the remote Kermit's flow control setting (SHOW
-       COMMUNICATIONS). If it is NONE, change it to XON/XOFF, or vice
-       versa. If it is XON/XOFF (or you just changed it to XOFF/XOFF),
-       make sure the file sender is prefixing the XON and XOFF
-       characters. In the most drastic case, use "set prefix all" to
-       force prefixing of all control characters.
-    2. The remote Telnet server might chop off the 8th bit. In that case,
-       tell C-Kermit to "set parity space". Or, you might be able to
-       force the Telnet to allow eight-bit data by telling C-Kermit to
-       "set telopt binary request accept" -- that is, request the Telnet
-       server to enter binary mode, and accept binary-mode bids from the
-       server.
-    3. The remote Telnet server might have a buffering limitation. If a
-       and b don't cure the problem, tell the file receiver to "set
-       receive packet-length 1000" (or other number -- use the largest
-       one that works). This too, is no different from the non-streaming
-       case (more about this in [523]Section 4.20.2.3).
-
-   And remember you can continue interrupted binary-mode transfers where
-   they left off with the RESEND (= SEND /RECOVER) command.
-
-   Here are the figures for the same 84 trials between the same Sun and
-   IBM hosts as in 4.20.2.1, on the same network, but over a Telnet
-   connection rather than socket-to-socket:
-
-                  Streaming    Nonstreaming
-  Max CPS         350088        322523
-  Min CPS          95547        173152
-  Mean CPS        321372        281830
-  Median CPS      342604        291469
-  Std Dev          40503         29948
-
-   Correlations:
-
-  CPS and window size:    0.001
-  CPS and packet length:  0.152
-  CPS and streaming:      0.128
-
-   Here the effect is not as emphatic as in the socket-to-socket case,
-   yet on the whole streaming tends to be beneficial.
-
-   Additional measurements on HP-UX using C-Kermit 7.0 Beta.06:
-
-                  Windowing     Streaming
-  HP-UX 8->8      not tested       14Kcps
-  HP-UX 8->9      not tested       76Kcps
-  HP-UX 8->10      36Kcps          66Kcps
-  HP-UX 9->9      not tested      190Kcps
-  HP-UX 9->10     160Kcps         378Kcps
-     _________________________________________________________________
-
-    4.20.2.3. Streaming with Limited Packet Length
-
-   The IRIX telnet server (at least the ones observed in IRIX 5.3 and
-   6.2) does not allow Kermit to send packets longer than 4096 bytes.
-   Thus when sending from IRIX C-Kermit when it is on the remote end of a
-   Telnet connection, the packet length must be 4K or less. Trials in
-   this case (in which packet lengths range from 1450 to 4000) show a
-   strong advantage for streaming, which would be evident in any other
-   case where the packet length is restricted, and stronger the shorter
-   the maximum packet length.
-
-                  Streaming    Nonstreaming
-  Max CPS         426187        366870
-  Min CPS         407500        276517
-  Mean CPS        415226        339168
-  Median CPS      414139        343803
-  Std Dev           6094         25851
-
-   Correlations:
-
-  CPS and window size:    0.116
-  CPS and packet length:  0.241
-  CPS and streaming:      0.901
-     _________________________________________________________________
-
-    4.20.2.4. Streaming on Dialup Connections
-
-   Here "dialup" refers to a "direct" dialup connection, not a SLIP or
-   PPP connection, which is only a particular kind of TCP/IP connection.
-
-   Attempt this at your own risk, and then only if (a) you have
-   error-correcting modems, and (b) the connections between the modems
-   and computers are also error-free, perfectly flow-controlled, and free
-   of interrupt conflicts. Streaming can be used effectively and to
-   fairly good advantage on such connections, but remember that the
-   transfer is fatal if even one error is detected (also remember that
-   should a binary-mode transfer fail, it can be recovered from the point
-   of failure with RESEND).
-
-   To use streaming on an unreliable connection, you must tell both
-   Kermits that the connection is reliable:
-
-  kermit -I
-
-   or:
-
-  C-Kermit> set reliable on
-
-   In this case, it will probably be necessary to prefix some control
-   characters, for example if your connection is through a terminal
-   server that has an escape character. Most Cisco terminal servers, for
-   example, require Ctrl-^ (30, as well as its high-bit equivalent, 158)
-   to be prefixed. To unprefix these, you'll need to defeat the "clear
-   channel" feature:
-
-  C-Kermit> set reliable on
-  C-Kermit> set clear-channel off
-  C-Kermit> set prefixing none
-  C-Kermit> set control prefix 1 13 30 158 ; and whatever else is necessary
-
-   Dialup trials were done using fixed large window and packet sizes.
-   They compare uploading and downloading of two common types of files,
-   with and without streaming. Configuration:
-
-     HP-9000/715/33 -- 57600bps, RTS/CTS -- USR Courier V.34 --
-     V.34+V.42, 31200bps -- USR V.34+ Rackmount -- 57600bps, RTS/CTS --
-     Cisco terminal server -- Solaris 2.5.1. Packet size = 8000, Window
-     Size = 30, Control Character Unprefixing Minimal (but including the
-     Cisco escape character).
-
-   Since this is not a truly reliable connection, a few trials failed
-   when a bad packet was received (most likely due to UART overruns); the
-   failure was graceful and immediate, and the message was informative.
-   The results of ten successful trials uploading and downloading the two
-   files with and without streaming are:
-
-            Streaming..
-            Off    On
-   Upload   5194   5565   txt (= C source code, 78K)
-            3135   3406   gz  (= gzip file, compressed, 85K)
- Download   5194   5565   txt
-            3041   3406   gz
-
-   Each CPS figure is the mean of 10 results.
-
-   A brief test was also performed on a LAT-based dialout connection from
-   a VAX 3100 with VMS 5.5 to a USR Courier V.34 connected to a DECserver
-   700 at 19200 bps. The 1-MB Sparc executable downloaded from a Sun to
-   the VAX at 1100cps without streaming and 1900cps with streaming, using
-   8000-byte packets, 30 window slots, and minimal prefixing in both
-   cases.
-     _________________________________________________________________
-
-    4.20.2.5. Streaming on X.25 Connections
-
-   We have only limited access to X.25 networks. One trial was performed
-   in which the 1MB Solaris 2.4 Sparc executable was transferred over a
-   SunLink X.25 connection; nothing is known about the actual physical
-   connection. With a packet length of 8000 and a window size of 30, the
-   file transferred at 6400 cps (using a maximum of 6 window slots). With
-   the same packet length, but with streaming, it transferred without
-   mishap at 6710 cps, about 5% faster.
-     _________________________________________________________________
-
-    4.20.3. Streaming - Preliminary Conclusions
-
-   The results vary with the particular connection, but are good overall.
-   Although numerous lower-level tricks can be used to improve
-   performance on specific platforms or connection methods, streaming
-   occurs at a high, system-independent level of the Kermit protocol and
-   therefore can apply to all types of platforms and (reliable)
-   connections transparently.
-     _________________________________________________________________
-
-  4.21. The TRANSMIT Command
-
-   Prior to C-Kermit 7.0, the TRANSMIT command transmitted in text or
-   binary mode according to SET FILE TYPE { TEXT, BINARY }. But now that
-   binary mode is likely to be the default for protocol transfers, it is
-   evident that this not also an appropriate default for TRANSMIT, since
-   binary-mode TRANSMIT is a rather specialized and tricky operation.
-   Therefore, TRANSMIT defaults to text mode always, regardless of the
-   FILE TYPE setting.
-
-   C-Kermit 7.0 expands the capabilities of the TRANSMIT command by
-   adding the following switches (see [524]Section 1.5). The new syntax
-   is:
-
-  TRANSMIT [ switches... ] filename
-
-   Zero or more switches may be included:
-
-   /PIPE
-          When /PIPE is included, "filename" is interpreted as a system
-          command or program whose output is to be sent. Synonym:
-          /COMMAND. Example:
-
-  transmit /pipe finger
-
-          You may enclose the command in braces, but you don't have to:
-
-  xmit /pipe {ls -l | sort -r +0.22 -0.32 | head}
-
-   /BINARY
-          Transmits the file (or pipe output) in binary mode.
-
-   /TEXT
-          Transmits the file (or pipe output) in line-oriented text mode.
-          Current FILE CHARACTER-SET and TERMINAL CHARACTER-SET
-          selections govern translation. Default.
-
-   /TRANSPARENT
-          Specifies text mode without character-set translation, no
-          matter what the FILE and TERMINAL CHARACTER-SET selections are.
-
-   /NOWAIT
-          This is equivalent to SET TRANSMIT PROMPT 0, but for this
-          TRANSMIT command only. Applies only to text mode; it means to
-          not wait for any kind of echo or turnaround character after
-          sending a line before sending the next line. (Normally Kermit
-          waits for a linefeed.)
-
-   When TRANSMIT ECHO is ON, C-Kermit tries to read back the echo of each
-   character that is sent. Prior to C-Kermit 7.0, 1 second was allowed
-   for each echo to appear; if it didn't show up in a second, the
-   TRANSMIT command would fail. Similarly for the TRANSMIT PROMPT
-   character. However, with today's congested Internet connections, etc,
-   more time is often needed:
-
-   SET TRANSMIT TIMEOUT number
-   Specifies the number of seconds to wait for an echo or the prompt
-   character when TRANSMIT PROMPT is nonzero; the default wait is 1
-   second. If you specify 0, the wait is indefinite. When a timeout
-   interval of 0 is specified, and a desired echo or prompt does not show
-   up, the TRANSMIT command will not terminate until or unless you
-   interrupt it with Ctrl-C; use SET TRANSMIT TIMEOUT 0 with caution.
-
-   Note: to blast a file out the communications connection without any
-   kind of synchronization or timeouts or other manner of checking, use:
-
-  SET TRANSMIT ECHO OFF
-  SET TRANSMIT PROMPT 0 (or include the /NOWAIT switch)
-  SET TRANSMIT PAUSE 0
-  TRANSMIT [ switches ] filename
-
-   In this case, text-file transmission is not-line oriented and large
-   blocks can be sent, resulting in a significant performance improvement
-   over line-at-at-time transmission. Successful operation depends (even
-   more than usual for the TRANSMIT command!) on a clean connection with
-   effective flow control.
-
-   For details on TRANSMIT and character sets, see [525]Section 6.6.5.4.
-     _________________________________________________________________
-
-  4.22. Coping with Faulty Kermit Implementations
-
-   Kermit protocol has been implemented in quite a few third-party
-   commercial, shareware, and freeware software packages, with varying
-   degrees of success. In most cases operation is satisfactory but slow
-   -- only the bare minimum subset of the protocol is available -- short
-   packets, no sliding windows, no attributes, etc. In other cases, the
-   implementation is incorrect, resulting in failures at the initial
-   negotiation stage or corrupted files.
-
-   C-Kermit 7.0 and Kermit 95 1.1.19 include some new defense mechanisms
-   to help cope with the most common situations. However, bear in mind
-   there is only so much we can do in such cases -- the responsibility
-   for fixing the problem lies with the maker of the faulty software.
-     _________________________________________________________________
-
-    4.22.1. Failure to Accept Modern Negotiation Strings
-
-   The published Kermit protocol specification states that new fields can
-   be added to the parameter negotiation string. These are to be ignored
-   by any Kermit implementation that does not understand them; this is
-   what makes the Kermit protocol extensible. Unfortunately, some Kermit
-   implementations become confused (or worse) when receiving a
-   negotiation string longer than the one they expect. You can try
-   working around such problems by telling Kermit to shorten its
-   negotiation string (and thus disable the corresponding new features):
-
-  SET SEND NEGOTIATION-STRING-MAX-LENGTH number
-
-   Try a number like 10. If that doesn't work, try 9, 8, 7, 6, and so on.
-     _________________________________________________________________
-
-    4.22.2. Failure to Negotiate 8th-bit Prefixing
-
-   The published Kermit protocol specification states that 8th-bit
-   prefixing (which allows transfer of 8-bit data over a 7-bit
-   connection) occurs if the file sender puts a valid prefix character
-   (normally "&") in the 8th-bit-prefix field of the negotiation string,
-   and the receiver puts either a letter "Y" or the same prefix
-   character. At least one faulty Kermit implementation exists that does
-   not accept the letter "Y". To force C-Kermit / K-95 to reply with the
-   other Kermit's prefix character rather than a "Y", give the following
-   (invisible) command:
-
-  SET Q8FLAG ON
-
-   Use SET Q8FLAG OFF to restore the normal behavior.
-     _________________________________________________________________
-
-    4.22.3. Corrupt Files
-
-   Refer to [526]Section 4.22.2. Some Kermit implementations mistakenly
-   interpret the "Y" as a prefix character. Then, whenever a letter Y
-   appears in the data, the Y and the character that follows it are
-   replaced by a garbage character. At this writing, we are not sure if
-   there is any solution, but try "set send negotiation-string-max-length
-   6" and/or "set q8flag on".
-
-   File corruption can also occur when control characters within the file
-   data are sent without prefixing, as at least some are by default in
-   C-Kermit 7.0 and K-95. Some Kermit implementations do not handle
-   incoming "bare" control characters. To work around, "set prefixing
-   all".
-     _________________________________________________________________
-
-    4.22.4. Spurious Cancellations
-
-   The Kermit protocol specification states that if an ACK to a Data
-   packet contains X in its data field, the transfer of the current file
-   is canceled, and if it contains a Z, the entire transfer is canceled.
-   At least one overzealous Kermit implementation applies this rule to
-   non-Data packets as well, the typical symptom being that any attempt
-   to transfer a file whose name begins with X or Z results in
-   cancellation. This is because the file receiver typically sends back
-   the name under which it stored the file (which might not be the same
-   as the name it was sent with) in the ACK to the File Header packet.
-   This is information only and should not cause cancellation. To work
-   around the problem, use:
-
-  SET F-ACK-BUG { ON, OFF }
-
-   ON tells Kermit not to send back the filename in the ACK to the file
-   header packet as it normally would do (OFF puts Kermit back to normal
-   after using ON).
-
-   A variation on the this bug occurs in an obscure Kermit program for
-   MUMPS: When this Kermit program sends a file called (say) FOO.BAR, it
-   requires that the ACK to its F packet contain exactly the same name,
-   FOO.BAR. However, C-Kermit likes to send back the full pathname,
-   causing the MUMPS Kermit to fail. SET F-ACK-BUG ON doesn't help here.
-   So a separate command has been added to handle this situation:
-
-  SET F-ACK-PATH { ON, OFF }
-
-   Normally it is ON (regardless of the SET SEND PATHNAMES setting). Use
-   SET F-ACK-PATH OFF to instruct Kermit to send back only the filename
-   without the path in the ACK to the F packet.
-     _________________________________________________________________
-
-    4.22.5. Spurious Refusals
-
-   Some Kermit implementations, notably PDP-11 Kermit 3.60 and earlier,
-   have bugs in their handling of Attribute packets that can cause
-   unwarranted refusal of incoming files, e.g. based on date or size.
-   This can be worked around by telling one or both of the Kermit
-   partners to:
-
-  SET ATTRIBUTES OFF
-     _________________________________________________________________
-
-    4.22.6. Failures during the Data Transfer Phase
-
-   This can be caused by control-character unprefixing ([527]Section
-   4.22.3 ), and fixed by:
-
-  SET PREFIXING ALL
-
-   It can also have numerous other causes, explained in Chapter 10 of
-   [528]Using C-Kermit: the connection is not 8-bit transparent (so use
-   "set parity space" or somesuch), inadequate flow control, etc. Consult
-   the manual.
-     _________________________________________________________________
-
-    4.22.7. Fractured Filenames
-
-   At least one well-known PC-based communications package negotiates
-   data compression, which (according to the protocol specification)
-   applies to both the filename and the file data, but then fails to
-   decompress the filename. Example: C-Kermit sends a file called
-   R000101.DAT (where 000101 might be non-Y2K-wise YYMMDD notation), and
-   the package in question stores the files as R~#0101.DAT. Workaround:
-   Tell C-Kermit to SET REPEAT COUNTS OFF.
-     _________________________________________________________________
-
-    4.22.8. Bad File Dates
-
-   At least one well-known PC-based communications package negotiates the
-   passing of file timestamps from sender to receiver, but when it is
-   sending files, it always gives them a timestamp of 1 February 1970.
-   Workaround: tell C-Kermit to SET ATTRIBUTE DATE OFF. You don't get the
-   file's real date, but you also don't get 1 Feb 1970; instead the file
-   gets the current date and time.
-     _________________________________________________________________
-
-  4.23. File Transfer Recovery
-
-   Prior to C-Kermit 7.0, RESEND (SEND /RECOVER) and REGET (GET /RECOVER)
-   refused to work if FILE TYPE was not BINARY or the /BINARY switch was
-   not included. Now these commands include an implied /BINARY switch,
-   meaning they set the file type to binary for the duration of the
-   command automatically.
-
-   In the client/server arrangement, this also forces the server into
-   binary mode (if it is C-Kermit 7.0 or greater, or K95 1.1.19 or
-   greater) so the recovery operation proceeds, just as you asked and
-   expected.
-
-   BUT... Just as before, the results are correct only under the
-   following conditions:
-
-     * If the prior interrupted transfer was also in binary mode; or:
-     * If the prior transfer was in text mode and the other computer was
-       a "like platform" (e.g. UNIX-to-UNIX, Windows-to-Windows,
-       DOS-to-Windows) AND there was no character-set translation (i.e.
-       TRANSFER CHARACTER-SET was TRANSPARENT).
-
-   Note that these circumstances are more likely to obtain in C-Kermit
-   7.0, in which:
-
-     * The default FILE TYPE in C-Kermit 7.0 is BINARY.
-     * The default FILE INCOMPLETE setting is AUTO, which means KEEP if
-       the transfer is in binary mode, DISCARD otherwise.
-     * C-Kermit 7.0, Kermit 95 1.1.17, and MS-DOS Kermit 3.15 and later
-       can recognize "like platforms" and switch into binary mode
-       automatically. Transfers between like platforms are always binary
-       unless character-set translation has been requested, and then is
-       still binary for all files whose names match a binary pattern,
-       unless the automatic mechanisms have been disabled (with a /TEXT
-       switch, or with SET TRANSFER MODE MANUAL).
-     * SEND /BINARY and GET /BINARY always force binary-mode transfers,
-       even when FILE TYPE is TEXT, even when TRANSFER MODE is AUTOMATIC,
-       even when PATTERNS are ON and the file's name matches a text
-       pattern.
-
-   But also note that the automatic client/server transfer-mode
-   adjustments do not work with versions of C-Kermit prior to 7.0 or K95
-   prior to 1.1.16.
-
-   If the prior transfer was in text mode:
-
-     * If text-mode transfers between the two platforms are
-       "length-changing" (as they are between UNIX -- which terminates
-       text lines with LF -- and DOS or Windows -- which terminates text
-       lines with CRLF), the recovered file will be corrupt.
-     * If text-mode transfers between the two platforms are not
-       length-changing, but character-set translation was active in the
-       prior transfer, the result will be a file in which the first part
-       has translated characters and the second part does not.
-
-   But in C-Kermit 7.0 and K95 1.1.19 and later, incompletely transferred
-   text files are not kept unless you change the default. But if you have
-   done this, and you have an incompletely transferred text file, you'll
-   need to:
-
-     * Transfer the whole file again in text mode, or:
-     * Use SEND /STARTING-AT: to recover the transfer at the correct
-       point; but you have to find out what that point is, as described
-       in the manual.
-
-   Kermit has no way of knowing whether the previous transfer was in text
-   or binary mode so it is your responsibility to choose the appropriate
-   recovery method.
-
-   If you use C-Kermit to maintain parallel directories on different
-   computers, using SET FILE COLLISION to transfer only those files that
-   changed since last time, and the files are big enough (or the
-   connection slow enough) to require SEND /RECOVER to resume interrupted
-   transfers, you should remember that SEND /RECOVER (RESEND) overrides
-   all FILE COLLISION settings. Therefore you should use SEND /RECOVER
-   (RESEND) only on the file that was interrupted, not the file group.
-   For example, if the original transfer was initiated with:
-
-  SEND *
-
-   and was interrupted, then after reestablishing your connection and
-   starting the Kermit receiver with SET FILE COLLISION UPDATE on the
-   remote end, use the following sequence at the sender to resume the
-   transfer:
-
-  SEND /RECOVER name-of-interrupted-file
-
-   and then:
-
-  SEND *
-
-   (In C-Kermit 7.0 and later, \v(filename) contains the name of the file
-   most recently transferred, as long you have not EXITed from Kermit or
-   changed directory, etc.
-     _________________________________________________________________
-
-  4.24. FILE COLLISION UPDATE Clarification
-
-   In UNIX, file modification dates are used when comparing the file date
-   with the date in the attribute packet. In VMS, however, the file
-   creation date is used. These two policies reflect the preferences of
-   the two user communities.
-
-   Also, remember that the file date/time given in the attribute packet
-   is the local time at the file sender. At present, no timezone
-   conversions are defined in or performed by the Kermit protocol. This
-   is primarily because this feature was designed at a time when many of
-   the systems where Kermit runs had no concept of timezone, and
-   therefore would be unable to convert (say, to/from GMT or UTC or Zulu
-   time).
-
-   As a consequence, some unexpected results might occur when
-   transferring files across timezones; e.g. commands on the target
-   system that are sensitive to file dates might work (UNIX "make",
-   backups, etc).
-
-   Timezone handling is deferred for a future release.
-     _________________________________________________________________
-
-  4.25. Autodownload Improvements
-
-   Refer to pages 164-165 of [529]Using C-Kermit about the hazards of
-   autodownload when C-Kermit is "in the middle". As of C-Kermit 7.0, no
-   more hazards. If C-Kermit has TERMINAL AUTODOWNLOAD ON and it detects
-   a packet of the current protocol type (Kermit or Zmodem), it "erases"
-   the visual aspect of the packet that would be seen by the terminal
-   (or, more to the point, the emulator, such as K95). This way, only
-   C-Kermit goes into RECEIVE mode, and not also the terminal emulator
-   through which C-Kermit is accessed. And therefore, it is no longer
-   necessary to SET TERMINAL AUTODOWNLOAD OFF to prevent multiple Kermits
-   from going into receive mode at once, but of course it is still
-   necessary to ensure that, when you have multiple Kermits in a chain,
-   that the desired one receives the autodownload.
-
-   The defaults have not been changed; Kermit 95 still has autodownload
-   ON by default, and C-Kermit has it OFF by default.
-     _________________________________________________________________
-
-  5. CLIENT/SERVER
-
-  5.0. Hints
-
-   If you use SET SERVER GET-PATH to set up your server, and the GET-PATH
-   does not include the server's current directory, clients can become
-   quite confused. For example, "remote dir oofa.txt" shows a file named
-   oofa.txt, but "get oofa.txt" fails. In this situation, you should
-   either DISABLE DIR or make your GET-PATH include the current
-   directory.
-     _________________________________________________________________
-
-  5.1. New Command-Line Options
-
-   The -G command-line option is like -g (GET), except the incoming file
-   is sent to standard output rather than written to disk.
-
-   The -I option ("Internet") is used to tell a remote C-Kermit program
-   that you are coming in via Internet Telnet or Rlogin and therefore
-   have a reliable connection. The -I option is equivalent to SET
-   RELIABLE ON and SET FLOW NONE.
-
-   The -O option ("Only One") tells C-Kermit to enter server mode but
-   then exit after the first client operation.
-
-   See [530]Section 9.3 for details.
-     _________________________________________________________________
-
-  5.2. New Client Commands
-
-   BYE and FINISH no longer try to do anything if a connection is not
-   active. Thus a sequence like "hangup" followed by "bye" or "finish"
-   will no longer get stuck in a long timeout-and-retransmission cycle,
-   nor will it try to open a new connection.
-
-   REMOTE EXIT
-          Similar to FINISH, except it ensures that the Kermit server
-          program exits back to the operating system or shell prompt.
-          (FINISH would return it to its interactive prompt if it was
-          started in interactive mode, and would cause it to exit if it
-          entered server mode via command-line option.) When C-Kermit is
-          to be the server, you can use { ENABLE, DISABLE } EXIT to
-          control the client's access to this feature.
-
-   REMOTE MKDIR directory-name
-          Tells the client to ask the server to create a directory with
-          the given name, which can be absolute or relative. The syntax
-          of the directory name depends on the Kermit server (see
-          [531]next section); in all cases, it can be in the syntax of
-          the system where the server is running (UNIX, VMS, DOS, etc)
-          but newer servers also accept UNIX syntax, no matter what the
-          underlying platform. The server will not execute this command
-          if (a) it does not understand it, (b) a DISABLE MKDIR command
-          has been given, or (c) a DISABLE CWD command has been given;
-          otherwise, the command is executed, but will fail if the
-          directory can not be created, in which cases most servers will
-          attempt to return a message giving the reason for failure. The
-          REMOTE MKDIR command succeeds if the remote directory is
-          created, or if it already exists and therefore does not need to
-          be created, and fails otherwise.
-
-   REMOTE RMDIR directory-name
-          Tells the client to ask the server to remove (delete) a
-          directory with the given name. The same considerations apply as
-          for REMOTE MKDIR.
-
-   REMOTE SET FILE INCOMPLETE { DISCARD, KEEP, AUTO }
-          Previously this was only available in its earlier form, REMOTE
-          SET INCOMPLETE (no FILE). The earlier form is still available,
-          but invisible. Also, AUTO was added, meaning KEEP if in binary
-          mode, DISCARD otherwise.
-
-   REMOTE SET TRANSFER MODE { AUTOMATIC, MANUAL }
-          Tells the client to ask the server to set the given
-          file-transfer mode. Automatic means (roughly): if the client
-          and the server are running on the same kind of computer (e.g.
-          both are on UNIX), then use binary mode automatically; if the
-          system types are different, use some other method to
-          automatically determine text or binary mode, such as filename
-          pattern matching. MANUAL means, in this context, obey the
-          client's FILE TYPE setting (TEXT or BINARY). Synonym: REMOTE
-          SET XFER MODE.
-
-   [ REMOTE ] QUERY KERMIT function(args...)
-          Prior to C-Kermit 7.0, the arguments were not evaluated
-          locally. Thus it was not possible to have the server run the
-          function with client-side variables as arguments. Now:
-
-  define \%a oofa.*
-  remote query kermit files(\%a)    ; Client's \%a
-  remote query kermit files(\\%a)   ; Server's \%a
-
-   [ REMOTE ] LOGIN [ user [ password ] ]
-          LOGIN is now a synonym for REMOTE LOGIN.
-
-   LOGOUT
-          This command, when given in local mode, is equivalent to REMOTE
-          LOGOUT. When given at the IKSD prompt, it logs out the IKSD.
-          When given at the C-Kermit prompt when it has no connection, it
-          does nothing.
-
-   Note that in C-Kermit 7.0, the REMOTE (or R) prefix is not required
-   for QUERY, since there is no local QUERY command. The new top-level
-   QUERY command does exactly what REMOTE QUERY (RQUERY) does.
-
-   All REMOTE commands now have single-word shortcuts:
-
- Shortcut   Full Form
-  RASG       REMOTE ASSIGN
-  RCD        REMOTE CD
-  RCOPY      REMOTE COPY
-  RDEL       REMOTE DELETE
-  RDIR       REMOTE DIRECTORY
-  REXIT      REMOTE EXIT
-  RHELP      REMOTE HELP
-  RHOST      REMOTE HOST
-  RPWD       REMOTE PWD
-  RSET       REMOTE SET
-  etc.
-
-   The R prefix is not applied to LOGIN because there is already an
-   RLOGIN command with a different meaning. It is not applied to LOGOUT
-   either, since LOGOUT knows what to do in each case, and for symmetry
-   with LOGIN.
-     _________________________________________________________________
-
-    5.2.1. Remote Procedure Definitions and Calls
-
-   This is nothing new, but it might not be obvious... REMOTE ASSIGN and
-   REMOTE QUERY may be used to achieve remote procedure execution. The
-   remote procedure can be defined locally or remotely.
-
-   A remote procedure call is accomplished as noted in the previous
-   section:
-
-  [ remote ] query kermit function-name(args...)
-
-   This invokes any function that is built in to the Kermit server, e.g.:
-
-  [ remote ] query kermit size(foo.bar)
-
-   returns the size of the remote file, foo.bar.
-
-   Now note that C-Kermit includes an \fexecute() function, allowing it
-   to execute any macro as if it were a built-in function. So suppose
-   MYMACRO is the name of a macro defined in the server. You can execute
-   it from the client as follows (the redundant "remote" prefix is
-   omitted in the remaining examples):
-
-  query kermit execute(mymacro arg1 arg2...)
-
-   The return value, if any, is the value of the RETURN command that
-   terminated execution of the macro, for example:
-
-  define addtwonumbers return \feval(\%1+\%2)
-
-   The client invocation would be:
-
-  query kermit execute(addtwonumbers 3 4)
-  7
-
-   The result ("7" in this case) is also assigned to the client's
-   \v(query) variable.
-
-   To execute a remote system command or command procedure (shell script,
-   etc) use:
-
-  query kermit command(name args...)
-
-   Finally, suppose you want the client to send a macro to the server to
-   be executed on the server end. This is done as follows:
-
-  remote assign macroname definition
-  query kermit execute(macroname arg1 arg2...)
-
-   Quoting is required if the definition contains formal parameters.
-     _________________________________________________________________
-
-  5.3. New Server Capabilities
-
-    5.3.1. Creating and Removing Directories
-
-   The C-Kermit 7.0 server responds to REMOTE MKDIR and REMOTE RMDIR
-   commands. The directory name may be in either the native format of the
-   server's computer, or in UNIX format. For example, a server running on
-   VMS with a current directory of [IVAN] can accept commands from the
-   client like:
-
-  remote mkdir olga         ; Makes [IVAN.OLGA] (nonspecific format)
-  remote mkdir .olga        ; Makes [IVAN.OLGA] (VMS format without brackets)
-  remote mkdir olga/        ; Makes [IVAN.OLGA] (UNIX relative format)
-  remote mkdir /ivan/olga   ; Makes [IVAN.OLGA] (UNIX absolute format)
-  remote mkdir [ivan.olga]  ; Makes [IVAN.OLGA] (VMS absolute format)
-  remote mkdir [.olga]      ; Makes [IVAN.OLGA] (VMS relative format)
-
-    5.3.1.1. Creating Directories
-
-   If a directory name is given that contains more than one segment that
-   does not exist, the server attempts to create all the segments. For
-   example, if the client says:
-
-  REMOTE MKDIR letters/angry
-
-   a "letters" subdirectory is created in the server's current directory
-   if it does not already exist, and then an "angry" subdirectory is
-   created beneath it, if it does not already have one. This can repeated
-   to any reasonable depth:
-
-  REMOTE MKDIR a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/z/y/z
-
-    5.3.1.2. Removing Directories
-
-   When attempting to execute a REMOTE RMDIR, the server can remove only
-   a single directory, not an entire sequence or tree. The system service
-   that is called to remove the directory generally requires not only
-   that the server process has write delete access, but also that the
-   directory contain no files.
-
-   In the future, a REMOTE RMDIR /RECURSIVE command (and the accompanying
-   protocol) might be added. For now, use the equivalent REMOTE HOST
-   command(s), if any.
-     _________________________________________________________________
-
-    5.3.2. Directory Listings
-
-   Directory listings are generated by C-Kermit itself, rather than by
-   running the underlying system's directory command. Some control over
-   the listing format can be obtained with the SET OPTIONS DIRECTORY
-   command ([532]Section 4.5.1). The following options affect listings
-   sent by the server: /[NO]HEADING, /[NO]DOTFILES, and /[NO]BACKUP. In
-   UNIX and VMS, the listing is always sorted by filename. There is, at
-   present, no protocol defined for the client to request listing options
-   of the server; this might be added in the future.
-
-   The server's directory listings are in the following format:
-
-   Protection or permissions:
-          In UNIX and OS-9, this is a 10-character field, left adjusted.
-          In VMS it is a 22-character field, left-adjusted. In each case,
-          the protection / permission codes are shown in the server
-          platform's native format. In other operating systems, this
-          field is not shown.
-
-   Size in bytes:
-          This is always a 10-character field. The file's size is shown
-          as a decimal number, right adjusted in the field. If the file
-          is a directory and its size can not be obtained, the size is
-          shown as "<DIR>". Two blanks follow this field.
-
-   Date:
-          Always in yyyy-mm-dd hh:mm:ss numeric format, and therefore 19
-          characters long. If the file's date/time can't be obtained,
-          zeros (0) are shown for all the digits. This field is followed
-          by two blanks.
-
-   Filename:
-          This field extends to the end of the line. Filenames are shown
-          relative to the server's current directory. In UNIX, symbolic
-          links are shown as they are in an "ls -l" listing as "linkname
-          -> filename".
-
-   In UNIX and VMS, listings are returned by the server in alphabetical
-   order of filename. There are presently no other sort or selection
-   options.
-
-   However, since these are fixed-field listings, all fields can be used
-   as sort keys by external sort programs. Note, in particular, that the
-   format used for the date allows a normal lexical on that field to
-   achieve the date ordering. For example, let's assume we have a UNIX
-   client and a UNIX server. In this case, the server's listing has the
-   date in columns 22-40, and thus could be sorted by the UNIX sort
-   program using "sort +0.22 -0.40" or in reverse order by "sort +0.22
-   -0.40r".
-
-   Since the UNIX client can pipe responses to REMOTE commands through
-   filters, any desired sorting can be accomplished this way, for
-   example:
-
-C-Kermit> remote directory | sort +0.22 -0.40
-
-   You can also sort by size:
-
-  C-Kermit> remote directory | sort +0.11 -0.19
-
-   You can use sort options to select reverse or ascending order. "man
-   sort" (in UNIX) for more information. And of course, you can pipe
-   these listings through any other filter of your choice, such as grep
-   to skip unwanted lines.
-     _________________________________________________________________
-
-  5.4. Syntax for Remote Filenames with Embedded Spaces
-
-   C-Kermit and K95, when in server mode, assume that any spaces in the
-   file specification in an incoming GET command are filename separators.
-   Thus if the client gives a command like:
-
-  get {oofa.txt oofa.bin}
-
-   or, equivalently:
-
-  mget oofa.txt oofa.bin
-
-   the server tries to send the two files, oofa.txt and oofa.bin. But
-   what if you want the server to send you a file named, say:
-
-  D:\HP OfficeJet 500\Images\My Pretty Picture Dot PCL
-
-   How does the server know this is supposed to be one file and not
-   seven? In this case, you need to the send file name to the server
-   enclosed in either curly braces:
-
-  {D:\HP OfficeJet 500\Images\My Pretty Picture Dot PCL}
-
-   or ASCII doublequotes:
-
-  "D:\HP OfficeJet 500\Images\My Pretty Picture Dot PCL"
-
-   The method for doing this depends on your client. If your client is
-   C-Kermit 7.0, any recent version of Kermit 95, or MS-DOS Kermit 3.16,
-   then you have to enclose the name in braces just so the client can
-   parse it, so to send braces or doublequotes to the server, you must
-   put them inside the first, outside pair of braces. And you also need
-   to double the backslashes to prevent them from being interpreted:
-
-  get {{D:\\HP OfficeJet 500\\Images\\My Pretty Picture Dot PCL}}
-  get {"D:\\HP OfficeJet 500\\Images\\My Pretty Picture Dot PCL"}
-
-   To get around the requirement to double backslashes in literal
-   filenames, of course you can also use:
-
-  set command quoting off
-  get {{D:\HP OfficeJet 500\Images\My Pretty Picture Dot PCL}}
-  get {"D:\HP OfficeJet 500\Images\My Pretty Picture Dot PCL"}
-  set command quoting on
-
-   If you are giving a "kermit" command to the UNIX shell, you have to
-   observe the shell's quoting rules, something like this:
-
-  kermit -ig "{D:\HP OfficeJet 500\Images\My Pretty Picture Dot PCL}"
-
-   Here, the quotes go on the outside so UNIX will pass the entire
-   filename, spaces, braces, and all, as a single argument to Kermit, and
-   the backslashes are not doubled because (a) the UNIX shell ignores
-   them since they are in a quoted string, and (b) Kermit ignores them
-   since the interactive command parser is not activated in this case.
-     _________________________________________________________________
-
-  5.5. Automatic Orientation Messages upon Directory Change
-
-   C-Kermit 7.0, when acting as a server, can send an orientation message
-   to the client whenever the server directory changes. For example, when
-   the client gives a REMOTE CD command, the server sends the contents of
-   the new directory's "Read Me" file to the client's screen. The
-   following commands govern this feature:
-
-   SET SERVER CD-MESSAGE FILE name
-          Given to the servr, allows the message-file name to be
-          specified at runtime. A list of names to look for can be given
-          in the following format:
-
-  {{name1}{name2}{name3}{...}}
-
-          e.g. SET SERVER CD-MESSAGE FILE
-          {{./.readme}{README.TXT}{READ.ME}}
-
-   REMOTE SET SERVER CD-MESSAGE { ON, OFF }
-          Given to the client, lets the client control whether the server
-          sends automatic CD messages.
-
-   SHOW SERVER
-          Given to server, includes CD-Message status.
-
-   The default CD message file name is system dependent. SHOW CD or SHOW
-   SERVER displays the list. Also see [533]Section 4.5.2.
-     _________________________________________________________________
-
-  5.6. New Server Controls
-
-   DISABLE ENABLE
-          Allows the server to configured such that DISABLEd features can
-          not be re-enabled by any means -- e.g. if the client is somehow
-          able to get the server into command mode. Once DISABLEd, ENABLE
-          can not be re-ENABLEd.
-
-   SET SERVER IDLE-TIMEOUT seconds
-          This was available previously in Kermit 95 only. Now it can be
-          used in C-Kermit also to specify a maximum number of seconds
-          the server is allowed to be idle before exiting server mode. 0
-          seconds means no idle timeout. In C-Kermit (but not K-95), SET
-          SERVER TIMEOUT and SET SERVER IDLE-TIMEOUT are mutually
-          exclusive -- you can have one or the other (or neither), but
-          not both. (Server timeouts are for the benefit of primitive
-          Kermit clients that are not capable of timing out on their own;
-          to our knowledge, no such clients are still in circulation.)
-
-   SET SERVER KEEPALIVE { ON, OFF }
-          (See next section).
-     _________________________________________________________________
-
-  5.7. Timeouts during REMOTE HOST Command Execution
-
-   Prior to C-Kermit 7.0, the C-Kermit server would block waiting for
-   output from a system command invoked via REMOTE HOST from the client.
-   If the system command took a long time to execute, the client would
-   time out and send NAK packets. If the command took too long, the
-   client would reach its retry limit and give up. Even if it didn't, the
-   NAKs would cause unnecessary retransmissions.
-
-   In version 7.0, the C-Kermit server (VMS and select()-capable UNIX
-   versions only), sends "keepalive packets" (empty data packets) once
-   per second while waiting for the system command to complete. This
-   procedure should be entirely transparent to the Kermit client, and
-   should prevent the unwanted timeouts and NAKs. When C-Kermit 7.0
-   itself (or K95 1.1.19) is the client, it prints dots to show the
-   keepalive packets.
-
-   The keepalive feature can be turned off and on with:
-
-  SET SERVER KEEPALIVE { ON, OFF }
-
-   Normally it should be on. Turn it off it if causes trouble with the
-   client, or if it seems to slow down the server (as it might on some
-   platforms under certain circumstances).
-     _________________________________________________________________
-
-  6. INTERNATIONAL CHARACTER SETS
-
-   Support for several new single-byte character sets was added in
-   C-Kermit 7.0. Unicode / ISO 10646 is not yet supported, but is a high
-   priority for forthcoming releases.
-
-  6.0. ISO 8859-15 Latin Alphabet 9
-
-   To accommodate the Euro currency symbol, and to correct several other
-   longstanding problems with ISO Latin Alphabet 1, ISO 8859-15 Latin
-   Alphabet 9 was issued in May 1998. It is supported by C-Kermit 7.0 as
-   a transfer character set, a file character set, and a terminal
-   character set. Translations that preserve the new characters are
-   available between Latin-9 and several other sets including:
-
-  PC Code Page 858         (Western European languages, similar to CP850)
-  Windows Code Page 1252   (Western European languages, similar to Latin-1)
-  Windows Code Page 1250   (Eastern European languages, similar to Latin-2)
-
-   The Latin-9 transfer character set also allows for the OE digraph
-   character, used primarily in French, to be preserved in transfers
-   involving the DEC MCS or NeXT character sets.
-
-   The Euro character is also present in the Universal Character Set,
-   described in [534]Section 6.6.
-
-  6.1. The HP-Roman8 Character Set
-
-   The HP-Roman8 character set is supported in C-Kermit 6.0 and later but
-   was omitted from Table VII-4 in the 2nd Edition of Using C-Kermit due
-   to lack of space. It is listed in [535]Appendix III.
-
-  6.2. Greek Character Sets
-
-   Greek character sets were added in 6.1:
-
-  SET FILE CHARACTER-SET { CP869, ELOT927, GREEK-ISO }
-  SET TRANSFER CHARACTER-SET { GREEK-ISO }
-
-   GREEK-ISO is ISO 8859-7, which the same as ELOT 928.
-
-   The new Greek character sets are listed in [536]Appendix III.
-
-  6.3. Additional Latin-2 Character Sets
-
-   The following have been added as FILE and TERMINAL CHARACTER-SETs:
-
-   MAZOVIA-PC
-          A PC code page used in Poland, equivalent to CP437, but with 18
-          substitutions needed for Polish.
-
-   CP1250
-          The Windows Latin 2 Code Page. Equivalent to ISO 8859-2, but
-          with different encoding.
-
-  6.4. Additional Cyrillic Character Sets
-
-   The following have been added as FILE and TERMINAL CHARACTER-SETs:
-
-   BULGARIA-PC
-          This is the Cyrillic PC code page used in Bulgaria, where it is
-          called Code Page 856. It is attributed to a company called
-          DATEC, Inc, but CP856 is not a proper designation, since it
-          refers to a Hebrew Code Page (see the IBM Registry).
-
-   CP855
-          This PC Code Page contains all the Cyrillic letters that are
-          also in ISO 8859-5, and is therefore useful for non-Russian
-          Cyrillic text (Ukrainian, Belorussian, etc), unlike CP866,
-          which has a smaller repertoire of Cyrillic letters.
-
-   CP1251
-          The Windows Cyrillic Code Page. Equivalent to CP855, but with
-          different encoding.
-
-   KOI8R
-          An extension to "Old KOI-8" that adds upper and lower case
-          Cyrillic letter Io (looks like Roman E with diaeresis) plus a
-          selection of box-drawing characters to columns 8 through 11,
-          which are vacant in original Old KOI-8. KOI8-R is used for the
-          Russian language. It is specified in [537]RFC 1489.
-
-   KOI8U
-          A similar extension of Old KOI-8, but for Ukrainian. It is
-          specified in [538]RFC 2319.
-     _________________________________________________________________
-
-  6.5. Automatic Character-Set Switching
-
-   Prior to version 7.0, C-Kermit's file character-set always had to be
-   set explicitly. In 7.0 and later, it is set automatically when:
-
-    1. This feature is enabled (as it is unless you disable it).
-    2. An incoming text-mode transfer includes a transfer-character-set
-       announcer and you have not previously given a SET FILE
-       CHARACTER-SET command. In this case, C-Kermit switches to an
-       appropriate file character set. For example, on an HP-UX
-       workstation, an incoming Latin-1 file automatically selects
-       HP-Roman8 for the local copy of the file; in Data General AOS/VS,
-       it would select DG International.
-    3. You give a SET TRANSFER CHARACTER-SET command without having
-       previously specified a FILE CHARACTER-SET. An appropriate file
-       character-set is chosen automatically.
-
-   In addition, when you give a SET FILE CHARACTER-SET command, the
-   appropriate transfer character-set is automatically chosen, to be used
-   when you are sending files (but this does not override the one
-   announced by the sender when you are receiving files).
-
-   You might not agree about what is "appropriate", so of course you can
-   disable or change all of the above actions.
-
-   You can disable (or re-enable) the new automatic character-set
-   switching feature in each direction separately:
-
-   SET RECEIVE CHARACTER-SET-SELECTION { AUTOMATIC, MANUAL }
-          AUTOMATIC is the default, causing the behavior described above
-          when an incoming file arrives. Choose MANUAL to defeat this
-          behavior and force your current FILE CHARACTER-SET setting to
-          be used, no matter what it is. Note that SET RECEIVE
-          CHARACTER-SET MANUAL does not disable recognition of the
-          incoming transfer character-set announcer, and translation from
-          the corresponding character-set to your current file
-          character-set. To disable that, use SET ATTRIBUTE CHARACTER-SET
-          OFF.
-
-   SET SEND CHARACTER-SET-SELECTION { AUTOMATIC, MANUAL }
-          Again AUTOMATIC is the default, causing the behavior described
-          above when you give a SET { FILE, TRANSFER } CHARACTER-SET
-          command. Use MANUAL to allow you to specify the transfer and
-          file character-sets independently.
-
-   SHOW CHARACTER-SETS
-          Tells settings of { SEND, RECEIVE } CHARACTER-SET-SELECTION.
-
-   Normally, however, it is more convenient to leave automatic switching
-   active, and change any associations that are not appropriate for your
-   application, area, or country. The commands are:
-
-   SHOW ASSOCIATIONS
-          This command lists all the associations in each direction: for
-          each possible transfer character-set, it lists the associated
-          file character-set, and vice versa. These are two separate and
-          independent lists.
-
-   ASSOCIATE TRANSFER-CHARACTER-SET name1 [ name2 ]
-          Changes the association for the transfer character-set name1 to
-          be the file character-set name2. If name2 is omitted, automatic
-          switching is disabled for this transfer character-set only.
-
-   ASSOCIATE FILE-CHARACTER-SET name1 [ name2 ]
-          Changes the association for the file character-set name1 to be
-          the transfer character-set name2. If name2 is omitted,
-          automatic switching is disabled for this file character-set
-          only.
-     _________________________________________________________________
-
-  6.6. UNICODE
-
-   C-Kermit 7.0 adds support for Unicode, the Universal Character Set,
-   for:
-
-     * File Transfer (SEND, RECEIVE, GET, etc)
-     * Terminal connection (CONNECT)
-     * Unguarded file capture (LOG SESSION)
-     * Unguarded file transmission (TRANSMIT)
-     * Local file character-set conversion (TRANSLATE)
-
-   C-Kermit is not, however, a "Unicode application" in the sense that
-   its commands, messages, or user interface are Unicode. Rather, it is
-   "Unicode aware" in its ability to handle and convert Unicode text in
-   the course of file transfer and terminal connection, and you can also
-   use Kermit to convert local files between Unicode and other character
-   sets. TLA's:
-
-  BMP - Base Multilingual Plane
-  BOM - Byte Order Mark
-  CJK - Chinese, Japanese, and Korean
-  ISO - International Standards Organization
-  TLA - Three-Letter Acronym
-  UCS - Universal Character Set
-  UTF - UCS Transformation Format
-
-   Unicode and ISO 10646 are the coordinated and compatible corporate and
-   international standards for the Universal Character Set (UCS). Unlike
-   single-byte and even most multibyte character sets, the UCS can
-   represent all characters in every existing writing system. A flat
-   plain-text file encoded in some form of UCS can contain any mixture of
-   English, Spanish, Italian, German, Hebrew, Arabic, Greek, Russian,
-   Armenian, Georgian, Japanese, Chinese, Korean, Vietnamese, Tibetan,
-   Hindi, Bengali, Tamil, Thai, Ethiopic, and so on, plus scientific and
-   mathematical notation, as well as texts in Runes, Ogham, Glagolitic,
-   and other historic scripts.
-
-   The UCS already covers these scripts and many more, but it's an
-   evolving standard with efforts underway to accommodate even more
-   languages and writing systems. Support is growing for native UCS use
-   on many platforms and in many applications. The goal of the framers of
-   the UCS is for it to replace ASCII, the ISO Latin Alphabets, ISCII,
-   VISCII, the Chinese, Japanese, and Korean (CJK) multibyte sets, etc,
-   as well as the many private character sets in use today, in other
-   words to become *the* Universal Character Set.
-
-   Until that time, however, conversions between existing sets and the
-   UCS will be necessary when moving text between platforms and
-   applications. Now Kermit can help.
-     _________________________________________________________________
-
-    6.6.1. Overview of Unicode
-
-   For a more complete picture, please visit:
-
-  [539]http://www.unicode.org/
-
-   and access the various online introductions, FAQs, technical reports,
-   and other information. For greater depth, order the latest version of
-   the published Unicode Standard. The following overview contains a
-   great many oversimplifications and perhaps an opinion or two.
-
-   At present, the UCS is a 16-bit (2-byte) character set, but with
-   provisions to grow to a 4-byte set. UCS-2 refers to the two-byte set,
-   also called the Base Multilingual Plane (BMP), in which each character
-   has 16 bits, and therefore there are 2^16 = 65536 possible characters.
-   The first 128 characters are the same as US ASCII (C0 control
-   characters and DEL included), the next 32 are the C1 control
-   characters of ISO 6429, and the next 96 are the Right Half of ISO
-   8859-1 Latin Alphabet 1. The remaining tens of thousands of characters
-   are arranged newly for the UCS, usually (but not always) in sections
-   corresponding to existing standards, such as ISO Latin/Cyrillic, often
-   plus additional characters not appearing in the existing standards due
-   to lack of space (or other reasons).
-
-   ISO 10646 allows for additional planes, e.g. for Egyptian
-   hieroglyphics or ancient (or other esoteric) CJK characters, but these
-   planes are not yet defined and so we will say nothing more about them
-   here, except that their use will require the 4-byte form of UCS,
-   called UCS-4, in some form (more about "forms" in [540]Section 6.6.2).
-
-   Unicode and ISO 10646 are constantly under revision, mainly to add new
-   characters. The Unicode revision is denoted by a version number, such
-   as 1.0, 1.1, 2.0, 3.0. The ISO 10646 standard revision is identified
-   by Edition (such as ISO 10646-1 1993), plus reference to any
-   amendments. The first versions of these standards included encodings
-   for Korean Hangul syllables (Jamos); these encodings were changed in
-   version 1.1 of Unicode and by Amendment 5 to ISO 10646-1. The Unicode
-   Technical Committee and the ISO acknowledge that this was a bad thing
-   to do, and promise never change encodings or character names again,
-   since this poses serious problems for conformance and data
-   interchange.
-
-   A UCS-2 value is customarily written like this:
-
-  U+xxxx
-
-   where "xxxx" represents four hexadecimal digits, 0-9 and A-F. For
-   example, U+0041 is "A", U+00C1 is A-acute, U+042F is uppercase
-   Cyrillic "Ya", U+FB4F is Hebrew Ligature Alef Lamed, and U+FFFD is the
-   special character that means "not a character".
-
-   Most characters from widely-used alphabetic writing systems such as
-   the West European ones, Cyrillic, Greek, Hebrew, Vietnamese, etc, are
-   available in "precomposed" form; for example Uppercase Latin Letter A
-   with Acute Accent is a single character (as it is in Latin-1).
-   However, the UCS also permits composition of a base character with one
-   or more nonspacing diacritics. This means the same character can be
-   represented in more than one way, which can present problems in many
-   application areas, including transfer and character-set conversion of
-   text.
-
-   Conversion from ASCII or Latin-1 to UCS-2 text is "trivial": simply
-   insert a NUL (0) byte before each ASCII or Latin-1 byte. Converting in
-   the reverse direction (provided the UCS-2 file contains only U+0000 to
-   U+00FF) is equally simple (if we ignore the issue of composition):
-   remove every second (NUL) byte. Conversion of other character sets to
-   and from UCS, however, requires tables or algorithms specific to each
-   set. Nevertheless, the relatively transparent upwards compatibility
-   from ASCII and Latin-1, in which a very large share of the world's
-   textual data is encoded, gives the UCS an entree onto existing
-   platforms.
-
-   But the 2-byte format and the preponderance of NUL and other control
-   bytes in UCS-2 text pose problems for current applications and
-   transmission methods. And to make matters worse, different hardware
-   platforms store UCS-2 characters in different byte order. Thus a UCS-2
-   file transferred by FTP (or accessed via NFS, etc) between two
-   computers with different architecture might have its bytes in the
-   wrong order (or worse; see [541]Section 6.6.5.1 ).
-     _________________________________________________________________
-
-    6.6.2. UCS Byte Order
-
-   Consider the number 1. In an 8-bit byte, this would be represented by
-   the following series of 0- and 1-bits:
-
-  +-----------------+
-  | 0 0 0 0 0 0 0 1 |
-  +-----------------+
-
-   Therefore in a 16-bit "word" the representation might be:
-
-  +-----------------+-----------------+
-  | 0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 1 |
-  +-----------------+-----------------+
-
-   Now consider the number 256, which is 2 to the 8th power. The binary
-   representation is 100000000 (1 followed by 8 zeros). 256 would go into
-   a 16-bit word like this:
-
-  +-----------------+-----------------+
-  | 0 0 0 0 0 0 0 1 | 0 0 0 0 0 0 0 0 |
-  +-----------------+-----------------+
-
-   When a computer works this way, it is said to be Big Endian, meaning
-   it puts the most significant (biggest) byte first (on the "left") in a
-   16-bit word, and the least significant byte second (on the right).
-
-   However, some other computers have the opposite arrangement, called
-   Little Endian, in which 1 is:
-
-  +-----------------+-----------------+
-  | 0 0 0 0 0 0 0 1 | 0 0 0 0 0 0 0 0 |
-  +-----------------+-----------------+
-
-   and 256 is:
-
-  +-----------------+-----------------+
-  | 0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 1 |
-  +-----------------+-----------------+
-
-   Computers such as Sparc, MIPS, PA-RISC, and PowerPC are Big Endian,
-   whereas the PC and the Alpha are Little Endian. Endianness has never
-   been an issue with 7- or 8-bit characters, but it is with UCS
-   characters. It can be a tricky business to share or transfer a UCS-2
-   file between two different kinds of computers.
-
-   To alleviate (but not entirely solve) the problem, UCS-2 files are
-   supposed to begin with the Unicode character U+FEFF, Zero-Width
-   No-Break Space (ZWNBS). This is a kind of "no-op" (note: any such
-   assertion must normally be qualified with many "but ifs" and "excepts"
-   which are omitted here in the interest of brevity). If the bytes are
-   reversed the ZWNBS becomes U+FFFE, which is not (and never will be) a
-   defined UCS character. U+FEFF at the beginning of a UCS file is
-   therefore called a Byte Order Mark, or BOM.
-
-   Any application that creates a UCS-2 (or UTF-16, or UCS-4) file should
-   include a BOM, and any application that reads one should test for a
-   BOM, and if one is found, infer the byte order from it. This is a
-   convention, however -- not a standard or a requirement -- and
-   applications vary in their ability to handle BOMs and "backwards"
-   UCS-2 files.
-
-   Note that a BOM is useful only at the beginning of a file. If you
-   append one UCS-2 file to another, and both have BOMs, the internal BOM
-   is no longer a BOM. And if the byte orders of the two files differ,
-   then either the first part or the second will be backwards. (Various
-   other undesirable effects might also occur, not discussed here.)
-     _________________________________________________________________
-
-    6.6.2. UCS Transformation Formats
-
-   UCS textual data can be modified in various ways for transmission or
-   storage. Any officially sanctioned method of doing this is called a
-   UCS Transformation Format, or UTF. One such method, called UTF-16, is
-   essentially identical with UCS-2 except that it designates certain
-   code values as "escape sequences" (called surrogate pairs) to access
-   characters in other planes without having to use full UCS-4. We won't
-   discuss UTF-16 further here, since at the moment there are no other
-   planes. Several other UTF's (such as UTF-1, UTF-2, and UTF-7) have
-   fallen into disuse and are not discussed here. The most important
-   transformation format today is UTF-8.
-
-   UTF-8, so called because it "serializes" UCS-2 data into a stream of
-   8-bit bytes, is designed to allow the UCS to work with present-day
-   communications gear, computers, and software. The most important
-   properties of UTF-8 are that byte order is constant (no byte swapping)
-   and all (7-bit) ASCII characters represent themselves. Therefore
-   conversion between ASCII and UTF-8 is no conversion at all, and
-   applications or platforms (such as Plan 9 from Bell Labs) that use
-   UTF-8 "for everything" can still run traditional ASCII-only
-   applications and be accessed from them. In particular, unlike UCS-2,
-   ASCII characters are not padded with NUL bytes. But also unlike UCS-2,
-   there is no transparency for Latin-1 or any other non-ASCII character
-   set. Every non-ASCII UCS-2 character is represented by a sequence of 2
-   or 3 UTF-8 bytes. Thus UTF-8 is more compact than UCS-2 for text
-   containing a preponderance of ABC's (or other ASCII characters), about
-   the same as UCS-2 for other alphabetic scripts (Cyrillic, Roman,
-   Greek, etc), and larger than UCS-2 for Chinese, Japanese, and Korean.
-
-   The UTF-8 uncoding of the UCS has been adopted by the Internet as the
-   preferred character set for new applications, and is gradually being
-   retrofitted into traditional applications like FTP ([542]RFC 2640).
-     _________________________________________________________________
-
-    6.6.3. Conformance Levels
-
-   Although the Unicode and ISO 10646 standards both describe the same
-   character set, these standards differ in many ways, including their
-   stated requirements for conformance and their classification of
-   conformance levels.
-
-   Kermit has always abided by ISO character-set standards, including ISO
-   character-set designation and invocation methods. In adapting Unicode,
-   therefore, we had to choose from among the available ISO designations
-   which, in turn, correspond with ISO 10646 conformance levels. At
-   present, Kermit claims the lowest conformance level, 1, meaning
-   (roughly) that it does not handle combining forms and it does not
-   handle Korean Hangul Jamos (just as, at present, it does not handle
-   Korean in general). Note that ISO 10646 Conformance Levels 1 and 2
-   sidestep the issue of the code changes for Korean Hangul by announcing
-   non-support for Hangul regardless of encoding.
-
-   ISO 10646 Conformance Level 1 is approximately equivalent to Unicode
-   Normalization Form C (described in Unicode Technical Report 15,
-   incorporated into Unicode 3.0).
-
-   As noted in [543]Section 6.6.2, Kermit does not claim to support
-   UTF-16 at the present time, hence the UCS-2 nomenclature. Kermit
-   treats surrogates just as if they were any other UCS-2 characters,
-   rather than as escapes to other planes, which means that (except when
-   converting between UCS-2 and UTF-8) they are translated to "error"
-   characters, since (a) no other planes are defined yet (and if they
-   were, no other character sets supported by Kermit would encode their
-   characters), and (b) no valid surrogate character corresponds to any
-   other UCS-2 character.
-
-   A minor yet significant aspect of Unicode 3.0 and some recent
-   perturbation of ISO 10646-1 (probably Amendment 18, "Symbols and Other
-   Characters") is the addition of the Euro Sign at U+20AC. As noted in
-   [544]Section 6.0, Kermit's "Euro compliance" includes conversion
-   between Latin Alphabet 9 and various PC code pages. Text can also be
-   converted between UCS-2 or UTF-8 and any other Euro-compliant
-   character set (Latin-9, CP858, CP1250, CP1252) without loss of the
-   Euro Sign.
-     _________________________________________________________________
-
-    6.6.4. Relationship of Unicode with Kermit's Other Character Sets
-
-   Kermit's character sets are divided into two groups: single-byte sets
-   (such as Roman, Hebrew, Cyrillic, Greek) and multibyte (various
-   Japanese sets). The two groups are distinct since one normally would
-   not expect to convert Kanji ideograms to Roman (or other) letters, or
-   vice versa.
-
-   Unicode character-set conversion works with both groups, but obviously
-   the result depends on the repertoires of the source and destination
-   character-sets both including the characters in the file. For example,
-   you can translate a Hungarian text file between Latin-2 and Unicode,
-   but not between (say) Unicode and Latin/Greek. By the same token you
-   can convert Japanese text from Shift-JIS or EUC or JIS-7 to Unicode
-   and back, but you can't convert the same file to (say) Latin-1 if it
-   contains Japanese characters.
-
-     JIS-7 is equivalent to DEC Kanji and ISO-2022-JP except that the
-     latter two do not support halfwidth Katakana. Kermit treats all
-     three of these sets the same way, i.e. as JIS-7.
-
-   As noted, Kermit presently does not handle combining diacritics, and
-   so will not correctly convert UCS files that use them into a
-   single-byte character set. For example, if a UCS file contains Latin
-   Capital Letter A (U+0041) followed by Combining Acute Accent (U+0301),
-   the result will be a two-character sequence, A followed by another
-   character. This is what is meant by Conformance Level 1. (The
-   situation grows worse with multiple diacritics, since they can occur
-   in any order.)
-
-   A higher level of conformance is possible, in which "canonical
-   equivalences" are handled via algorithms and databases, at some
-   (perhaps considerable) cost in performance, since a fair amount of
-   additional code must be executed for every character during data
-   transfer (database lookup, sorting of combining sequences into
-   canonical order, etc). This can be added in future releases if there
-   is a need (but in many cases, pre- and postpostprocessing might be a
-   better option).
-
-   Within these constraints, Kermit converts between the UCS and its
-   other character sets. For example, a mixture of Russian and English
-   (and/or Dutch, or Latin) text can bet converted between the UCS and
-   ISO Latin/Cyrillic or KOI-8. But since Kermit does not presently
-   support Arabic character-set conversion, the new availability of UCS
-   conversion does not mean that Kermit can convert from Arabic UCS text
-   to some other character set, because Kermit does not support any other
-   character set that includes Arabic. Ditto for Thai, Armenian,
-   Georgian, Tibetan, Chinese, Korean, etc. However, Kermit CAN convert
-   Arabic (or any other script) between UCS-2 and UTF-8.
-
-   Considering Cyrillic more carefully, note that the UCS also contains
-   numerous Cyrillic characters not found in any of the Cyrillic sets
-   (ISO Latin/Cyrillic, KOI8, CP866, etc) that Kermit supports;
-   characters needed for Abkhasian, Yakut, Tatar, Bashkir, Altaic, Old
-   Church Slavonic, etc; UCS text containing any of these historic or
-   "extended" Cyrillic characters can not be converted to any of Kermit's
-   current single-byte Cyrillic sets without loss. The situation is
-   similar for Greek, Hebrew, etc, and even worse for Japanese since
-   Unicode contains thousands of Kanjis that are lacking from the
-   Japanese character sets based on JIS X 0208, such as EUC-JP, JIS-7,
-   and Shift-JIS.
-
-   In general, when converting from UCS to a single-byte set, there is
-   always the possibility of data loss, just as there is when converting
-   from any larger set to a smaller one. For example, if a UCS file
-   contains Devanagari characters, these characters will be lost when
-   converting to (say) Latin-1, just as Roman vowels with acute accents
-   are lost when converting from Latin-1 (an 8-bit set) to German ISO 646
-   (a 7-bit set).
-     _________________________________________________________________
-
-    6.6.5. Kermit's Unicode Features
-
-   C-Kermit can convert between UCS-2 or UTF-8 and any of its other
-   character sets, and also between UCS-2 and UTF-8. When converting
-   between UCS-2 or UTF-8 and a non-Unicode character set (such as
-   Latin-1), the UCS Line Separator (LS, U+2028) and Paragraph Separator
-   (PS, U+2029) characters are converted to the appropriate line
-   terminator (CR, LF, or CRLF). When converting from a non-Unicode set
-   to UCS-2 or UTF-8, however, line terminators are not converted to LS
-   or PS. This is in accordance with the recommendations of Unicode
-   Technical Report #13.
-
-   When C-Kermit starts, it tests the native byte order of the computer.
-   You can see the result in the SHOW FEATURES or SHOW FILE display. It's
-   also available in the variable \v(byteorder): 0 means Big Endian, 1
-   means Little Endian.
-
-   When UCS-2 is involved in file transfer or translation, the following
-   commands tell C-Kermit what to do about byte order:
-
-   SET FILE UCS BYTE-ORDER { BIG-ENDIAN, LITTLE-ENDIAN }
-          This is for reading UCS-2 files that don't have a BOM, and also
-          for writing UCS-2 files. If this command is not given, the
-          machine's native byte order is used when writing UCS-2 files,
-          and also when reading UCS-2 files that don't have a BOM.
-
-   SET FILE UCS BOM { ON, OFF }
-          This setting is used when creating UCS-2 files. A BOM is added
-          at the beginning by default. Use OFF to not add the BOM. This
-          command has no affect when writing files.
-
-   COPY /SWAP-BYTES sourcefile destinationfile
-          Use this for fixing a UCS-2 file whose bytes are in the wrong
-          order.
-
-   Use SHOW FILE to display the FILE UCS settings.
-
-   Please note, again, that C-Kermit's user interface, including its
-   script language, is not internationalized in any way. String
-   comparisons, case conversion, and so on, work only for US ASCII
-   (comparisons for equality work with other sets, but not
-   lexically-greater-or-less-than or caseless comparisons; even
-   comparisons for equality can fail when composed characters or byte
-   order are involved). String functions such as \findex() and
-   \fsubstring() that reference byte positions do just that; they won't
-   work with UTF-8 text that contains any non-ASCII characters, and they
-   will not work with UCS-2 text at all since they use C strings
-   internally, which are NUL-terminated. These are just a few examples to
-   illustrate that neither Unicode nor any other character-set beyond
-   ASCII is supported at the user-interface, command, or scripting level
-   in this version of C-Kermit.
-     _________________________________________________________________
-
-    6.6.5.1. File Transfer
-
-   Kermit supports both UCS-2 and UTF-8 as file and transfer character
-   sets in text-mode file transfer.
-
-   To select UCS-2 or UTF-8 as a file character-set, use:
-
-  SET FILE CHARACTER-SET { UCS2, UTF8 }
-
-   If you want to send a UCS-2 text file (or save an incoming file in
-   UCS-2 format), tell Kermit to:
-
-  SET FILE CHARACTER-SET UCS2
-
-   and if you want to send a UTF-8 text file (or store an incoming file
-   in UTF-8 format), tell Kermit to:
-
-  SET FILE CHARACTER-SET UTF8
-
-   When sending UCS-2 files, Kermit determines the byte order from the
-   BOM, if there is one (and if there is a BOM, it is stripped, i.e. not
-   sent). If there is no BOM, the byte order is the one specified in the
-   most recent SET FILE UCS BYTE-ORDER command, if any, otherwise the
-   computer's native byte order is assumed. When storing incoming files
-   as UCS-2, the byte order is according SET FILE UCS BYTE-ORDER, if
-   given, otherwise the native one; a BOM is written according to SET
-   FILE UCS BOM.
-
-   A transfer character-set should be chosen that includes all of the
-   characters in the source file. So, for example, if you are sending a
-   UCS-2 file containing only German-language text, your transfer
-   character-set can be Latin-1, Latin-2, Latin-9, UCS-2, or UTF-8. But
-   if you are sending a file that contains a combination of Hebrew and
-   Greek, your transfer character-set must be UCS-2 or UTF-8 if you don't
-   want to lose one script or the other. Furthermore, the transfer
-   character-set must be one that is supported by the receiving Kermit
-   program. Since UCS support is new, it is possible that the other
-   Kermit program (if it supports character sets at all) does not support
-   it, but does support single-byte sets such as Latin-1, Latin/Cyrillic,
-   etc.
-
-   To select UCS-2 or UTF-8 as a transfer character-set, use:
-
-  SET TRANSFER CHARACTER-SET { UCS2, UTF8 }
-
-   It is up to the receiving Kermit program to convert the transfer
-   format to its own local format, if necessary. If it does not
-   understand the UTF-8 or UCS-2 transfer character-set, and your file
-   can not be adequately represented by any single-byte transfer
-   character-set (such as Latin-1 or Latin/Cyrillic) then, if UTF-8
-   format is acceptable on the receiving computer, use UTF-8 as the
-   transfer character-set, with the receiver told to "set unknown-char
-   keep", or with the sender told to "set attribute char off". If you
-   want the file to be stored in UCS-2 format at the receiver, send it it
-   binary mode if the source file is also UCS-2, or else use the
-   TRANSLATE command (next section) to convert it to UCS-2 first, then
-   send it in binary mode. You should not use UCS-2 as a transfer
-   character-set in text-mode transfers to Kermit programs that don't
-   support it, because they are likely to corrupt the result the same way
-   FTP would (see the final paragraph of this section).
-
-   When UCS-2 is the transfer character set, it always goes into Kermit
-   packets in Big Endian format, with no BOM. As always, the transfer
-   character-set is announced by the sender to the receiver. The
-   announcement for UCS-2 is "I162" (ISO Registration 162 = UCS-2 Level
-   1) and by definition it is Big Endian (the standards say that when
-   UCS-2 is serialized into bytes, the order must be Big Endian). The
-   announcement for UTF-8 is "I190" (UTF-8 Level 1).
-
-   When receiving a file whose transfer character-set is UCS-2 or UTF-8,
-   you must choose the appropriate file character set for the result.
-   There is no way Kermit can do this for you automatically, since UCS
-   data can be in any script at all, or any combination.
-
-   In general, UTF-8 or UCS-2 should be chosen as a transfer
-   character-set if the source file is also encoded in some form of UCS
-   and it contains more than one script. But there are other situations
-   where where UTF-8 or UCS-2 offer advantages. For example, suppose the
-   source file is on a NeXTstation and the destination file is on VMS.
-   Both the NeXT and the DEC Multinational character sets include the
-   French OE digraph, but Latin-1 does not. Therefore French words
-   containing this character might not arrive intact when Latin-1 is the
-   transfer character-set, but will with UTF-8 or UCS-2, since the UCS
-   includes the OE digraph (but so does Latin-9).
-
-   UCS-2 should be chosen as a transfer character-set only for Japanese
-   text files that contain a large preponderance of Kanji, since in this
-   case (and only this case) UCS-2 (two bytes per Kanji) is more
-   efficient than UTF-8 (three bytes per Kanji). The same will be true
-   for Chinese and Korean when they are supported by Kermit. UCS-2 should
-   never be used as a transfer character-set with a transfer partner that
-   does not support UCS-2 since this can cause file corruption (see last
-   paragraph in this section).
-
-   Note that Kermit's repeat-count compression is 100% ineffective for
-   UCS-2, and is also ineffective for multibyte characters in UTF-8 and
-   EUC-JP; this is because repeat-compression is a transport-level
-   mechanism that operates on a per-byte basis; it has no knowledge of
-   the distinction between a byte and a character.
-
-   When C-Kermit starts, it sets up associations ([545]Section 6.5) for
-   incoming files whose transfer character sets are UCS-2 or UTF-8
-   appropriately for the platform so that the file character-set for the
-   incoming file is UCS-2 in Windows and UTF-8 elsewhere. Otherwise,
-   C-Kermit does not make any default associations for UCS-2 or UTF-8,
-   but of course you may add or change associations to suit your needs
-   and preferences by including the appropriate ASSOCIATE commands in
-   your Kermit startup file. For example, if you are a PC user and deal
-   only with text written in Greek and English, you can:
-
-  ASSOCIATE TRANSFER-CHARACTER-SET UTF8 CP869
-  ASSOCIATE TRANSFER-CHARACTER-SET UCS2 CP869
-  ASSOCIATE FILE-CHARACTER-SET CP869 UTF8
-
-   Note that when file transfer involves conversion between a single-byte
-   character set and UCS-2 or UTF-8, the file-transfer thermometer and
-   estimated time left might be inaccurate, since they are based on the
-   source file size, not the transfer encoding. This is purely a cosmetic
-   issue and does not effect the final result. (And is not, strictly
-   speaking, a bug; Kermit protocol presently includes no method for the
-   sender to furnish an "estimated transfer size" to the receiver, and in
-   any case any such guess could be as far off as the file size, given
-   the many other factors that come into play, such as compression and
-   prefixing).
-
-   A caution about FTP and UCS-2. As noted previously, if you transfer a
-   UCS-2 file with FTP in binary mode between two computers with opposite
-   Endianness, the result will have its bytes in the wrong order.
-   However, if you use FTP to transfer a UCS-2 file in "ascii" (text)
-   mode to ANY computer, even if it is identical to yours, the result
-   will be corrupted because FTP's line-terminator conversions do not
-   account for UCS-2. The same holds when sending from a UCS-aware Kermit
-   program to an older Kermit program in text mode with a transfer
-   character-set of UCS-2. So use UCS-2 as a transfer character-set ONLY
-   with a UCS-2-aware Kermit partner.
-     _________________________________________________________________
-
-    6.6.5.2. The TRANSLATE Command
-
-   In Kermit versions that have Unicode support included, TRANSLATE now
-   always goes through Unicode; that is, the source set is converted to
-   UCS-2 and thence to the target set. This is a major improvement, since
-   in prior releases, C-Kermit had to pick the "most appropriate"
-   transfer character-set as the intermediate set, and this would result
-   in the loss of any characters that the source and target sets had in
-   common but were lacking from the intermediate set (for example the OE
-   digraph when translating from NeXT to DEC MCS through Latin-1). This
-   never happens when Unicode is the intermediate set because Unicode is
-   a superset of all other character sets supported by Kermit. A more
-   dramatic example would be translation between Cyrillic PC code page
-   866 and KOI8-R ([546]Section 6.4); formerly all the line- and
-   box-drawing characters would be lost (since ISO 8859-5 does not have
-   any); now the ones that these two sets have in common are preserved.
-
-   UCS-2 and UTF-8 are now both supported as source-file and
-   destination-file character sets by C-Kermit's TRANSLATE command, for
-   example:
-
-  translate oofa.txt ucs2 latin1 oofa-l1.txt
-
-   translates oofa.txt from UCS-2 to Latin-1, storing the result as
-   oofa-l1.txt. Similarly:
-
-  translate oofa.txt utf8 latin1 oofa-l1.txt
-  translate oofa.txt latin1 ucs2 oofa-ucs2.txt
-  translate oofa.txt latin1 utf8 oofa-utf8.txt
-  translate oofa.txt ucs2 utf8 oofa-utf8.txt
-  translate oofa.txt utf8 ucs2 oofa-ucs2.txt
-
-   Treatment of the UCS-2 BOM is exactly the same as for file transfer.
-   Note that if a UCS-2 source file is in the "wrong" byte order and
-   lacks a BOM, and you don't tell Kermit about it with SET FILE UCS
-   BYTE-ORDER, the result of the translation is total gibberish. Recall
-   that you can use COPY /SWAP-BYTES to switch the byte order of an
-   errant UCS-2 file (or any other file for that matter, if you can think
-   of a reason to). Also note that:
-
-  translate oofa.txt ucs2 ucs2 new.txt
-
-   Produces a result in the native (or SET FILE UCS) byte-order as long
-   as oofa.txt has a BOM.
-
-   As a side benefit of the Unicode work, the TRANSLATE command now works
-   for the first time also for all Japanese character sets that Kermit
-   supports. In other words, if you have a Japanese text file in any of
-   the following encodings:
-
-  EUC-JP
-  Shift-JIS
-  JIS-7
-  UCS-2
-  UTF-8
-
-   You can use the TRANSLATE command to convert to any other encoding
-   from the same list.
-     _________________________________________________________________
-
-    6.6.5.3. Terminal Connection
-
-   The CONNECT command now allows UTF-8 as a local or remote terminal
-   character-set:
-
-  SET TERMINAL CHARACTER-SET { ..., UTF8 } { ..., UTF8 }
-  SET TERMINAL REMOTE-CHARACTER-SET { ..., UTF8 }
-  SET TERMINAL LOCAL-CHARACTER-SET { ..., UTF8 }
-
-   (Recall that Kermit's terminal character-set has two "ends" -- the set
-   used on the host to which Kermit is connected, and the set used on the
-   local keyboard and screen.)
-
-   UCS-2 is not supported as a terminal character-set (either end) since
-   (a) it is not used that way anywhere to our knowledge, and (b) the
-   problems of Endianness and the high likelihood of loss of
-   synchronization make it impractical. (Telecommunications is
-   byte-oriented; if one byte, or any odd number of bytes, is lost
-   because of buffer overruns, circuit resets, etc (or likewise if a
-   burst of noise appears that takes the guise of an odd number of
-   bytes), the byte order of the subsequent data stream will be
-   backwards; unlike UTF-8 and traditional byte-based character sets,
-   UCS-2 is not "self synchronizing".)
-
-   UTF-8 does not have byte-order or synchronization problems and is
-   growing in popularity as a terminal character set as well as in other
-   application areas. It allows a single terminal session to use multiple
-   scripts (Roman, Cyrillic, Greek, etc) without ISO 2022 character-set
-   switching (which terminal emulators like Kermit 95 can handle but few
-   host applications understand or use), and meshes nicely with the
-   Unicode screen fonts that are beginning to appear.
-
-   UTF-8 was first used in Plan 9 and soon will be available in Linux. It
-   will probably spread from there (Unicode in some form is, of course,
-   also used in Windows NT, but only internally -- not for access from
-   outside).
-
-   To use UTF-8 or any other character set that uses 8-bit bytes in your
-   terminal session, be sure to tell C-Kermit to:
-
-  SET TERMINAL BYTESIZE 8
-  SET COMMAND BYTESIZE 8
-  SET PARITY NONE
-
-   (or use the shortcut command, EIGHTBIT, which does all three at once).
-
-   In a setup where your local Kermit program uses a single-byte
-   character set such as PC Code Page 850 and the remote host uses UTF-8:
-
-  SET TERM CHAR UTF8 CP850
-
-   or:
-
-  SET TERM REMOTE CHAR UTF8
-  SET TERM LOCAL CHAR CP850
-
-   all works as expected. UTF-8 text on the remote displays correctly on
-   your screen, and when you type CP850 characters, they are translated
-   to UTF-8 sequences for transmission, and the echo from the host is
-   translated from UTF-8 back to CP850. Telnet negotiations and
-   autodownload take place before any character-set translation and work
-   as before. The session log (if text mode was selected for it) contains
-   only the local terminal character-set. And so on.
-
-   Kermit merely supplies translations from UTF-8 to your local terminal
-   character-set (this includes treating UTF-8 Line Separator and
-   Paragraph separator as CRLF). However, Kermit does does not, at
-   present, perform "canonicalization" of composed sequences, nor does it
-   automatically execute bidirectionality algorithms for display of
-   mixed-direction text (e.g. Hebrew and English). Such presentation
-   issues, like all others in the terminal-host regime, are left to the
-   host.
-
-   By the way, C-Kermit also allows UTF-8 to be the local end of the
-   terminal character-set, but so far this code is not tested, since we
-   don't have a UTF-8 console or terminal to work with. However, it can
-   be stated without doubt that C-Kermit's key mapping will not work for
-   UTF-8 values, since (a) the key map is indexed by 8-bit byte values
-   and (b) C-Kermit reads keystrokes a byte at a time (these comments do
-   not apply to K95, which has direct access to the keyboard and can read
-   "wide" keycodes and uses them to index a "wide" keymap).
-
-   Restrictions: As noted, the CONNECT command does not support UCS-2 as
-   a REMOTE TERMINAL character-set. Neither does it support the Japanese
-   sets EUC-JP, JIS-7, and Shift-JIS. Support for the Japanese sets (and
-   possibly Chinese and Korean too) might be added in a future release.
-   Since the TRANSMIT command (next section) uses the same REMOTE
-   TERMINAL character-sets as the CONNECT command, it has the same
-   restrictions.
-     _________________________________________________________________
-
-    6.6.5.4. The TRANSMIT Command
-
-   As described in Chapter 15 of [547]Using C-Kermit and [548]Section
-   4.21 of this document, the TRANSMIT command can be used to upload a
-   file without protocol, more or less as if you were typing it on your
-   keyboard while connected to the host. When TRANSMITting in text mode,
-   the file's character set is converted to the host's unless you have
-   SET TERMINAL CHARACTER-SET TRANSPARENT, or you include the new
-   TRANSMIT switch, /TRANSPARENT.
-
-   Before C-Kermit 7.0, the file character-set was assumed to be the same
-   as the local end of the terminal character-set, and the TRANSMIT
-   command used the same translations as the CONNECT command, ignoring
-   the file character-set.
-
-   In C-Kermit 7.0, that assumption (a poor one to begin with) can no
-   longer be made, since UCS-2 can be a file character-set but not a
-   terminal character-set. So now the file's character-set is given by
-   your most recent SET FILE CHARACTER-SET command. The host's character
-   set is the remote end of your most recent SET TERMINAL CHARACTER-SET
-   command:
-
-  SET TERMINAL CHARACTER-SET remote-set [ local-set ]
-
-   or:
-
-  SET TERMINAL REMOTE-CHARACTER-SET remote-set
-
-   The TRANSMIT command converts each source-file character from the FILE
-   character-set to the REMOTE TERMINAL character-set, and then transmits
-   the translated characters according to your SET TRANSMIT preferences
-   (Chapter 15).
-
-   If you have SET TRANSMIT ECHO ON, and the host is echoing the
-   transmitted characters, the echos are converted from the remote
-   terminal character-set to the local terminal character-set.
-
-  [ A picture would help... ]
-
-   Confused? Let's work through an example. Suppose your local computer
-   is a NeXTstation, on which text files are encoded in the NeXT
-   character set, and that the remote computer is a Data General AViiON,
-   which uses the Data General International character set. Further
-   suppose that you are logged in to the NeXT from a VT220 terminal which
-   uses the DEC Multinational character set.
-
-   You need to convert the file from NeXT encoding to DG encoding and
-   convert the echoes from DG encoding to DEC encoding. So on the NeXT,
-   tell C-Kermit to:
-
-  eightbit
-  set file character-set next
-  set term character-set dg-international dec-mcs
-  transmit /text nextdata.txt
-
-   (This assumes you have some sort of collection process already set up
-   on the Data General, such as a text editor or the venerable "cat >
-   foo". The EIGHTBIT command is equivalent to SET TERMINAL BYTESIZE 8,
-   SET COMMAND BYTESIZE 8, SET PARITY NONE.)
-
-   To further complicate matters, suppose your local terminal character
-   set is the same as the remote one, so you don't need terminal
-   character-set translation, but you need to TRANSMIT a file that is in
-   a different character set and you want it translated to the host set.
-   In this case, use SET TERM CHARACTER-SET to actually specify the
-   character set used on each end, rather than specifying TRANSPARENT:
-
-  eightbit
-  set file character-set ucs2
-  set term character-set latin1 latin1
-  transmit /text ucs2data.txt
-
-   The distinction between:
-
-  SET TERMINAL CHARACTER-SET xxx yyy
-
-   (where xxx and yyy are the same set) and:
-
-  SET TERMINAL CHARACTER-SET TRANSPARENT
-
-   is new to C-Kermit 7.0, but affects only the TRANSMIT command.
-
-   The TRANSMIT command currently does nothing special with UCS-2/UTF-8
-   Line and Paragraph Separator characters; more experience is required
-   to find out how these behave in a genuine Unicode terminal-host
-   setting.
-
-   Restrictions: As noted, the TRANSMIT command translates from the FILE
-   character-set to the REMOTE TERMINAL character-set. This rules out
-   translations to any character set that is not supported as a REMOTE
-   TERMINAL character-set, such as UCS-2, EUC-JP, JIS-7, and Shift-JIS.
-     _________________________________________________________________
-
-    6.6.5.5. Summary of Kermit Unicode Commands
-
-   Specifying file character-set and byte order:
-          SET FILE CHARACTER-SET { ..., UCS2, UTF8 }
-          REMOTE SET FILE CHARACTER-SET { ..., UCS2, UTF8 } (See next
-          section)
-          SET FILE UCS BOM { ON, OFF }
-          SET FILE UCS BYTE-ORDER { BIG-ENDIAN, LITTLE-ENDIAN }
-
-   Specifying the transfer character-set:
-          SET TRANSFER CHARACTER-SET { ..., UCS-2, UTF-8 }
-          REMOTE SET TRANSFER CHARACTER-SET { ..., UCS-2, UTF-8 }
-
-   Specifying the terminal character-set:
-          SET TERMINAL CHARACTER-SET { ..., UTF8 } { ..., UTF8 }
-          SET TERMINAL REMOTE-CHARACTER-SET { ..., UTF8 }
-          SET TERMINAL LOCAL-CHARACTER-SET { ..., UTF8 }
-
-   Displaying settings:
-          SHOW FILE
-          SHOW TRANSFER
-          SHOW TERMINAL
-          SHOW CHARACTER-SETS
-
-   Commands that use these settings include:
-          SEND, RECEIVE, GET, etc.
-          CONNECT
-          TRANSMIT
-          LOG SESSION
-
-   Converting files:
-          TRANSLATE infile { ..., UCS-2, UTF-8 } { ..., UCS-2, UTF-8 }
-          outfile
-          COPY /SWAP-BYTES infile outfile
-     _________________________________________________________________
-
-  6.7. Client/Server Character-Set Switching
-
-   A simple mechanism has been added to allow the client to change the
-   server's FILE CHARACTER-SET:
-
-   REMOTE SET FILE CHARACTER-SET name
-          The client asks the server to change its file character-set to
-          the one given. The name must match one of the server's file
-          character-set names. For convenience, C-Kermit uses its own
-          file character-set keyword list for parsing this command so you
-          can use ? for help and Tab or Esc for completion. However,
-          since the server might have a different repertoire (or even use
-          different names for the same sets), C-Kermit accepts any string
-          you supply and sends it to the server. The server, if it
-          supports this command (C-Kermit 7.0 and K95 1.1.19 do), sets
-          its file character-set as requested, and also disables
-          automatic character-set switching ([549]Section 6.5). If the
-          server does not support this command or if it does not support
-          the given character set, the REMOTE SET FILE CHARACTER-SET
-          command fails.
-
-   Here's an example that sends a Japanese text file encoded in Shift-JIS
-   to a server using every combination of Kermit's Japanese-capable file
-   and transfer character sets:
-
-  dcl \&x[] = euc ucs2 utf8             ; transfer character-sets
-  dcl \&y[] = eu uc ut                  ; 2-letter abbreviations for them
-  dcl \&f[] = shift euc jis7 ucs2 utf8  ; file character-sets
-  dcl \&g[] = sj eu j7 uc ut            ; 2-letter abbreviations
-
-  set file char shift-jis               ; local file character-set is Shift-JIS
-  for \%i 1 \fdim(&x) 1 {               ; for each transfer character-set...
-      set xfer char \&x[\%i]            ; set it
-      for \%j 1 \fdim(&f) 1 {           ; for each remote file character-set...
-          remote set file char \&f[\%j] ; set it
-          if fail exit 1 SERVER REJECTED CHARSET
-          send /text meibo-sj.html meibo-sj-\&y[\%i]-\&g[\%j].txt ; send the fi
-le
-          if fail exit 1 TRANSFER FAILED
-      }
-  }
-
-   The Kermit-370 server does not support REMOTE SET FILE CHARACTER-SET,
-   but since it supports REMOTE KERMIT commands, you can get the same
-   effect with REMOTE KERMIT SET FILE CHARACTER-SET name.
-     _________________________________________________________________
-
-  7. SCRIPT PROGRAMMING
-
-   (Also see [550]Section 2.8, Scripting Local Programs.)
-
-  7.0. Bug Fixes
-
-   The following script programming bugs were fixed in C-Kermit 7.0:
-
-     * IF EXIST and IF DIRECTORY were fixed to properly strip braces from
-       around their arguments, so "if directory {C:\Program Files}", etc,
-       would work as expected. However, this means that if the file or
-       directory name is actually enclosed in braces, the braces must be
-       doubled.
-     * The READ command did not fail if the READ file wasn't open; now it
-       does.
-     * The READ command refused to read the last or only line of a file
-       if it did not end with a proper line terminator; now it does.
-     * The END command, when given from within a SWITCH statement, did
-       not exit from the current macro or command file; instead it just
-       terminated the SWITCH.
-     _________________________________________________________________
-
-  7.1. The INPUT Command
-
-   7.1.1. INPUT Timeouts
-
-   The description of the INPUT command on page 422 fails to mention the
-   following two points about the timeout (which apply to C-Kermit 6.0
-   and later):
-
-    1. "INPUT -1 text" (or "INPUT \%x text", where \%x is any variable
-       whose value is -1 or less) means "wait forever". This form of the
-       INPUT command fails only if it is interrupted, since it will never
-       time out.
-    2. INPUT 0 performs a nonblocking read of material that has already
-       arrived but has not yet been read, and succeeds immediately if the
-       target string is found, or fails immediately if it is not found.
-
-   The same points apply to MINPUT. REINPUT ignores its timeout
-   parameter.
-     _________________________________________________________________
-
-    7.1.2. New INPUT Controls
-
-   The following new INPUT controls were added in version 7.0:
-
-   SET INPUT AUTODOWNLOAD { ON, OFF }
-          Explained in [551]Section 7.7.
-
-   SET INPUT CANCELLATION { ON, OFF }
-          This governs whether an INPUT command can be canceled by
-          "pressing any key" on the keyboard. Normally it can be, in
-          which case the INPUT command fails immediately and \v(instatus)
-          is set to 2, indicating interruption. SET INPUT CANCELLATION
-          OFF disables keyboard cancellations; thus if the search text is
-          not encountered, the INPUT command will run for its entire
-          timeout interval. SET INPUT CANCELLATION OFF does not disable
-          interruption by Ctrl-C, however; every command needs an
-          emergency exit. (If you really want to disable interruption by
-          Ctrl-C, use SET COMMAND INTERRUPTION OFF.)
-
-   Also see [552]Section 7.2 for any new variables related to INPUT.
-     _________________________________________________________________
-
-    7.1.3. INPUT with Pattern Matching
-
-   C-Kermit 7.0 allows INPUT, MINPUT, and REINPUT targets to be a pattern
-   (explained in [553]Sections 1.19 and [554]4.9). This solves a
-   long-standing problem illustrated by the following scenario: a certain
-   company has a bank of TCP/IP modem servers, with hostnames server1,
-   server2, server3, and so on. Each server's prompt is its name,
-   followed by a colon (:), for example "Server72:". Without INPUT
-   patterns, it would be rather difficult to wait for the prompt. The
-   brute force approach:
-
-  minput 20 Server1: Server2: Server3: ... (enumerating each one)
-
-   is subject to failure whenever a new server is added. A more subtle
-   approach:
-
-  input 20 Server
-  if fail ...
-  input 2 :
-
-   is liable to false positives, e.g. "Welcome to the XYZ Corp Modem
-   Server. Please read the following message:"...
-
-   With patterns, you can match the prompt with "Server*:" (which doesn't
-   solve the "false positives" problem, but certainly is more compact
-   than the brute force method), or with more specific patterns such as
-   "Server[1-9]:" and "Server[1-9][0-9]:", or equivalently:
-
-  Server{[1-9],[1-9][0-9]}:
-
-   meaning the word "Server" followed by a single digit (1-9) or by two
-   digits representing a number from 1 to 99, followed by a colon.
-
-   INPUT pattern matching has been added in a way that does not interfere
-   with existing scripts. No new commands or switches are used. The
-   simple rule is: if an INPUT search target is the argument of the (new)
-   \fpattern() function, it is a pattern. Otherwise it is taken
-   literally, as before. For example:
-
-  input 5 a*b
-
-   searches for an 'a' followed by an asterisk ('*'), followed by a 'b'.
-   But:
-
-  input 5 \fpattern(a*b)
-
-   searches for an 'a' followed by anything at all up to and including
-   the first 'b'. This means that any search target to INPUT, MINPUT, or
-   REINPUT can be a pattern or a literal string, and in particular that
-   MINPUT can accommodate any mixture of patterns and literal strings.
-
-   In selecting patterns, note that:
-
-     * A leading '*' is always implied so there is no need to include
-       one.
-     * A trailing '*' is meaningless and ignored.
-     * A '*' by itself matches the first character that arrives.
-
-   A syntax note: If your pattern is a selection list, meaning a list of
-   alternatives separated by commas and enclosed in braces, then the
-   outer braces will be stripped by various levels of parsers, so you
-   must include three of each:
-
-  input 10 \fpattern({{{abc,mno,xyz}}})
-
-   Note that this is equivalent to:
-
-  minput 10 abc mno xyz
-
-   except for the setting of the \v(minput) variable.
-
-   And a caution: INPUT pattern matching has a limitation that you
-   probably never noticed with literal-string matching, namely that there
-   is a limit on the size of the match. For example, if the pattern is
-   "a*b", the match will succeed if the 'a' and 'b' are not separated by
-   more than (say) 8K bytes, but will fail if they are farther apart than
-   that. In such cases, it better to use two INPUTs (e.g. "input 10 a"
-   and then "input 100 b").
-     _________________________________________________________________
-
-    7.1.4. The INPUT Match Result
-
-   The result of any INPUT, MINPUT, or REINPUT command, no matter whether
-   the search targets are patterns or literal strings, is available in
-   the new \v(inmatch) variable. For example:
-
-  minput 10 cat \fpattern([dh]og)
-  if success echo MINPUT matched "\v(inmatch)"
-
-   This is especially useful when a pattern was matched, since it makes
-   the string that matched the pattern available to Kermit; there would
-   be no way to get it otherwise.
-
-   After an INPUT command, you can view all the INPUT-related variables
-   by typing "show variables in" (abbreviate as "sho var in"), which
-   shows the values of all built-in variables whose names start with
-   "in".
-     _________________________________________________________________
-
-  7.2. New or Improved Built-In Variables
-
-   \v(blockcheck)
-          Current BLOCK-CHECK setting, 1, 2, 3, or 4. 4 is the code for
-          BLANK-FREE-2.
-
-   \v(byteorder)
-          The machine's byte order: 0 = Big Endian, 1 = Little Endian.
-
-   \v(cmdbufsize)
-          The length of the command buffer, which is the maximum size for
-          a macro, a command, a variable, or anything else in C-Kermit's
-          script language.
-
-   \v(ctty)
-          The device name of C-Kermit's controlling (login) terminal.
-
-   \v(filename)
-          Described in [555]Sections 4.1 and [556]4.2.
-
-   \v(filenumber)
-          Described in [557]Sections 4.1 and [558]4.2.
-
-   \v(filespec)
-          As of C-Kermit 7.0, contains fully qualified filenames rather
-          than (usually) relative ones.
-
-   \v(return)
-          Now holds the END n value of the macro that most recently
-          returned, in case END was used rather than RETURN.
-
-   \v(editor)
-          Pathname of preferred text editor
-
-   \v(editopts)
-          Command-line options for editor
-
-   \v(editfile)
-          File most recently edited
-
-   \v(browser)
-          Pathname of preferred Web browser
-
-   \v(browsopts)
-          Command-line options for Web browser
-
-   \v(browsurl)
-          URL most recently given to Web browser
-
-   \v(dialtype)
-          Type of call most recently placed (see [559]Section 2.1.11).
-
-   \v(kbchar)
-          The character, if any, that was typed at the keyboard to to
-          interrupt the most recent PAUSE, SLEEP, WAIT, MSLEEP, or INPUT
-          command; empty if the most recent such command was not
-          interrupted from the keyboard.
-
-   \v(lockdir)
-          UNIX only - The name of the UUCP lockfile directory, if known,
-          otherwise "(unknown)".
-
-   \v(lockpid)
-          UNIX only - PID of process that owns the communication port
-          that you tried to open with a SET LINE command that failed
-          because the port was in use, otherwise empty. This variable is
-          set with every SET LINE command.
-
-   \v(cx_time)
-          If no connection (SET HOST, SET LINE, DIAL, TELNET, etc) is
-          active, this is 0. If a connection is active, this is the
-          number of seconds since the connection was made.
-
-   \v(hwparity)
-          If hardware parity is in effect, this variable gives its value,
-          such as "even" or "odd" (in which case, the \v(parity) variable
-          will be "none"). Otherwise this variable is empty.
-
-   \v(serial)
-          Current serial port settings in 8N1 format ([560]Section 2.10).
-
-   \v(errno)
-          In UNIX, the current value of the C runtime errno variable,
-          which is quite volatile (meaning that often an "interesting"
-          error code can be overwritten by some other library call or
-          system service that sets errno before you have a chance to look
-          at it). In VMS, the error code returned by the system or
-          library call that most recently failed (success codes are not
-          saved). Not available in other operating systems.
-
-   \v(errstring)
-          The UNIX or VMS system error message that corresponds to
-          \v(errno). Not available in all OS's. Also see
-          [561]\ferrstring().
-
-   \v(setlinemsg)
-          The error message, if any, from the most recent SET LINE, SET
-          PORT, SET HOST, TELNET, or other connection-making command.
-          This is not necessarily the same as \v(errstring) since these
-          commands might fail without generating a system error code, for
-          example (in UNIX) because a lockfile existed indicating the
-          device was assigned by another user.
-
-   \v(exitstatus)
-          The exit status C-Kermit would return if it exited now.
-
-   \v(pexitstat)
-          The exit status of the inferior process most recently invoked
-          by C-Kermit (by RUN, !, REDIRECT, SEND /COMMAND, etc). In VMS,
-          this code can be given to \ferrstring() to get the
-          corresponding error message (in UNIX, program/command return
-          codes are not the same as system error codes). Not available in
-          operating systems other than UNIX and VMS. See [562]Section
-          4.2.5 for details.
-
-   \v(inmatch)
-          The incoming string of characters, if any, that matched the
-          most recent INPUT, REINPUT, or MINPUT command.
-
-   \v(intime)
-          The number of milliseconds (thousandths of seconds) it took for
-          the most recent INPUT command to find its match, or -1 if no
-          INPUT command has been given yet. If the INPUT command timed
-          out, the value is approximately equal to 1000 times the INPUT
-          timeout. If INPUT failed for some other reason, the value is
-          undefined (\v(instatus) gives INPUT completion status). If your
-          version of C-Kermit is built without high-precision
-          floating-point timers, this number will always be a multiple of
-          1000.
-
-   \v(inwait)
-          The number of seconds specified as the timeout in the most
-          recent INPUT command.
-
-   \v(dialsuffix)
-          Dialing suffix for use during PDIAL sequence; see [563]Section
-          2.1.10.
-
-   \v(pid)
-          UNIX, VMS, and K95 only. C-Kermit's primary process ID,
-          numeric, decimal. If you want to show it in hex, use
-          \fn2hex(\v(pid)) If you want to show it in octal, use
-          \fn2octal(\v(pid)).
-
-   \v(printer)
-          Current printer name or SET PRINTER value.
-
-   \v(p_ctl)
-          Control prefix char \v(p_8bit) 8-bit prefix char (if parity not
-          none)
-
-   \v(p_rpt)
-          Repeat prefix char (if repeat compression enabled)
-
-   \v(herald)
-          Kermit's version herald
-
-   \v(test)
-          Kermit's test version, if any, or 0 if this is not a test
-          version. Typical values for test versions are "Alpha.03" or
-          "Beta.14".
-
-   \v(sendlist)
-          The number of entries in the SEND-LIST, 0 if none. Note:
-          entries do not necessarily correspond to files, since an entry
-          might contain wildcards. Also note that the value does not go
-          back to 0 after the files in the list are sent. To reset this
-          variable, use CLEAR SEND-LIST. The purpose of this variable is
-          to determine if a SEND command, when given without any
-          filenames, will be legal. Example:
-
-  xif \v(sendlist) { send } else { send oofa.txt }
-
-   \v(trigger)
-          If the most recent CONNECT session was terminated automatically
-          by a trigger, this variable contains the trigger value.
-
-   \v(ty_ln)
-          TYPE line number (during TYPE)
-
-   \v(ty_lc)
-          TYPE line count (after TYPE)
-
-   \v(ty_mc)
-          TYPE match count (after TYPE)
-
-   \v(xferstat)
-          Status of most recent file transfer:
-
--1: No transfer yet
- 0: Succeeded
- 1: Failed
-
-   \v(xfermsg)
-          If the most recent file transfer failed, this is the reason. If
-          it succeeded, \v(xfermsg) is an empty string.
-
-   \v(tftime)
-          Total elapsed time of most recent file transfer operation, in
-          seconds.
-
-   \v(textdir)
-          Directory that holds (or is supposed to hold) Kermit text files
-          such as installation instructions, release notes, update notes,
-          read-me files, "beware" files, etc.
-
-   \v(name)
-          The name with which the Kermit program was invoked, e.g.
-          "kermit", "wermit", "k95", "k2", etc (see [564]Section 9.1).
-
-   \v(osname)
-          Name of operating system on computer where C-Kermit is running,
-          obtained at runtime (from uname or equivalent).
-
-   \v(osversion)
-          Version of operating system on computer where C-Kermit is
-          running, obtained at runtime (from uname or equivalent).
-
-   \v(osrelease)
-          Release of operating system on computer where C-Kermit is
-          running, obtained at runtime (from uname or equivalent).
-
-   \v(model)
-          The specific hardware model of the computer where C-Kermit is
-          running, if known.
-
-   \v(math_pi)
-          The value of Pi (see [565]Section 7.23)
-
-   \v(math_e)
-          The value of e (see [566]Section 7.23)
-
-   \v(math_precision)
-          How many significant digits in a floating-point number.
-
-   \v(f_count)
-          Result of the most recent FILE COUNT (FCOUNT) command.
-
-   \v(f_error)
-          Numeric error code of most recent FILE command.
-
-   \v(f_max)
-          Maximum number of files open simultaneously.
-
-   The math constants are given in the precision of underlying computer's
-   floating-point arithmetic.
-
-   Note the distinction between \v(osname), \v(osversion), and
-   \v(platform); the latter refers to the platform for which and/or upon
-   which C-Kermit was built, as opposed to the one on which it is
-   actually running. Also note that each operating system can, and
-   probably will, interpret and fill in the os* variables differently, or
-   not at all.
-
-   The SHOW VARIABLES command now accepts a variable name, prefix, or
-   pattern:
-
-  show variables         Shows all variables.
-  show variables t       Shows all variables that start with "t".
-  show variables *ver*   Shows all variables whose names contain "ver".
-  show variables *ver    Ditto (an implied "*" is appended).
-     _________________________________________________________________
-
-  7.3. New or Improved Built-In Functions
-
-   The following new file-i/o functions are explained in [567]Section
-   1.22.
-
-  \f_status(channel)           Status of file open on channel
-  \f_pos(channel)              Read/write (byte) pointer of given file
-  \f_line(channel)             Current line of file
-  \f_handle(channel)           Handle of file
-  \f_eof(channel)              Whether given file is at EOF
-  \f_getchar(channel)          Read a char from given file
-  \f_getline(channel)          Read a line from given file
-  \f_getblock(channel,n)       Read a block from given file
-  \f_putchar(channel,c)        Write a char to given file
-  \f_putline(channel,string)   Write a line to given file
-  \f_putblock(channel,string)  Write a block to given file
-
-   The following new date-time-related functions are explained in
-   [568]Section 1.6:
-
-  \fday()                Returns day of week of given date
-  \fnday()               Returns numeric day of week of given date
-  \ftime()               Returns time portion of given date-time
-  \fntime()              Converts time to seconds since midnight
-  \fn2time()             Converts seconds since midnight to hh:mm:ss
-  \fcvtdate(date-time)   Converts free-format date to yyyymmdd hh:mm:ss
-  \fdayofyear(date-time) Converts date to yyyyddd (day-of-year) format
-  \fdoy(date-time)       Synonym for \fdayofyear()
-  \fdoy2date(dayofyear)  Converts yyyyddd to yyyymmdd
-  \fmjd(date-time)       Converts free-format date to Modified Julian Date
-  \fmjd2date(mjd)        Converts modified Julian date to yyyymmdd
-
-   The new floating-point arithmetic functions are explained in
-   [569]Section 7.23. f1 and f2 are floating-point (real) numbers; d is
-   the number of decimal places to show:
-
-  \ffpabsolute(f1,d)     Absolute value of f1
-  \ffpadd(f1,f2,d)       f1 + f1
-  \ffpcosine(f1,d)       Cosine of f1
-  \ffpdivide(f1,f2,d)    f1 divided by f2
-  \ffpexp(f1,d)          e to the f1 power
-  \ffpint(f1)            Integer part of f1
-  \ffplog10(f1,d)        Log base 10 of f1
-  \ffplogn(f1,d)         Natural log of f1
-  \ffpmaximum(f1,f2,d)   Maximum of f1 and f2
-  \ffpminimum(f1,f2,d)   Minimum of f1 and f2
-  \ffpmodulus(f1,f2,d)   Modulus of f1 and f2
-  \ffpmultiply(f1,f2,d)  Product of f1 and f2
-  \ffpraise(f1,f2,d)     Raise f1 to power f2
-  \ffpround(f1,d)        Round f1 to d places
-  \ffpsine(f1,d)         Sine of f1
-  \ffpsqrt(f1,d)         Square root of f1
-  \ffpsubtract(f1,f2,d)  f2 - f1
-  \ffptangent(f1,d)      Tangent of f1
-
-   Integer number functions:
-
-   \fabsolute(n)
-          Absolute value of integer n.
-
-   \frandom(n)
-          Returns a random integer between 0 and n-1.
-
-   \fradix(s,n1,n2)
-          If the string s is an integer in radix n1, the result is the
-          same number expressed in radix n2, where n1 and n2 may be any
-          number from 2 through 36, expressed as decimal numbers, or
-          variables (etc) that evaluate to decimal numbers. For the
-          source and result, the digits of any radix, r, are the first r
-          characters in the sequence 0-9,a-z (case doesn't matter for the
-          letters). The string s may have a sign, + or -; if it starts
-          with a minus (-) sign, the result also has a minus sign.
-
-   The \fradix() function does not work with floating-point numbers. It
-   does not reveal the internal storage format of a number; for example,
-   \fradix(-1,10,16) is -1, not something like FFFFFFFFFF. If all three
-   arguments are not given, or if n1 or n2 are not numbers between 2 and
-   36 inclusive, or s is not a number in radix n1, an error occurs and
-   the empty string is returned. \fradix() also does not offer
-   extended-precision arithmetic; number values are limited to those
-   expressed as a long integer in the architecture of the underlying
-   computer, usually 32 or 64 bits. If you give it an argument whose
-   absolute value is larger than can be held in an unsigned long, the
-   result is -1.
-
-   The next four are shorthand functions for decimal/hexadecimal and
-   decimal/octal number conversion:
-
-   \fn2hex(n)
-          Returns the hexadecimal (base 16) representation of the integer
-          n. This is different from \fhexify(s), which treats its
-          argument as a string rather than a number. The result is always
-          left-padded with 0's to make its length even. Examples:
-
-  \n2hex(0)   = "00"                    \fhexify(0)   = "30"
-  \n2hex(255) = "ff"                    \fhexify(255) = "323535"
-  \n2hex(256) = "0100"                  \fhexify(256) = "323536"
-
-   \fhex2n(x)
-          Converts hexadecimal number x to decimal equivalent decimal
-          number. This is the inverse of \fn2hex(). Equivalent to
-          \fradix(s,16,10).
-
-   \fn2octal(n)
-          Returns the octal (base 8) representation of the number n.
-          Examples:
-
-  \n2octal(0) = "0"
-  \n2oct(255) = "377"
-  \n2oct(256) = "400"
-  Equivalent to \fradix(n,10,8).
-
-   \foct2n(n)
-          Returns the decimal representation of the given octal number,
-          n. The inverse of \fn2octal(). Equivalent to \fradix(n,8,10).
-
-   String functions:
-
-   \s(name[n:m])
-          Equivalent to \fsubstring(\m(name),n,m) ([570]Section 7.24).
-
-   \:(name[n:m])
-          Equivalent to \fsubstring(name,n,m) (where "name" is any
-          \-quantity) ([571]Section 7.24).
-
-   \fleft(s,n)
-          The leftmost ncharacters of string s; equivalent to
-          \fsubstring(s,1,n).
-
-   \fstripx(string,char)
-          Returns the part of the string up to the rightmost occurrence,
-          if any, of the given character. The default character is period
-          (.) Examples:
-
-  \fstripx(foo/bar,/)                 = "foo"
-  \fstripx(foo/bar/baz,/)             = "foo/bar"
-  \fstripx(autoexec.bat,.)            = "autoexec"
-  \fstripx(autoexec.bat)              = "autoexec"
-  \fstripx(fstripx(foo/bar/baz,/),/)  = "foo"
-
-   \flop(string,character)
-          Returns the portion of the string starting after the first
-          occurrence of the given character. The default character is
-          period (.) Examples:
-
-  \flop(autoexec.bat)                 = "bat"
-  \flop(baz.foo/bar)                  = "foo/bar"
-  \flop(baz.foo/bar,/)                = "bar
-
-   \fstripn(string,n)
-          Returns the string with ncharacters removed from the end.
-          Example:
-
-  \fstripn(12345678,3)                = "12345"
-
-          (For more discussion of \fstripx(), \fstripn(), and \flop() see
-          [572]Section 4.2.3).
-
-   \fb64encode(s)
-          Returns the Base-64 encoding of the string s.
-
-   \fb64decode(s)
-          Returns the decoding of the Base-64 string s. Fails if s is not
-          a Base-64 string, or if its length is not a multiple of 4. Note
-          that if any of the result bytes are null (0), the result string
-          stops there. There is no way to represent strings that contain
-          null bytes in C-Kermit (the same is true for \funhexify()).
-
-   \fword(s1,n,s2,s3)
-          Extracts word number nfrom string s1. By default, a "word" is
-          any sequence of ASCII letters or digits; nis 1-based. If nis
-          omitted, "1" is used. Examples:
-
-  \fword(one two three)    = "one"
-  \fword(one two three,1)  = "one"
-  \fword(one two three,2)  = "two"
-  \fword(one two three,3)  = "three"
-
-          and:
-
-    \fword(\v(dialresult),2) = "31200"
-
-          is "31200" if \v(dialresult) is (e.g.) "CONNECT
-          31200/ARQ/V32/LAPM/V42BIS".
-
-          If you include s2, this replaces the default break set. For
-          example, suppose you have a string \%a whose value is:
-
-  $150.00 $300.00 $39.95
-
-          and you want each dollar amount to be a word; use:
-
-  \fword(\%a,\%n,{ })
-
-          This returns dollar amount number \%n, e.g. "$300.00" for \%n =
-          2. "{ }" denotes a space (you must enclose it in braces,
-          otherwise it is squeezed out). Note that ASCII control
-          characters are always included in the break set; you don't have
-          to specify them (and you can't not specify them).
-
-          The optional s3 argument lists characters (even control
-          characters) that normally would be considered separators that
-          you want included in words. So the dollars-and-cents example
-          could also be handled this way:
-
-  \fword(\%a,\%n,,$.)
-
-          in other words, use the default separator list, but remove "$"
-          and "." from it so they will be considered part of a word.
-
-   \fsplit(s1,&a,s2,s3)
-          This is like \fword(), except instead of extracting and
-          returning a particular word from string s1, it counts the words
-          and optionally assigns them to the array whose identifying
-          letter, a-z, is given after the "&" in the second argument,
-          with the first word going into element 1, the second into
-          element 2, and so on. The rules regarding break and include
-          lists (s2 and s3) are exactly the same as for \fword().
-          \fsplit() returns the number of words that were assigned, which
-          is either the number of words in the string, or the dimension
-          of the array, whichever is less. If the array is not declared,
-          \fsplit() creates it and returns a number which is both the
-          number of words in s1 and the dimension of the new array.
-          Examples:
-
-  declare \&w[20]        ; (Optional.)
-  ...
-  read \%s               ; \%s is "This is a sentence with seven words."
-  ...
-  echo "\fsplit(\%s)"    ; This would print "7".
-  echo "\fsplit(\%s,&w)" ; Ditto, and also assigns them to array \&w[].
-
-  echo "\&w[7]"          ; This would print "words".
-
-          If the line contained fields that were delimited by colon (:),
-          you would use \fsplit(\%s,&w,:). If the fields were delimited
-          by comma, then you would use \fsplit(\%s,&w,{,}); in this case
-          the literal comma must be enclosed in braces to distinguish it
-          from the comma that separates function arguments. To get a word
-          count without loading an array, but still specify break and/or
-          include lists, leave the array argument empty:
-
-   echo "\fsplit(\%s,,:)" ; Use colon as the separator.
-
-          WARNINGS:
-
-         1. If you use the same array repeatedly, \fsplit() leaves any
-            trailing members undisturbed. For example:
-  dcl \&w[10]
-  \fsplit(1 2 3 4 5,&w) ; Sets \&w[1] thru \&w[5].
-  \fsplit(a b c,&w)     ; Sets \&w[1]-[3] leaving [4]-[5] as they were.
-         2. If you allow \fsplit to create the array (by not declaring it
-            first), it is dimensioned to the number of elements it was
-            created with:
-  \fsplit(1 2 3,&x)     ; Creates an array \&x[] with 3 elements.
-  \fsplit(a b c d e,&x) ; This overflows the array.
-
-          Thus if you want to use \fsplit() repeatedly on the same array,
-          either dimension it in advance to the maximum expected size
-          (and then some -- more efficient), or else destroy it after
-          each use (to allow for unexpectedly large arguments). Example
-          using a dynamic array:
-
-  fopen /read \%c some-file
-  if fail ...
-  set function error on    ; See [573]Section 7.12
-  while true {
-      dcl \&w[]            ; Destroy \&[w] each time thru the loop
-      fread /line \%c \%a
-      if fail break
-      asg \%x \fsplit(\%a,&w)
-      if fail ...
-      ; (do what you want with \&w[] here...)
-  }
-  fclose \%c
-
-   \frindex(s1,s2,n)
-          The "n" argument to \frindex() now works consistently (in
-          mirror image) with the corresponding \findex() argument. In
-          each case, the (n-1)-most characters of s2 are ignored in the
-          search; for findex, this means the starting position of the
-          search is n (the default nis 1, and 0 is treated like 1). For
-          \frindex() it means the default starting point is:
-
-  length(s2) - length(s1) - n (with the same defaults for n).
-
-   \fsearch(pattern,string[,position])
-          Exactly like \findex(), except with a pattern (see [574]Section
-          7.9) rather than a literal string.
-
-   \frsearch(pattern,string[,position])
-          Exactly like \frindex(), except with a pattern rather than a
-          literal string.
-
-          File Functions:
-
-   \ffiles(), \fnextfile()
-          It is no longer necessary to copy the file list to an array
-          before use, as shown on p.398 of [575]Using C-Kermit 2nd
-          Edition. \ffiles() and friends now make their own safe copies
-          of the file list. Thus constructions like the following are now
-          possible:
-
-  for \%i 1 \ffiles(*.txt) 1 { send \fnextfile() }
-
-          The same is true for the new function \frfiles(),
-          \fdirectories(), and \frdirectories(), described in
-          [576]Section 4.11.3.
-
-          But note that each reference to \fnextfile() still gets you the
-          next file. So "if newer \fnextfile() foo.txt send \fnextfile()"
-          compares one file's age with that of foo.txt, and then sends an
-          entirely different file. If you're going to refer to the same
-          file more than once, assign it to a variable:
-
-  asg \%f \fnextfile()
-  if newer \%f foo.txt send \%f
-
-          (note: assign, not define).
-
-          Also note that \ffiles(), \frfiles(), \fdirectories(), and
-          \frdirectories() all now accept on optional 2nd argument: the
-          name of an array to load with the resulting file or directory
-          list, explained in [577]Section 4.11.3. So you can also load an
-          array with the filelist when you need to refer to the same file
-          more than once:
-
-  for \%i 1 \ffiles(*,&a) 1 { if newer \&a[\%i] foo.txt send \&a[\%i] }
-
-   \fpermissions(file)
-          Returns the platform-specific permissions string for the file,
-          such as "-rw-rw-r--" in UNIX or "(RWE,RWE,RE,E)" in VMS.
-
-   \fdirname(f)
-          Given a file specification f, this function returns the
-          complete pathname of directory the file is in.
-
-   Array Functions:
-
-   \fdimension(&a)
-          Returns the dimension declared for the array whose identifying
-          letter, a-z, or special character "_" or "@", is given after
-          the "&" in the argument. If the array is not declared, 0 is
-          returned. Note that when used with the macro argument vector
-          array, \&_[] (see [578]Section 7.5), the value of this function
-          is one less than \v(argc), and when used with the C-Kermit
-          command-line argument vector array, \&@[], it is equal to the
-          \v(args) variable. Examples:
-
-  echo \fdimension(&a)       ; Not declared.
-  0
-  declare \&a[12]            ; Now it's declared.
-  echo \fdim(&a)
-  12
-
-   \farraylook(pattern,arrayname)
-          Looks in the given array for the pattern and returns the index
-          of the first element that matches, if any, or -1 if none match.
-          The arrayname can include a range specifier to restrict to
-          search to a segment of the array, e.g.
-          \farraylook(*xyz*,&a[32:63]). For greater detail see
-          [579]Section 7.10.7.
-
-   \ftablelook(keyword,arrayname[,delimiter])
-          Looks in the given "table", which must be sorted, for the given
-          keyword. Returns the index of the table element that uniquely
-          matches the given keyword, or -1 if none match, or -2 if more
-          than 1 match. For greater detail see [580]Section 7.10.7.
-
-   Other new functions:
-
-   \fip2hex(s)
-          Converts a dotted decimal IP address to an 8-digit hexadecimal
-          number. \fip2hex(128.59.39.2) = 803b2702.
-
-   \fhex2ip(x)
-          Converts an 8-digit hexadecimal IP address to dotted decimal
-          form, e.g. \fhex2ip(803b2702) = 128.59.39.2. The inverse of
-          \fip2hex().
-
-   \fcommand()
-   \frawcommand()
-          These run an external command and return its output; see
-          [581]Section 4.2.8.4.
-
-   \fdialconvert(s)
-          s is a phone number in either literal or portable format (not a
-          dialing directory entry name). The function returns the dial
-          string that would actually be used when dialing from the
-          current location (after processing country code, area code, and
-          other SET DIAL values).
-
-   \ferrstring(n)
-          Returns the system error message associated with the (numeric)
-          error code n. UNIX and VMS only. Use in conjunction with
-          \v(errno) or \v(pexitstat). See [582]Section 4.2.5 for a usage
-          example. Note: This function doesn't work in Windows because
-          there is not a consistent error-code-to-message mapping; error
-          code "x" means something completely different depending on
-          whether it comes from the C runtime library, Winsock, a
-          Windows-32 API, TAPI, etc,
-
-   \fpattern(s)
-          Used in INPUT, REINPUT, and MINPUT commands to denote search
-          strings that are to be treated as patterns rather than
-          literally.
-
-   Also see [583]Section 7.8 on built-in help for functions.
-     _________________________________________________________________
-
-  7.4. New IF Conditions
-
-   IF AVAILABLE feature command
-          Executes the command if the given feature is available.
-          Presently used only to determine if specific authentication and
-          encryption options are available. Type "if available ?" to see
-          which features may be tested.
-
-   IF FLOAT f1 command
-          Executes command if f1 is a legal floating point number (which
-          includes integers). Use this to preverify arguments for the
-          \ffp...() floating-point arithmetic functions, e.g. "if float
-          \%1 echo \ffpint(\%1)".
-
-   IF == n1 n2 command
-          Synonym for "if =" (numeric equality). Note that as of C-Kermit
-          7.0, this and all other numeric comparison operators also work
-          for floating-point numbers.
-
-   IF != n1 n2 command
-          Executes the command if n1 and n2 are both numbers or variables
-          containing numbers and the value of n1 is not equal to the
-          value of n2. This is equivalent to "if not = n1 n2".
-
-   IF <= n1 n2 command
-          Executes the command if n1 and n2 are both numbers or variables
-          containing numbers and the value of n1 is less than or equal to
-          the value of n2. This is equivalent to "if not > n1 n2".
-
-   IF >= n1 n2 command
-          Executes the command if n1 and n2 are both numbers or variables
-          containing numbers and the value of n1 is greater than or equal
-          to the value of n2. Equivalent to "if not < n1 n2".
-
-   IF COMMAND word command
-          Executes the command if word is a built-in C-Kermit command.
-          Example:
-
-  if not command copy define { copy run copy \%1 \%2 }".
-
-          This defines a COPY macro that runs an external COPY command if
-          COPY is not already a built-in command.
-
-   IF LOCAL command
-          Executes the command if Kermit is in local mode, i.e. if it has
-          a SET LINE, SET PORT, or SET HOST (TELNET, RLOGIN, etc) device
-          or connection open. Does not execute the command if in remote
-          mode.
-
-   IF MATCH string pattern command
-          Executes the command if the string matches the pattern. For a
-          description of the syntax for the pattern, see [584]Section
-          4.9.1. If you want to test if the string contains pattern, use
-          IF \fsearch(pattern,string).
-
-   IF OPEN { DEBUG-LOG, SESSION-LOG, TRANSACTION-LOG, ... } command
-          Executes the command if the given file is open, fails if it is
-          not open. Type IF OPEN ? for a complete list of files that can
-          be checked (all the files that can be opened with the OPEN or
-          LOG commands).
-
-   IF QUIET command
-          Executes the command if SET QUIET is ON, and does not execute
-          it if SET QUIET is OFF. Example: IF NOT QUIET ECHO { This is a
-          message.}.
-
-   IF READABLE name
-          Succeeds if name is the name of an existing file or directory
-          that is readable.
-
-   IF WRITEABLE name
-          Succeeds if name is the name of an existing file or directory
-          that is writeable, e.g.:
-
-  if not writeable \v(lockdir) echo Please read installation instructions!
-
-   IF FLAG command
-          This tests a user-settable condition, which can mean anything
-          you like. SET FLAG ON causes subsequent IF FLAG commands to
-          succeed; SET FLAG OFF causes them to fail. One way to use it
-          would be for debugging your scripts; precede any debugging
-          statements with IF FLAG. Then SET FLAG on to debug your script,
-          SET FLAG OFF to run it without debugging. Another common use is
-          for causing an inner loop to cause an outer loop to exit.
-
-   IF C-KERMIT command
-          C-Kermit, but not Kermit 95 or MS-DOS Kermit, executes the
-          command.
-
-   IF K-95 command
-          Kermit 95, but not C-Kermit or MS-DOS Kermit, executes the
-          command.
-
-   IF MS-KERMIT command
-          MS-DOS Kermit, but not C-Kermit or Kermit 95, executes the
-          command.
-     _________________________________________________________________
-
-  7.5. Using More than Ten Macro Arguments
-
-   The \v(argc) variable now gives the actual number of arguments, even
-   if the number is greater than 9:
-
-  C-Kermit> define xx echo \v(argc)
-  C-Kermit> xx a b c d e f g h i j k l m n o p q r s t u v w x y z
-  27
-
-   Remember that \v(argc) includes the name of the macro itself, so it is
-   always at least 1, and is always 1 greater than the actual number of
-   arguments. As in versions 6.0 and earlier, if more than 9 arguments
-   are given, only the first nine are assigned to the variables \%1..\%9.
-
-   The \&_[] array, discussed on page 353 of [585]Using C-Kermit, 2nd ed,
-   now holds all the arguments, up to some implementation-dependent limit
-   (64 or greater), rather than only the first 9. To illustrate: the
-   following macro tells the number of arguments it was called with and
-   then prints them:
-
-  define show_all_args {
-      local \%i
-      echo \&_[0] - Number of arguments: \feval(\v(argc)-1)
-      for \%i 1 \v(argc)-1 1 { echo \flpad(\%i,3). "\&_[\%i]" }
-  }
-
-   Within a macro \&_[0], like \%0, contains the name of the macro.
-
-   At top level, the \&_[] array is filled as follows:
-
-     * If the first argument on the C-Kermit command line was a filename,
-       or C-Kermit was invoked from a "Kerbang" script ([586]Section
-       7.19), element 0 contains the filename, and elements 1 through
-       \v(argc)-1 hold the remaining command-line arguments.
-     * Otherwise the program name goes in element 0, and elements 1
-       through \v(argc)-1 hold any arguments that were included after
-       "--" or "="
-
-   The new \%* variable, when used within a macro, is replaced by the
-   text that followed the macro name in the macro invocation. If no
-   arguments were given, \%* is replaced by the empty string. Examples:
-
-  C-Kermit> define xx echo [\%*]
-  C-Kermit> define \%a oofa
-  C-Kermit> xx
-  []
-  C-Kermit> xx \%a
-  [oofa]
-  C-Kermit> xx a
-  [a]
-  C-Kermit> xx a b
-  [a b]
-  C-Kermit> xx a b c
-  [a b c]
-  C-Kermit> xx a b c d e f g h i j k l m n o p q r s t u v w x y z
-  [a b c d e f g h i j k l m n o p q r s t u v w x y z]
-
-   Note that \%* can not be used at top level, since Kermit does not have
-   access to the raw command line (only to its elements separately, after
-   they have been processed by the shell and the C library).
-
-   C-Kermit 7.0 also adds a SHIFT command:
-
-   SHIFT [ number ]
-          Shifts the macro arguments (except argument 0) the given number
-          of places to the left and adjusts \v(argc) accordingly. The
-          default number is 1.
-
-   To illustrate, suppose macro XXX is invoked as follows:
-
-  xxx arg1 arg2 arg3
-
-   Then inside XXX, \%1 is "arg1", \%2 is "arg2", and \%3 is "arg3".
-   After a SHIFT command is given inside XXX, then \%1 is "arg2", \%2 is
-   "arg3", and \%3 is empty. \%0 (the name of the macro) remains
-   unchanged.
-
-   If more than 9 arguments were given, then arguments are shifted into
-   the \%1..9 variables from the argument vector array.
-
-   At top level, the SHIFT command operates on the \&_[] array and \%1..9
-   variables; the \&@[] array is not affected. See [587]Section 7.16 for
-   details.
-
-   The \%* variable is not affected by the SHIFT command.
-     _________________________________________________________________
-
-  7.6. Clarification of Function Call Syntax
-
-   Spaces are normally stripped from the front and back of each function
-   argument; to prevent this enclose the argument in braces:
-
-  \fsplit(\%a,&a,{ })
-
-   However, function calls that contain spaces can make trouble when the
-   function is to be used in a "word" field, since space separates words.
-   For example:
-
-  for \%i 1 \fsplit(\%a,&a,{ }) 1 {
-    echo \%i. "\&a[\%i]"
-  }
-
-   In most cases, the trouble can be averted by enclosing the function
-   reference in braces:
-
-  for \%i 1 {\fsplit(\%a,&a,{ })} 1 {
-    echo \%i. "\&a[\%i]"
-  }
-
-   or by replacing spaces with \32 (the ASCII code for space):
-
-  for \%i 1 \fsplit(\%a,&a,\32) 1 {
-    echo \%i. "\&a[\%i]"
-  }
-
-   Braces are also used in function calls to indicate grouping. For
-   example:
-
-  \fsubstring(abcd,2,2) = "bc"
-
-   But suppose "abcd" needed to contain a comma:
-
-  \fsubstring(ab,cd,2,2)
-
-   This would cause an error, since "cd" appears to be the second
-   argument, when really you want the first "2" to be the second
-   argument. Braces to the rescue:
-
-  \fsubstring({ab,cd},2,2) = "b,"
-
-   Similarly, leading and trailing spaces are stripped from each
-   argument, so:
-
-  \fsubstring( abcd ,2,2) = "bc"
-
-   but braces preserve them:
-
-  \fsubstring({ abcd },2,2) = "ab"
-
-   Given these special uses for braces, there is no way to pass literal
-   braces to the function itself. For example:
-
-  \fsubstring(ab{cd,2,2)
-
-   causes an error.
-
-   So if you need a function to include braces, define a variable
-   containing the string that has braces. Example:
-
-  define \%a ab{cd
-  \fsubstring(\%a,2,2) = "b{"
-
-   If the string is to start with a leading brace and end with a closing
-   brace, then double braces must appear around the string (which itself
-   is enclosed in braces):
-
-  define \%a {{{foo}}}
-  \fsubstring(\%a) = "{foo}"
-
-   This also works for any other kind of string:
-
-  define \%a {{ab{cd}}
-  echo \fsubstring(\%a) = "ab{cd"
-     _________________________________________________________________
-
-  7.7. Autodownload during INPUT Command Execution
-
-   As of 6.1 / 1.1.12, C-Kermit can be told to look for incoming Kermit
-   (or Zmodem) packets during execution of an INPUT command. By default
-   (for consistency with earlier releases), this is not done. You can
-   enable this feature with:
-
-  SET INPUT AUTODOWNLOAD ON
-
-   (and disable it again with OFF.)
-
-   One possible use for this feature is as a server mode with a time
-   limit:
-
-  INPUT 3600 secret-string-to-end-the-INPUT-command
-
-   In this example, any GET, SEND, or REMOTE commands received within one
-   hour (3600 seconds) of when the INPUT command was issued will be
-   executed. Here's another example, in which we want to stay open until
-   11:30pm, or until interrupted by seven consecutive Ctrl-C (\3)
-   characters:
-
-  INPUT 23:30:00 \3\3\3\3\3\3\3
-
-   The INPUT AUTODOWNLOAD setting is displayed by SHOW SCRIPTS or SHOW
-   INPUT.
-     _________________________________________________________________
-
-  7.8. Built-in Help for Functions.
-
-   Beginning in C-Kermit 7.0, you may obtain a description of the calling
-   conventions and return values of any built-in function, such as
-   \fsubstring(), with the new HELP FUNCTION command; give the function's
-   name without the leading "\f", e.g. "help func substring". You can use
-   ?, completion, and abbreviation in the normal manner.
-     _________________________________________________________________
-
-  7.9. Variable Assignments
-
-    7.9.1. Assignment Operators
-
-   Programmers accustomed to languages such as C or Fortran might find
-   Kermit's method of assigning values to variables unnatural or awkward.
-   Beginning in C-Kermit 7.0, you can use the following alternative
-   notation:
-
- .name = value    is equivalent to   DEFINE name value
- .name := value   is equivalent to   ASSIGN name value
- .name ::= value  is equivalent to   ASSIGN name \feval(value)
-
-   When the command begins with a period (.), this indicates an
-   assignment. The name can be a macro name, a \%{digit,letter} variable,
-   or an array element. There can be space(s) between "." and the name.
-   Examples:
-
-  .\%a = This is a string  ; Same as "define \%a This is a string"
-  echo \%a
-  This is a string
-
-  .xxx = \%a               ; Same as "define xxx \%a"
-  echo \m(xxx)
-  \%a
-
-  .xxx := \%a              ; Same as "assign xxx \%a"
-  echo \m(xxx)
-  This is a string
-
-  declare \&a[2]           ; Use with arrays...
-  define \%i 2
-  .\&a[1] = first
-  .\&a[\%i] = second
-
-   The following sequence illustrates the differences among three levels
-   of evaluation:
-
-  .\%x = 2          ; Define a variable to have a numeric value
-  .\%y = (3 + \%x)  ; Define another variable as an arithmetic expression
-
-  .xxx = 4 * \%y    ; "=" simply copies the right-hand side.
-  echo \m(xxx)
-  4 * \%y
-
-  .xxx := 4 * \%y   ; ":=" evaluates the variables first, then copies.
-  echo \m(xxx)
-  4 * (3 + 2)
-
-  .xxx ::= 4 * \%y  ; "::=" evaluates the expression, then copies.
-  echo \m(xxx)
-  20
-
-   You can also use this syntax to clear (undefine) a variable:
-
-  .\%a = oofa       ; Define the variable
-  echo "\%a"
-  "oofa"
-  .\%a              ; Clear the variable
-  echo "\%a"
-  ""
-
-   Extra credit: Can you guess what happens below when the file "abc"
-   does not exist?
-
-  fopen /read \%c abc
-  if fail ...
-     _________________________________________________________________
-
-    7.9.2. New Assignment Commands
-
-   Recall the DEFINE and ASSIGN commands, and their hidden counterparts,
-   _DEFINE and _ASSIGN. The former take the variable name literally, the
-   latter evaluate the variable-name field to form the variable name
-   dynamically. Examples:
-
-  DEFINE \%x foo    ; Sets the value of the variable \%x to "foo".
-  DEFINE \%a \%x    ; Sets the value of the variable \%a to "\%x".
-  _DEFINE x_\%a \%x ; Sets the value of the variable x_foo to "\%x".
-  ASSIGN \%a \%x    ; Sets the value of the variable \%a to the "foo".
-  _ASSIGN x_\%a \%x ; Sets the value of the variable x_foo to "foo".
-
-   This concept has been carried over to the remaining
-   variable-assignment commands: EVALUATE, INCREMENT, and DECREMENT:
-
-   EVALUATE variablename expression
-          Evaluates the arithmetic expression and assigns its value to
-          the variable whose name is given. Example: "eval \%a 1+1"
-          assigns "2" to \%a.
-
-   _EVALUATE metaname expression
-          Evaluates the arithmetic expression and assigns its value to
-          the variable whose name is computed from the given metaname.
-          Example: "eval foo<\%a>::\%1 \%2 * (\%3 + \%4)" assigns the
-          value of "\%2 * (\%3 + \%4)" to the variable whose name is
-          computed from "foo<\%a>::\%1".
-
-   INCREMENT variablename [ expression ]
-          Evaluates the arithmetic expression and adds its value to the
-          value of the variable whose name is given. Example: "increment
-          \%a".
-
-   _INCREMENT metaname [ expression ]
-          Evaluates the arithmetic expression and adds its value to the
-          value of the variable whose name is computed from the given
-          metaname. Example: "_increment Words::\%1.count[\%2]".
-
-   DECREMENT variablename [ expression ]
-          Evaluates the arithmetic expression and subtracts its value
-          from the value of the variable whose name is given.
-
-   _DECREMENT metaname [ expression ]
-          Evaluates the arithmetic expression and subtracts its value
-          from the value of the variable whose name is computed from the
-          given metaname.
-
-   WARNING: The syntax of the EVALUATE command has changed since C-Kermit
-   6.0 and K95 1.1.17. Previously, it did not include a variable name,
-   only an expression. To restore the old behavior, use SET EVALUATE OLD.
-   To return to the new behavior after restoring the old behavior, use
-   SET EVALUATE NEW.
-
-   NOTE: There are no analogs to the "_" commands for the operators
-   described in [588]Section 7.9.1; those operators can not be used to
-   assign values to variables whose names must be computed.
-     _________________________________________________________________
-
-  7.10. Arrays
-
-   C-Kermit 7.0 adds lots of new array-related features, and groups them
-   together under the NEW ARRAY command:
-
-   ARRAY { CLEAR, COPY, DECLARE, DESTROY, RESIZE, SHOW, SORT }
-
-   In each of the ARRAY commands, wherever an array name is expected,
-   "short forms" may be used. For example, all of the following are
-   acceptable:
-
-  array show \&a[]  (or SHOW ARRAY...)
-  array show &a[]
-  array show a[]
-  array show &a
-  array show a
-
-   In addition, ranges are accepted in the ARRAY COPY, ARRAY CLEAR, ARRAY
-   SET, ARRAY SHOW, and ARRAY SORT commands:
-
-  array clear \&a[16]     ; Clears 16 thru end
-  array clear &a[16]      ; Ditto
-  array clear a[16]       ; Ditto
-
-  array clear \&a[16:32]  ; Clears 16 thru 32
-  array clear &a[16:32]   ; Ditto
-  array clear a[16:32]    ; Ditto
-
-   When using array names as function arguments, you must omit the "\"
-   and you must include the "&". You may optionally include empty
-   brackets. Examples:
-
-  \fsplit(\%a,a)          ; Bad
-  \fsplit(\%a,\&a)        ; Bad
-  \fsplit(\%a,&a[3])      ; Bad
-
-  \fsplit(\%a,&a)         ; Good
-  \fsplit(\%a,&a[])       ; Good
-     _________________________________________________________________
-
-    7.10.1. Array Initializers
-
-   Beginning in C-Kermit 7.0, you may initialize an array -- in whole or
-   in part -- in its declaration:
-
-   [ ARRAY ] DECLARE array-name[size] [ = ] [ value1 [ value2 [...] ] ]
-
-   For compatibility with versions 5A and 6.0, the ARRAY keyword is
-   optional. DECLARE can also be spelled DCL.
-
-   Initializers are (a) optional, (b) start with element 1, (c) must be
-   enclosed in braces if they contain spaces, and (d) are evaluated
-   according to normal rules by the DECLARE command prior to assignment.
-   Thus the assignments made here are the same as those made by the
-   ASSIGN command. This allows you to initialize array elements from the
-   values of other variables. If you actually want to initialize an array
-   element to variable's name, as opposed to its value, use double
-   backslashes (as in "\\&a", "\\v(time)", etc).
-
-   The size (dimension) of the array is optional. If the size is omitted,
-   as in "\&a[]", then the array sizes itself to the number of
-   initializers; if there are no initializers the array is not declared
-   or, if it was declared previously, it is destroyed. If a size is
-   given, any extra elements in the initialization list are discarded and
-   ignored.
-
-   NOTE: Unlike in C, the list of initializers is NOT enclosed in braces.
-   Instead, braces are used to group multiple words together. So:
-
-  ARRAY DECLARE \&a[] = { one two three }
-
-   would create an array with two elements (0 and 1), with element 1
-   having the value " one two three ".
-
-   Examples:
-
-   ARRAY DECLARE \&a[16]
-          Declares the array \&a with 17 elements (0 through 16), in
-          which all elements are initially empty. If the array \&a[]
-          existed before, the earlier copy is destroyed.
-
-   ARRAY DECLARE &a[16]
-   ARRAY DECLARE a[16]
-   ARRAY DCL \&a[16]
-   ARRAY DCL &a[16]
-   ARRAY DCL a[16]
-   DECLARE \&a[16]
-   DECLARE &a[16]
-   DECLARE a[16]
-   DCL \&a[16]
-   DCL &a[16]
-   DCL a[16]
-          All of the above are the same as the first example.
-
-   ARRAY DECLARE \&a[16] = alpha beta {gamma delta}
-          Declares the array \&a with 17 elements (0 through 16),
-          initializing \&a[1] to "alpha", \&a[2] to "beta", and \&a[3] to
-          "gamma delta". The remaining elements are empty.
-
-   ARRAY DECLARE \&a[] = alpha beta {gamma delta}
-          Same as the previous example, but the array is automatically
-          dimensioned to 3.
-
-   ARRAY DECLARE \&a[3] = alpha beta {gamma delta} epsilon zeta
-          Too many initializers; only the first three are kept.
-
-   ARRAY DECLARE \&a[0]
-   ARRAY DECLARE \&a[]
-   ARRAY DECLARE &a[]
-   ARRAY DECLARE &a
-   ARRAY DECLARE a
-   DECLARE \&[0]
-   DECLARE a
-   DCL a
-          All of these are equivalent. Each destroys \&a[] if it exists.
-          Declaring an array with a dimension of 0 is the same as ARRAY
-          DESTROY arrayname.
-
-   ARRAY DECLARE \&a[] = \%1 \%2 \%3
-          Declares the array \&a with 3 elements (0 through 3),
-          initializing \&a[1] to the value of \%1, \&a[2] to the value of
-          \%2, and \&a[3] to the value of \%3. In this case, any
-          reference to one of these array elements is replaced by the
-          value of the corresponding \%n variable at the time the
-          declaration was executed (immediate evaluation; the array
-          element's value does not change if the initializer variable's
-          value changes).
-
-   ARRAY DECLARE \&a[] = \\%1 \\%2 \\%3
-          Declares the array \&a with 3 elements (0 through 3),
-          initializing \&a[1] to the string "\%1", \&a[2] to "\%2", and
-          \&a[3] to "\%3". In this case any reference to one of these
-          array elements is replaced by the CURRENT value of the
-          corresponding \%n variable (deferred evaluation -- the array
-          element's value follows the value of the initializer variable).
-
-   The equal sign (=) preceding the initializer list is optional, but is
-   recommended for clarity. If you need to initialize element 1 to a
-   literal equal sign, use two of them, separated by a space, as in this
-   example:
-
-  ARRAY DECLARE \&a[] = = + - * /
-
-   Remember, element 0 is not initialized by the DECLARE command. To
-   initialize element 0, use a regular DEFINE or ASSIGN command:
-
-  ARRAY DECLARE \&a[] one two three four five six seven eight nine
-  DEFINE \&a[0] zero
-
-   Finally, remember that every command level has its own local array,
-   \&_[], containing all the macro arguments (\%0, \%1, ...) for that
-   level. See [589]Section 7.5 for details.
-     _________________________________________________________________
-
-    7.10.2. Turning a String into an Array of Words
-
-   The \fsplit(s1,&a,s2,s3) function assigns the words of string s1 to
-   successive elements of the array (beginning with element 1) whose
-   identifying letter, a-z, is given after the "&" in the second
-   argument, using break and include characters given in s2 and s3. See
-   [590]Section 7.3 for details.
-     _________________________________________________________________
-
-    7.10.3. Arrays of Filenames
-
-   See [591]Section 4.11.3 for news about how \ffiles() and related
-   functions can assign a list of filenames to an array. To recapitulate
-   briefly here:
-
-  \ffiles(*,&a)
-
-   assigns all files that match the first argument to the array denoted
-   by the second argument. If the array has not been declared, it is
-   declared automatically, with exactly the number of elements needed to
-   hold the file list; if it was previously declared, it is destroyed and
-   reused. The filenames are assigned starting at array element 1.
-   Element 0 holds the number of files in the list.
-
-   The DIRECTORY command ([592]Section 4.5.1) can also create filename
-   arrays if you give it the /ARRAY: switch; this allows selection
-   criteria beyond whether the filename matches the given pattern.
-
-   All functions and commands that create filename arrays store the
-   number of filenames, n, as element 0 of the array, and the filenames
-   as elements 1 through n.
-     _________________________________________________________________
-
-    7.10.4. Automatic Arrays
-
-   In a command file or macro, you can now have local (automatic) arrays.
-   Just give the name followed by empty subscript brackets (no spaces
-   inside the brackets please) in a LOCAL command, and then declare the
-   array:
-
-  LOCAL \%a \&a[] oofa
-  ARRAY DECLARE \&a[32] = value1 value2 value3 ...
-
-   This declares the scalar variable \%a, the array \&a[], and the macro
-   name "oofa" to be local, and then declares the new local copy of \&a[]
-   with 32 elements, perhaps assigning some initial values. When C-Kermit
-   exits from the command file or macro containing these command, the
-   previous \&a[] array is restored (and if there was no \&a[] at any
-   higher level, this will still be true). The process can be repeated to
-   any level. Thus it is now safe to write scripts or macros containing
-   arrays without danger of interfering with global arrays of the same
-   name.
-
-   Just as scalars are inherited by lower command levels, so are arrays.
-   So, for example, if \&a[] is declared at top level, all lower levels
-   will see it unless they include a "local \&a[]" statement, in which
-   case all levels at and beneath the level where the LOCAL statement was
-   executed will see the local copy. This too can be repeated to any
-   level.
-
-   On the other hand, if you DECLARE an array at a lower command level
-   without also making it LOCAL, this replaces the copy that was declared
-   at the lowest command level above this one.
-     _________________________________________________________________
-
-    7.10.5. Sorting Arrays
-
-   Although arrays can be sorted using FOR loops as shown on page 383 of
-   Using C-Kermit, 2nd Ed., this involves quite a bit of repetitive
-   interpretation by the command parser, and so can be slow for large
-   arrays. For this reason, C-Kermit 7.0 adds a built-in SORT command:
-
-   ARRAY SORT [ switches ] array [ array2 ]
-          Sorts the given array in place. Sorting is strictly lexical
-          (string based). The array name can be given fully, e.g.
-          "\&a[]", or the "\" and/or "&" and/or brackets can be omitted,
-          e.g. "array sort \&a[]", "sort &a", "sort a". Also, a range can
-          be indicated in the brackets as noted in [593]Section 7.10, to
-          restrict the sort to a range of elements (equivalent to the
-          /RANGE switch, described just below), e.g. "array sort
-          &a[20:30]".
-
-   A second array may be specified. If it is, and if it is at least as
-   big as the first array, it is sorted according to the first array. For
-   a sample application, see [594]Section 7.10.10.
-
-   See [595]Section 1.5 for an explanation of switches. The optional
-   switches are:
-
-   /CASE:{ON,OFF}
-          /CASE:ON means that alphabetic case is significant in
-          comparisons; uppercase letters are sorted before lowercase
-          ones. /CASE:OFF means case is ignored, e.g. "A" is the same as
-          "a". If this switch is not given, sorting is according the
-          current SET CASE setting.
-
-   /KEY:n
-          Comparison begins at position n(1-based) in each string. If no
-          key is given, the entire strings are compared. Only one key can
-          be given. If an array element is shorter than the key value, n,
-          that element is considered empty for comparison purposes, and
-          therefore lexically less than any element at least ncharacters
-          long.
-
-   /NUMERIC
-          If this switch is included, it means sorting should be numeric,
-          rather than lexical. The sort key is the string starting at the
-          key position, skipping any leading blanks or tabs, and then as
-          much of the string from that point on that fits the definition
-          of "numeric", terminating at the first character that does not
-          qualify. A numeric string has an optional sign (+ or -)
-          followed by one or more digits, and (if your version of Kermit
-          was built with floating-point support; see [596]Section 7.23 )
-          zero or one decimal point (period). If both /CASE and /NUMERIC
-          are given, /NUMERIC takes precedence.
-
-   /RANGE:n[:m]
-          Sort elements nthrough m of the array. By default, the entire
-          array from element 1 to its dimensioned size is sorted, which
-          might produce surprising results if the array is not full; see
-          example in [597]Section 7.10.7. If ":m" is omitted from the
-          range, the dimensioned size is used. Thus, to sort an entire
-          array, \&a[], including its 0th element, use "sort /range:0
-          &a". You can also sort any desired section of an array, e.g.
-          "sort /range:10:20 &a" or "sort /range:\%i:\%j-1 &b". As noted
-          above, you can also specify a range in the array-name brackets.
-          If you specify a range in the array-name brackets AND with a
-          /RANGE switch, the ones in the brackets take precedence.
-
-   /REVERSE
-          Sort in reverse order. If this switch is not given, the array
-          is sorted in ascending order.
-
-   Remember that numeric switch arguments can be numbers, arithmetic
-   expressions, or variables whose values are numbers or expressions, as
-   illustrated in the /RANGE examples above.
-
-   A typical sorting application might be to list students' test scores
-   in descending order. Suppose you had the following records:
-
-  olaf      65
-  olga      98
-  ivan      83
-  xena     100
-
-   (and so on) stored in array \&s[] (e.g. by reading them from a file as
-   illustrated in [598]section 7.10.7). In these records, the student's
-   name is in columns 1-9 and the score in 10-12. So to rearrange the
-   list in descending order of score:
-
-  sort /key:10 /reverse &s
-
-   Then to list your top five students:
-
-  for \%i 1 5 1 { echo \&s[\%i] }
-
-   Or more simply (see next section):
-
-  show array a[1:5]
-
-   To illustrate the difference between a lexical and a numeric sort,
-   suppose you have the following records (the lines that are numbered,
-   starting at column 1) in array \&a[]:
-
-    Column   1         2
-    12345678901234567890
-
-   1. Ivan 10.0 2. Olaf 9.95 3. Olga 101.5
-
-   ARRAY SORT /KEY:10 &a[] would order them 3,1,2, but ARRAY SORT /KEY:10
-   /NUMERIC &a[] would order them 2,1,3.
-     _________________________________________________________________
-
-    7.10.6. Displaying Arrays
-
-   The SHOW ARRAY command (or ARRAY SHOW) now accepts an optional
-   array-name argument:
-
-  SHOW ARRAY \&a[]
-
-   (you can leave off the \, the \&, and/or the []'s if you like; "show
-   array a" is equivalent to "show array \&a[]"). When an array is
-   specified, its dimension is shown and all defined (non-empty) elements
-   are listed.
-
-   Example:
-
-  assign \%n \ffiles(*,&a)  ; Fill an array with filenames ([599]Section 4.11.3
-)
-  show array \&a[]          ; Show the array we just read
-  array show \&a[]          ; Same as previous
-  array sort \&a[]          ; Sort the array
-  array show \&a[]          ; Show it after sorting
-  array show \&a            ; Show it again
-  array show &a             ; Show it again
-  array show a              ; Show it again
-
-   (The final four commands demonstrate the alternative forms that are
-   accepted for the array name.)
-
-   If you SHOW ARRAY without giving an array name, all defined arrays are
-   listed by name and dimension, but their contents are not shown.
-
-   You can also show a piece of an array by including a subscript or
-   range within the array brackets:
-
-  array show \&a[5]         ; Shows \&a[5]
-  array show &a[3:8]        ; Shows \&a[3] through \&a[8]
-  array show a[:\%n-1]      ; Shows \&a[0] through \&a[\%n-1]
-     _________________________________________________________________
-
-    7.10.7. Other Array Operations
-
-   ARRAY DESTROY arrayname
-          Destroys and undeclares the named array. Subscripts or ranges
-          are not accepted in this command.
-
-   ARRAY COPY array1 array2
-          Copies the first array to the second array. If the target array
-          has not been declared, it is created automatically with the
-          same size as the first. If it has been declared, it will be
-          used as declared; if the source array is larger, only as much
-          of it as will fit is copied to the target array. Syntax for
-          array1 and array2 is as in ARRAY SHOW (SHOW ARRAY). Example:
-
-  .\%n := \ffiles(*,&a)  ; Create and load array A with a file list.
-  array copy &a &b       ; Copy array A to array B.
-
-          The ARRAY COPY command also lets you copy pieces of arrays by
-          including range specifiers, as in these examples:
-
-        ARRAY COPY \&a[4:27] \&b
-                This copies \&a[] elements 4-27 to \&b[] elements 1-23,
-                creating \&b[] if necessary or, if \&b[] is already
-                declared, stopping early if its size is less than 23.
-
-        ARRAY COPY \&a[4:27] \&b[12]
-                This copies \&a[] elements 4-27 to \&b[] elements 12-35,
-                creating \&b[] if necessary or, if \&b[] is already
-                declared, stopping early if its size is less than 35.
-
-        ARRAY COPY \&a[4:27] \&b[12:14]
-                This copies \&a[] elements 4-6 to \&b[] elements 12-14,
-                creating \&b[] if necessary or, if \&b[] is already
-                declared, stopping early if its size is less than 14.
-
-        ARRAY COPY \&a[17] \&b
-                This copies all the elements of \&a[] starting with 17
-                until the last to \&b[], creating \&b[] if necessary or,
-                if \&b[] is already declared, stopping early if \&b[] is
-                not big enough.
-
-   ARRAY CLEAR arrayname
-          Sets all the elements of the array to the empty value. You may
-          also include a range specifier to clear only a selected portion
-          of the array; for example "array clear \&a[37:214]". If the
-          range is out of bounds, only the part of the array that is in
-          bounds is cleared.
-
-   ARRAY SET arrayname [ value ]
-          Sets all the elements of the array to the given value. If no
-          value is given, the array is cleared. You may also include a
-          range specifier to set only a selected portion of the array;
-          for example "array set \&a[1:9] -1". If the range is out of
-          bounds, only the part of the array that is in bounds is set.
-
-   ARRAY RESIZE arrayname size
-          Resizes the given array. If the size is greater than the
-          array's current dimension, new empty elements are added to the
-          end. If the size is less than the current dimension, the extra
-          elements are discarded. Note: If you have stored the array size
-          in element 0, ARRAY RESIZE does not change this value.
-          Alternative notation: ARRAY RESIZE arrayname[size]. For a
-          practical example, see [600]Section 7.10.11.
-
-   \farraylook(pattern,arrayname)
-          This function returns the index of the first element of the
-          given array that matches the given pattern (for details about
-          pattern syntax, see [601]section 4.9). The array name can
-          include a range specification to restrict the search to a given
-          segment of the array. If no elements match the pattern, -1 is
-          returned.
-
-   \ftablelook(keyword,arrayname[,delimiter])
-          Looks in the given "table", which must be sorted, for the given
-          keyword. The keyword need not be spelled out in full.
-          Pattern-matching characters should not be included as part of
-          the keyword. The function returns the index of the table
-          element that uniquely matches the given keyword, or -1 if none
-          match, or -2 if more than 1 match.
-
-   A "table" is an array that is sorted in lexical order; each of its
-   elements may contain multiple fields, delimited by the given delimiter
-   character or, if no delimiter is specified, a colon (:).
-
-   The \farraylook() function does exactly what you tell it. If you give
-   it a pattern that does not include wildcard characters (such as *, ?,
-   etc), it requires an exact match. For example:
-
-  \farraylook(oofa,&a)
-
-   searches for the first element of \&a[] whose value is "oofa". But:
-
-  \farraylook(oofa*,&a)
-
-   finds the first element whose value starts with "oofa", and;
-
-  \farraylook(*oofa,&a)
-
-   finds the first element whose value ends with "oofa", and;
-
-  \farraylook(*oofa*,&a)
-
-   finds the first element whose value contains "oofa".
-
-   Here's a simple demonstration of looking up patterns in arrays:
-
-  local \&a[] \%x \%n
-  declare \&a[] = zero one two three four five six seven eight nine ten
-  while true {
-      .\%x = 1
-      .\%n = 0
-      ask \%a { Pattern? }
-      if not def \%a exit 0 Done.
-      while <= \%x \fdim(&a) {
-          .\%x := \farraylook(\%a,&a[\%x])
-          if ( < \%x 0 ) break
-          echo \flpad(\%x,3). \&a[\%x]
-          increment \%x
-          increment \%n
-      }
-      if ( < \%n 1 ) echo Pattern not found - "\%a"
-  }
-
-   The array need not be sorted. When a pattern is given, a search is
-   performed; if there is a match, the matching element's index and the
-   element itself are printed, and the search begins again at the next
-   element. Thus each matching element is printed. If none match, the
-   "Pattern not found" message is printed. The process repeats for as
-   many patterns as the user wants to type, and terminates when the user
-   types an empty pattern.
-
-   Now let's build a little command parser, consisting of a keyword
-   table, and a loop to look up the user's commands in it with
-   \ftablelook(). In this case the array elements have "fields" separated
-   by colon (:) -- a keyword and a value. Keyword tables must be sorted
-   if \tablelook() is to work right, so after declaring and initializing
-   the table array, we sort it.
-
-  local \&k[] \%a \%i \%n
-
-  array declare \&k[] = drive:9 do:8 discuss:7 live:6 spend:5 help:4 quit:0
-
-  array sort &k                             ; Make sure array is sorted
-  echo Type "help" for help.                ; Print greeting & instructions
-
-  while true {                              ; Loop to get commands
-      undefine \%a
-      while not defined \%a {               ; Get a command
-          ask \%a { Command? }
-      }
-      .\%n := \ftablelook(\%a,&k)           ; Look up the command
-      switch \%n {                          ; Handle errors
-        :-1, echo Not found - "\%a"         ; Doesn't match
-             continue
-        :-2, echo Ambiguous - "\%a"         ; Matches too many
-             continue
-      }
-      switch \fword(\&k[\%n],2) {           ; Dispatch according to value
-         :9, echo Driving..., break
-         :8, echo Doing..., break
-         :7, echo Discussing..., break
-         :6, echo Living..., break
-         :5, echo Spending..., break
-         :4, echo { Commands (may be abbreviated):}
-             for \%i 1 \fdim(&k) 1 {
-                echo {  \%i. \fword(\&k[\%i],1) }
-             }
-             break
-         :0, exit 0 Bye!
-         :default, stop 1 Internal error
-      }
-  }
-
-   In this example, keywords are "drive", "do", "discuss", etc, and their
-   values are unique numbers (values need not be numbers, and there need
-   not be only one value -- there can be 0, 1, 2, or more of them). The
-   user types a command, which can be the whole word (like "help") or any
-   abbreviation (like "hel", "he", or just "h"). If this does not match
-   any keywords, \ftablelook() returns -1; if it matches more than one
-   (as would "d"), it returns -2. Otherwise the array index is returned,
-   1 or higher.
-
-   Given the array index \%n, we can get the table values as follows:
-
-  \fword(\&k[\%n],1) is the keyword (first field)
-  \fword(\&k[\%n],2) is the value (second field, in this case a number)
-
-   In our example, we use the value (number) as the SWITCH variable. As
-   noted, \fablelook() expects the array elements to contain multiple
-   fields separated by colon (:) (or other character that you specify,
-   e.g. \ftablelook(\%a,&a,^)) and when matching the keyword, ignores the
-   first delimiter and everything after it.
-     _________________________________________________________________
-
-    7.10.8. Hints for Using Arrays
-
-   C programmers are accustomed to out-of-bounds array references causing
-   core dumps or worse. In C-Kermit:
-
-     * A reference to an an out-of-bounds array element returns the empty
-       string.
-     * An attempt to set the value of an array element that is out of
-       bounds or that has not been declared simply fails.
-
-   C programmers expect an array of size nto have elements 0 through n-1.
-   Fortran programmers expect the same array to have elements 1 through
-   n. C-Kermit accommodates both styles; when you declare an array of
-   size n, it has n=1 elements, 0 through n, and you can use the array in
-   your accustomed manner, 0-based or 1-based.
-
-   However, note that C-Kermit has certain biases towards 1-based arrays:
-
-     * Assignment of file lists starts with element 1 ([602]Section
-       7.10.3).
-     * Assignment by \fsplit() starts with element 1 ([603]Section 7.3).
-     * Array initialization skips the 0th element. To initialize a
-       0-based array, use something like this:
-  declare \&a[3] = one two three
-  .\&a[0] = zero
-     * The ARRAY SORT command skips the 0th element unless you include
-       /RANGE:0
-     * The SHIFT command ignores element 0 of the \&_[] array.
-
-   The distinction between an array's dimensioned size and the number of
-   elements in the array is important when sorting. To illustrate:
-
-  declare \&a[100]                  ; Declare array &a with 100 elements
-  fopen /read \%c oofa.txt          ; Open a file
-  if fail...
-  for \%i 1 \fdim(&a) 1 {           ; Read the file into the array
-      fread \%c \&a[\%i]
-      if fail break
-  }
-  fclose \%c
-  if > \%i \fdim(&a) end 1 File has too many lines for array.
-  .\%n ::= \%i - 1
-  echo File has \%n line(s).
-
-   Let's say the file had 95 lines. This leaves elements 96-100 of the
-   array empty. Now suppose you sort the array and write out the result:
-
-  sort &a                           ; Sort the whole array
-  fopen /write \%o oofa.txt.sorted  ; Open an output file
-  if fail ...
-  for \%i 1 \%n 1 {                 ; Write out 95 records
-      fwrite /line \%o \&a[\%i]
-      if fail end 1 Write error
-  }
-  close write
-
-   You might be surprised at the contents of "oofa.txt.sorted" -- five
-   empty elements, 96-100, floated to the top of the array in the sort,
-   and since your write loop only had 95 iterations, the final 5 lines of
-   the sorted file are lost.
-
-   Therefore, when dealing with partially filled arrays -- especially
-   when sorting them -- remember to specify the number of elements. A
-   handy way of recording an array's "true" size is to put it in the 0th
-   element. That way, it "travels with the array". To illustrate
-   (continuing the previous example at the "close read" statement):
-
-  close read
-  if > \%i \fdim(&a) end 1 File has too many lines for array.
-  .\&a[0] ::= \%i - 1     ; Assign number of lines to \&a[0].
-  echo File has \&a[0] line(s).
-  sort /range:1:\&a[0] &a
-  open write oofa.txt.sorted
-  if fail ...
-  for \%i 1 \&a[0] 1 {
-      writeln file \&a[\%j]
-      if fail end 1 Write error
-  }
-  close write
-
-   Note the SORT switch, /RANGE:1:\&a[0]. This keeps the sort 1-based,
-   and uses element 0 of the array as its size indicator.
-
-   Finally, note that even though some commands or functions might put a
-   size in array element 0, no built-in functions or commands depend on a
-   size actually being there. Thus you are perfectly free to replace the
-   size with something else and treat the array as 0-based.
-     _________________________________________________________________
-
-    7.10.9. Do-It-Yourself Arrays
-
-   Kermit's \&x[] arrays are nice because of the accompanying built-in
-   functionality -- ARRAY commands, built-in functions that load and
-   search arrays, automatic evaluation of arithmetic expressions within
-   the subscript brackets, and so on. Yet they also have certain
-   limitations:
-
-    1. Except when created by dynamic loading (e.g. by \ffiles()) they
-       must be declared and dimensioned in advance.
-    2. Indices must be numeric, positive, and in range.
-    3. There can be only one dimension. Matrices or other
-       higher-dimensioned arrays are not available.
-
-   But none of this is to say you can't invent any kind of data structure
-   you like. In [604]Section 7.9.2 you can see some examples. Here's
-   another (courtesy of Dat Thuc Nguyen), in which a pair of matrices is
-   created and then added: no dimensioning necessary.
-
-  .row = 4
-  .col = 9
-
-  ; MACRO TO PRINT A MATRIX
-  define PMATRIX {
-      echo Matrix \%1:
-      for \%r 1 \m(row) 1 {
-          for \%c 1 \m(col) 1 {
-              xecho \flpad(\m(\%1[\%r][\%c]),4)
-          }
-          echo
-      }
-      echo
-  }
-  ; CREATE MATRICES A AND B
-  for \%r 1 \m(row) 1 {
-      for \%c 1 \m(col) 1 {
-          _eval A[\%r][\%c] \%r + \%c
-          _eval B[\%r][\%c] \%r * \%c
-      }
-  }
-  ; CREATE MATRIX C = SUM OF MATRIX A AND MATRIX B
-  for \%r 1 \m(row) 1 {
-      for \%c 1 \m(col) 1 {
-          _eval C[\%r][\%c] \m(A[\%r][\%c]) + \m(B[\%r][\%c])
-      }
-  }
-  pmatrix A  ; Print Matrix A
-  pmatrix B  ; Print Matrix B
-  pmatrix C  ; Print Matrix C
-
-   In the example, we use matrix-like notation to create macros with
-   names like "A[1][1]", "B[3][7]", and so on.
-     _________________________________________________________________
-
-    7.10.10. Associative Arrays
-
-   An associative array is a special kind of Do-It-Yourself array. It
-   differs from a regular array in that its indices need not be numbers
-   -- they can be anything at all -- words, filenames, names of months,
-   any character string at all, and that it doesn't have to be (and in
-   fact can't be) declared. An associative array element is simply a
-   macro whose name ends with an index enclosed in angle brackets, for
-   example:
-
-  file<oofa.txt>
-
-   More formally:
-
-  basename<index>
-
-   An associative array is a collection of all associative array elements
-   that have the same basename. Any number of associative arrays, each
-   with any number of elements, can exist at the same time.
-
-   An associative array element can be assigned a value, such as "1",
-   just like any other macro:
-
-  define file<oofa.txt> 1     ; Give "file<oofa.txt>" the value "1".
-
-   or:
-
-  assign file<oofa.txt> \%a   ; Give it the value of the variable \%a.
-
-   However, since an associative array element is a macro, it may not
-   have an empty (null) value, since assigning an empty value to a macro
-   undefines the macro.
-
-   You can refer to the value of an associative array element using the
-   familiar notation for macro values:
-
-  echo \m(file<oofa.txt>)     ; Echo the value of "file<oofa.txt>".
-
-   Associative arrays are most useful, however, when the value of the
-   index is a variable. In that case, you must use the "hidden" forms of
-   the DEFINE or ASSIGN commands that evaluate the macro name before
-   making the assignment (see [605]Using C-Kermit, page 457). Example:
-
-  define \%f oofa.txt
-  _define file<\%f> 1
-  echo file<\%f> = \m(file<\%f>)
-
-   prints:
-
-  file<oofa.txt> = 1
-
-   and then:
-
-  _increment file<\%f>
-  echo file<\%f> = \m(file<\%f>)
-
-   prints:
-
-  file<oofa.txt> = 2
-
-   What are associative arrays good for? The classic example is "word
-   counts": finding the number of times each word is used in a text
-   without knowing in advance what the words are. Without associative
-   arrays, your program would have to build a table of some kind, and
-   every time a word was encountered, look it up in the table to find its
-   position and counter, or add it to the table if it wasn't found -- a
-   time-consuming and laborious process. Associative arrays, however, let
-   you use the word itself as the table index and therefore sidestep all
-   the table building and lookups.
-
-   Let's work through a practical example. Suppose you have a
-   file-transfer log in which each line is composed of a number of
-   blank-separated fields, and the 9th field is a filename (which happens
-   to be the format of certain FTP server logs, as well as of C-Kermit's
-   new FTP-format transaction log, described in [606]Section 4.17.2), for
-   example:
-
-  Wed Jul 14 09:35:31 1999 22 xx.mit.edu 13412 /pub/ftp/mm/intro.txt ....
-
-   and you want to find out how many times each file was transferred. The
-   following code builds an associative array, file<>, containing the
-   counts for each file:
-
-  local name line max \%c \%n          ; Declare local variables
-  fopen /read \%c /var/log/ftpd.log    ; Open the log file ([607]Section 1.22)
-  if fail exit 1 Can't open log        ; Check
-  while true {                         ; Loop for each record
-      fread /line \%c line             ; Read a line
-      if fail break                    ; Check for end of file
-      .name := \fword(\m(line),9,{ })  ; Get 9th field = filename (Sec 7.3)
-      _increment file<\m(name)>        ; Increment its counter (Sec 7.9.2)
-  }
-  fclose \%c                           ; Close file when done.
-
-   Note that _INCREMENT (and INCREMENT, and [_]DECREMENT) treat an empty
-   (i.e. nonexistent) variable as having a value of 0, and therefore
-   creates the variable with a value of 1.
-
-   At this point, if you told Kermit to "show macro file<", it would list
-   the associative array. But since you don't necessarily know the names
-   of the files in the array, or even how many elements are in the array,
-   how can you use it in a script program?
-
-   The idea of creating macro names that include character-string indices
-   enclosed in angle brackets is perfectly arbitrary and doesn't depend
-   on any Kermit features that weren't already there -- we could just as
-   easily have used some other notation, such as "file[index]",
-   "file:index", or "file.index", and the code above would have worked
-   just as well (with the corresponding syntax adjustments). But to be
-   able to use an associative array in a program after the array is
-   built, we need a method of accessing all its elements without knowing
-   in advance what they are. That's where the chosen notation comes in.
-
-   First of all, any macro name that ends with "<xxx>" (where "xxx" is
-   any string) is case sensitive, unlike all other macro names, which are
-   case independent. To illustrate, "file<oofa.txt>" and "file<OOFA.TXT>"
-   are two distinct macros, whereas "OOFA", "Oofa", and "oofa", when used
-   as macro names, are all the same.
-
-   Second, the new \faaconvert() function converts an associative array
-   (that is, all macros with names of the form "base<index>" that have
-   the same "base" part) into a pair of regular arrays and returns the
-   number of elements:
-
-  \faaconvert(name,&a[,&b])
-
-   "name" is the name of the associative array, without the angle
-   brackets or index ("file" in our example).
-
-   The second argument is the name of a regular array in which to store
-   the indices of the associative array (filenames in our example); if an
-   array of this name already exists, it is destroyed unless the array is
-   LOCAL. The third argument is the name of another regular array in
-   which to store the values (the counts in our example), with the same
-   rules about array name collisions. If you care only about the indices
-   and not the values, you can omit the third argument to \faaconvert().
-   In any case, the associative array is converted, not copied: its
-   elements are moved to the specified regular arrays, so after
-   conversion the original associative array is gone.
-
-   As with other array-loading functions, \faaconvert() sets element 0 of
-   each array to the number of elements in the array.
-
-   To continue our example:
-
-  .max := 0                                   ; Maximum count
-  .\%n := \faaconvert(file,&a,&b)             ; Convert
-  for \%i 1 \%n 1 {                           ; Loop through values
-      echo \flpad(\%i,3). \&a[\%i]: \&b[\%i]  ; Echo this pair
-      if ( > \&b[\%i] \m(max) ) {             ; Check for new maximum
-          .name := \&a[\%i]
-          .max  := \&b[\%i]
-      }
-  }
-  echo Most popular file: \m(name), accesses: \m(max)
-
-   This lists the files and counts and then announces which file has the
-   highest count.
-
-   Now suppose you want to sort the array pair created from an
-   associative array. In our example, \&a[] contains filenames, and \&b[]
-   contains the associated counts. Here we take advantage of the ARRAY
-   SORT command's ability to sort a second array according to the first
-   one:
-
-  array sort /reverse /numeric &b &a          ; Descending sort by count
-
-   Now to see the top five files and their counts:
-
-  echo The top 5 files are:
-  for \%i 1 5 1 {                             ; Loop through top 5 values
-      echo \flpad(\%i,3). \&a[\%i]: \&b[\%i]  ; Echo this pair
-  }
-     _________________________________________________________________
-
-    7.10.11. Transferring Array Contents to Other Computers
-
-   The SEND /ARRAY:arrayname command ([608]Section 4.7.1) allows you to
-   send the contents of any array, or any contiguous segment of it, in
-   either text or binary mode to another computer, using Kermit protocol.
-   When used in conjunction with C-Kermit's other features (the array
-   features described in this section; the file i/o package from
-   [609]Section 1.22; its decision-making, pattern-matching, and string
-   manipulation capabilities, and so on) the possibilities are endless:
-   extracts of large files, remote database queries, ..., all without
-   recourse to system-dependent mechanisms such UNIX pipes and filters,
-   thus ensuring cross-platform portability of scripts that use these
-   features.
-
-   When sending an array in text mode, Kermit appends a line terminator
-   to each array element, even empty ones, and it also converts the
-   character set from your current FILE character-set to your current
-   TRANSFER character-set, if any. No conversions are made or line
-   terminations added in binary mode. For example, the following array:
-
-  dcl \&a[] = One Two Three Four Five Six
-
-   is sent as six lines, one word per line, in text mode, and as the bare
-   unterminated string "OneTwoThreeFourFiveSix" in binary mode.
-
-   You should always include a /TEXT or /BINARY switch in any SEND /ARRAY
-   command to force the desired transfer mode, otherwise you're likely to
-   be surprised by the effects described in [610]Section 4.3.
-
-   Here are some examples:
-
-   send /text /array:\&a[]
-          Sends the entire contents of the array \&a[] in text mode.
-          Since an as-name is not included, the receiver is told the
-          filename is _array_a_.
-
-   send /text /array:&a[]
-   send /text /array:a[]
-   send /text /array:&a
-   send /text /array:a
-          These are all equivalent to the previous example.
-
-   send /text /array:&a /as-name:foo.bar
-          As above, but the array is sent under the name foo.bar.
-
-   send /text /array:&a[100:199] /as:foo.bar
-          As above, but only the elements from 100 through 199 are sent.
-
-   In text-mode transfers, character sets are translated according to
-   your current settings, just as for text files. In binary mode, of
-   course, there is no character-set translation or other conversion of
-   any kind. But remember that array elements can not contain the NUL
-   (ASCII 0) character, since they are implemented as NUL-terminated
-   strings.
-
-   Here's an example that shows how to send all the lines (up to 1000 of
-   them) from a file animals.txt that contain the words "cat", "dog", or
-   "hog" (see [611]Section 4.9 about pattern matching):
-
-  declare \&a[1000]
-  fopen /read \%c animals.txt
-  if fail exit 1
-  .\%i = 0
-  while true {
-      fread \%c line
-      if fail break
-      if match {\m(line)} {*{cat,[dh]og}*} {
-          increment \%i
-          if ( > \%i \fdim(&a) ) break
-          .\&a[\%i] := \m(line)
-      }
-  }
-  fclose \%c
-  send /array:a[1:\%i] /text
-
-   Note that we are careful to send only the part of the array that was
-   filled, not the entire array, because there are likely to be lots of
-   unused elements at the end, and these would be sent as blank lines
-   otherwise.
-
-   This example raises an interesting question: what if we want to send
-   ALL the matching lines, even if there are more than 1000 of them, but
-   we don't know the number in advance? Clearly the problem is limited by
-   Kermit's (and the computer's) memory. If there are a thousand trillion
-   matching lines, they most likely will not fit in memory, and in this
-   case the only solution is to write them first to a temporary file on
-   mass storage and then send the temporary file and delete it
-   afterwards.
-
-   However, when the selection is likely to fit in memory, the
-   once-familiar technique of initial allocation with extents can be
-   used:
-
-  if match {\m(line)} {*{cat,[dh]og}*} {
-      increment \%i
-      if ( > \%i \fdim(&a) ) {
-          array resize a \fdim(&a)+100
-          if fail stop 1 MEMORY FULL
-          echo NEW DIMENSION: \fdim(&a)
-      }
-      .\&a[\%i] := \m(line)
-  }
-
-   This grows the array in chunks of 100 as needed.
-     _________________________________________________________________
-
-  7.11. OUTPUT Command Improvements
-
-   LINEOUT [ text ]
-          This command is exactly like OUTPUT, except it supplies a
-          carriage return at the end of the text. "lineout exit" is
-          exactly the same as "output exit\13".
-
-   SET OUTPUT SPECIAL-ESCAPES { ON, OFF }
-          This command lets you tell C-Kermit whether to process \N, \L,
-          and \B specially in an OUTPUT command, as distinct from other \
-          sequences (such as \%a, \13, \v(time), etc). Normally the
-          special escapes are handled. Use SET OUTPUT SPECIAL-ESCAPES OFF
-          to disable them.
-
-   Disabling special escapes is necessary in situations when you need to
-   transmit lines of data and you have no control over what is in the
-   lines. For example, a file oofa.txt that contains:
-
-  This is a file
-  It has \%a variables in it
-  And it has \B in it.
-  And it has \L in it.
-  And it has \N in it.
-  And this is the last line.
-
-   can be sent like this:
-
-  local line
-  set output special-escapes off
-  fopen /read \%c oofa.txt
-  if fail stop 1 Can't open oofa.txt
-  while success {
-      fread \%c line
-      if fail break
-      ; Add filtering or processing commands here...
-      output \m(line)\13
-  }
-     _________________________________________________________________
-
-  7.12. Function and Variable Diagnostics
-
-   In C-Kermit 6.0 and earlier, the only diagnostic returned by a failing
-   function call was an empty value, which (a) could not be distinguished
-   from an empty value returned by a successful function call; (b) did
-   not give any indication of the cause of failure; and (c) did not cause
-   the enclosing statement to fail. C-Kermit 7.0 corrects these
-   deficiencies.
-
-   SET FUNCTION DIAGNOSTICS { ON, OFF }
-          when ON, allows built-in functions to return diagnostic
-          messages when improperly referenced, instead of an empty
-          string. FUNCTION DIAGNOSTICS are ON by default. When OFF,
-          improperly referenced functions continue to return an empty
-          string. This command also affects built-in variables; in this
-          case, an error message is returned only if the variable does
-          not exist. When FUNCTION DIAGNOSTICS are ON, the error message
-          is also printed.
-
-   For variables, the only message is:
-
-  <ERROR:NO_SUCH_VARIABLE:\v(name)>
-
-   where "name" is the name of the nonexistent variable.
-
-   For functions, the diagnostic message is:
-
-  <ERROR:message:\fname()>
-
-   where "message" is replaced by a message, and "name" is replaced by
-   the function name, e.g. <ERROR:ARG_NOT_NUMERIC:\fmod()>. Messages
-   include:
-
-  ARG_BAD_ARRAY       An argument contains a malformed array reference.
-  ARG_BAD_DATE        An argument contains a malformed date and/or time.
-  ARG_BAD_PHONENUM    An argument contains a malformed telephone number.
-  ARG_BAD_VARIABLE    An argument contains a malformed \%x variable.
-  ARG_INCOMPLETE      An argument is incomplete (e.g. a broken Base64 string).
-  ARG_EVAL_FAILURE    An argument could not be evaluated (internal error).
-  ARG_NOT_ARRAY       An argument references an array that is not declared.
-  ARG_NOT_NUMERIC     An argument that must be integer contains non-digits.
-  ARG_NOT_FLOAT       An argument has bad floating-point number format.
-  ARG_NOT_VARIABLE    An argument that must be a variable is not a variable.
-  ARG_OUT_OF_RANGE    An argument's numeric value is too big or too small,
-                      or an argument contains illegal characters (e.g. a hex
-                      or Base-64 string).
-  ARG_TOO_LONG        An argument's value is too long.
-  ARRAY_FAILURE       Failure to create an array.
-  DIVIDE_BY_ZERO      Execution of the function would cause division by zero.
-  FLOATING_POINT_OP   Execution error in a floating-point operation.
-  FILE_NOT_FOUND      Filename argument names a file that can't be found.
-  FILE_NOT_READABLE   Filename argument is not a regular file.
-  FILE_NOT_ACCESSIBLE Filename argument names a file that is read-protected.
-  FILE_ERROR          Other error with filename argument.
-  FILE_NOT_OPEN       A file function was given a channel that is not open.
-  FILE_ERROR_-n       A file function got error -n ([612]Section 1.22).
-  LOOKUP_FAILURE      Error looking up function (shouldn't happen).
-  MALLOC_FAILURE      Failure to allocate needed memory (shouldn't happen).
-  NAME_AMBIGUOUS      The function is not uniquely identified.
-  MISSING_ARG         A required argument is missing.
-  NO_SUCH_FUNCTION    An argument references a function that is not defined.
-  NO_SUCH_MACRO       An argument references a macro that is not defined.
-  RESULT_TOO_LONG     The result of a function is too long.
-  UNKNOWN_FUNCTION    Internal error locating function (shouldn't happen).
-
-   Examples:
-
-  assign \%m \fmod()
-  ?<ERROR:MISSING_ARG:\fmod()>
-  echo "\fcontents(\%m)"
-  "<ERROR:MISSING_ARG:\fmod()>"
-  echo \fmod(3,x)
-  ?<ERROR:ARG_NOT_NUMERIC:\fmod()>
-  echo \fmod(3,4-2*2)
-  ?<ERROR:DIVIDE_BY_ZERO:\fmod()>
-
-   Notice the use of \fcontents() in echoing the value of a variable that
-   contains a returned error message. That's because the error message
-   includes the name of the variable or function that failed, so you must
-   use \fcontents() to prevent it from being evaluated again -- otherwise
-   the same error will occur.
-
-   The handling of function and variable errors is controlled by:
-
-   SET FUNCTION ERROR { ON, OFF }
-          Tells whether invalid function calls or variable references
-          should cause command errors. FUNCTION ERROR is ON by default.
-          When ON, and an error is diagnosed in a built-in function or
-          variable, the command that includes the function call or
-          variable reference fails. The failing command can be handled in
-          the normal way with IF FAILURE / IF SUCCESS, SET TAKE ERROR, or
-          SET MACRO ERROR.
-
-   When FUNCTION DIAGNOSTICS is OFF, there is no error message.
-
-   SHOW SCRIPTS displays the current FUNCTION DIAGNOSTICS and ERROR
-   settings.
-     _________________________________________________________________
-
-  7.13. Return Value of Macros
-
-   In C-Kermit 5A and 6.0, there are two ways to return one level from a
-   macro: RETURN value and END number text. When RETURN is used, the
-   value, which can be a number or a text string, is assigned to
-   \v(return). When END was used, however, \v(return) was not set.
-   SUCCESS/FAILURE was set according to whether the number was zero, and
-   the text was printed, but the actual value of the number was lost.
-
-   In C-Kermit 7.0, the END number is available in the \v(return)
-   variable.
-     _________________________________________________________________
-
-  7.14. The ASSERT, FAIL, and SUCCEED Commands.
-
-   The ASSERT command is just like the IF command, but without a command
-   to execute. It simply succeeds or fails, and this can be tested by a
-   subsequent IF SUCCESS or IF FAILURE command. Example:
-
-  ASSERT = 1 1
-  IF SUCCESS echo 1 = 1.
-
-   The FAIL command does nothing, but always fails. The SUCCEED command
-   does nothing, but always succeeds.
-
-   These commands are handy in debugging scripts when you want to induce
-   a failure (or success) that normally would not occur, e.g. for testing
-   blocks of code that normally are not executed.
-     _________________________________________________________________
-
-  7.15. Using Alarms
-
-   Alarms may be set in two ways:
-
-   SET ALARM number
-          Sets an alarm for the given number of seconds "from now", i.e.
-          in the future, relative to when the SET ALARM command was
-          given. Examples:
-
-  set alarm 60        ; 60 seconds from now
-  set alarm +60       ; The same as "60"
-  set alarm -60       ; Not legal - you can't set an alarm in the past.
-  set alarm 60*60     ; 60 minutes from now.
-  set alarm \%a+10    ; You can use variables, etc.
-
-   SET ALARM hh:mm:ss
-          Sets an alarm for the specified time. If the given time is
-          earlier than the current time, the alarm is set for the given
-          time in the next day. You may give the time in various formats:
-
-  set alarm 15:00:00  ; 3:00:00pm
-  set alarm 3:00:00pm ; 3:00:00pm
-  set alarm 3:00pm    ; 3:00:00pm
-  set alarm 3pm       ; 3:00:00pm
-
-   SHOW ALARM
-          Displays the current alarm, if any, in standard date-time
-          format (see [613]Section 1.6): yyyymmdd hh:mm:ss.
-
-   IF ALARM command
-          Executes the command if an alarm has been set and the alarm
-          time has passed.
-
-   IF ALARM { command-list } [ ELSE { command-list } ]
-          Executes the command-list if an alarm has been set and the
-          alarm time has passed. Otherwise, if an ELSE part is given, its
-          command-list is executed.
-
-   CLEAR ALARM
-          Clears the alarm.
-
-   Only one alarm may be set at a time.
-
-   Example: Suppose you have a script that is always running, and that
-   transfers files periodically, and that keeps a transaction log.
-   Suppose you want to start a new transaction log each day:
-
-  log transactions \v(date).log
-  set alarm 00:00:00                     ; Set an alarm for midnight
-  while true {                           ; Main script loop
-      xif alarm {                        ; If the alarm time is past...
-          close transactions             ; Close current log
-          log transactions \v(date).log  ; Start new one
-          pause 1                        ; To make sure 00:00:00 is past
-          set alarm 00:00:00             ; Set a new alarm
-      }
-      ; put the rest of the script here...
-  }
-
-   Note that IF ALARM -- no matter whether it succeeds or fails -- does
-   NOT clear an expired alarm. Thus, once an alarm has expired, every IF
-   ALARM will succeed until the alarm is cleared (with the CLEAR ALARM
-   command) or reset with a new SET ALARM command.
-     _________________________________________________________________
-
-  7.16. Passing Arguments to Command Files
-
-   Beginning in version 7.0, C-Kermit accepts arguments on the TAKE
-   command line, for example:
-
-  C-Kermit> take oofa.ksc one two {this is three} four
-
-   This automatically sets the variables \%1 through \%9 to the
-   arguments, and \%0 to the name of the file, in this case:
-
-  \%0 = /usr/olga/oofa.ksc
-  \%1 = one
-  \%2 = two
-  \%3 = this is three
-  \%4 = four
-
-   and \%5..\%9 are undefined (empty). Arguments past the ninth are
-   available in the \&_[] argument-vector array ( [614]Section 7.5).
-
-   The variables are those at the current macro level. Thus, if the TAKE
-   command is executed from within a macro, the macro's arguments are
-   replaced by those given on the TAKE command line (but only if at least
-   one argument is given). The command shown above is exactly equivalent
-   to:
-
-  assign \%0 /usr/olga/oofa.ksc
-  assign \%1 one
-  assign \%2 two
-  assign \%3 this is three
-  assign \%4 four
-  assign \%5
-  assign \%6
-  assign \%7
-  assign \%8
-  assign \%9
-  take oofa.ksc
-
-   Remember, the variables \%0..\%9 are on the macro call stack, and
-   command files are independent of the macro stack. Thus, if a command
-   file TAKEs another command file and passes arguments to it, the
-   variables are changed from that point on for both files, and so forth
-   for all levels of nested command files without intervening macro
-   invocations.
-
-   It would have been possible to change C-Kermit to use the overall
-   command stack, rather than the macro stack, for arguments -- this
-   would have made TAKE work exactly like DO, which is "nicer", but it
-   would also have broken countless existing scripts. However, the new
-   SHIFT command ([615]Section 7.5) makes it possible to create an
-   alternative TAKE command that does indeed save and restore the
-   argument variables at its own level around execution of a command
-   file:
-
-  define mtake {
-     local \%f
-     assign \%f \fcontents(\%1)
-     shift
-     take \%f
-  }
-
-   C-Kermit 7.0 also supports a new, easier way to pass arguments to
-   scripts from the system command line:
-
-  kermit filename arg1 arg2 arg3 ...
-
-   in which arg1, arg2, arg3 (etc) are arguments for the script (whose
-   filename is given), and are assigned to \%1, \%2, ... \%9. The
-   filename is assigned to \%0. This applies equally to "Kerbang" scripts
-   in UNIX ([616]Section 7.19). For example, suppose you have a file
-   called "showargs" containing the following lines:
-
-  #!/usr/local/bin/kermit +
-  echo Hello from \%0
-  show args
-  exit
-
-   (except not indented, since the "#!" line must be on the left margin).
-   If you give this file execute permission:
-
-  chmod +x showargs
-
-   then you can run it exactly as you would run a UNIX shell script,
-   e.g.:
-
-  $ showargs one two three
-  Hello from /usr/olga/showargs
-  Top-level arguments (\v(argc) = 4):
-   \&_[0] = /usr/olga/showargs
-   \&_[1] = one
-   \&_[2] = two
-   \&_[3] = three
-
-   Furthermore, the \&_[] array now contains the filename, if one was
-   given as the first command line argument, or it is a "Kerbang" script,
-   in element 0.
-
-   Otherwise element 0 is program name, and elements 1 through \v(argc)-1
-   contain the command-line arguments, if any, that appear after "--" or
-   "=", if any. This array is saved and restored around macro calls;
-   recall that inside macros it contains the macro argument vector
-   (allowing you to access arguments programmatically, and to have more
-   than 9 of them).
-
-   At top level, notice the difference between the \&@[] and \&_[]
-   arrays. The former includes C-Kermit options; the latter omits them.
-     _________________________________________________________________
-
-  7.17. Dialogs with Timed Responses
-
-   The ASK, ASKQ, GETOK, and GETC commands (let's call them the
-   "ASK-class commands") let you write scripts that carry on dialogs with
-   the user, asking them for text, a Yes/No answer, or a character,
-   respectively. Prior to C-Kermit 7.0, these questions would always wait
-   forever for an answer. In C-Kermit 7.0, you may specify a time limit
-   for them with the new command:
-
-   SET ASK-TIMER number
-          Sets a time-limit on ASK-CLASS commands to the given number of
-          seconds. If the number is 0 or less, there is no time limit and
-          these commands wait forever for a response. Any timer that is
-          established by this command remains in effect for all future
-          ASK-class commands until another SET ASK-TIMER command is given
-          (e.g. with a value of 0 to disable ASK timeouts).
-
-   IF ASKTIMEOUT command
-          An ASK-class command that times out returns a failure status.
-          You can test explicitly for a timeout with:
-     _________________________________________________________________
-
-  7.18. Increased Flexibility of SWITCH Case Labels
-
-   Prior to C-Kermit 7.0 / K95 1.1.19, the case labels in SWITCH
-   statements were string constants.
-
-   Now case labels can be variables, function calls, or any mixture of
-   these with each other and/or with regular characters.
-
-   Furthermore, after the case label is evaluated, it is treated not as a
-   string constant, but as a pattern against which the SWITCH variable is
-   matched ([617]Section 4.9.1).
-
-   This introduces a possible incompatibility with previous releases,
-   since the following characters in case labels are no longer taken
-   literally:
-
-  \ * ? [ {
-
-   Any scripts that previously included any of these characters in case
-   labels must now quote them with backslash (\).
-     _________________________________________________________________
-
-  7.19. "Kerbang" Scripts
-
-   In UNIX only, Kermit scripts can be stored in files and run
-   "directly", without starting Kermit first (as noted on page 467 of the
-   manual), just as a shell script can be "run" as if it were a program.
-   This section amplifies on that idea a bit, and presents some new
-   aspects of version 7.0 that make it easier to write and run Kermit
-   scripts directly.
-
-     NOTE: On non-UNIX platforms, such as VMS or Windows, Kerbang
-     scripts can be run as "kermit + scriptfilename arg1 arg2 arg3 ...".
-     Windows 95/98/NT file associations do not allow for the passing of
-     parameters. In VMS, however, you can achieve the Kerbang effect by
-     defining a symbol, as in this example:
-
-  $ autotelnet :== "$SYS$TOOLS:KERMIT.EXE + AUTOTELNET.KSC"
-
-     and then running the script like any other command:
-
-  $ autotelnet xyzcorp.com myuserid
-
-     See [618]Section 9.3 for an explanation of the "+" symbol.
-
-   UNIX shell scripts can specify which shell should run them by
-   including a "shebang" line at the top, e.g.:
-
-  #!/bin/sh
-
-   (but not indented; the shebang line must be on the left margin). The
-   term "shebang" is a contraction of "shell" and "bang". "Bang" is a
-   slang word for the exclamation mark ("!"); "shebang" itself is an
-   American slang word used in in the phrase "the whole shebang".
-
-   We can run Kermit scripts directly too, by including a "shebang" line
-   that names Kermit as the "shell"; thus we call these "Kerbang"
-   scripts. This mechanism has been considerably simplified in C-Kermit
-   7.0 to facilitate C-Kermit's use a scripting tool just like any of the
-   UNIX shells or scripting languages. The rules are the same as for
-   shell scripts:
-
-    1. The first line of the Kermit script must begin with "#!"
-       immediately followed by the full pathname of the program that will
-       execute the script (in this case, C-Kermit rather than a UNIX
-       shell), followed by any Kermit command-line options. To suppress
-       execution of the C-Kermit initialization file and to make command
-       line arguments available to the script, the final option should be
-       "+":
-  #!/usr/local/bin/kermit +
-       Some users have reported that in some circumstances a space might
-       be necessary after the plus sign; this depends on your shell -- it
-       has nothing to do with Kermit. In most cases, no space is needed.
-    2. The file must have execute permission (granted via "chmod +x
-       filename").
-
-   When C-Kermit is invoked from a Kerbang script (or from the system
-   prompt with a "+" command-line argument, which amounts to the same
-   thing), the following special rules apply:
-
-    1. The C-Kermit initialization file is NOT executed automatically. If
-       you want it to be executed, include a TAKE command for it in the
-       script, e.g. "take \v(home).kermrc". (In previous releases, the
-       initialization file was always executed, with no way to prevent it
-       except for the user to include Kermit-specific command line
-       options which had nothing to do with the script). Many scripts
-       have no need for the standard Kermit initialization file, which is
-       quite lengthy and not only delays startup of the script, but also
-       spews forth numerous messages that are most likely unrelated to
-       the script.
-    2. If the initialization file is not executed, neither is your
-       customization file, since the initialization file is the command
-       file from which the customization file is TAKEn. Again, you can
-       include a TAKE command for the initialization file if desired, or
-       for the customization file by itself, or for any other file.
-    3. C-Kermit does not process command-line arguments at all. Instead,
-       it passes all words on the command line after the "+" to the
-       script as \%0 (the script name), \%1..\%9 (the first nine
-       arguments), as well as in the argument vector array \&_[]. The
-       variable \v(argc) is set to the total number of "words" (as passed
-       by the shell to Kermit) including the script name. Quoting and
-       grouping rules are those of the shell.
-    4. At any point where the script terminates, it must include an EXIT
-       command if you want it to exit back to the shell; otherwise
-       C-Kermit enters interactive prompting mode when the script
-       terminates. The EXIT command can include a numeric status to be
-       returned to the shell (0, 1, etc), plus an optional message.
-
-   Here is a simple Kerbang script that prints its arguments:
-
-  #/usr/local/bin/kermit +
-  echo Hello from \%0
-  for \%i 0 \v(argc)-1 1 {
-      echo \%i. "\&_[\%i]"
-  }
-  exit 0
-
-   Save this file as (say) "showargs", then give it execute permission
-   and run it (the \&_[] array is the same as \%0..\%9, but allows you to
-   refer to argument variables programmatically; see [619]Section 7.5).
-   (Yes, you could substitute SHOW ARGUMENTS for the loop.)
-
-  $ chmod +x showargs
-  $ ./showargs one "this is two" three
-
-   The script displays its arguments:
-
-  Hello from /usr/olga/showargs
-  0. "/usr/olga/showargs"
-  1. "one"
-  2. "this is two"
-  3. "three"
-  $
-
-   Notice that no banners or greetings are printed and that startup is
-   instantaneous, just like a shell script. Also notice that grouping of
-   arguments is determined by *shell* quoting rules, not Kermit ones,
-   since the command line is parsed by the shell before Kermit ever sees
-   it.
-
-   Of course you can put any commands at all into a Kerbang script. It
-   can read and write files, make connections, transfer files, anything
-   that Kermit can do -- because it *is* Kermit. And of course, Kerbang
-   scripts can also be executed from the Kermit prompt (or from another
-   script) with a TAKE command; the Kerbang line is ignored since it
-   starts with "#", which is a comment introducer to Kermit just as it is
-   to the UNIX shell. In VMS and other non-UNIX platforms, the Kerbang
-   line has no effect and can be omitted.
-
-   It might be desireable for a script to know whether it has been
-   invoked directly from the shell (as a Kerbang script) or by a TAKE
-   command given to the Kermit prompt or in a Kermit command file or
-   macro. This can be done as in this example:
-
-  #!/usr/local/bin/kermit +
-  assign \%m \fbasename(\%0)
-  define usage { exit 1 {usage: \%m phonenumber message} }
-  define apage { (definition of APAGE...) } ; (See [620]book pp.454-456)
-  xif equal "\%0" "\v(cmdfil)" {
-      if not def \%1 usage
-      if not def \%2 usage
-      apage {\%1} {\%2}
-      exit \v(status)
-  }
-
-   In a Kerbang script, \%0 and \v(cmdfile) are the same; both of them
-   are the name of the script. When a script is invoked by a Kermit TAKE
-   command, \%0 is the name of the Kermit program, but \v(cmdfile) is the
-   name of the script. In the example above, a macro called APAGE is
-   defined. If the script was invoked directly, the APAGE macro is also
-   executed. Otherwise, it is available for subsequent and perhaps
-   repeated use later in the Kermit session.
-
-   An especially handy use for Kerbang scripts is to have the
-   initialization file itself be one. Since the standard initialization
-   file is rather long and time-consuming to execute, it is often
-   overkill if you want to start Kermit just to transfer a file. Of
-   course there are command-line switches to suppress initialization-file
-   execution, etc, but another approach is to "run" the initialization
-   file when you want its features (notably the services directory), and
-   run C-Kermit directly when you don't. A setup like this requires that
-   (a) the C-Kermit initialization file is configured as a Kerbang script
-   (has #!/path.../kermit as first line), has execute permission, and is
-   in your PATH; and (b) that you don't have a .kermrc file in your login
-   directory.
-     _________________________________________________________________
-
-  7.20. IF and XIF Statement Syntax
-
-   The IF command has been improved in two significant ways in C-Kermit
-   7.0, described in the following subsections. All changes are backwards
-   compatible.
-
-    7.20.1. The IF/XIF Distinction
-
-   The distinction between IF and XIF is no longer important as of
-   C-Kermit 7.0. You should be able to use IF in all cases (and of
-   course, also XIF for backwards compatibility). In the past, IF was
-   used for single-command THEN parts, followed optionally by a separate
-   ELSE command:
-
-  IF condition command1    ; THEN part
-  ELSE command2            ; ELSE part
-
-   whereas XIF was required if either part had multiple commands:
-
-  XIF condition { command, command, ... } ELSE { command, command, ... }
-
-   The syntactic differences were primarily that IF / ELSE was two
-   commands on two separate lines, whereas XIF was one command on one
-   line, and that XIF allowed (and in fact required) braces around its
-   command lists, whereas IF did not allow them.
-
-   Furthermore, the chaining or nesting of parts and conditions was
-   inconsistent. For example, the IF command could be used like this:
-
-  IF condition command
-  ELSE IF condition command
-  ELSE IF condition command
-  ELSE IF condition command
-  ...
-
-   but XIF could not. C-Kermit 7.0 accepts the old syntax and executes it
-   the same as previous versions, but also accepts a new unified and more
-   convenient syntax:
-
-   IF condition command-list [ ELSE command-list ]
-
-   or:
-
-IF condition command-list
-ELSE command-list
-
-   in which the ELSE part is optional, and where command-list can be a
-   single command (with or without braces around it) or a list of
-   commands enclosed in braces. Examples:
-
-   Example 1:
-
-  IF condition { command1, command2 } ELSE { command3, command4 }
-
-   Example 2 (same as Example 1):
-
-  IF condition {
-     command1
-     command2
-  } ELSE {
-     command3
-     command4
-  }
-
-   Example 3 (same as 1 and 2):
-
-  IF condition {
-     command1
-     command2
-  }
-  ELSE { command3, command4 }
-
-   Example 4 (same as 1-3):
-
-  IF condition {
-     command1
-     command2
-  }
-  ELSE {
-     command3
-     command4
-  }
-
-   Example 5 (ELSE can be followed by another command):
-
-  IF condition {
-     command1
-     command2
-  } ELSE IF condition {
-     command3
-     command4
-  } ELSE {
-     command5
-     command6
-  }
-
-   Example 5 suggests other possibilities:
-
-  IF condition {
-     command1
-     command2
-  } ELSE FOR variable initial final increment {
-     command3
-     command4
-  }
-
-   And this too is possible, except for some non-obvious quoting
-   considerations:
-
-  dcl \&a[6] = one two three four five six
-
-  IF < \%n 3 {
-      echo \\%n is too small: \%n
-  } ELSE FOR \\%i 1 \\%n 1 {
-      echo \\%i. \\&a[\\%i]
-  }
-
-   (The loop variable must be quoted in this context to prevent premature
-   evaluation.)
-     _________________________________________________________________
-
-    7.20.2. Boolean Expressions (The IF/WHILE Condition)
-
-   Prior to C-Kermit 7.0, the IF and WHILE commands accepted only a
-   single Boolean ("true or false") assertion, e.g. "if > \%m 0 command"
-   or "if exist filename command". There was no way to form Boolean
-   expressions and, in particular, nothing that approached a Boolean OR
-   function (AND could be simulated by concatenating IF statements: "if
-   condition1 if condition2..").
-
-   C-Kermit 7.0 (and K95 1.1.19) allow grouping of Boolean assertions
-   using parentheses and combining them using AND (or &&) and OR (or ||).
-   Each of these operators -- including the parentheses -- is a field and
-   must be set off by spaces. AND has higher precedence than OR, NOT has
-   higher precedence than AND, but parentheses can be used to force any
-   desired order of evaluation. The old syntax is still accepted.
-
-   Here are some examples:
-
-  define \%z 0                          ; Define some variables
-  define \%n 1                          ; for use in the examples.
-
-  if > \%n \%z echo \%n is greater.     ; Original format - still accepted.
-  if ( > \%n \%z ) echo \%n is greater. ; Parentheses may be used in 7.0.
-  if ( > \%n \%z && not = \%z 0 ) ...   ; Two assertions combined with AND.
-  if ( > \%n \%z and not = \%z 0 ) ...  ; Same as previous ("and" = "&&").
-  if ( > \%n \%z || not = \%z 0 ) ...   ; Two assertions combined with OR.
-  if ( > \%n \%z or not = \%z 0 ) ...   ; Same as previous ("or" = "||").
-  if ( > \%n \%z || != \%z 0 ) ...      ; Ditto ("!=" = "not =").
-  while ( 1 ) { ... }                   ; Just like C.
-
-   Notice the spaces around all operators including the parentheses --
-   these are required. The following examples show how parentheses can be
-   used to alter the precedence of the AND and OR operators:
-
-  if ( false || false && false || true ) ,..         ; True
-  if ( false || ( false && false ) || true ) ...     ; Same as previous
-  if ( ( false || false ) && ( false || true ) ) ... ; False
-
-   Similarly for NOT:
-
-  if ( not true && false ) ...          ; False (NOT binds to TRUE only)
-  if ( ( not true ) && false ) ...      ; Same as previous
-  if ( not ( true && false ) ) ...      ; True (NOT binds to (TRUE && FALSE))
-
-   Notes:
-
-    1. The syntax of the Boolean expression itself has not changed; each
-       expression begins with a keyword or token such as "EXIST", ">", or
-       "=", etc; operators such as "<", "=", and ">" do not go between
-       their operands but precede them as before; this might be called
-       "reverse reverse Polish notation"; it allows deterministic
-       on-the-fly parsing of these expressions at the C-Kermit> prompt as
-       well as in scripts, and allows ?-help to be given for each item
-       when IF or WHILE commands are typed at the prompt.
-    2. Parentheses are required when there is more than one Boolean
-       assertion.
-    3. Parentheses are not required, but are allowed, when there is only
-       one Boolean assertion.
-    4. Evaluation of Boolean assertions occurs left to right, but the
-       resulting Boolean expression is evaluated afterwards according to
-       the rules of precedence. All Boolean assertions are always
-       evaluated; there is no "early stopping" property and therefore no
-       question about when or if side effects will occur -- if any
-       Boolean assertion has side effects, they will always occur.
-
-   Constructions of arbitrary complexity are possible, within reason.
-
-   Also see [621]Section 7.4 for new IF / WHILE conditions.
-     _________________________________________________________________
-
-  7.21. Screen Formatting and Cursor Control
-
-   C-Kermit 7.0 adds a simple way to create formatted screens, the SCREEN
-   command:
-
-   SCREEN { CLEAR, CLEOL, MOVE-TO row [ column ] }
-          Performs screen-formatting actions. Correct operation of these
-          commands depends on proper terminal setup on both ends of the
-          connection -- mainly that the host terminal type is set to
-          agree with the kind of terminal or the emulation you are
-          viewing C-Kermit through. The UNIX version uses terminfo or
-          termcap (not curses); the VMS version uses SMG; K-95 uses its
-          built in screen manager.
-
-   SCREEN CLEAR
-          Moves the cursor to home position and clears the entire screen.
-          Synonyms: CLEAR COMMAND-SCREEN ALL (K-95 only), CLS, CLEAR
-          SCREEN.
-
-   SCREEN CLEOL
-          Clears from the current cursor position to the end of the line.
-          Synonym: CLEAR COMMAND-SCREEN EOL (K-95 only)
-
-   SCREEN MOVE-TO row column
-          Moves the cursor to the indicated row and column. The row and
-          column numbers are 1-based, so on a 24x80 screen the home
-          position is 1 1 and the lower right corner is 24 80. If a row
-          or column number is given that too large for what Kermit or the
-          operating system thinks is your screen size, the appropriate
-          number is substituted.
-
-   These escape sequences used by these commands depends on the platform.
-   In UNIX, your TERM environment variable is used to query the
-   terminfo/termcap database; if the query fails, ANSI/VT100 sequences
-   are used. In VMS, the SMG library is used, which sends sequences based
-   on your VMS terminal type. K95 does its own screen control. On other
-   platforms (such as AOS/VS, VOS, etc), screen formatting is not
-   supported, and the SCREEN command does nothing.
-
-   The three SCREEN actions can be used in scripts to produce menus,
-   formatted screens, dynamic displays, etc. Related variables include:
-
-  \v(terminal)     The type terminal C-Kermit thinks you have.
-  \v(rows)         The number of rows C-Kermit thinks your terminal has.
-  \v(columns)      The number of columns C-Kermit thinks your terminal has.
-
-   And functions:
-
-  \fscrncurx()     The current X coordinate of the cursor (K-95 only).
-  \fscrncury()     The current Y coordinate of the cursor (K-95 only).
-  \fscrnstr(x,y,n) The string of length nat position (x,y) (K-95 only).
-
-   And commands:
-
-  ECHO string      Writes string + CRLF at the current cursor position.
-  XECHO string     Writes string at current cursor position; CRLF not supplied.
-  GETC v prompt    Issues prompt, reads one character into variable v, no echo.
-
-   And special characters:
-
-  Ctrl-L           At the C-Kermit> command prompt, or in a C-Kermit command,
-                   works like Return or Enter, but also clears the screen
-
-   Example 1: A macro that prints a message \%1 at cursor position
-   (\%2,\%3):
-
-  define MSG {
-      if not def \%3 def \%3 0             ; Default column to 0
-      if > \v(argc) 2 screen move \%2 \%3  ; Move to given row/col (if any)
-      screen cleol                         ; Clear to end of line
-      if def \%1 xecho \fcontents(\%1)     ; Print message (if any)
-  }
-
-   Example 2: A macro put the cursor on the bottom screen line, left
-   margin:
-
-  define BOT {
-      screen move \v(rows) 0
-  }
-
-   Example 3: A macro to center message \%1 on line \%2.
-
-  define CENTER {
-      if not def \%2 def \%2 1
-      .\%x ::= (\v(cols)-\flen(\%1))/2
-      msg {\%1} {\%2} {\%x}
-  }
-
-   Example 4: A simple menu (building on Examples 1-3):
-
-  def \%c 0                             ; Menu choice variable
-  screen clear                          ; Clear the screen
-  center {Welcome to This Menu} 2       ; Display the menu
-  msg {Choices:} 4
-  msg { 1. File} 6
-  msg { 2. Edit} 7
-  msg { 3. Exit} 8
-  while ( != \%c 3 ) {                  ; Read and verify choice
-      while true {                      ; Keep trying till we get a good one
-          screen move 10                ; Move to line 10
-          screen cleol                  ; Clear this line
-          getc \%c {Your choice: }      ; Prompt and get and echo 1 character
-          xecho \%c
-          if ( not numeric \%c ) { msg {Not numeric - "\%c"} 12, continue }
-          if ( >= \%c 1 && <= \%c 3 ) break
-          msg {Out of range - "\%c"} 12
-      }
-      switch \%c {                      ; Valid choice - execute it.
-        :1, msg {Filing... } 12, break
-        :2, msg {Editing...} 12, break
-        :3, msg {Exiting...} 12, break
-      }
-  }
-  echo Bye                              ; Exit chosen - say goodbye.
-  bot                                   ; Leave cursor at screen bottom.
-  exit                                  ; And exit.
-
-   Similar scripts can work over the communication connection; substitute
-   INPUT and OUTPUT for GETC and ECHO/XECHO.
-     _________________________________________________________________
-
-  7.22. Evaluating Arithmetic Expressions
-
-   A new arithmetic operator was added to the list recognized by the
-   EVALUATE command, the \feval() function, and which can also be used
-   anywhere else arithmetic expressions are accepted (numeric command
-   fields, array subscripts, etc):
-
-   Prefix "!"
-          This operator inverts the "truth value" of the number or
-          arithmetic expression that follows. If the value of the operand
-          is 0, the result is 1. If the value is nonzero, the result is
-          0.
-
-   Examples:
-
-  set eval old
-  evaluate 0
-  0
-
-  evaluate !0
-  1
-
-  evaluate !3
-  0
-
-  evaluate !(-3)
-  0
-
-  .\%a = 1
-  .\%b = 0
-  evaluate !(\%a|\%b)
-  0
-
-  evaluate !(\%a&\%b)
-  1
-
-  evaluate !(!(\%a&\%b))
-  0
-
-   Note the distinction between Prefix ! (invert truth value) and Suffix
-   ! (factorial). Also the distinction between Prefix ! and Prefix ~
-   (which inverts all the bits in its operand). Also note that prefix
-   operators (!, -, and ~) can not be adjacent unless you use parentheses
-   to separate them, as shown in the final example above.
-     _________________________________________________________________
-
-  7.23. Floating-Point Arithmetic
-
-   C-Kermit 7.0 adds limited support for floating-point numbers (numbers
-   that have fractional parts, like 3.141592653). This support is
-   provided through a small repertoire of functions and in Boolean
-   expressions that compare numbers, but does not apply to number parsing
-   in general, or to expression evaluation, array subscripts, the
-   INCREMENT and DECREMENT commands, or in any context other than those
-   listed in this section.
-
-   A floating point number has an optional sign (+ or -), followed by a
-   series of decimal digits containing either zero or one period (.)
-   character, which is the decimal point. The use of comma or any other
-   character besides period as a decimal point is not supported.
-   Scientific notation is not supported either. Examples of legal
-   floating-point numbers:
-
-  0                Integers can be used
-  1                Ditto
-  2.               A decimal point without decimal digits
-  3.0              A decimal point with decimal digits
-  3.141592653      Ditto
- -4.0              A negative sign can be included
- +5.0              A positive sign can be included
-
-   Examples of notations that are not accepted:
-
-  1,000,000        Separators can not be used
-  1.000.000        Ditto (or multiple decimal points)
-  6.022137E23      No scientific notation
-  6.62606868e-34   Ditto
-  12.5+6.25        No "bare" expressions
-
-   You can use IF FLOAT test a string or variable to see if it's in
-   acceptable floating-point format. Example:
-
-  ask \%f { Type a number: }
-  if not def \%f .\%f = 0.0
-  if not float \%f stop 1 Invalid floating-point number: "\%f"
-
-   C-Kermit's floating-point support, like its support for whole numbers
-   (integers), relies on the capabilities of the underlying computer.
-   Your computer has only a limited amount of precision for numbers,
-   depending on its architecture. Thus floating-point numbers that have
-   too many digits will not be accurate; adding a very small number to a
-   very large one might have no effect at all; and so on. For details,
-   read a text on numerical analysis. Example:
-
-  .\%a = 11111111111111111111  ; A long number
-  .\%b = 22222222222222222222  ; Another one
-  echo \ffpadd(\%a,\%b)        ; Add them - the result should be all 3's
-  33333333333333330000.0       ; See the result
-
-   In this example, the computer has 16 digits of precision; after that,
-   the (low-order) digits are set to 0, since the computer doesn't know
-   what they really are. In fact, the computer returns random digits, but
-   Kermit sets all digits beyond the computer's precision to 0.
-
-   C-Kermit's floating-point functions have names of the form
-   "\ffpxxx(args)" ("\f" for function, "fp" for floating-point), where
-   "xxx" is replaced by the name of the function, such as "sqrt", and
-   "args" is the argument list, consisting of one or two floating-point
-   numbers (depending on the function), and an optional "d" argument that
-   says now many decimal places should be shown in the result. Example:
-
-  \ffpdiv(10,3,1) returns "3.3"
-  \ffpdiv(10,3,2) returns "3.33"
-  \ffpdiv(10,3,3) returns "3.333"
-
-   and so on, up to the precision of the computer. If the decimal-places
-   argument is less than zero, the fractional part of the result is
-   truncated:
-
-  \ffpdiv(10,3,-1) returns "3".
-
-   If the decimal-places argument is 0, or is omitted, C-Kermit returns
-   as many decimal places as are meaningful in the computer's
-   floating-point precision, truncating any extraneous trailing 0's:
-
-  \ffpdiv(10,8) returns "1.25".
-  \ffpdiv(10,4) returns "2.5".
-  \ffpdiv(10,2) returns "5.0".
-  \ffpdiv(10,3) returns "3.333333333333333" (for 16-digit precision).
-
-   There is no way to request that a floating-point function return a
-   decimal point but no decimal places. However, this is easy enough to
-   accomplish in other ways, for example by supplying it outside the
-   function call:
-
-  echo \ffpadd(\%a,\%b,-1).
-
-   Kermit's floating-point functions always round the result for the
-   requested number of decimal places when the "d" argument is given and
-   has a value greater than 0 (see the description of \ffpround() just
-   below).
-
-   Floating-point arguments can be constants in floating-point format or
-   variables whose values are floating-point numbers. If a floating-point
-   argument is omitted, or is a variable with no value, 0.0 is supplied
-   automatically. Example:
-
-  def \%x 999.999
-  undef \%y
-  echo \ffpmin(\%x,\%y)
-  0.0
-
-   Or equivalently:
-
-  echo \ffpmin(999.999)
-  0.0
-
-   The floating-point functions are:
-
-   \ffpround(f1,d)
-          Returns f1 rounded to d decimal places. For this function only,
-          d = 0 (or d omitted) has a special meaning: return the integer
-          part of f1 rounded according to the fractional part. Examples:
-
-  \ffpround(2.74653,-1) returns "2" (fraction truncated, no rounding).
-  \ffpround(2.74653,0)  returns "3" (integer part is rounded).
-  \ffpround(2.74653)    returns "3" (d omitted same as d = 0).
-  \ffpround(2.74653,1)  returns "2.7".
-  \ffpround(2.74653,2)  returns "2.75".
-  \ffpround(2.74653,3)  returns "2.747".
-  \ffpround(2.74653,4)  returns "2.7465", etc.
-
-   \ffpadd(f1,f2,d)
-          Returns the sum of f1 and f2.
-
-   \ffpsubtract(f1,f2,d)
-          Subtracts f2 from f1 and returns the result.
-
-   \ffpmultiply(f1,f2,d)
-          Returns the product of f1 and f2.
-
-   \ffpdivide(f1,f2,d)
-          If f2 is not 0, divides f1 by f2 and returns the quotient.
-          If f2 is 0, a DIVIDE_BY_ZERO error occurs.
-
-   \ffpraise(f1,f2,d)
-          If f1 = 0 and f2 <= 0, or if f1 < 0 and f2 has a fractional
-          part, an ARG_OUT_OF_RANGE error occurs; otherwise f1 raised to
-          the f2 power is returned.
-
-   \ffpsqrt(f1,d)
-          If f1 >= 0, returns the square root of f1; otherwise
-          ARG_OUT_OF_RANGE.
-
-   \ffpabsolute(f1,d)
-          Returns the absolute value of f1 (i.e. f1 without a sign). This
-          is the floating-point analog of \fabsolute(n1).
-
-   \ffpint(f1)
-          Returns the integer part of f1. Equivalent to \ffpround(f1,-1).
-
-   \ffpexp(f1,d)
-          The base of natural logarithms, e (2.718282...), raised to the
-          f1 power.
-
-   \ffplogn(f1,d)
-          The natural logarithm of f1 (the power to which e must be
-          raised to obtain f1).
-
-   \ffplog10(f1,d)
-          The base-10 logarithm of f1 (the power to which 10 must be
-          raised to obtain f1).
-
-   \ffpmodulus(f1,f2,d)
-          If f2 is not 0, the remainder after dividing f1 by f2.
-          If f2 is 0, a DIVIDE_BY_ZERO error occurs.
-          This is the floating-point analog of \fmod(n1,n2).
-
-   \ffpmaximum(f1,f2,d)
-          Returns the maximum of f1 and f2. This is the floating-point
-          analog of \fmax(n1,n2).
-
-   \ffpminimum(f1,f2,d)
-          Returns the minimum of f1 and f2. This is the floating-point
-          analog of \fmin(n1,n2).
-
-   \ffpsine(f1,d)
-          Returns the sine of f1 radians.
-
-   \ffpcosine(f1,d)
-          Returns the cosine of f1 radians.
-
-   \ffptangent(f1,d)
-          Returns the tangent of f1 radians.
-
-   Note that all of these functions can be used with integer arguments.
-   If you want an integer result, specify d = -1 (to truncate) or feed
-   the result to \ffpround(xxx,0) (to round).
-
-   Floating-point numbers (or variables or functions that return them)
-   can be used in Boolean expressions (see [622]Section 7.20.2) that
-   compare numbers:
-
-  = x y
-  != x y
-  < x y
-  > x y
-  <= x y
-  >= x y
-
-   In these examples, x and y can be either integers or floating-point
-   numbers in any combination. In an arithmetic comparison of an integer
-   and a floating-point number, the integer is converted to
-   floating-point before the comparison is made. Examples:
-
-  .\%t = 3.000000000
-  .\%f = 3.141592653
-  .\%i = 3
-
-  if > \%f \%i echo Pi is greater.
-  if = \%t \%i echo "\%i" = "\%t".
-
-   A floating-point number can also be used in:
-
-  IF number command
-
-   where the command is executed if the number is nonzero. If the number
-   is floating-point, the command is not executed if the number is 0.0,
-   and is executed otherwise.
-
-   Floating-point numbers can be sorted using ARRAY SORT /NUMERIC (see
-   [623]Section 7.10.5 ).
-
-   Two floating-point constants are provided:
-
-  \v(math_pi) = Pi (3.141592653...)
-  \v(math_e)  = e, the base of natural logarithms (2.71828...)
-
-   These are given to the computer's precision, e.g. 16 digits. This
-   number itself is available in a variable:
-
-   \v(math_precision)
-          How many significant digits in a floating-point number.
-     _________________________________________________________________
-
-  7.24. Tracing Script Execution
-
-   The TRACE command is handy for debugging scripts.
-
-   TRACE [ { /ON, /OFF } ] [ { ASSIGNMENTS, COMMAND-LEVEL, ALL } ]
-          Selects tracing of the given object.
-
-   Optional switches are /ON and /OFF. If no switch is given, /ON is
-   implied. The trace objects are ASSIGNMENTS, COMMAND-LEVEL, and ALL.
-   The default object is ALL, meaning to select all trace objects
-   (besides ALL). Thus TRACE by itself selects tracing of everything, as
-   does TRACE /ON, and TRACE /OFF turns off all tracing.
-
-   When tracing of ASSIGNMENTS is on, every time the value of any
-   user-defined variable or macro changes, C-Kermit prints one of the
-   following:
-
-   >>> name: "value"
-          The name of the variable or macro followed by the new value in
-          quotes. This includes implicit macro-parameter assignments
-          during macro invocation.
-
-   >>> name: (undef)
-          This indicates that the variable or macro has been undefined.
-
-   <<< name: "value"
-          For RETURN statements: the name of the macro and the return
-          value.
-
-   <<< name: (null)
-          For RETURN statements that include no value or an empty value.
-
-   When tracing of COMMAND-LEVEL is on, C-Kermit prints:
-
-   [n] +F: "name"
-          Whenever a command file is entered, where "n" is the command
-          level (0 = top); the name of the command file is shown in
-          quotes.
-
-   [n] +M: "name"
-          Whenever a macro is entered; "n" is the command level. The name
-          of the macro is shown in quotes.
-
-   [n] -F: "name"
-          Whenever a command file is reentered from below, when a macro
-          or command file that it has invoked has returned.
-
-   [n] -M: "name"
-          Whenever a macro is reentered from below.
-
-   For other debugging tools, see SHOW ARGS, SHOW STACK, SET TAKE, SET
-   MACRO, and of course, ECHO.
-     _________________________________________________________________
-
-  7.25. Compact Substring Notation
-
-   It is often desirable to extract a substring from a string which is
-   stored in a variable, and for this we have the \fsubstring() function,
-   which is used like this:
-
-  define \%a 1234567890
-  echo \fsubstring(\%a,3,4) ; substring from 3rd character length 4
-  3456
-
-   or like this with macro-named variables:
-
-  define string 1234567890
-  echo \fsubstring(\m(string),3,4)
-  3456
-
-   C-Kermit 7.0 adds a pair of alternative compact notations:
-
-\:(variablename[start:length])  <-- Substring of variable's value
-\s(macroname[start:length])     <-- Substring of macro's definition
-
-   These are exactly equivalent to using \fsubstring(), except more
-   compact to write and also faster since evaluation is in one step
-   instead of two.
-
-   The "\:()" notation can be used with any Kermit variable, that is,
-   almost anything that starts with a backslash:
-
-  \:(\%a[2:6])      <-- equivalent to \fsubstring(\%a,2,6)
-  \:(\&x[1][2:6])   <-- equivalent to \fsubstring(\&x[1],2,6)
-  \:(\m(foo)[2:6])  <-- equivalent to \fsubstring(\m(foo),2,6)
-  \:(\v(time)[2:6]) <-- equivalent to \fsubstring(\v(time),2,6)
-  \:(\$(TERM)[2:6]) <-- equivalent to \fsubstring(\$(TERM),2,6)
-  \:(ABCDEFGH[2:6]) <-- equivalent to \fsubstring(ABCDEFGH,2,6)
-
-   Whatever appears between the left parenthesis and the left bracket is
-   evaluated and then the indicated substring of the result is returned.
-
-   The "\s()" notation is the same, except after evaluating the variable,
-   the result is treated as a macro name and is looked up in the macro
-   table. Then the indicated substring of the macro definition is
-   returned. Example:
-
-  define testing abcdefghijklmnopqrstuvwxyz
-  define \%a testing
-
-  \s(testing[2:6])  -->  bcdefg
-  \:(testing[2:6])  -->  esting
-  \:(\%a[2:6])      -->  esting
-  \s(\%a[2:6])      -->  bcdefg
-
-   Note that the following two examples are equivalent:
-
-  \:(\m(foo)[2:6])
-  \s(foo[2:6])
-
-   The first number in the brackets is the 1-based starting position. If
-   it is omitted, or less than 1, it is treated as 1. If it is greater
-   than the length of the string, an empty string is returned.
-
-   The second number is the length of the desired substring. If the
-   second number is omitted, is less than 0, or would be past the end of
-   the string, then "through the end of the string" is assumed. If it is
-   0, the empty string is returned.
-
-   If the brackets are empty or omitted, the original string is returned.
-
-   The starting position and length need not be literal numbers; they can
-   also be variables, functions, arithmetic expressions, or even other
-   \s() or \:() quantities; anything that evaluates to a number, for
-   example:
-
-  \s(block[1025:\fhex2n(\s(block[\%b:\%n+4]))/2])
-
-   Syntactically, \m(name) and \s(name) differ only in that the sequence
-   [*] at the end of the name (where * is any sequence of 0 or more
-   characters) is treated as substring notation in \s(name), but is
-   considered part of the name in \m(name) (to see why, see [624]Section
-   7.10.9).
-     _________________________________________________________________
-
-  7.26. New WAIT Command Options
-
-   The WAIT command has been extended to allow waiting for different
-   kinds of things (formerly it only waited for modem signals). Now it
-   also can wait for file events.
-
-    7.26.1. Waiting for Modem Signals
-
-   The previous syntax:
-
-  WAIT time { CD, DSR, RTS, RI, ... }
-
-   has changed to:
-
-  WAIT time MODEM-SIGNALS { CD, DSR, RTS, RI, ... }
-
-   However, the previous syntax is still accepted. The behavior is the
-   same in either case.
-     _________________________________________________________________
-
-    7.26.2. Waiting for File Events
-
-   The new WAIT option:
-
-  WAIT time FILE { CREATION, DELETION, MODIFICATION } filename
-
-   lets you tell Kermit to wait the given amount of time (or until the
-   given time of day) for a file whose name is filename to be created,
-   deleted, or modified, respectively. The filename may not contain
-   wildcards. If the specified event does not occur within the time
-   limit, or if WAIT CANCELLATION is ON and you interrupt from the
-   keyboard before the time is up, the WAIT command fails. If the event
-   is MODIFICATION and the file does not exist, the command fails.
-   Otherwise, if the given event occurs within the time limit, the
-   command succeeds. Examples:
-
-   WAIT 600 FILE DELETION oofa.tmp
-          Wait up to 10 minutes for file oofa.tmp to disappear.
-
-   WAIT 23:59:59 FILE MOD orders.db
-          Wait until just before midnight for the orders.db file to be
-          changed.
-
-   Example: Suppose you want to have the current copy of /etc/motd on
-   your screen at all times, and you want to hear a bell whenever it
-   changes:
-
-  def \%f /etc/motd                      ; The file of interest.
-  while 1 {                              ; Loop forever...
-      cls                                ; Clear the screen.
-      echo \%f: \v(date) \v(time)...     ; Print 2-line heading...
-      echo
-      if ( not exist \%f ) {             ; If file doesn't exist,
-          echo \%f does not exist...     ; print message,
-          wait 600 file creat \%f        ; and wait for it to appear.
-          continue
-      }
-      beep                               ; Something new - beep.
-      type /head:\v(rows-2) \%f          ; Display the file
-      if fail exit 1 \%f: \ferrstring()  ; (checking for errors).
-      wait 999 file mod \%f              ; Wait for it to change.
-  }
-
-   This notices when the file is created, deleted, or modified, and acts
-   only then (or when you interrupt it with); the time shown in the
-   heading is the time of the most recent event (including when the
-   program started).
-
-   See [625]Section 1.10, where the \v(kbchar) variable is explained.
-   This lets you modify a loop like the one above to also accept
-   single-character commands, which interrupt the WAIT, and dispatch
-   accordingly. For example:
-
-  wait 999 file mod \%f              ; Wait for the file to change.
-  if defined \v(kbchar) {            ; Interrupted from keyboard?
-      switch \v(kbchar) {            ; Handle the keystroke...
-        :q, exit                     ; Q to Quit
-        :h, echo blah blah, break    ; H for Help
-        :default, beep, continue     ; Anything else beep and ignore
-      }
-  }
-
-   This lets you write event-driven applications that wait for up to
-   three events at once: a file or modem event, a timeout, and a
-   keystroke.
-     _________________________________________________________________
-
-  7.27. Relaxed FOR and SWITCH Syntax
-
-   For consistency with the extended IF and WHILE syntax, the FOR and
-   SWITCH control lists may (but need not be) enclosed in parentheses:
-
-  FOR ( \%i 1 \%n 1 ) { command-list... }
-  SWITCH ( \%c ) { command-list... }
-
-   In the FOR command, the increment item can be omitted if the control
-   list is enclosed in parentheses, in which case the increment defaults
-   appropriately to 1 or -1, depending on the values of the first two
-   variables.
-
-   As with IF, the parentheses around the FOR-command control list must
-   be set off by spaces (in the SWITCH command, the spaces are not
-   required since the SWITCH expression is a single arithmetic
-   expression).
-
-   Also, outer braces around the command list are supplied automatically
-   if you omit them, e.g.:
-
-  FOR ( \%i 1 %n 1 ) echo \%i
-     _________________________________________________________________
-
-  8. USING OTHER FILE TRANSFER PROTOCOLS
-
-   In C-Kermit 7.0, alternative protocols can be selected using switches.
-   Switches are described in [626]Section 1.5; the use of
-   protocol-selection switches is described in [627]Section 4.7.1.
-   Example:
-
-  send /binary /protocol:zmodem x.tar.gz
-
-   Note that file transfer recovery works only with Kermit and Zmodem
-   protocols. With Zmodem, recovery can be initiated only by the sender.
-
-   Only pre-1988 versions of the publicly-distributed sz/rz programs use
-   Standard I/O; those released later than that do not use Standard I/O
-   and therefore do not work with REDIRECT. However, Omen Technology does
-   offer an up-to-date redirectable version called crzsz, which must be
-   licensed for use:
-
-     "Unix Crz and Csz support XMODEM, YMODEM, and ZMODEM transfers when
-     called by dial-out programs such as Kermit and certain versions of
-     cu(1). They are clients designed for this use.
-
-     "Crz and Csz are Copyrighted shareware programs. Use of these
-     programs beyond a brief evaluation period requires registration.
-     Please print the "mailer.rz" file, fill out the form and return
-     same with your registration."
-
-   To use the crzsz programs as your external XYZMODEM programs in
-   C-Kermit, follow the instructions in the book, but put a "c" before
-   each command, e.g.:
-
-  set protocol zmodem {csz %s} {csz -a %s} crz crz crz crz
-
-   To use Zmodem protocol over Telnet or other non-transparent
-   connections, you might need to add the -e (Escape) option:
-
-  set protocol zmodem {csz -e %s} {csz -e -a %s} crz crz crz crz
-     _________________________________________________________________
-
-  9. COMMAND-LINE OPTIONS
-
-  9.0. Extended-Format Command-Line Options
-
-   Standard UNIX command line options are a single letter. C-Kermit has
-   run out of letters, so new options are in a new extended format:
-
- --word[:arg]
-
-   where a keyword (rather than a single letter) specifies the function,
-   and if an argument is to be included, it is separated by a colon (or
-   equal sign). Most of the new extended-format command-line options are
-   only for use with the Internet Kermit Service Daemon; see the
-   [628]IKSD Administration Guide for details. However, several of them
-   are also general in nature:
-
-   --nointerrupts
-          Disables keyboard interrupts that are normally enabled, which
-          are usually Ctrl-C (to interrupt a command) and Ctrl-Z (UNIX
-          only, to suspend C-Kermit).
-
-   --help
-          Lists the extended command-line options that are available in
-          your version of C-Kermit. If any options seem to be missing,
-          that is because your copy of C-Kermit was built with
-          compile-time options to deselect them.
-
-   --helpfile:filename
-          Specifies the name of a file to be displayed if the user types
-          HELP (not followed by a specific command or topic), in place of
-          the built-in top-level help text. The file need not fit on one
-          screen; more-prompting is used if the file is more than one
-          screen long if COMMAND MORE-PROMPTING is ON, as it is by
-          default.
-
-   --bannerfile:filename
-          The name of a file containing a message to be printed after the
-          user logs in, in place of the normal message (Copyright notice,
-          "Type HELP or ? for help", "Default transfer mode is...", etc).
-
-   --cdmessage:{on,off,0,1,2}
-          For use in the Server-Side Server configuration; whenever the
-          client tells the server to change directory, the server sends
-          the contents of a "read me" file to the client's screen. This
-          feature is On by default, and operates only in client/server
-          mode when ON or 1. If set to 2 or higher, it also operates when
-          the CD command is given at the IKSD> prompt. Synonym: --cdmsg.
-
-   --cdfile:filename
-          When cdmessage is on, this is the name of the "read me" file to
-          be sent. Normally you would specify a relative (not absolute)
-          name, since the file is opened using the literal name you
-          specified, after changing to the new directory. Example:
-
-  --cdfile:READ.ME
-
-          You can also give a list of up to 8 filenames by (a) enclosing
-          each filename in braces, and (b) enclosing the entire list in
-          braces. Example:
-          --cdfile:{{./.readme}{READ.ME}{aaareadme.txt}{README}{read-this
-          -first}} When a list is given, it is searched from left to
-          right and the first file found is displayed. The default list
-          for UNIX is:
-
-  {{./.readme}{README.TXT}{READ.ME}}
-     _________________________________________________________________
-
-  9.1. Command Line Personalities
-
-   Beginning in version 7.0, if the C-Kermit binary is renamed to
-   "telnet" (or TELNET.EXE, telnet.pr, etc, depending on the platform),
-   it accepts the Telnet command line:
-
-  telnet [ host [ port ] ]
-
-   In Unix, you can achieve the same effect with a symlink:
-
-  cd /usr/bin
-  mv telnet oldtelnet
-  ln -ls /usr/local/bin/kermit telnet
-
-   When installed in this manner, C-Kermit always reads its
-   initialization file. If no host (and therefore no port) is given,
-   C-Kermit starts in interactive prompting mode. If a host is given as
-   the first command-line argument, C-Kermit makes a connection to it.
-   The host argument can be an IP host name or address, or the name of a
-   TCP/IP entry in your C-Kermit network directory.
-
-   If a port is given, it is used. If a port is not given, then if the
-   hostname was found in your network directory and port was also listed
-   there, then that port is used. Otherwise port 23 (the Telnet port) is
-   used.
-
-   When C-Kermit is called "telnet" and it is invoked with a hostname on
-   the command line, it exits automatically when the connection is
-   closed. While the connection is open, however, you may escape back and
-   forth as many times as you like, transfer files, etc.
-
-   An rlogin personality is also available, but it is less useful, at
-   least in UNIX and VMS, where the Rlogin TCP port is privileged.
-
-   The new variable \v(name) indicates the name with which C-Kermit was
-   invoked ("kermit", "wermit", "k95", "telnet", etc).
-     _________________________________________________________________
-
-  9.2. Built-in Help for Command Line Options
-
-   "kermit -h", given from the system prompt, lists as many command-line
-   options as will fit on a standard 24x80 screen. For more comprehensive
-   help, use the interactive HELP OPTIONS command that was added in
-   C-Kermit 7.0:
-
-   HELP OPTIONS
-   Explains how command-line options work, their syntax, etc.
-
-   HELP OPTIONS ALL
-   Lists all command-line options and gives brief help about each one.
-
-   HELP OPTION x
-   Gives brief help about option "x".
-
-   HELP EXTENDED-OPTIONS
-   Lists the available extended-format command-line options.
-
-   HELP EXTENDED-OPTION xxx
-   Gives help for the specified extended option.
-     _________________________________________________________________
-
-  9.3. New Command-Line Options
-
-   Command-line options added since C-Kermit 6.0 are:
-
-   +
-          (plus sign by itself): The next argument is the name of a
-          script to execute; all subsequent arguments are ignored by
-          C-Kermit itself, but passed to the script as top-level copies
-          of \%1, \%2, etc; the \&_[] is also set accordingly. \%0 and
-          \&_[0] become the name of the script file, rather than the
-          pathname of the C-Kermit program, which is its normal value.
-          Primarily for use in the top line of "Kerbang" scripts in UNIX
-          (see [629]Section 7.19). Example from UNIX command line:
-
-  $ kermit [ regular kermit args ] + filename
-
-          Sample first line of Kerbang script:
-
-  #!/usr/local/bin/kermit +
-
-   --
-          (two hyphens surrounded by whitespace) Equivalent to "=", for
-          compatibility with UNIX getopt(1,3).
-
-   -G
-          GET (like -g), but send the incoming file to standard output.
-          Example: "kermit -G oofa.txt | lpr" retrieves a file from your
-          local computer (providing it is running a Kermit program that
-          supports the autodownload feature and has it enabled) and
-          prints it.
-
-   -O
-          equivalent to -x (start up in server mode), but exits after the
-          first client command has been executed (mnemonic: O = Only
-          One). This one is handy replacing "kermit -x" in the
-          "automatically start Kermit on the other end" string:
-
-  set protocol kermit {kermit -ir} {kermit -r} {kermit -x}
-
-          since -x leaves the remote Kermit in server mode after the
-          transfer, which can be confusing, whereas -O makes it go away
-          automatically after the transfer.
-
-   -L
-          Recursive, when used in combination with -s (mnemonic: L =
-          Levels). In UNIX or other environments where the shell expands
-          wildcards itself, the -s argument, if it contains wildcards,
-          must be quoted to prevent this, e.g.:
-
-  kermit -L -s "*.c"
-
-          In UNIX only, "kermit -L -s ." means to send the current
-          directory tree. See [630]Sections 4.10 and [631]4.11 about
-          recursive file transfer.
-
-   -V
-          Equivalent to SET FILE PATTERNS OFF ([632]Section 4.3) and SET
-          TRANSFER MODE MANUAL. In other words, take the FILE TYPE
-          setting literally. For example, "kermit -VT oofa.bin" means
-          send the file in Text mode, no matter what its name is and no
-          matter whether a kindred spirit is recognized at the other end
-          of the connection.
-
-   -0
-          (digit zero) means "be 100% transparent in CONNECT mode". This
-          is equivalent to the following series of commands: SET PARITY
-          NONE, SET COMMAND BYTESIZE 8, SET TERMINAL BYTESIZE 8, SET FLOW
-          NONE, SET TERM ESCAPE DISABLED, SET TERM CHAR TRANSPARENT, SET
-          TERM AUTODOWNLOAD OFF, SET TERM APC OFF, SET TELOPT KERMIT
-          REFUSE REFUSE.
-     _________________________________________________________________
-
-  10. C-KERMIT AND G-KERMIT
-
-   Every multifunctioned and long-lived software program grows in
-   complexity and size over time to meet the needs and requests of its
-   users and the demands of the underlying technology as it changes.
-
-   Eventually users begin to notice how big the application has grown,
-   how much disk space it occupies, how long it takes to load, and they
-   start to long for the good old days when it was lean and mean. Not
-   long after that they begin asking for a "light" version that only does
-   the basics with no frills.
-
-   And so it is with C-Kermit. A "light" version of Kermit was released
-   (for UNIX only) in December 1999 under the GNU General Public License;
-   thus it is called G-Kermit (for GNU Kermit). All it does is send and
-   receive files, period. You can find it at:
-
-  [633]http://www.columbia.edu/kermit/gkermit.html
-
-   Where the C-Kermit 7.0 binary might be anywhere from 1 to 3 million
-   bytes in size, the G-Kermit binary ranges from 30K to 100K, depending
-   on the underlying architecture (RISC vs CISC, etc).
-
-   G-Kermit and C-Kermit may reside side-by-side on the same computer.
-   G-Kermit does not make connections; it does not have a script
-   language; it does not translate character sets. G-Kermit may be used
-   instead of C-Kermit when:
-
-     * It is on the remote end.
-     * Files are to be transferred in binary mode or in text mode without
-       character-set translation.
-     * File timestamps don't need to be preserved.
-
-   In such cases G-Kermit might be preferred since it generally starts up
-   faster, and yet transfers files just as fast on most (but not
-   necessarily all) kinds of connections; for example, it supports
-   streaming ([634]Section 4.20).
-
-   G-Kermit is also handy for bootstrapping. It is easier to load on a
-   new computer than C-Kermit -- it fits on a floppy diskette with plenty
-   of room to spare. Thus if you have (say) an old PC running (say) SCO
-   Xenix and no network connection, you can download the Xenix version of
-   G-Kermit to (say) a DOS or Windows PC, copy it to diskette, read the
-   diskette on Xenix with "dosread", and then use G-Kermit to receive
-   C-Kermit (which does not fit on a diskette). If diskettes aren't an
-   option, other bootstrapping methods are possible too -- see the
-   [635]G-Kermit web page for details.
-     _________________________________________________________________
-
-III. APPENDICES
-
-  III.1. Character Set Tables
-
-    III.1.1. The Hewlett Packard Roman8 Character Set
-
-dec col/row oct hex  description
-160  10/00  240  A0  (Undefined)
-161  10/01  241  A1  A grave
-162  10/02  242  A2  A circumflex
-163  10/03  243  A3  E grave
-164  10/04  244  A4  E circumflex
-165  10/05  245  A5  E diaeresis
-166  10/06  246  A6  I circumflex
-167  10/07  247  A7  I diaeresis
-168  10/08  250  A8  Acute accent
-169  10/09  251  A9  Grave accent
-170  10/10  252  AA  Circumflex accent
-171  10/11  253  AB  Diaeresis
-172  10/12  254  AC  Tilde accent
-173  10/13  255  AD  U grave
-174  10/14  256  AE  U circumflex
-175  10/15  257  AF  Lira symbol
-176  11/00  260  B0  Top bar (macron)
-177  11/01  261  B1  Y acute
-178  11/02  262  B2  y acute
-179  11/03  263  B3  Degree Sign
-180  11/04  264  B4  C cedilla
-181  11/05  265  B5  c cedilla
-182  11/06  266  B6  N tilde
-183  11/07  267  B7  n tilde
-184  11/08  270  B8  Inverted exclamation mark
-185  11/09  271  B9  Inverted question mark
-186  11/10  272  BA  Currency symbol
-187  11/11  273  BB  Pound sterling symbol
-188  11/12  274  BC  Yen symbol
-189  11/13  275  BD  Paragraph
-190  11/14  276  BE  Florin (Guilder) symbol
-191  11/15  277  BF  Cent symbol
-192  12/00  300  C0  a circumflex
-193  12/01  301  C1  e circumflex
-194  12/02  302  C2  o circumflex
-195  12/03  303  C3  u circumflex
-196  12/04  304  C4  a acute
-197  12/05  305  C5  e acute
-198  12/06  306  C6  o acute
-199  12/07  307  C7  u acute
-200  12/08  310  C8  a grave
-201  12/09  311  C9  e grave
-202  12/10  312  CA  o grave
-203  12/11  313  CB  u grave
-204  12/12  314  CC  a diaeresis
-205  12/13  315  CD  e diaeresis
-206  12/14  316  CE  o diaeresis
-207  12/15  317  CF  u diaeresis
-208  13/00  320  D0  A ring
-209  13/01  321  D1  i circumflex
-210  13/02  322  D2  O with stroke
-211  13/03  323  D3  AE digraph
-212  13/04  324  D4  a ring
-213  13/05  325  D5  i acute
-214  13/06  326  D6  o with stroke
-215  13/07  327  D7  ae digraph
-216  13/08  330  D8  A diaeresis
-217  13/09  331  D9  i grave
-218  13/10  332  DA  O diaeresis
-219  13/11  333  DB  U diaeresis
-220  13/12  334  DC  E acute
-221  13/13  335  DD  i diaeresis
-222  13/14  336  DE  German sharp s
-223  13/15  337  DF  O circumflex
-224  14/00  340  E0  A acute
-225  14/01  341  E1  A tilde
-226  14/02  342  E2  a tilde
-227  14/03  343  E3  Icelandic Eth
-228  14/04  344  E4  Icelandic eth
-229  14/05  345  E5  I acute
-230  14/06  346  E6  I grave
-231  14/07  347  E7  O acute
-232  14/08  350  E8  O grave
-233  14/09  351  E9  O tilde
-234  14/10  352  EA  o tilde
-235  14/11  353  EB  S caron
-236  14/12  354  EC  s caron
-237  14/13  355  ED  U acute
-238  14/14  356  EE  Y diaeresis
-239  14/15  357  EF  y diaeresis
-240  15/00  360  F0  Icelandic Thorn
-241  15/01  361  F1  Icelandic thorn
-242  15/02  362  F2  Middle dot
-243  15/03  363  F3  Greek mu
-244  15/04  364  F4  Pilcrow sign
-245  15/05  365  F5  Fraction 3/4
-246  15/06  366  F6  Long dash, horizontal bar
-247  15/07  367  F7  Fraction 1/4
-248  15/08  370  F8  Fraction 1/2
-249  15/09  371  F9  Feminine ordinal
-250  15/10  372  FA  Masculine ordinal
-251  15/11  373  FB  Left guillemot
-252  15/12  374  FC  Solid box
-253  15/13  375  FD  Right guillemot
-254  15/14  376  FE  Plus or minus sign
-255  15/15  377  FF  (Undefined)
-     _________________________________________________________________
-
-    III.1.2. Greek Character Sets
-
-    III.1.2.1. The ISO 8859-7 Latin / Greek Alphabet = ELOT 928
-
-dec col/row oct hex  description
-160  10/00  240  A0  No-break space
-161  10/01  241  A1  Left single quotation mark
-162  10/02  242  A2  right single quotation mark
-163  10/03  243  A3  Pound sign
-164  10/04  244  A4  (UNUSED)
-165  10/05  245  A5  (UNUSED)
-166  10/06  246  A6  Broken bar
-167  10/07  247  A7  Paragraph sign
-168  10/08  250  A8  Diaeresis (Dialytika)
-169  10/09  251  A9  Copyright sign
-170  10/10  252  AA  (UNUSED)
-171  10/11  253  AB  Left angle quotation
-172  10/12  254  AC  Not sign
-173  10/13  255  AD  Soft hyphen
-174  10/14  256  AE  (UNUSED)
-175  10/15  257  AF  Horizontal bar (Parenthetiki pavla)
-176  11/00  260  B0  Degree sign
-177  11/01  261  B1  Plus-minus sign
-178  11/02  262  B2  Superscript two
-179  11/03  263  B3  Superscript three
-180  11/04  264  B4  Accent (tonos)
-181  11/05  265  B5  Diaeresis and accent (Dialytika and Tonos)
-182  11/06  266  B6  Alpha with accent
-183  11/07  267  B7  Middle dot (Ano Teleia)
-184  11/08  270  B8  Epsilon with accent
-185  11/09  271  B9  Eta with accent
-186  11/10  272  BA  Iota with accent
-187  11/11  273  BB  Right angle quotation
-188  11/12  274  BC  Omicron with accent
-189  11/13  275  BD  One half
-190  11/14  276  BE  Upsilon with accent
-191  11/15  277  BF  Omega with accent
-192  12/00  300  C0  iota with diaeresis and accent
-193  12/01  301  C1  Alpha
-194  12/02  302  C2  Beta
-195  12/03  303  C3  Gamma
-196  12/04  304  C4  Delta
-197  12/05  305  C5  Epsilon
-198  12/06  306  C6  Zeta
-199  12/07  307  C7  Eta
-200  12/08  310  C8  Theta
-201  12/09  311  C9  Iota
-202  12/10  312  CA  Kappa
-203  12/11  313  CB  Lamda
-204  12/12  314  CC  Mu
-205  12/13  315  CD  Nu
-206  12/14  316  CE  Ksi
-207  12/15  317  CF  Omicron
-208  13/00  320  D0  Pi
-209  13/01  321  D1  Rho
-210  13/02  322  D2  (UNUSED)
-211  13/03  323  D3  Sigma
-212  13/04  324  D4  Tau
-213  13/05  325  D5  Upsilon
-214  13/06  326  D6  Phi
-215  13/07  327  D7  Khi
-216  13/08  330  D8  Psi
-217  13/09  331  D9  Omega
-218  13/10  332  DA  Iota with diaeresis
-219  13/11  333  DB  Upsilon with diaeresis
-220  13/12  334  DC  alpha with accent
-221  13/13  335  DD  epsilon with accent
-222  13/14  336  DE  eta with accent
-223  13/15  337  DF  iota with accent
-224  14/00  340  E0  upsilon with diaeresis and accent
-225  14/01  341  E1  alpha
-226  14/02  342  E2  beta
-227  14/03  343  E3  gamma
-228  14/04  344  E4  delta
-229  14/05  345  E5  epsilon
-230  14/06  346  E6  zeta
-231  14/07  347  E7  eta
-232  14/08  350  E8  theta
-233  14/09  351  E9  iota
-234  14/10  352  EA  kappa
-235  14/11  353  EB  lamda
-236  14/12  354  EC  mu
-237  14/13  355  ED  nu
-238  14/14  356  EE  ksi
-239  14/15  357  EF  omicron
-240  15/00  360  F0  pi
-241  15/01  361  F1  rho
-242  15/02  362  F2  terminal sigma
-243  15/03  363  F3  sigma
-244  15/04  364  F4  tau
-245  15/05  365  F5  upsilon
-246  15/06  366  F6  phi
-247  15/07  367  F7  khi
-248  15/08  370  F8  psi
-249  15/09  371  F9  omega
-250  15/10  372  FA  iota with diaeresis
-251  15/11  373  FB  upsilon with diaeresis
-252  15/12  374  FC  omicron with diaeresis
-253  15/13  375  FD  upsilon with accent
-254  15/14  376  FE  omega with accent
-255  15/15  377  FF  (UNUSED)
-     _________________________________________________________________
-
-    III.1.2.2. The ELOT 927 Character Set
-
-dec col/row oct hex  description
- 32  02/00   40  20  SPACE
- 33  02/01   41  21  EXCLAMATION MARK
- 34  02/02   42  22  QUOTATION MARK
- 35  02/03   43  23  NUMBER SIGN
- 36  02/04   44  24  DOLLAR SIGN
- 37  02/05   45  25  PERCENT SIGN
- 38  02/06   46  26  AMPERSAND
- 39  02/07   47  27  APOSTROPHE
- 40  02/08   50  28  LEFT PARENTHESIS
- 41  02/09   51  29  RIGHT PARENTHESIS
- 42  02/10   52  2A  ASTERISK
- 43  02/11   53  2B  PLUS SIGN
- 44  02/12   54  2C  COMMA
- 45  02/13   55  2D  HYPHEN, MINUS SIGN
- 46  02/14   56  2E  PERIOD, FULL STOP
- 47  02/15   57  2F  SOLIDUS, SLASH
- 48  03/00   60  30  DIGIT ZERO
- 49  03/01   61  31  DIGIT ONE
- 50  03/02   62  32  DIGIT TWO
- 51  03/03   63  33  DIGIT THREE
- 52  03/04   64  34  DIGIT FOUR
- 53  03/05   65  35  DIGIT FIVE
- 54  03/06   66  36  DIGIT SIX
- 55  03/07   67  37  DIGIT SEVEN
- 56  03/08   70  38  DIGIT EIGHT
- 57  03/09   71  39  DIGIT NINE
- 58  03/10   72  3A  COLON
- 59  03/11   73  3B  SEMICOLON
- 60  03/12   74  3C  LESS-THAN SIGN, LEFT ANGLE BRACKET
- 61  03/13   75  3D  EQUALS SIGN
- 62  03/14   76  3E  GREATER-THAN SIGN, RIGHT ANGLE BRACKET
- 63  03/15   77  3F  QUESTION MARK
- 64  04/00  100  40  COMMERCIAL AT SIGN
- 65  04/01  101  41  CAPITAL LETTER A
- 66  04/02  102  42  CAPITAL LETTER B
- 67  04/03  103  43  CAPITAL LETTER C
- 68  04/04  104  44  CAPITAL LETTER D
- 69  04/05  105  45  CAPITAL LETTER E
- 70  04/06  106  46  CAPITAL LETTER F
- 71  04/07  107  47  CAPITAL LETTER G
- 72  04/08  110  48  CAPITAL LETTER H
- 73  04/09  111  49  CAPITAL LETTER I
- 74  04/10  112  4A  CAPITAL LETTER J
- 75  04/11  113  4B  CAPITAL LETTER K
- 76  04/12  114  4C  CAPITAL LETTER L
- 77  04/13  115  4D  CAPITAL LETTER M
- 78  04/14  116  4E  CAPITAL LETTER N
- 79  04/15  117  4F  CAPITAL LETTER O
- 80  05/00  120  50  CAPITAL LETTER P
- 81  05/01  121  51  CAPITAL LETTER Q
- 82  05/02  122  52  CAPITAL LETTER R
- 83  05/03  123  53  CAPITAL LETTER S
- 84  05/04  124  54  CAPITAL LETTER T
- 85  05/05  125  55  CAPITAL LETTER U
- 86  05/06  126  56  CAPITAL LETTER V
- 87  05/07  127  57  CAPITAL LETTER W
- 88  05/08  130  58  CAPITAL LETTER X
- 89  05/09  131  59  CAPITAL LETTER Y
- 90  05/10  132  5A  CAPITAL LETTER Z
- 91  05/11  133  5B  LEFT SQUARE BRACKET
- 92  05/12  134  5C  REVERSE SOLIDUS, BACKSLASH
- 93  05/13  135  5D  RIGHT SQUARE BRACKET
- 94  05/14  136  5E  CIRCUMFLEX ACCENT
- 95  05/15  137  5F  UNDERSCORE
- 96  06/00  140  60  ACCENT GRAVE
- 97  06/01  141  61  GREEK LETTER ALPHA
- 98  06/02  142  62  GREEK LETTER BETA
- 99  06/03  143  63  GREEK LETTER GAMMA
-100  06/04  144  64  GREEK LETTER DELTA
-101  06/05  145  65  GREEK LETTER EPSILON
-102  06/06  146  66  GREEK LETTER ZETA
-103  06/07  147  67  GREEK LETTER ETA
-104  06/08  150  68  GREEK LETTER THETA
-105  06/09  151  69  GREEK LETTER IOTA
-106  06/10  152  6A  GREEK LETTER KAPPA
-107  06/11  153  6B  GREEK LETTER LAMDA
-108  06/12  154  6C  GREEK LETTER MU
-109  06/13  155  6D  GREEK LETTER NU
-110  06/14  156  6E  GREEK LETTER KSI
-111  06/15  157  6F  GREEK LETTER OMICRON
-112  07/00  160  70  GREEK LETTER PI
-113  07/01  161  71  GREEK LETTER RHO
-114  07/02  162  72  GREEK LETTER SIGMA
-115  07/03  163  73  GREEK LETTER TAU
-116  07/04  164  74  GREEK LETTER UPSILON
-117  07/05  165  75  GREEK LETTER FI
-118  07/06  166  76  GREEK LETTER XI
-119  07/07  167  77  GREEK LETTER PSI
-120  07/08  170  78  GREEK LETTER OMEGA
-121  07/09  171  79  SPACE
-122  07/10  172  7A  SPACE
-123  07/11  173  7B  LEFT CURLY BRACKET, LEFT BRACE
-124  07/12  174  7C  VERTICAL LINE, VERTICAL BAR
-125  07/13  175  7D  RIGHT CURLY BRACKET, RIGHT BRACE
-126  07/14  176  7E  TILDE
-127  07/15  177  7F  RUBOUT, DELETE
-     _________________________________________________________________
-
-    III.1.2.3. PC Code Page 869
-
-   (to be filled in...)
-     _________________________________________________________________
-
-    III.2. Updated Country Codes
-
-   Date: Mon, 7 Apr 1997 23:23:49 EDT
-   From: Dave Leibold <dleibold@else.net>
-   Newsgroups: comp.dcom.telecom
-   Subject: Ex-USSR Country Codes Profile
-   Organization: TELECOM Digest
-
-   Ex-USSR Country Codes Profile
-   4 April 1997
-
-   Below is a summary of the country codes that have formed in the wake
-   of the USSR dissolution, along with some updated findings and reports.
-   Additional or corrected information on any of these nations would be
-   welcome (c/o dleibold@else.net).
-     * Kyrgyz Republic country code 996 will take effect, at least in
-       Canada, effective 1 May 1997, according to CRTC Telecom Order
-       97-464, based on Stentor Tariff Notice 433. There is no indication
-       whether there will be a permissive dialing period involved or for
-       how long such a permissive operation would remain.
-     * Country code 992 was reported as a recent assignment for
-       Tajikistan, which will be moving from country code 7 at some
-       unknown time.
-     * Uzbekistan has its own country code assignment, but I have no
-       information if this is in service yet or what implementation dates
-       have been set.
-     * Kazakstan does not have a known separate country code assignment
-       at present. It remains in country code 7 for the time being.
-     * Russia seems destined to keep country code 7.
-     * Recent news reports speak of some agreements forming between
-       Russia and Belarus. While there is no outright reunification yet,
-       there is expected to be much closer ties between the two nations.
-       Whether this will lead to a reunification of telephone codes
-       remains to be seen.
-
-   In the table, "Effective" means the date at which the country code
-   began service (which could vary according to the nation). "Mandatory"
-   means the date at which the country code 7 is invalid for calls to
-   that nation. There are a number of question marks since exact dates
-   have not been collected in all cases.
-
-CC  Nation            Effective     Mandatory    Notes
-
-370 Lithuania         1993?         ???          Announced Jan 1993
-371 Latvia            1993?         ???
-372 Estonia           1 Feb 1993?   March 1993?
-373 Moldova           1993?         ???          Announced Jan 1993
-374 Armenia           1 May 1995    1 July 1995  Announced Jan 1995 (ITU)
-375 Belarus           16 Apr 1995   1997?
-380 Ukraine           16 Apr 1995   Oct 1995?
-7   Kazakstan         (no known changes)
-7   Russia            (presumably not changing)
-992 Tajikistan        ???           ???          Announced 1996-7?
-993 Turkmenistan      3 Jan 1997    3 Apr 1997   Canada as of 29 Nov 1996
-994 Azerbaijan        Sept 1994?    ???          Announced 1992
-995 Georgia           1994?         ???          ref: Telecom Digest Oct 1994
-996 Kyrgyz Republic   1 May 1997    ???          ref: Stentor Canada/CRTC
-998 Uzbekistan        ???           ???          Announced 1996? (ITU)
-
-   Details courtesy Toby Nixon, ITU, Stentor (Canada), CRTC (Canada),
-   TELECOM Digest (including information collected for the country code
-   listings).
-     _________________________________________________________________
-
-IV. ERRATA & CORRIGENDA
-
-   The following errors in [636]Using C-Kermit, Second Edition, first
-   printing, have been noted.
-
-   First, some missing acknowledgements for C-Kermit 6.0: JE Jones of
-   Microware for help with OS-9, Nigel Roles for his help with Plan 9,
-   Lucas Hart for help with VMS and Digital UNIX, Igor Kovalenko for his
-   help with QNX. And later, to Susan Kleinmann for her help with Debian
-   Linux packaging; Patrick Volkerding for his help with Slackware Linux
-   packaging; Jim Knoble for his help with Red Hat Linux packaging; and
-   to dozens of others for sending individual C-Kermit binaries for
-   varied and diverse platforms.
-
-   Thanks to James Spath for both binaries and reporting many of the
-   typos noted below. Also to Dat Thuc Nguyen for spotting several typos.
-
-PAGE    REMARKS
-COVER   "COS" is a misprint.  There is no COS.  Pretend it says "SCO" or "VOS".
-        (This is fixed in the second printing.)
- xxi    Second line: Fred Smith's affiliation should be Computrition.
- 83     Change "commands other" to "commands as other" (1st paragraph)
- 87     Change "The the" to "The" (2nd paragraph)
- 92     "set modem-type user-defined supra" should be "set modem type ..."
- 95     Change "VI" to "vi" (1st paragraph)
- 96     Change "it it" to "it is" (1st paragraph)
- 97     Change "advantage a literal" to "advantage of a literal" (2nd
-        paragraph)
-102     The call-waiting example would be better as SET DIAL PREFIX *70W
-        (rather than "*70,") because the former will not cause an incorrect
-        call to be placed with pulse dialing.
-123     Third paragraph from bottom: "..otherwise if a your local username.."
-        should be "..otherwise your local username..".
-160     Delete the "it" between "and" and "to" (2nd paragraph)
-185     In "When TRANSFER DISPLAY is OFF, C-Kermit skips the display...",
-        "OFF" should be "NONE".
-187     The last paragraph says the "A command" is ignored, should be "S".
-194     Change "it known" to "it is known" (4th paragraph).
-235     In C-Kermit 7.0, the syntax of the GET command changed.  MGET now
-        must be used to get a list of files and there is no more multiline
-        GET command.
-268     Last paragraph: "effect" should be "affect".
-275     In the SET PROTOCOL KERMIT description, the following sentence is
-        incorrect and should be removed: 'If you omit the commands, the
-        default ones are restored: "kermit -ir" and "kermit -r" respectively".
-        The correct information is given at the bottom of page 281.
-279     9th line.  The decimal value of ST is 156, not 155.
-295     In the stepping stones, skip ahead to Chapter 17 on p. 327.
-298     Table 16-2, Portuguese entry.  Column 4/00 should show section sign,
-        not acute accent.
-316     Other languages written in the Hebrew alphabet include Karaim (a Turkic
-        language spoken in Lithuania and Poland), Judeo-Kurdish, and Judeo-
-        Georgian.
-332     UNDEFINE definition, change "This just" to "This is just".
-344     It might be necessary to set the modem's pulse generation rate when
-        sending numeric pages; most Hayes compatible modems use the S11
-        register for this.
-350     Delete "is" from between "It" and "ceases" (4th paragraph)
-351     Top - both occurrences of "print \%a" should be "echo \%a".
-364     \v(input) and \v(query) out of alphabetical order.
-378     In the MYSEND macro, "if not \m(rc) goto bad" should be:
-        "if \m(rc) goto bad" (remove the "not").
-382-383 It should be stated that the loop control variable must be of the \%a
-        type, or else an array element; macro names can not be used for this.
-383     In line 3, "\%f[\%i]" should be "\&f[\%i]".
-383     In the sort example, it should be stated that the array is 1-based.
-387     Change "You can list" to "You can get a list" (5th paragraph)
-393     \Fverify() description.  The 3rd sentence could be stated more clearly
-        as "If all characters in string2 are also in string1, 0 is returned."
-398     Copying \ffiles() results to an array before is not required as of
-        C-Kermit 7.0 (see [637]Section 7.3).
-403     In "(\%a + 3) * (\%b  5)", a minus sign is missing between b and 5.
-407     C-Kermit 7.0 no longer supports multiline GET.  Change
-        "get, \%1, \%2" to "get {\%1} {\%2}" or "get /as:{\%2} {\%1}".
-409     READ example while loop should be:
-        while success { echo \m(line), read line }
-409     "WRITE file" should be "WRITE keyword" (you can't put a filename there)
-        (The same applies to WRITE-LINE / WRITELN).
-414     \Funhexify() missing from Table 18-3.
-425     MINPUT definition, change 2nd "text2" to "text3".
-436     Several lines are missing from the UNIXLOGIN macro listing.
-        After the "xif fail" block, insert:
-
-          out \%1\13                    ; Send username, carriage return
-          inp 5 Password:               ; Wait 5 sec for this prompt
-          if fail end 1 No password prompt
-          pause                         ; Wait a sec
-          out \%2\13                    ; Send password
-
-440     Change "set terminal byteszie" to "set terminal bytesize".
-        Change "input Password:" to "input 10 Password".
-448     Franchise script: "access line" should be "access \m(line)".
-453     There are two incorrectly coded IF statements in the DELIVER macro
-        definition.  Replace both occurrences of "if > \%1 \%3 {" with
-        "xif > \%i \%3 {" (replace "if" by "xif" and "\%1" with "\%i").
-453     "the the" (last paragraph) should be "the".
-454     EOT (last paragraph) is End of Transmission, not End of Text.
-457     _DEFINE definition: "name constructed" should be "name is constructed".
-457     "macro for and" (last paragraph) should be "macro and".
-459     Should explain that \v(user) is a legal abbreviation of \v(userid).
-480     Figure II-2 is backwards; the least-significant bit is transmitted
-        first, then up to the highest, and the parity bit last.
-534     The VMS Appendix section on Odd Record Lengths no longer applies;
-        C-Kermit 7.0 handles odd record lengths as well as even ones.
-559     Table VIII-3, Portuguese entry.  Column 4/00 should show section sign,
-        not acute accent.
-560-563 HP-Roman8 missing from Table VII-4; there wasn't room to squeeze it in.
-        It is listed in section II(6).
-565     "d stroke" in Table VII-5 has the wrong appearance; the stem should
-        be upright.  The letter shown in the table is actually a lowercase
-        Icelandic eth, which has a curved stem.
-601-604 BeBox, BeOS, Plan 9, and probably others not listed in trademarks.
-604     The words "SCRIBE TEXT FORMATTER" appear at the end of the last
-        sentence of the first paragraph of the Colophon.  They should have
-        been in the Index.
-Index:  Missing entries: SET { SEND, RECEIVE } PATHNAMES, Call waiting, ...
-        \F()            Page 605, add also 413-414
-        \Fbreak         389
-        \Fcapitalize    390
-        \Fchecksum      414
-        \Fcrc16         414
-        \Fexecute       414
-        \Fhexify        390
-        \Fltrim         391
-        \Frepeat        392
-        \Fspawn         392
-        \Ftod2secs      399
-        \v() built_in   Page 606, add also 361-364
-        \v(_line)       354, 361
-        \v(apcactive)   361
-        \v(charset)     362
-        \v(cpu)         362
-        \v(crc16)       357, 362
-        \v(d$xxx)       add page 362
-        \v(dialnumber)  362
-        \v(dialresult)  362
-        \v(errno)       362
-        \v(errstring)   362
-        \v(exedir)      362
-        \v(inidir)      363
-        \v(ipaddress)   363
-        \v(keyboard)    363
-        \v(macro)       363
-        \v(minput)      363
-        \v(m_xxx)       94, 363
-        \v(password)    364
-        \v(query)       364
-        \v(prompt)      364
-        \v(speed)       356, 364
-        \v(startup)     364
-        \v(status)      364
-        \v(sysid)       364
-        \v(system)      364
-        \v(fsize)       at lower half page 606 should read \v(tfsize)
-        \v(xversion)    364
-        BEEP Command    40
-        SET FLOW        62, 212
-
-   Figure II-5 on page 493. The pin assignments of the Mini Din-8
-   connector are not described anywhere. As noted in the text, these tend
-   to vary from vendor to vendor. One common arrangement is:
-
-  1. HSKout (Handshake out -- definition depends on software)
-  2. HSKin  (Handshake in or external clock)
-  3. TxD-
-  4. Not used
-  5. RxD-
-  6. TxD+
-  7. Not used
-  8. RxD+
-
-   Note the "balanced pairs" for Receive Data (RxD) and Transmit Data
-   (TxD), and the utter lack of modem signals. These connectors follow
-   the RS-423 standard, rather than RS-232. In some arrangements, Pin 1
-   is used for DTR and Pin 2 for CD; in others Pin 1 is RTS and Pin 2 is
-   CTS.
-
-   Please send reports of other errors to the authors, as well as
-   suggestions for improvements, additional index entries, and any other
-   comments:
-
-   [638]kermit@columbia.edu
-     _________________________________________________________________
-
-APPENDIX V. ADDITIONAL COPYRIGHT NOTICES
-
-   The following copyrights cover some of the source code used in the
-   development of C-Kermit, Kermit 95, or Kermit 95 support libraries.
-
-/*****************************************************************************/
-/*                                                                           */
-/*              Copyright (c) 1995 by Oy Online Solutions Ltd.               */
-/*                                                                           */
-/*   Distribution of this source code is strictly forbbidden. Use of this    */
-/*   source code is granted to the University of Columbia C-Kermit project   */
-/*   to be distributed in binary format only. Please familiarize yourself    */
-/*   with the accompanying LICENSE.P file.                                   */
-/*                                                                           */
-/*****************************************************************************/
-
-   used for Xmodem, Ymodem, and Zmodem protocol in Kermit 95 (p95.dll,
-   p2.dll)
-     _________________________________________________________________
-
-   Copyright (c) 1997 Stanford University
-
-   The use of this software for revenue-generating purposes may require a
-   license from the owners of the underlying intellectual property.
-   Specifically, the SRP-3 protocol may not be used for
-   revenue-generating purposes without a license.
-
-   Within that constraint, permission to use, copy, modify, and
-   distribute this software and its documentation for any purpose is
-   hereby granted without fee, provided that the above copyright notices
-   and this permission notice appear in all copies of the software and
-   related documentation.
-
-   THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
-   EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
-   WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-
-   IN NO EVENT SHALL STANFORD BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
-   INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES
-   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT
-   ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY,
-   ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-   SOFTWARE.
-
-   Used for Secure Remote Password (TM) protocol (SRP) in C-Kermit,
-   Kermit 95 (k95.exe, k2.exe, k95crypt.dll, k2crypt.dll)
-     _________________________________________________________________
-
-   Copyright 1990 by the Massachusetts Institute of Technology. All
-   Rights Reserved.
-
-   Export of this software from the United States of America may require
-   a specific license from the United States Government. It is the
-   responsibility of any person or organization contemplating export to
-   obtain such a license before exporting.
-
-   WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
-   distribute this software and its documentation for any purpose and
-   without fee is hereby granted, provided that the above copyright
-   notice appear in all copies and that both that copyright notice and
-   this permission notice appear in supporting documentation, and that
-   the name of M.I.T. not be used in advertising or publicity pertaining
-   to distribution of the software without specific, written prior
-   permission. M.I.T. makes no representations about the suitability of
-   this software for any purpose. It is provided "as is" without express
-   or implied warranty.
-
-   Used for Telnet Authentication Option, Telnet Encryption Option, and
-   Kerberos (TM) authentication in C-Kermit, Kermit 95 (k95.exe, k2.exe,
-   k95crypt.dll, k2crypt.dll)
-     _________________________________________________________________
-
-   Copyright (c) 1991, 1993 The Regents of the University of California.
-   All rights reserved.
-
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions are
-   met:
-    1. Redistributions of source code must retain the above copyright
-       notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in
-       the documentation and/or other materials provided with the
-       distribution.
-    3. All advertising materials mentioning features or use of this
-       software must display the following acknowledgement:
-
-     This product includes software developed by the University of
-     California, Berkeley and its contributors.
-    4. Neither the name of the University nor the names of its
-       contributors may be used to endorse or promote products derived
-       from this software without specific prior written permission.
-
-   THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS''
-   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-   THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-   PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS
-   BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-   BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-   OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-   IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-   Used for Telnet Authentication Option, Telnet Encryption Option, and
-   Kerberos (TM) authentication in C-Kermit, Kermit 95 (k95.exe, k2.exe,
-   k95crypt.dll, k2crypt.dll)
-     _________________________________________________________________
-
-   Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) All rights
-   reserved.
-
-   This package is an DES implementation written by Eric Young
-   (eay@cryptsoft.com). The implementation was written so as to conform
-   with MIT's libdes.
-
-   This library is free for commercial and non-commercial use as long as
-   the following conditions are aheared to. The following conditions
-   apply to all code found in this distribution.
-
-   Copyright remains Eric Young's, and as such any Copyright notices in
-   the code are not to be removed. If this package is used in a product,
-   Eric Young should be given attribution as the author of that the SSL
-   library. This can be in the form of a textual message at program
-   startup or in documentation (online or textual) provided with the
-   package.
-
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions are
-   met:
-    1. Redistributions of source code must retain the copyright notice,
-       this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in
-       the documentation and/or other materials provided with the
-       distribution.
-    3. All advertising materials mentioning features or use of this
-       software must display the following acknowledgement: This product
-       includes software developed by Eric Young (eay@cryptsoft.com)
-
-   THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND ANY EXPRESS OR
-   IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-   DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
-   ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
-   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
-   IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-   OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-   ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-   The license and distribution terms for any publically available
-   version or derivative of this code cannot be changed. i.e. this code
-   cannot simply be copied and put under another distrubution license
-   [including the GNU Public License.]
-
-   The reason behind this being stated in this direct manner is past
-   experience in code simply being copied and the attribution removed
-   from it and then being distributed as part of other packages. This
-   implementation was a non-trivial and unpaid effort.
-
-   Used DES encryption in Kermit 95 (k95crypt.dll, k2crypt.dll)
-     _________________________________________________________________
-
- * This is version 1.1 of CryptoLib
- *
- * The authors of this software are Jack Lacy, Don Mitchell and Matt Blaze
- *              Copyright (c) 1991, 1992, 1993, 1994, 1995 by AT&T.
- * Permission to use, copy, and modify this software without fee
- * is hereby granted, provided that this entire notice is included in
- * all copies of any software which is or includes a copy or
- * modification of this software and in all copies of the supporting
- * documentation for such software.
- *
- * NOTE:
- * Some of the algorithms in cryptolib may be covered by patents.
- * It is the responsibility of the user to ensure that any required
- * licenses are obtained.
- *
- *
- * SOME PARTS OF CRYPTOLIB MAY BE RESTRICTED UNDER UNITED STATES EXPORT
- * REGULATIONS.
- *
- *
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY
- * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
- * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
-
-   Used for Big Number library in Kermit 95 (k95crypt.dll, k2crypt.dll).
-
-   [ [639]Top ] [ [640]C-Kermit ] [ [641]Kermit Home ]
-     _________________________________________________________________
-
-   CKERMIT70.HTM / The Kermit Project / Columbia University / 8 Feb 2000
-
-References
-
-   1. http://www.columbia.edu/kermit/ckermit70.html#contents
-   2. http://www.columbia.edu/kermit/ckermit.html
-   3. http://www.columbia.edu/kermit/index.htm
-   4. mailto:kermit-support@columbia.edu
-   5. http://www.columbia.edu/kermit/
-   6. http://www.kermit-project.org/
-   7. http://www.columbia.nyc.ny.us/kermit/
-   8. ftp://kermit.columbia.edu/kermit/f/COPYING.TXT
-   9. ftp://kermit.columbia.edu/kermit/f/ckcmai.c
-  10. http://www.columbia.edu/kermit/ckermit70.html#xv
-  11. http://www.columbia.edu/kermit/ckb2.htm
-  12. ftp://kermit.columbia.edu/kermit/f/ckcbwr.txt
-  13. ftp://kermit.columbia.edu/kermit/f/ckubwr.txt
-  14. ftp://kermit.columbia.edu/kermit/f/ckvbwr.txt
-  15. ftp://kermit.columbia.edu/kermit/f/ckubwr.txt
-  16. ftp://kermit.columbia.edu/kermit/f/ckermit70.txt
-  17. ftp://kermit.columbia.edu/kermit/f/security.txt
-  18. http://www.columbia.edu/kermit/security.htm
-  19. ftp://kermit.columbia.edu/kermit/f/iksd.txt
-  20. http://www.columbia.edu/kermit/iksd.htm
-  21. http://www.columbia.edu/kermit/cuiksd.htm
-  22. ftp://kermit.columbia.edu/kermit/f/telnet.txt
-  23. http://www.columbia.edu/kermit/telnet.htm
-  24. ftp://kermit.columbia.edu/kermit/f/COPYING.TXT
-  25. http://www.columbia.edu/kermit/k95.html
-  26. http://www.opensource.org/
-  27. http://www.columbia.edu/kermit/ckb2.htm
-  28. http://www.columbia.edu/kermit/ckermit70.html#xi
-  29. http://www.columbia.edu/kermit/ckermit70.html#xii
-  30. http://www.columbia.edu/kermit/ckermit70.html#x0
-  31. http://www.columbia.edu/kermit/ckermit70.html#x1
-  32. http://www.columbia.edu/kermit/ckermit70.html#x1.0
-  33. http://www.columbia.edu/kermit/ckermit70.html#x1.1
-  34. http://www.columbia.edu/kermit/ckermit70.html#x1.2
-  35. http://www.columbia.edu/kermit/ckermit70.html#x1.3
-  36. http://www.columbia.edu/kermit/ckermit70.html#x1.4
-  37. http://www.columbia.edu/kermit/ckermit70.html#x1.5
-  38. http://www.columbia.edu/kermit/ckermit70.html#x1.5.1
-  39. http://www.columbia.edu/kermit/ckermit70.html#x1.5.2
-  40. http://www.columbia.edu/kermit/ckermit70.html#x1.5.3
-  41. http://www.columbia.edu/kermit/ckermit70.html#x1.5.4
-  42. http://www.columbia.edu/kermit/ckermit70.html#x1.5.5
-  43. http://www.columbia.edu/kermit/ckermit70.html#x1.6
-  44. http://www.columbia.edu/kermit/ckermit70.html#x1.7
-  45. http://www.columbia.edu/kermit/ckermit70.html#x1.8
-  46. http://www.columbia.edu/kermit/ckermit70.html#x1.9
-  47. http://www.columbia.edu/kermit/ckermit70.html#x1.10
-  48. http://www.columbia.edu/kermit/ckermit70.html#x1.11
-  49. http://www.columbia.edu/kermit/ckermit70.html#x1.11.1
-  50. http://www.columbia.edu/kermit/ckermit70.html#x1.11.2
-  51. http://www.columbia.edu/kermit/ckermit70.html#x1.11.3
-  52. http://www.columbia.edu/kermit/ckermit70.html#x1.11.4
-  53. http://www.columbia.edu/kermit/ckermit70.html#x1.11.5
-  54. http://www.columbia.edu/kermit/ckermit70.html#x1.11.6
-  55. http://www.columbia.edu/kermit/ckermit70.html#x1.11.7
-  56. http://www.columbia.edu/kermit/ckermit70.html#x1.12
-  57. http://www.columbia.edu/kermit/ckermit70.html#x1.13
-  58. http://www.columbia.edu/kermit/ckermit70.html#x1.14
-  59. http://www.columbia.edu/kermit/ckermit70.html#x1.15
-  60. http://www.columbia.edu/kermit/ckermit70.html#x1.16
-  61. http://www.columbia.edu/kermit/ckermit70.html#x1.17
-  62. http://www.columbia.edu/kermit/ckermit70.html#x1.18
-  63. http://www.columbia.edu/kermit/ckermit70.html#x1.19
-  64. http://www.columbia.edu/kermit/ckermit70.html#x1.20
-  65. http://www.columbia.edu/kermit/ckermit70.html#x1.21
-  66. http://www.columbia.edu/kermit/ckermit70.html#x1.22
-  67. http://www.columbia.edu/kermit/ckermit70.html#x1.22.1
-  68. http://www.columbia.edu/kermit/ckermit70.html#x1.22.2
-  69. http://www.columbia.edu/kermit/ckermit70.html#x1.22.3
-  70. http://www.columbia.edu/kermit/ckermit70.html#x1.22.4
-  71. http://www.columbia.edu/kermit/ckermit70.html#x1.22.5
-  72. http://www.columbia.edu/kermit/ckermit70.html#x1.22.6
-  73. http://www.columbia.edu/kermit/ckermit70.html#x1.22.7
-  74. http://www.columbia.edu/kermit/ckermit70.html#x1.22.8
-  75. http://www.columbia.edu/kermit/ckermit70.html#x1.23
-  76. http://www.columbia.edu/kermit/ckermit70.html#x1.24
-  77. http://www.columbia.edu/kermit/ckermit70.html#x2
-  78. http://www.columbia.edu/kermit/ckermit70.html#x2.0
-  79. http://www.columbia.edu/kermit/ckermit70.html#x2.1
-  80. http://www.columbia.edu/kermit/ckermit70.html#x2.1.1
-  81. http://www.columbia.edu/kermit/ckermit70.html#x2.1.2
-  82. http://www.columbia.edu/kermit/ckermit70.html#x2.1.3
-  83. http://www.columbia.edu/kermit/ckermit70.html#x2.1.4
-  84. http://www.columbia.edu/kermit/ckermit70.html#x2.1.5
-  85. http://www.columbia.edu/kermit/ckermit70.html#x2.1.6
-  86. http://www.columbia.edu/kermit/ckermit70.html#x2.1.7
-  87. http://www.columbia.edu/kermit/ckermit70.html#x2.1.8
-  88. http://www.columbia.edu/kermit/ckermit70.html#x2.1.9
-  89. http://www.columbia.edu/kermit/ckermit70.html#x2.1.10
-  90. http://www.columbia.edu/kermit/ckermit70.html#x2.1.11
-  91. http://www.columbia.edu/kermit/ckermit70.html#x2.1.12
-  92. http://www.columbia.edu/kermit/ckermit70.html#x2.1.13
-  93. http://www.columbia.edu/kermit/ckermit70.html#x2.1.14
-  94. http://www.columbia.edu/kermit/ckermit70.html#x2.1.15
-  95. http://www.columbia.edu/kermit/ckermit70.html#x2.1.16
-  96. http://www.columbia.edu/kermit/ckermit70.html#x2.2
-  97. http://www.columbia.edu/kermit/ckermit70.html#x2.2.1
-  98. http://www.columbia.edu/kermit/ckermit70.html#x2.2.2
-  99. http://www.columbia.edu/kermit/ckermit70.html#x2.3
- 100. http://www.columbia.edu/kermit/ckermit70.html#x2.3.0
- 101. http://www.columbia.edu/kermit/ckermit70.html#x2.3.1
- 102. http://www.columbia.edu/kermit/ckermit70.html#x2.3.2
- 103. http://www.columbia.edu/kermit/ckermit70.html#x2.3.3
- 104. http://www.columbia.edu/kermit/ckermit70.html#x2.3.4
- 105. http://www.columbia.edu/kermit/ckermit70.html#x2.3.5
- 106. http://www.columbia.edu/kermit/ckermit70.html#x2.3.6
- 107. http://www.columbia.edu/kermit/ckermit70.html#x2.4
- 108. http://www.columbia.edu/kermit/ckermit70.html#x2.5
- 109. http://www.columbia.edu/kermit/ckermit70.html#x2.6
- 110. http://www.columbia.edu/kermit/ckermit70.html#x2.7
- 111. http://www.columbia.edu/kermit/ckermit70.html#x2.7.0
- 112. http://www.columbia.edu/kermit/ckermit70.html#x2.7.1
- 113. http://www.columbia.edu/kermit/ckermit70.html#x2.7.2
- 114. http://www.columbia.edu/kermit/ckermit70.html#x2.7.3
- 115. http://www.columbia.edu/kermit/ckermit70.html#x2.7.4
- 116. http://www.columbia.edu/kermit/ckermit70.html#x2.7.4.1
- 117. http://www.columbia.edu/kermit/ckermit70.html#x2.7.4.2
- 118. http://www.columbia.edu/kermit/ckermit70.html#x2.7.4.3
- 119. http://www.columbia.edu/kermit/ckermit70.html#x2.7.4.4
- 120. http://www.columbia.edu/kermit/ckermit70.html#x2.7.4.5
- 121. http://www.columbia.edu/kermit/ckermit70.html#x2.8
- 122. http://www.columbia.edu/kermit/ckermit70.html#x2.9
- 123. http://www.columbia.edu/kermit/ckermit70.html#x2.9.1
- 124. http://www.columbia.edu/kermit/ckermit70.html#x2.9.2
- 125. http://www.columbia.edu/kermit/ckermit70.html#x2.10
- 126. http://www.columbia.edu/kermit/ckermit70.html#x2.11
- 127. http://www.columbia.edu/kermit/ckermit70.html#x2.12
- 128. http://www.columbia.edu/kermit/ckermit70.html#x2.13
- 129. http://www.columbia.edu/kermit/ckermit70.html#x2.14
- 130. http://www.columbia.edu/kermit/ckermit70.html#x2.15
- 131. http://www.columbia.edu/kermit/ckermit70.html#x3
- 132. http://www.columbia.edu/kermit/ckermit70.html#x3.1
- 133. http://www.columbia.edu/kermit/ckermit70.html#x3.2
- 134. http://www.columbia.edu/kermit/ckermit70.html#x3.3
- 135. http://www.columbia.edu/kermit/ckermit70.html#x3.4
- 136. http://www.columbia.edu/kermit/ckermit70.html#x4
- 137. http://www.columbia.edu/kermit/ckermit70.html#x4.0
- 138. http://www.columbia.edu/kermit/ckermit70.html#x4.1
- 139. http://www.columbia.edu/kermit/ckermit70.html#x4.1.1
- 140. http://www.columbia.edu/kermit/ckermit70.html#x4.1.2
- 141. http://www.columbia.edu/kermit/ckermit70.html#x4.1.3
- 142. http://www.columbia.edu/kermit/ckermit70.html#x4.2
- 143. http://www.columbia.edu/kermit/ckermit70.html#x4.2.1
- 144. http://www.columbia.edu/kermit/ckermit70.html#x4.2.1.1
- 145. http://www.columbia.edu/kermit/ckermit70.html#x4.2.1.2
- 146. http://www.columbia.edu/kermit/ckermit70.html#x4.2.1.3
- 147. http://www.columbia.edu/kermit/ckermit70.html#x4.2.2
- 148. http://www.columbia.edu/kermit/ckermit70.html#x4.2.2.1
- 149. http://www.columbia.edu/kermit/ckermit70.html#x4.2.2.2
- 150. http://www.columbia.edu/kermit/ckermit70.html#x4.2.3
- 151. http://www.columbia.edu/kermit/ckermit70.html#x4.2.3.1
- 152. http://www.columbia.edu/kermit/ckermit70.html#x4.2.3.2
- 153. http://www.columbia.edu/kermit/ckermit70.html#x4.2.4
- 154. http://www.columbia.edu/kermit/ckermit70.html#x4.2.5
- 155. http://www.columbia.edu/kermit/ckermit70.html#x4.2.6
- 156. http://www.columbia.edu/kermit/ckermit70.html#x4.2.7
- 157. http://www.columbia.edu/kermit/ckermit70.html#x4.2.8
- 158. http://www.columbia.edu/kermit/ckermit70.html#x4.2.8.1
- 159. http://www.columbia.edu/kermit/ckermit70.html#x4.2.8.2
- 160. http://www.columbia.edu/kermit/ckermit70.html#x4.2.8.3
- 161. http://www.columbia.edu/kermit/ckermit70.html#x4.2.8.4
- 162. http://www.columbia.edu/kermit/ckermit70.html#x4.3
- 163. http://www.columbia.edu/kermit/ckermit70.html#x4.3.1
- 164. http://www.columbia.edu/kermit/ckermit70.html#x4.3.2
- 165. http://www.columbia.edu/kermit/ckermit70.html#x4.3.3
- 166. http://www.columbia.edu/kermit/ckermit70.html#x4.3.4
- 167. http://www.columbia.edu/kermit/ckermit70.html#x4.4
- 168. http://www.columbia.edu/kermit/ckermit70.html#x4.4.1
- 169. http://www.columbia.edu/kermit/ckermit70.html#x4.4.1.1
- 170. http://www.columbia.edu/kermit/ckermit70.html#x4.4.1.2
- 171. http://www.columbia.edu/kermit/ckermit70.html#x4.4.2
- 172. http://www.columbia.edu/kermit/ckermit70.html#x4.4.2.1
- 173. http://www.columbia.edu/kermit/ckermit70.html#x4.4.2.1.1
- 174. http://www.columbia.edu/kermit/ckermit70.html#x4.4.2.1.2
- 175. http://www.columbia.edu/kermit/ckermit70.html#x4.4.2.2
- 176. http://www.columbia.edu/kermit/ckermit70.html#x4.5
- 177. http://www.columbia.edu/kermit/ckermit70.html#x4.5.1
- 178. http://www.columbia.edu/kermit/ckermit70.html#x4.5.2
- 179. http://www.columbia.edu/kermit/ckermit70.html#x4.5.2.1
- 180. http://www.columbia.edu/kermit/ckermit70.html#x4.5.2.2
- 181. http://www.columbia.edu/kermit/ckermit70.html#x4.5.3
- 182. http://www.columbia.edu/kermit/ckermit70.html#x4.5.4
- 183. http://www.columbia.edu/kermit/ckermit70.html#x4.6
- 184. http://www.columbia.edu/kermit/ckermit70.html#x4.7
- 185. http://www.columbia.edu/kermit/ckermit70.html#x4.7.1
- 186. http://www.columbia.edu/kermit/ckermit70.html#x4.7.2
- 187. http://www.columbia.edu/kermit/ckermit70.html#x4.7.3
- 188. http://www.columbia.edu/kermit/ckermit70.html#x4.8
- 189. http://www.columbia.edu/kermit/ckermit70.html#x4.8.1
- 190. http://www.columbia.edu/kermit/ckermit70.html#x4.8.2
- 191. http://www.columbia.edu/kermit/ckermit70.html#x4.9
- 192. http://www.columbia.edu/kermit/ckermit70.html#x4.9.1
- 193. http://www.columbia.edu/kermit/ckermit70.html#x4.9.2
- 194. http://www.columbia.edu/kermit/ckermit70.html#x4.9.3
- 195. http://www.columbia.edu/kermit/ckermit70.html#x4.10
- 196. http://www.columbia.edu/kermit/ckermit70.html#x4.11
- 197. http://www.columbia.edu/kermit/ckermit70.html#x4.11.1
- 198. http://www.columbia.edu/kermit/ckermit70.html#x4.11.2
- 199. http://www.columbia.edu/kermit/ckermit70.html#x4.11.3
- 200. http://www.columbia.edu/kermit/ckermit70.html#x4.11.4
- 201. http://www.columbia.edu/kermit/ckermit70.html#x4.11.5
- 202. http://www.columbia.edu/kermit/ckermit70.html#x4.11.6
- 203. http://www.columbia.edu/kermit/ckermit70.html#x4.12
- 204. http://www.columbia.edu/kermit/ckermit70.html#x4.13
- 205. http://www.columbia.edu/kermit/ckermit70.html#x4.14
- 206. http://www.columbia.edu/kermit/ckermit70.html#x4.15
- 207. http://www.columbia.edu/kermit/ckermit70.html#x4.16
- 208. http://www.columbia.edu/kermit/ckermit70.html#x4.17
- 209. http://www.columbia.edu/kermit/ckermit70.html#x4.17.1
- 210. http://www.columbia.edu/kermit/ckermit70.html#x4.17.2
- 211. http://www.columbia.edu/kermit/ckermit70.html#x4.18
- 212. http://www.columbia.edu/kermit/ckermit70.html#x4.19
- 213. http://www.columbia.edu/kermit/ckermit70.html#x4.20
- 214. http://www.columbia.edu/kermit/ckermit70.html#x4.20.1
- 215. http://www.columbia.edu/kermit/ckermit70.html#x4.20.2
- 216. http://www.columbia.edu/kermit/ckermit70.html#x4.20.2.1
- 217. http://www.columbia.edu/kermit/ckermit70.html#x4.20.2.2
- 218. http://www.columbia.edu/kermit/ckermit70.html#x4.20.2.3
- 219. http://www.columbia.edu/kermit/ckermit70.html#x4.20.2.4
- 220. http://www.columbia.edu/kermit/ckermit70.html#x4.20.2.5
- 221. http://www.columbia.edu/kermit/ckermit70.html#x4.20.3
- 222. http://www.columbia.edu/kermit/ckermit70.html#x4.21
- 223. http://www.columbia.edu/kermit/ckermit70.html#x4.22
- 224. http://www.columbia.edu/kermit/ckermit70.html#x4.22.1
- 225. http://www.columbia.edu/kermit/ckermit70.html#x4.22.2
- 226. http://www.columbia.edu/kermit/ckermit70.html#x4.22.3
- 227. http://www.columbia.edu/kermit/ckermit70.html#x4.22.4
- 228. http://www.columbia.edu/kermit/ckermit70.html#x4.22.5
- 229. http://www.columbia.edu/kermit/ckermit70.html#x4.22.6
- 230. http://www.columbia.edu/kermit/ckermit70.html#x4.22.7
- 231. http://www.columbia.edu/kermit/ckermit70.html#x4.22.8
- 232. http://www.columbia.edu/kermit/ckermit70.html#x4.23
- 233. http://www.columbia.edu/kermit/ckermit70.html#x4.24
- 234. http://www.columbia.edu/kermit/ckermit70.html#x4.25
- 235. http://www.columbia.edu/kermit/ckermit70.html#x5
- 236. http://www.columbia.edu/kermit/ckermit70.html#x5.0
- 237. http://www.columbia.edu/kermit/ckermit70.html#x5.1
- 238. http://www.columbia.edu/kermit/ckermit70.html#x5.2
- 239. http://www.columbia.edu/kermit/ckermit70.html#x5.3
- 240. http://www.columbia.edu/kermit/ckermit70.html#x5.3.1
- 241. http://www.columbia.edu/kermit/ckermit70.html#x5.3.2
- 242. http://www.columbia.edu/kermit/ckermit70.html#x5.4
- 243. http://www.columbia.edu/kermit/ckermit70.html#x5.5
- 244. http://www.columbia.edu/kermit/ckermit70.html#x5.6
- 245. http://www.columbia.edu/kermit/ckermit70.html#x5.7
- 246. http://www.columbia.edu/kermit/ckermit70.html#x6
- 247. http://www.columbia.edu/kermit/ckermit70.html#x6.0
- 248. http://www.columbia.edu/kermit/ckermit70.html#x6.1
- 249. http://www.columbia.edu/kermit/ckermit70.html#x6.2
- 250. http://www.columbia.edu/kermit/ckermit70.html#x6.3
- 251. http://www.columbia.edu/kermit/ckermit70.html#x6.4
- 252. http://www.columbia.edu/kermit/ckermit70.html#x6.5
- 253. http://www.columbia.edu/kermit/ckermit70.html#x6.6
- 254. http://www.columbia.edu/kermit/ckermit70.html#x6.6.1
- 255. http://www.columbia.edu/kermit/ckermit70.html#x6.6.2
- 256. http://www.columbia.edu/kermit/ckermit70.html#x6.6.2
- 257. http://www.columbia.edu/kermit/ckermit70.html#x6.6.3
- 258. http://www.columbia.edu/kermit/ckermit70.html#x6.6.4
- 259. http://www.columbia.edu/kermit/ckermit70.html#x6.6.5
- 260. http://www.columbia.edu/kermit/ckermit70.html#x6.6.5.1
- 261. http://www.columbia.edu/kermit/ckermit70.html#x6.6.5.2
- 262. http://www.columbia.edu/kermit/ckermit70.html#x6.6.5.3
- 263. http://www.columbia.edu/kermit/ckermit70.html#x6.6.5.4
- 264. http://www.columbia.edu/kermit/ckermit70.html#x6.6.5.5
- 265. http://www.columbia.edu/kermit/ckermit70.html#x6.7
- 266. http://www.columbia.edu/kermit/ckermit70.html#x7
- 267. http://www.columbia.edu/kermit/ckermit70.html#x7.0
- 268. http://www.columbia.edu/kermit/ckermit70.html#x7.1
- 269. http://www.columbia.edu/kermit/ckermit70.html#x7.1.1
- 270. http://www.columbia.edu/kermit/ckermit70.html#x7.1.2
- 271. http://www.columbia.edu/kermit/ckermit70.html#x7.1.3
- 272. http://www.columbia.edu/kermit/ckermit70.html#x7.1.4
- 273. http://www.columbia.edu/kermit/ckermit70.html#x7.2
- 274. http://www.columbia.edu/kermit/ckermit70.html#x7.3
- 275. http://www.columbia.edu/kermit/ckermit70.html#x7.4
- 276. http://www.columbia.edu/kermit/ckermit70.html#x7.5
- 277. http://www.columbia.edu/kermit/ckermit70.html#x7.6
- 278. http://www.columbia.edu/kermit/ckermit70.html#x7.7
- 279. http://www.columbia.edu/kermit/ckermit70.html#x7.8
- 280. http://www.columbia.edu/kermit/ckermit70.html#x7.9
- 281. http://www.columbia.edu/kermit/ckermit70.html#x7.9.1
- 282. http://www.columbia.edu/kermit/ckermit70.html#x7.9.2
- 283. http://www.columbia.edu/kermit/ckermit70.html#x7.10
- 284. http://www.columbia.edu/kermit/ckermit70.html#x7.10.1
- 285. http://www.columbia.edu/kermit/ckermit70.html#x7.10.2
- 286. http://www.columbia.edu/kermit/ckermit70.html#x7.10.3
- 287. http://www.columbia.edu/kermit/ckermit70.html#x7.10.4
- 288. http://www.columbia.edu/kermit/ckermit70.html#x7.10.5
- 289. http://www.columbia.edu/kermit/ckermit70.html#x7.10.6
- 290. http://www.columbia.edu/kermit/ckermit70.html#x7.10.7
- 291. http://www.columbia.edu/kermit/ckermit70.html#x7.10.8
- 292. http://www.columbia.edu/kermit/ckermit70.html#x7.10.9
- 293. http://www.columbia.edu/kermit/ckermit70.html#x7.10.10
- 294. http://www.columbia.edu/kermit/ckermit70.html#x7.11
- 295. http://www.columbia.edu/kermit/ckermit70.html#x7.12
- 296. http://www.columbia.edu/kermit/ckermit70.html#x7.13
- 297. http://www.columbia.edu/kermit/ckermit70.html#x7.14
- 298. http://www.columbia.edu/kermit/ckermit70.html#x7.15
- 299. http://www.columbia.edu/kermit/ckermit70.html#x7.16
- 300. http://www.columbia.edu/kermit/ckermit70.html#x7.17
- 301. http://www.columbia.edu/kermit/ckermit70.html#x7.18
- 302. http://www.columbia.edu/kermit/ckermit70.html#x7.19
- 303. http://www.columbia.edu/kermit/ckermit70.html#x7.20
- 304. http://www.columbia.edu/kermit/ckermit70.html#x7.20.1
- 305. http://www.columbia.edu/kermit/ckermit70.html#x7.20.2
- 306. http://www.columbia.edu/kermit/ckermit70.html#x7.21
- 307. http://www.columbia.edu/kermit/ckermit70.html#x7.22
- 308. http://www.columbia.edu/kermit/ckermit70.html#x7.23
- 309. http://www.columbia.edu/kermit/ckermit70.html#x7.24
- 310. http://www.columbia.edu/kermit/ckermit70.html#x7.25
- 311. http://www.columbia.edu/kermit/ckermit70.html#x7.26
- 312. http://www.columbia.edu/kermit/ckermit70.html#x7.26.1
- 313. http://www.columbia.edu/kermit/ckermit70.html#x7.26.2
- 314. http://www.columbia.edu/kermit/ckermit70.html#x7.27
- 315. http://www.columbia.edu/kermit/ckermit70.html#x8
- 316. http://www.columbia.edu/kermit/ckermit70.html#x9
- 317. http://www.columbia.edu/kermit/ckermit70.html#x9.0
- 318. http://www.columbia.edu/kermit/ckermit70.html#x9.1
- 319. http://www.columbia.edu/kermit/ckermit70.html#x9.2
- 320. http://www.columbia.edu/kermit/ckermit70.html#x9.3
- 321. http://www.columbia.edu/kermit/ckermit70.html#x10
- 322. http://www.columbia.edu/kermit/ckermit70.html#xiii
- 323. http://www.columbia.edu/kermit/ckermit70.html#xiii.1
- 324. http://www.columbia.edu/kermit/ckermit70.html#xiii.1.1
- 325. http://www.columbia.edu/kermit/ckermit70.html#xiii.1.2
- 326. http://www.columbia.edu/kermit/ckermit70.html#xiii.1.2.1
- 327. http://www.columbia.edu/kermit/ckermit70.html#xiii.1.2.2
- 328. http://www.columbia.edu/kermit/ckermit70.html#xiii.1.2.3
- 329. http://www.columbia.edu/kermit/ckermit70.html#xiii.2
- 330. http://www.columbia.edu/kermit/ckermit70.html#xiv
- 331. http://www.columbia.edu/kermit/ckermit70.html#xv
- 332. http://www.columbia.edu/kermit/ckb2.htm
- 333. http://www.columbia.edu/kermit/ckbreviews.html
- 334. http://www.bhusa.com/
- 335. http://www.columbia.edu/kermit/manuals.html#ckde
- 336. http://www.columbia.edu/kermit/manuals.html#ktb
- 337. http://www.columbia.edu/kermit/news.html
- 338. news:comp.protocols.kermit.announce
- 339. news:comp.protocols.kermit.misc
- 340. http://www.columbia.edu/kermit/ckb2.htm
- 341. http://www.columbia.edu/kermit/ckermit70.html#x4
- 342. http://www.columbia.edu/kermit/ckermit70.html#x4.3
- 343. http://www.columbia.edu/kermit/ckermit70.html#x4.23
- 344. http://www.columbia.edu/kermit/ckermit70.html#x4.5.1
- 345. http://www.columbia.edu/kermit/ckermit70.html#x1.5
- 346. http://www.columbia.edu/kermit/ckermit70.html#x4.7.1
- 347. http://www.columbia.edu/kermit/ckermit70.html#x4.9.
- 348. http://www.columbia.edu/kermit/ckb2.htm
- 349. http://www.columbia.edu/kermit/ckermit70.html#x7.9.2
- 350. http://www.columbia.edu/kermit/ckermit70.html#x2.15
- 351. http://www.columbia.edu/kermit/ckermit70.html#x9.1
- 352. http://www.columbia.edu/kermit/ckermit70.html#x1.6
- 353. http://www.columbia.edu/kermit/ckermit70.html#x7.4
- 354. http://www.columbia.edu/kermit/ckermit70.html#x4.9.1
- 355. http://www.columbia.edu/kermit/ckermit70.html#mjd
- 356. http://www.columbia.edu/kermit/ckermit70.html#mjd
- 357. http://www.columbia.edu/kermit/ckermit70.html#x4.9
- 358. http://www.columbia.edu/kermit/ckb2.htm
- 359. http://www.columbia.edu/kermit/ckb2.htm
- 360. http://www.columbia.edu/kermit/ckermit70.html#x7.5
- 361. http://www.columbia.edu/kermit/ckermit70.html#x2.12
- 362. http://www.columbia.edu/kermit/ckermit70.html#x1.5
- 363. http://www.columbia.edu/kermit/ckermit70.html#x4.9.1
- 364. http://www.columbia.edu/kermit/ckermit70.html#x6.6.5
- 365. http://www.columbia.edu/kermit/ckermit70.html#x4.9
- 366. http://www.columbia.edu/kermit/ckermit70.html#x7.18
- 367. http://www.columbia.edu/kermit/ckermit70.html#x7.4
- 368. http://www.columbia.edu/kermit/ckermit70.html#x1.15
- 369. http://www.columbia.edu/kermit/ckermit70.html#x4.3
- 370. http://www.columbia.edu/kermit/ckermit70.html#x7.3
- 371. http://www.columbia.edu/kermit/ckermit70.html#x7.10.7
- 372. http://www.columbia.edu/kermit/ckermit70.html#x7.1
- 373. http://www.columbia.edu/kermit/ckermit70.html#x4.9.1
- 374. ftp://kermit.columbia.edu/kermit/f/ckccfg.txt
- 375. ftp://kermit.columbia.edu/kermit/f/ckccfg.txt
- 376. http://www.columbia.edu/kermit/ckermit70.html#x1.22.4
- 377. http://www.columbia.edu/kermit/ckermit70.html#x1.22.5
- 378. http://www.columbia.edu/kermit/ckb2.htm
- 379. http://www.columbia.edu/kermit/ckermit70.html#x1.22.5
- 380. http://www.columbia.edu/kermit/ckermit70.html#x7.12
- 381. http://www.columbia.edu/kermit/ckermit70.html#x2.1.16
- 382. http://www.columbia.edu/kermit/ckermit70.html#x2.7
- 383. http://www.columbia.edu/kermit/ckermit70.html#x2.3.5
- 384. http://www.columbia.edu/kermit/ckermit70.html#x7.5
- 385. http://www.telefonica.es/cambiodenumeracion/
- 386. http://www.columbia.edu/kermit/ckermit70.html#x7.5
- 387. http://www.columbia.edu/kermit/ckb2.htm
- 388. http://www.columbia.edu/kermit/ckermit70.html#x2.2.2
- 389. http://www.columbia.edu/kermit/ckermit70.html#x2.1.11
- 390. http://www.columbia.edu/kermit/ckermit70.html#x2.1.13
- 391. http://www.columbia.edu/kermit/ckermit70.html#x2.1.12
- 392. http://www.columbia.edu/kermit/ckb2.htm
- 393. http://www.columbia.edu/kermit/ckermit70.html#x2.1.1
- 394. http://www.columbia.edu/kermit/ckb2.htm
- 395. http://www.columbia.edu/kermit/ckb2.htm
- 396. http://www.columbia.edu/kermit/ckermit70.html#x2.1.7
- 397. http://www.columbia.edu/kermit/ckermit70.html#x2.1.6
- 398. http://www.columbia.edu/kermit/ckb2.htm
- 399. ftp://kermit.columbia.edu/kermit/f/telnet.txt
- 400. http://www.columbia.edu/kermit/telnet.htm
- 401. ftp://kermit.columbia.edu/kermit/f/telnet.txt
- 402. http://www.columbia.edu/kermit/telnet.htm
- 403. ftp://ftp.isi.edu/in-notes/rfc1572.txt
- 404. ftp://ftp.isi.edu/in-notes/rfc779.txt
- 405. http://www.columbia.edu/kermit/ckb2.htm
- 406. http://www.columbia.edu/kermit/ckermit70.html#x2.10
- 407. http://www.columbia.edu/kermit/ckermit70.html#x2.8
- 408. http://www.columbia.edu/kermit/ckermit70.html#x1.5
- 409. http://www.columbia.edu/kermit/ckermit70.html#x4.20
- 410. http://www.psy.uq.oz.au/~ftp/Crypto/
- 411. http://www.columbia.edu/kermit/security.htm
- 412. http://srp.stanford.edu/srp/
- 413. http://www.columbia.edu/kermit/ckermit70.html#x2.7.1,
- 414. ftp://kermit.columbia.edu/kermit/f/ckccfg.txt
- 415. http://www.columbia.edu/kermit/security.htm
- 416. http://www.columbia.edu/kermit/ckb2.htm
- 417. http://www.columbia.edu/kermit/ckermit70.html#x2.7
- 418. http://www.columbia.edu/kermit/ckermit70.html#x2.0
- 419. ftp://kermit.columbia.edu/kermit/f/ckuins.txt
- 420. ftp://kermit.columbia.edu/kermit/f/ckubwr.txt
- 421. ftp://kermit.columbia.edu/kermit/f/ckuins.txt
- 422. http://www.columbia.edu/kermit/iksd.html#x4.2
- 423. http://www.columbia.edu/kermit/iksd.html
- 424. http://www.columbia.edu/kermit/ckermit70.html#x4.2.8.1
- 425. ftp://ftp.isi.edu/in-notes/rfc1945.txt
- 426. http://www.columbia.edu/kermit/ckermit70.html#x1.5
- 427. http://www.columbia.edu/kermit/ckermit70.html#x3.2
- 428. http://www.columbia.edu/kermit/ckermit70.html#x3.2
- 429. http://www.columbia.edu/kermit/ckb2.htm
- 430. http://www.columbia.edu/kermit/ckb2.htm
- 431. http://www.columbia.edu/kermit/ckermit70.html#x5.4
- 432. ftp://kermit.columbia.edu/kermit/f/ckubwr.txt
- 433. http://www.columbia.edu/kermit/ckermit70.html#x4.10
- 434. http://www.columbia.edu/kermit/ckermit70.html#x4.7.1
- 435. http://www.columbia.edu/kermit/ckermit70.html#x4.7.3
- 436. http://www.columbia.edu/kermit/ckermit70.html#x4.3
- 437. http://www.columbia.edu/kermit/ckermit70.html#x4.10
- 438. http://www.columbia.edu/kermit/ckermit70.html#x4.11
- 439. http://www.columbia.edu/kermit/ckermit70.html#x4.15
- 440. http://www.columbia.edu/kermit/ckermit70.html#x4.2.4
- 441. http://www.columbia.edu/kermit/ckermit70.html#x4.7
- 442. http://www.columbia.edu/kermit/ckermit70.html#x4.2.3
- 443. http://www.columbia.edu/kermit/ckermit70.html#x4.2.1.3
- 444. http://www.columbia.edu/kermit/ckb2.htm
- 445. http://www.columbia.edu/kermit/ckermit70.html#x4.2.2
- 446. http://www.columbia.edu/kermit/ckermit70.html#x1.5
- 447. http://www.columbia.edu/kermit/ckermit70.html#x4.2.8.2
- 448. http://www.columbia.edu/kermit/ckermit70.html#x4.3
- 449. http://www.columbia.edu/kermit/ckermit70.html#x4.10
- 450. http://www.columbia.edu/kermit/ckermit70.html#x4.11
- 451. http://www.columbia.edu/kermit/ckermit70.html#x4.15
- 452. http://www.telstra.com.au/docs/PGP/
- 453. http://www.telstra.com.au/docs/PGP/pgpdoc2/pgpdoc2_17.html
- 454. http://www.columbia.edu/kermit/security.htm
- 455. http://www.columbia.edu/kermit/ckermit70.html#x2.7
- 456. http://www.columbia.edu/kermit/ckb2.htm
- 457. http://www.columbia.edu/kermit/ckermit70.html#x2.14
- 458. http://www.columbia.edu/kermit/ckermit70.html#x1.23
- 459. http://www.columbia.edu/kermit/ckermit70.html#x4.7
- 460. http://www.columbia.edu/kermit/ckb2.htm
- 461. http://www.columbia.edu/kermit/ckb2.htm
- 462. http://www.columbia.edu/kermit/ckermit70.html#x4.9
- 463. http://www.columbia.edu/kermit/ckb2.htm
- 464. http://www.columbia.edu/kermit/ckermit70.html#x1.5.4
- 465. http://www.columbia.edu/kermit/ckermit70.html#x4.3
- 466. http://www.columbia.edu/kermit/ckermit70.html#x1.5.5
- 467. http://www.columbia.edu/kermit/ckermit70.html#x7.5
- 468. http://www.columbia.edu/kermit/ckermit70.html#x4.9
- 469. http://www.columbia.edu/kermit/ckermit70.html#x1.5.4
- 470. http://www.columbia.edu/kermit/ckermit70.html#x4.9
- 471. http://www.columbia.edu/kermit/ckermit70.html#x1.5.4
- 472. http://www.columbia.edu/kermit/ckermit70.html#x1.5.5
- 473. http://www.columbia.edu/kermit/ckb2.htm
- 474. http://www.columbia.edu/kermit/ckb2.htm
- 475. http://www.columbia.edu/kermit/ckermit70.html#x1.5
- 476. http://www.columbia.edu/kermit/ckermit70.html#x1.6
- 477. http://www.columbia.edu/kermit/ckermit70.html#x7.10
- 478. http://www.columbia.edu/kermit/ckermit70.html#x7.10.11
- 479. http://www.columbia.edu/kermit/ckermit70.html#x1.6
- 480. http://www.columbia.edu/kermit/ckermit70.html#x4.2.2
- 481. http://www.columbia.edu/kermit/ckermit70.html#x4.11
- 482. http://www.columbia.edu/kermit/ckermit70.html#x1.5.4
- 483. http://www.columbia.edu/kermit/ckermit70.html#x4.9.1
- 484. http://www.columbia.edu/kermit/ckermit70.html#x4.0.6
- 485. http://www.columbia.edu/kermit/ckermit70.html#x4.2
- 486. http://www.columbia.edu/kermit/ckermit70.html#x4.1
- 487. http://www.columbia.edu/kermit/ckermit70.html#x4.7.1
- 488. http://www.columbia.edu/kermit/ckb2.htm
- 489. http://www.columbia.edu/kermit/ckermit70.html#x1.5
- 490. http://www.columbia.edu/kermit/ckermit70.html#x4.2.2
- 491. http://www.columbia.edu/kermit/ckermit70.html#x4.7.1
- 492. http://www.columbia.edu/kermit/ckermit70.html#x4.2
- 493. http://www.columbia.edu/kermit/ckermit70.html#x4.10
- 494. http://www.columbia.edu/kermit/ckermit70.html#x4.2.2
- 495. http://www.columbia.edu/kermit/ckermit70.html#x4.7.1
- 496. http://www.columbia.edu/kermit/ckermit70.html#x4.2
- 497. http://www.columbia.edu/kermit/ckermit70.html#x4.10
- 498. http://www.columbia.edu/kermit/ckermit70.html#x1.11.5
- 499. http://www.columbia.edu/kermit/ckermit70.html#x4.0.6
- 500. http://www.columbia.edu/kermit/ckermit70.html#x4.11
- 501. http://www.columbia.edu/kermit/ckermit70.html#x4.9.1
- 502. http://www.columbia.edu/kermit/ckermit70.html#x4.11.3
- 503. http://www.columbia.edu/kermit/ckermit70.html#x4.9
- 504. http://www.columbia.edu/kermit/ckermit70.html#x4.9
- 505. http://www.columbia.edu/kermit/ckermit70.html#x4.5.1
- 506. http://www.columbia.edu/kermit/ckermit70.html#x7.10
- 507. http://www.columbia.edu/kermit/ckermit70.html#x7.10.5
- 508. http://www.columbia.edu/kermit/ckermit70.html#x7.10.3
- 509. http://www.columbia.edu/kermit/ckermit70.html#x7.10.5
- 510. http://www.columbia.edu/kermit/ckb2.htm
- 511. http://www.columbia.edu/kermit/ckermit70.html#x4.3
- 512. http://www.columbia.edu/kermit/ckermit70.html#x4.10
- 513. http://www.columbia.edu/kermit/ckermit70.html#x4.3
- 514. http://www.columbia.edu/kermit/ckermit70.html#x4.10
- 515. http://www.columbia.edu/kermit/ckermit70.html#x4.15
- 516. http://www.columbia.edu/kermit/ckermit70.html#x4.18
- 517. http://www.columbia.edu/kermit/ckermit70.html#x4.20
- 518. http://www.columbia.edu/kermit/ckermit70.html#x4.20
- 519. http://www.columbia.edu/kermit/ckermit70.html#x4.20
- 520. http://www.columbia.edu/kermit/ckermit70.html#x4.19
- 521. http://www.columbia.edu/kermit/ckermit70.html#x4.16
- 522. http://www.columbia.edu/kermit/ckermit70.html#x4.19
- 523. http://www.columbia.edu/kermit/ckermit70.html#x4.20.2.3
- 524. http://www.columbia.edu/kermit/ckermit70.html#x1.5
- 525. http://www.columbia.edu/kermit/ckermit70.html#x6.6.5.4
- 526. http://www.columbia.edu/kermit/ckermit70.html#x4.22.2
- 527. http://www.columbia.edu/kermit/ckermit70.html#x4.22.3
- 528. http://www.columbia.edu/kermit/ckb2.htm
- 529. http://www.columbia.edu/kermit/ckb2.htm
- 530. http://www.columbia.edu/kermit/ckermit70.html#x9.3
- 531. http://www.columbia.edu/kermit/ckermit70.html#x5.2.1
- 532. http://www.columbia.edu/kermit/ckermit70.html#x4.5.1
- 533. http://www.columbia.edu/kermit/ckermit70.html#x4.5.2
- 534. http://www.columbia.edu/kermit/ckermit70.html#x6.6
- 535. http://www.columbia.edu/kermit/ckermit70.html#xiii
- 536. http://www.columbia.edu/kermit/ckermit70.html#xiii
- 537. ftp://ftp.isi.edu/in-notes/rfc1489.txt
- 538. ftp://ftp.isi.edu/in-notes/rfc2319.txt
- 539. http://www.unicode.org/
- 540. http://www.columbia.edu/kermit/ckermit70.html#x6.6.2
- 541. http://www.columbia.edu/kermit/ckermit70.html#x6.6.5.1
- 542. ftp://ftp.isi.edu/in-notes/rfc2640.txt
- 543. http://www.columbia.edu/kermit/ckermit70.html#x6.6.2
- 544. http://www.columbia.edu/kermit/ckermit70.html#x6.0
- 545. http://www.columbia.edu/kermit/ckermit70.html#x6.5
- 546. http://www.columbia.edu/kermit/ckermit70.html#x6.4
- 547. http://www.columbia.edu/kermit/ckb2.htm
- 548. http://www.columbia.edu/kermit/ckermit70.html#x4.21
- 549. http://www.columbia.edu/kermit/ckermit70.html#x6.5
- 550. http://www.columbia.edu/kermit/ckermit70.html#x2.8
- 551. http://www.columbia.edu/kermit/ckermit70.html#x7.7
- 552. http://www.columbia.edu/kermit/ckermit70.html#x7.2
- 553. http://www.columbia.edu/kermit/ckermit70.html#x1.19
- 554. http://www.columbia.edu/kermit/ckermit70.html#x4.9
- 555. http://www.columbia.edu/kermit/ckermit70.html#x4.1
- 556. http://www.columbia.edu/kermit/ckermit70.html#x4.2
- 557. http://www.columbia.edu/kermit/ckermit70.html#x4.1
- 558. http://www.columbia.edu/kermit/ckermit70.html#x4.2
- 559. http://www.columbia.edu/kermit/ckermit70.html#x2.1.11
- 560. http://www.columbia.edu/kermit/ckermit70.html#x2.10
- 561. http://www.columbia.edu/kermit/ckermit70.html#ferrstring
- 562. http://www.columbia.edu/kermit/ckermit70.html#x4.2.5
- 563. http://www.columbia.edu/kermit/ckermit70.html#x2.1.10
- 564. http://www.columbia.edu/kermit/ckermit70.html#x9.1
- 565. http://www.columbia.edu/kermit/ckermit70.html#x7.23
- 566. http://www.columbia.edu/kermit/ckermit70.html#x7.23
- 567. http://www.columbia.edu/kermit/ckermit70.html#x1.22
- 568. http://www.columbia.edu/kermit/ckermit70.html#x1.6
- 569. http://www.columbia.edu/kermit/ckermit70.html#x7.23
- 570. http://www.columbia.edu/kermit/ckermit70.html#x7.24
- 571. http://www.columbia.edu/kermit/ckermit70.html#x7.24
- 572. http://www.columbia.edu/kermit/ckermit70.html#x4.2.3
- 573. http://www.columbia.edu/kermit/ckermit70.html#x7.12
- 574. http://www.columbia.edu/kermit/ckermit70.html#x7.9
- 575. http://www.columbia.edu/kermit/ckb2.htm
- 576. http://www.columbia.edu/kermit/ckermit70.html#x4.11.3
- 577. http://www.columbia.edu/kermit/ckermit70.html#x4.11.3
- 578. http://www.columbia.edu/kermit/ckermit70.html#x7.5
- 579. http://www.columbia.edu/kermit/ckermit70.html#x7.10.7
- 580. http://www.columbia.edu/kermit/ckermit70.html#x7.10.7
- 581. http://www.columbia.edu/kermit/ckermit70.html#x4.2.8.4
- 582. http://www.columbia.edu/kermit/ckermit70.html#x4.2.5
- 583. http://www.columbia.edu/kermit/ckermit70.html#x7.8
- 584. http://www.columbia.edu/kermit/ckermit70.html#x4.9.1
- 585. http://www.columbia.edu/kermit/ckb2.htm
- 586. http://www.columbia.edu/kermit/ckermit70.html#x7.19
- 587. http://www.columbia.edu/kermit/ckermit70.html#x7.16
- 588. http://www.columbia.edu/kermit/ckermit70.html#x7.9.1
- 589. http://www.columbia.edu/kermit/ckermit70.html#x7.5
- 590. http://www.columbia.edu/kermit/ckermit70.html#x7.3
- 591. http://www.columbia.edu/kermit/ckermit70.html#x4.11.3
- 592. http://www.columbia.edu/kermit/ckermit70.html#x4.5.1
- 593. http://www.columbia.edu/kermit/ckermit70.html#x7.10
- 594. http://www.columbia.edu/kermit/ckermit70.html#x7.10.10
- 595. http://www.columbia.edu/kermit/ckermit70.html#x1.5
- 596. http://www.columbia.edu/kermit/ckermit70.html#x7.23
- 597. http://www.columbia.edu/kermit/ckermit70.html#x7.10.7
- 598. http://www.columbia.edu/kermit/ckermit70.html#x7.10.7
- 599. http://www.columbia.edu/kermit/ckermit70.html#x4.11.3
- 600. http://www.columbia.edu/kermit/ckermit70.html#x7.10.11
- 601. http://www.columbia.edu/kermit/ckermit70.html#x4.9
- 602. http://www.columbia.edu/kermit/ckermit70.html#x7.10.3
- 603. http://www.columbia.edu/kermit/ckermit70.html#x7.3
- 604. http://www.columbia.edu/kermit/ckermit70.html#x7.9.2
- 605. http://www.columbia.edu/kermit/ckb2.htm
- 606. http://www.columbia.edu/kermit/ckermit70.html#x4.17.2
- 607. http://www.columbia.edu/kermit/ckermit70.html#x1.22
- 608. http://www.columbia.edu/kermit/ckermit70.html#x4.7.1
- 609. http://www.columbia.edu/kermit/ckermit70.html#x1.22
- 610. http://www.columbia.edu/kermit/ckermit70.html#x4.3
- 611. http://www.columbia.edu/kermit/ckermit70.html#x4.9
- 612. http://www.columbia.edu/kermit/ckermit70.html#x1.22
- 613. http://www.columbia.edu/kermit/ckermit70.html#x1.6
- 614. http://www.columbia.edu/kermit/ckermit70.html#x7.5
- 615. http://www.columbia.edu/kermit/ckermit70.html#x7.5
- 616. http://www.columbia.edu/kermit/ckermit70.html#x7.19
- 617. http://www.columbia.edu/kermit/ckermit70.html#x4.9.1
- 618. http://www.columbia.edu/kermit/ckermit70.html#x9.3
- 619. http://www.columbia.edu/kermit/ckermit70.html#x7.5
- 620. http://www.columbia.edu/kermit/ckb2.htm
- 621. http://www.columbia.edu/kermit/ckermit70.html#x7.4
- 622. http://www.columbia.edu/kermit/ckermit70.html#x7.20.2
- 623. http://www.columbia.edu/kermit/ckermit70.html#x7.10.5
- 624. http://www.columbia.edu/kermit/ckermit70.html#x7.10.9
- 625. http://www.columbia.edu/kermit/ckermit70.html#x1.10
- 626. http://www.columbia.edu/kermit/ckermit70.html#x1.5
- 627. http://www.columbia.edu/kermit/ckermit70.html#x4.7.1
- 628. http://www.columbia.edu/kermit/iksd.html
- 629. http://www.columbia.edu/kermit/ckermit70.html#x7.19
- 630. http://www.columbia.edu/kermit/ckermit70.html#x4.10
- 631. http://www.columbia.edu/kermit/ckermit70.html#x4.11
- 632. http://www.columbia.edu/kermit/ckermit70.html#x4.3
- 633. http://www.columbia.edu/kermit/gkermit.html
- 634. http://www.columbia.edu/kermit/ckermit70.html#x4.20
- 635. http://www.columbia.edu/kermit/gkermit.html
- 636. http://www.columbia.edu/kermit/ckb2.htm
- 637. http://www.columbia.edu/kermit/ckermit70.html#x7.3
- 638. mailto:kermit@columbia.edu
- 639. http://www.columbia.edu/kermit/ckermit70.html#top
- 640. http://www.columbia.edu/kermit/ckermit.html
- 641. http://www.columbia.edu/kermit/index.html