ckermit2.txt
上传用户:dufan58
上传日期:2007-01-05
资源大小:3407k
文件大小:668k
源码类别:

通讯/手机编程

开发平台:

Windows_Unix

  1. File CKERMIT2.TXT, Supplement to "Using C-Kermit", Second Edition
  2.   D R A F T
  3. As of C-Kermit version:  7.0.197
  4. This file last updated:  8 February 2000
  5. Authors: Frank da Cruz and Christine M. Gianone
  6. Address: The Kermit Project
  7.          Columbia University
  8.          612 West 115th Street
  9.          New York NY 10025-7799
  10.          USA
  11. Fax:     +1 (212) 662-6442
  12. E-Mail:  kermit-support@columbia.edu
  13. Web:     http://www.columbia.edu/kermit/
  14. Or:      http://www.kermit-project.org/
  15. Or:      http://www.columbia.nyc.ny.us/kermit/
  16. NOTICES:
  17. This document:
  18.   Copyright (C) 1997, 2000, Frank da Cruz and Christine M. Gianone.
  19.   All rights reserved.
  20. Kermit 95:
  21.   Copyright (C) 1995, 2000, Trustees of Columbia University in the City of
  22.   New York.  All rights reserved.
  23. C-Kermit:
  24.   Copyright (C) 1985, 2000,
  25.     Trustees of Columbia University in the City of New York.
  26.     All rights reserved.  See the C-Kermit COPYING.TXT file or the
  27.     copyright text in the ckcmai.c module for disclaimer and permissions.
  28. When Kerberos(TM) and/or SRP(TM) (Secure Remote Password) and/or SSL
  29. protocol are included:
  30.   Portions Copyright (C) 1990, Massachusetts Institute of Technology.
  31.   Portions Copyright (C) 1991, 1993 Regents of the University of California.
  32.   Portions Copyright (C) 1991, 1992, 1993, 1994, 1995 by AT&T.
  33.   Portions Copyright (C) 1997, Stanford University.
  34.   Portions Copyright (C) 1995-1997, Eric Young <eay@cryptosoft.com>.
  35. For the full text of the third-party copyright notices, see Appendix V.
  36. ------------------------------
  37. WHAT IS IN THIS FILE
  38. This file lists changes made to C-Kermit since the second edition of the book
  39. "Using C-Kermit" was published and C-Kermit 6.0 was released in November 1996.
  40. Use this file as a supplement to the second edition of "Using C-Kermit" until
  41. the third edition is published some time in 2000.  If the "most recent update"
  42. shown above is long ago, contact Columbia University to see if there is a
  43. newer release.
  44. For further information, also see the CKCBWR.TXT ("C-Kermit beware") file for
  45. hints, tips, tricks, restrictions, frequently asked questions, etc, plus the
  46. system-specific "beware file", e.g. CKUBWR.TXT for UNIX, CKVBWR.TXT for VMS,
  47. etc, and also any system-specific update files such as KERMIT95.HTM for Kermit
  48. 95 (in the DOCSMANUAL subdirectory of your K95 directory).
  49. IMPORTANT: A major new feature of C-Kermit 7.0 is its ability to be an
  50. Internet Kermit Services Daemon (IKSD), as well as an IKSD client.  All of
  51. this is described in a separate file, IKSD.TXT.
  52. ---------------
  53. ABOUT FILENAMES
  54. In this document, filenames are generally shown in uppercase, but on file
  55. systems with case-sensitive names such as UNIX, OS-9, and AOS/VS, lowercase
  56. names are used: ckcbwr.txt, ckermit2.txt, etc.
  57. ----------------
  58. ADDITIONAL FILES
  59. Several other files accompany this new Kermit release:
  60. SECURITY.TXT
  61.   Discussion of Kermit's new authentication and encryption features.
  62. IKSD.TXT
  63.   How to install and manage an Internet Kermit Service Daemon.
  64. TELNET.TXT
  65.   A thorough presentation of Kermit's new advanced Telnet features and
  66.   controls.
  67. ------------------------
  68. THE NEW C-KERMIT LICENSE
  69. The C-Kermit license was rewritten for version 7.0 to grant automatic
  70. permission to packagers of free operating-system distributions to include
  71. C-Kermit 7.0.  Examples include Linux (GNU/Linux), FreeBSD, NetBSD, etc.
  72. The new license is in the COPYING.TXT file, and is also displayed by C-Kermit
  73. itself when you give the VERSION or COPYRIGHT command.  The new C-Kermit
  74. license does not apply to Kermit 95.
  75. ---------------
  76. ACKNOWLEDGMENTS
  77. Thanks to Jeff Altman, who joined the Kermit Project in 1995, for much of what
  78. you see in C-Kermit 7.0, especially in the networking and security areas, and
  79. his key role in designing and implementing the Internet Kermit Service Daemon.
  80. And special thanks to Lucas Hart for lots of help with the VMS version; to
  81. Peter Eichhorn for continuous testing on the full range of HP-UX versions and
  82. for a consolidated set of HP-UX makefile targets; and to Colin Allen, Mark
  83. Allen, Roger Allen, Ric Anderson, William Bader, Mitch Baker, Mitchell Bass,
  84. Nelson Beebe, Gerry Belanger, Jeff Bernsten, Mark Berryman, John Bigg, Volker
  85. Borchert, Jonathan Boswell, Tim Boyer, Frederick Bruckman, Kenneth Cochran,
  86. Jared Crapo, Bill Delaney, Igor Sobrado Delgado, Clarence Dold, Joe Doupnik,
  87. John Dunlap, Max Evarts, Patrick French, Carl Friedberg, Carl Friend, Hirofumi
  88. Fujii, Andrew Gabriel, Gabe Garza, Boyd Gerber, David Gerber, George Gilmer,
  89. Hunter Goatley, DJ Hagberg, Kevin Handy, Andy Harper, Randolph Herber, Sven
  90. Holstrum, Michal Jaegermann, Graham Jenkins, Dick Jones, Terry Kennedy, Robert
  91. D Keys, Nick Kisseberth, Igor Kovalenko, David Lane, Adam Laurie, Jeff
  92. Liebermann, Eric Lonvick, Hoi Wan Louis, Arthur Marsh, Gregorie Martin, Peter
  93. Mauzey, Dragan Milicic, Todd Miller, Christian Mondrup, Daniel Morato, Dat
  94. Nguyen, Herb Peyerl, Jean-Pierre Radley, Mitchell Pilot, Steve Rance, Stephen
  95. Riehm, Nigel Roles, Larry Rosenman, Jay S Rouman, David Sanderson, John
  96. Santos, Michael Schmitz, Steven Schultz, Bob Shair, Richard Shuford, Fred
  97. Smith, Michael Sokolov, Jim Spath, Peter Szell, Ted T'so, Brian Tillman, Linus
  98. Torvalds, Patrick Volkerding, Martin Vorlaender, Steve Walton, Ken Weaverling,
  99. John Weekley, Martin Whitaker, Jim Whitby, Matt Willman, Joellen Windsor,
  100. Farrell Woods, and many others for binaries, hosting, reviews, suggestions,
  101. advice, bug reports, and all the rest over the 3+ year C-Kermit 7.0
  102. development cycle.  Thanks to Russ Nelson and the board of the Open Software
  103. Initiative for their cooperation in developing the new C-Kermit license and to
  104. the proprietors of those free UNIX distributions that have incorporated
  105. C-Kermit 7.0 for their cooperation and support, especially FreeBSD's Joerg
  106. Wunsch.
  107. -----------------------
  108. NOTE TO KERMIT 95 USERS
  109. Like the book "Using C-Kermit", this file concentrates on the aspects of
  110. C-Kermit that are common to all versions: UNIX, VMS, VOS, AOS/VS, etc.  Please
  111. refer to your Kermit 95 documentation for information that is specific to
  112. Kermit 95.
  113. C-Kermit 7.0 corresponds to Kermit 95 1.1.18.
  114. -------------------------------------
  115. C-KERMIT VERSIONS AND VERSION NUMBERS
  116. "C-Kermit" refers to all the many programs that are compiled in whole or in
  117. part from common C-language source code, comprising:
  118.  . A Kermit file transfer protocol module
  119.  . A command parser and script execution module
  120.  . A modem-dialing module
  121.  . A network support module
  122.  . A character-set translation module.
  123. and several others.  These "system-independent" modules are combined with
  124. system-dependent modules for each platform to provide the required
  125. input/output functions, and also in some cases overlaid with an alternative
  126. user interface, such as Macintosh Kermit's point-and-click interface, and in
  127. some cases also a terminal emulator, as Kermit 95.
  128. The C-Kermit version number started as 1.0, ... 3.0, 4.0, 4.1 and then
  129. (because of confusion at the time with Berkeley UNIX 4.2), 4B, 4C, and so on,
  130. with the specific edit number in parentheses, for example 4E(072) or 5A(188).
  131. This scheme was used through 5A(191), but now we have gone back to the
  132. traditional numbering scheme with decimal points:  major.minor.edit; for
  133. example 7.0.196.  Internal version numbers (the v(version) variable),
  134. however, are compatible in C-Kermit 5A upwards.
  135. Meanwhile, C-Kermit derivatives for some platforms (Windows, Macintosh) might
  136. go through several releases while C-Kermit itself remains the same.  These
  137. versions have their own platform-specific version numbers, such as Kermit 95
  138. 1.1.1, 1.1.2, and so on.
  139. C-Kermit Version History:
  140.   1.0       1981-1982         Command-line only, 4.2 BSD UNIX only
  141.   2.0       (*)               (who remembers...)
  142.   3.0       May 1984          Command-line only, supports several platforms
  143.   4.0-4.1   Feb-Apr 1985 (*)  First interactive and modular version
  144.   4C(050)   May 1985
  145.   4D(060)   April 1986
  146.   4E(066)   August 1987       Long packets
  147.   4E(068)   January 1988
  148.   4E(072)   January 1989
  149.   4F(095)   August 1989 (*)   Attribute packets
  150.   5A(188)   November 1992     Scripting, TCP/IP, sliding windows, ANSI C (1)
  151.   5A(189)   September 1993    Control-char unprefixing
  152.   5A(190)   October 1994      Recovery
  153.   5A(191)   April 1995        OS/2 only - VT220 emulation
  154.   6.0.192   September 1996    Intelligent dialing, autodownload, lots more (2)
  155.   6.1.193   1997-98 (*)       Development only
  156.   6.1.194   June 1998         K95 only - switches, directory recursion, more
  157.   7.0.195   August 1999       IKSD + more (CU only as K95 1.1.18-CU)
  158.   7.0.196   1 January 2000    Unicode, lots more
  159.   7.0.197   8 February 2000   Same as 196 but builds on additional platforms(3)
  160. (*) Never formally released (4.0 was a total rewrite)
  161. (1) "Using C-Kermit", 1st Edition.
  162. (2) "Using C-Kermit", 2nd Edition.
  163. (3) There is no functional difference between 196 and 197, not even bug fixes.
  164.     The only changes are to #ifdefs, declarations, and the makefile, sufficient
  165.     to make it build on several platforms where 196 did not build.  Binaries
  166.     that announce themselves as 197 are functionally identical to 196 binaries.
  167. ------------------------------
  168. CONTENTS
  169.  I.  C-KERMIT DOCUMENTATION: Information about the C-Kermit manual
  170.  II. NEW FEATURES: Documentation for Features Added Since C-Kermit 6.0
  171.      (0) INCOMPATIBILITIES WITH PREVIOUS RELEASES
  172.      (1) PROGRAM AND FILE MANAGEMENT AND COMMANDS
  173.          1.0.  Bug fixes
  174.          1.1.  Command Continuation
  175.          1.2.  Editor Interface
  176.          1.3.  Web Browser and FTP Interface
  177.          1.4.  Command Editing
  178.          1.5.  Command Switches
  179.                1.5.1. General Switch Syntax
  180.                1.5.2. Order and Effect of Switches
  181.                1.5.3. Distinguishing Switches from Other Fields
  182.                1.5.4. Standard File Selection Switches
  183.                1.5.5. Setting Preferences for Different Commands
  184.          1.6.  Dates and Times
  185.          1.7.  Partial Completion of Keywords
  186.          1.8.  Command Recall
  187.          1.9.  EXIT Messages
  188.          1.10. Managing Keyboard Interruptions
  189.          1.11. Taming the Wild Backslash -- Part Deux
  190.        1.11.1. Background
  191.        1.11.2. Kermit's Quoting Rules
  192.                1.11.3. Passing DOS Filenames from Kermit to Shell Commands
  193.        1.11.4. Using Variables to Hold DOS Filenames
  194.        1.11.5. Passing DOS Filenames as Parameters to Macros
  195.        1.11.6. Passing DOS File Names from Macro Parameters to
  196.                        the DOS Shell
  197.                1.11.7. Passing DOS Filenames to Kermit from the Shell
  198.          1.12. Debugging
  199.          1.13. Logs
  200.          1.14. Automatic File-Transfer Packet Recognition at the Command Prompt
  201.          1.15. The TYPE Command
  202.          1.16. The RESET Command
  203.          1.17. The COPY and RENAME Commands
  204.          1.18. The MANUAL Command
  205.          1.19. String and Filename Matching Patterns
  206.          1.20. Multiple Commands on One Line
  207.          1.21. What Do I Have?
  208.          1.22. Generalized File Input and Output
  209.        1.22.1. Why Another I/O System?
  210.        1.22.2. The FILE Command
  211.        1.22.3. FILE Command Examples
  212.        1.22.4. Channel Numbers
  213.        1.22.5. FILE Command Error Codes
  214.        1.22.6. File I/O Variables
  215.        1.22.7. File I/O Functions
  216.        1.22.8. File I/O Function Examples
  217.          1.23. The EXEC Command
  218.          1.24. Getting Keyword Lists with '?'
  219.      (2) MAKING AND USING CONNECTIONS
  220.          2.0. SET LINE and SET HOST Command Switches
  221.  2.1. Dialing
  222.       2.1.1. The Dial Result Message
  223.       2.1.2. Long-Distance Dialing Changes
  224.       2.1.3. Forcing Long-Distance Dialing
  225.       2.1.4. Exchange-Specific Dialing Decisions
  226.       2.1.5. Cautions about Cheapest-First Dialing
  227.       2.1.6. Blind Dialing (Dialing with No Dialtone)
  228.               2.1.7. Trimming the Dialing Dialog
  229.               2.1.8. Controlling the Dialing Speed
  230.               2.1.9. Pretesting Phone Number Conversions
  231.               2.1.10. Greater Control over Partial Dialing
  232.               2.1.11. New DIAL-related Variables and Functions
  233.               2.1.12. Increased Flexibility of PBX Dialing
  234.               2.1.13. The DIAL macro - Last-Minute Phone Number Conversions
  235.               2.1.14. Automatic Tone/Pulse Dialing Selection
  236.               2.1.15. Dial-Modifier Variables
  237.               2.1.16. Giving Multiple Numbers to the DIAL Command
  238.  2.2. Modems
  239.       2.2.1. New Modem Types
  240.       2.2.2. New Modem Controls
  241.  2.3. TELNET and RLOGIN
  242.               2.3.0. Bug Fixes
  243.       2.3.1. Telnet Binary Mode Bug Adjustments
  244.       2.3.2. VMS UCX Telnet Port Bug Adjustment
  245.       2.3.3. Telnet New Environment Option
  246.       2.3.4. Telnet Location Option
  247.               2.3.5. Connecting to Raw TCP Sockets
  248.               2.3.6. Incoming TCP Connections
  249.  2.4. The EIGHTBIT Command
  250.  2.5. The Services Directory
  251.          2.6. Closing Connections
  252.  2.7. Using C-Kermit with External Communication Programs
  253.               2.7.0. C-Kermit over tn3270 and tn5250
  254.       2.7.1. C-Kermit over Telnet
  255.       2.7.2. C-Kermit over Rlogin
  256.               2.7.3. C-Kermit over Serial Communication Programs
  257.       2.7.4. C-Kermit over Secure Network Clients
  258.       2.7.4.1. SSH
  259.       2.7.4.2. SSL
  260.       2.7.4.3. SRP
  261.       2.7.4.4. SOCKS
  262.               2.7.4.5. Kerberos and SRP
  263.          2.8. Scripting Local Programs
  264.          2.9. X.25 Networking
  265.               2.9.1. IBM AIXLink/X.25 Network Provider Interface for AIX
  266.               2.9.2. HP-UX X.25
  267.          2.10. Additional Serial Port Controls
  268.          2.11. Getting Access to the Dialout Device
  269.          2.12. The Connection Log
  270.          2.13. Automatic Connection-Specific Flow Control Selection
  271.          2.14. Trapping Connection Establishment and Loss
  272.          2.15. Contacting Web Servers with the HTTP Command
  273.      (3) TERMINAL CONNECTION
  274.          3.1. CONNECT Command Switches
  275.          3.2. Triggers
  276.          3.3. Transparent Printing
  277.          3.4. Binary and Text Session Logs
  278.      (4) FILE TRANSFER AND MANAGEMENT
  279.          4.0. Bug Fixes, Minor Changes, and Clarifications
  280.  4.1. File-Transfer Filename Templates
  281.  4.1.1. Templates in the As-Name
  282.  4.1.2. Templates on the Command Line
  283.  4.1.3. Post-Transfer Renaming
  284.  4.2. File-Transfer Pipes and Filters
  285.          4.2.1. Introduction
  286.  4.2.1.1. Terminology
  287.  4.2.1.2. Notation
  288.  4.2.1.3. Security
  289.  4.2.2. Commands for Transferring from and to Pipes
  290.  4.2.2.1. Sending from a Command
  291.  4.2.2.2. Receiving to a Command
  292.  4.2.3. Using File-Transfer Filters
  293.  4.2.3.1. The SEND Filter
  294.  4.2.3.2. The RECEIVE Filter
  295.  4.2.4. Implicit Use of Pipes
  296.  4.2.5. Success and Failure of Piped Commands
  297.          4.2.6. Cautions about Using Pipes to Transfer Directory Trees
  298.  4.2.7. Pipes and Encryption
  299.          4.2.8. Commands and Functions Related to Pipes
  300.  4.2.8.1. The OPEN !READ and OPEN !WRITE Commands
  301.  4.2.8.2. The REDIRECT Command
  302.          4.2.8.3. Receiving Mail and Print Jobs
  303.  4.2.8.4. Pipe-Related Functions
  304.          4.3. Automatic Per-File Text/Binary Mode Switching
  305.  4.3.1. Exceptions
  306.  4.3.2. Overview
  307.  4.3.3. Commands
  308.  4.3.4. Examples
  309.          4.4. File Permissions
  310.  4.4.1. When ATTRIBUTES PROTECTION is OFF
  311.  4.4.1.1. Unix
  312.  4.4.1.2. VMS
  313.  4.4.2. When ATTRIBUTES PROTECTION is ON
  314.  4.4.2.1. System-Specific Permissions
  315.  4.4.2.1.1. UNIX
  316.  4.4.2.1.2. VMS
  317.  4.4.2.2. System-Independent Permissions
  318.          4.5. File Management Commands
  319.          4.5.1. The DIRECTORY Command
  320.          4.5.2. The CD and BACK Commands
  321.          4.5.2.1. Parsing Improvements
  322.          4.5.2.2. The CDPATH
  323.  4.5.3. Creating and Removing Directories
  324.  4.5.4. The DELETE and PURGE Commands
  325.          4.6. Starting the Remote Kermit Server Automatically
  326.          4.7. File-Transfer Command Switches
  327.          4.7.1. SEND Command Switches
  328.          4.7.2. GET Command Switches
  329.          4.7.3. RECEIVE Command Switches
  330.          4.8. Kermit Protocol Improvements
  331.  4.8.1. Multiple Attribute Packets
  332.  4.8.2. Very Short Packets
  333.          4.9. Wildcard / File Group Expansion
  334.  4.9.1. In UNIX C-Kermit
  335.  4.9.2. In Kermit 95
  336.  4.9.3. In VMS, AOS/VS, OS-9, VOS, etc.
  337.          4.10. Additional Pathname Controls
  338.          4.11. Recursive SEND and GET: Transferring Directory Trees
  339.  4.11.1. Command-Line Options
  340.  4.11.2. The SEND /RECURSIVE Command
  341.  4.11.3. The GET /RECURSIVE Command
  342.  4.11.4. New and Changed Functions
  343.  4.11.5. Moving Directory Trees Between Like Systems
  344.  4.11.6. Moving Directory Trees Between Unlike Systems
  345.          4.12. Where Did My File Go?
  346.          4.13. File Output Buffer Control
  347.          4.14. Improved Responsiveness
  348.          4.15. Doubling and Ignoring Characters for Transparency
  349.          4.16. New File-Transfer Display Formats
  350.          4.17. New Transaction Log Formats
  351.          4.17.1. The BRIEF Format
  352.          4.17.2. The FTP Format
  353.          4.18. Unprefixing NUL
  354.          4.19. Clear-Channel Protocol
  355.          4.20. Streaming Protocol
  356.  4.20.1. Commands for Streaming
  357.  4.20.2. Examples of Streaming
  358.  4.20.2.1. Streaming on Socket-to-Socket Connections
  359.  4.20.2.2. Streaming on Telnet Connections
  360.          4.20.2.3. Streaming with Limited Packet Length
  361.          4.20.2.4. Streaming on Dialup Connections
  362.          4.20.2.5. Streaming on X.25 Connections
  363.          4.20.3. Streaming - Preliminary Conclusions
  364.          4.21. The TRANSMIT Command
  365.  4.22. Coping with Faulty Kermit Implementations
  366.  4.22.1. Failure to Accept Modern Negotiation Strings
  367.  4.22.2. Failure to Negotiate 8th-bit Prefixing
  368.  4.22.3. Corrupt Files
  369.  4.22.4. Spurious Cancellations
  370.  4.22.5. Spurious Refusals
  371.  4.22.6. Failures during the Data Transfer Phase
  372.  4.22.7. Fractured Filenames
  373.  4.22.8. Bad File Dates
  374.          4.23. File Transfer Recovery
  375.          4.24. FILE COLLISION UPDATE Clarification
  376.          4.25. Autodownload Improvements
  377.      (5) CLIENT/SERVER
  378.          5.0. Hints
  379.  5.1. New Command-Line Options
  380.  5.2. New Client Commands
  381.  5.3. New Server Capabilities
  382.          5.3.1. Creating and Removing Directories
  383.          5.3.2. Directory Listings
  384.          5.4. Syntax for Remote Filenames with Embedded Spaces
  385.          5.5. Automatic Orientation Messages upon Directory Change
  386.  5.6. New Server Controls
  387.  5.7. Timeouts during REMOTE HOST Command Execution
  388.      (6) INTERNATIONAL CHARACTER SETS
  389.          6.0. ISO 8859-15 Latin Alphabet 9
  390.          6.1. The HP-Roman8 Character Set
  391.          6.2. Greek Character Sets
  392.          6.3. Additional Latin-2 Character Sets
  393.          6.4. Additional Cyrillic Character Sets
  394.          6.5. Automatic Character-Set Switching
  395.          6.6. Unicode
  396.  6.6.1. Overview of Unicode
  397.  6.6.2. UCS Byte Order
  398.  6.6.2. UCS Transformation Formats
  399.  6.6.3. Conformance Levels
  400.  6.6.4. Relationship of Unicode with Kermit's Other Character Sets
  401.  6.6.5. Kermit's Unicode Features
  402.  6.6.5.1. File Transfer
  403.  6.6.5.2. The TRANSLATE Command
  404.  6.6.5.3. Terminal Connection
  405.  6.6.5.4. The TRANSMIT Command
  406.  6.6.5.5. Summary of Kermit Unicode Commands
  407.          6.7. Client/Server Character-Set Switching
  408.      (7) SCRIPT PROGRAMMING
  409.          7.0. Bug Fixes
  410.          7.1. The INPUT Command
  411.  7.1.1. INPUT Timeouts
  412.  7.1.2. New INPUT Controls
  413.  7.1.3. INPUT with Pattern Matching
  414.  7.1.4. The INPUT Match Result
  415.  7.2. New or Improved Built-In Variables
  416.  7.3. New or Improved Built-In Functions
  417.          7.4. New IF Conditions
  418.          7.5. Using More than Ten Macro Arguments
  419.          7.6. Clarification of Function Call Syntax
  420.          7.7. Autodownload during INPUT Command Execution
  421.          7.8. Built-in Help for Functions.
  422.  7.9. Variable Assignments
  423.  7.9.1. Assignment Operators
  424.  7.9.2. New Assignment Commands
  425.  7.10. Arrays
  426.  7.10.1. Array Initializers
  427.  7.10.2. Turning a String into an Array of Words
  428.  7.10.3. Arrays of Filenames
  429.  7.10.4. Automatic Arrays
  430.  7.10.5. Sorting Arrays
  431.  7.10.6. Displaying Arrays
  432.          7.10.7. Other Array Operations
  433.          7.10.8. Hints for Using Arrays
  434.          7.10.9. Do-It-Yourself Arrays
  435.          7.10.10. Associative Arrays
  436.          7.11. OUTPUT Command Improvements
  437.          7.12. Function and Variable Diagnostics
  438.          7.13. Return Value of Macros
  439.          7.14. The ASSERT, FAIL, and SUCCEED Commands.
  440.          7.15. Using Alarms
  441.          7.16. Passing Arguments to Command Files
  442.          7.17. Dialogs with Timed Responses
  443.          7.18. Increased Flexibility of SWITCH Case Labels
  444.          7.19. "Kerbang" Scripts
  445.          7.20. IF and XIF Statement Syntax
  446.          7.20.1. The IF/XIF Distinction
  447.          7.20.2. Boolean Expressions (The IF/WHILE Condition)
  448.          7.21. Screen Formatting and Cursor Control
  449.          7.22. Evaluating Arithmetic Expressions
  450.          7.23. Floating-Point Arithmetic
  451.          7.24. Tracing Script Execution
  452.          7.25. Compact Substring Notation
  453.          7.26. New WAIT Command Options
  454.          7.26.1. Waiting for Modem Signals
  455.          7.26.2. Waiting for File Events
  456.          7.27. Relaxed FOR and SWITCH Syntax
  457.      (8) USING OTHER FILE TRANSFER PROTOCOLS
  458.      (9) COMMAND-LINE OPTIONS
  459.          9.0. Extended-Format Command-Line Options
  460.  9.1. Command Line Personalities
  461.  9.2. Built-in Help for Command Line Options
  462.  9.3. New Command-Line Options
  463.     (10) C-KERMIT AND G-KERMIT
  464. III. APPENDICES
  465. III.1. Character Set Tables
  466. III.1.1. The Hewlett Packard Roman8 Character Set
  467. III.1.2. Greek Character Sets
  468. III.1.2.1. The ISO 8859-7 Latin / Greek Alphabet
  469. III.1.2.2. The ELOT 927 Character Set
  470. III.1.2.3. PC Code Page 869
  471. III.2. Updated Country Codes
  472. IV. ERRATA & CORRIGENDA: Corrections to "Using C-Kermit" 2nd Edition.
  473. V. ADDITIONAL COPYRIGHT NOTICES
  474. ------------------------------
  475. I. C-KERMIT DOCUMENTATION
  476. The user manual for C-Kermit is:
  477.   Frank da Cruz and Christine M. Gianone, "Using C-Kermit", Second Edition,
  478.   Digital Press /  Butterworth-Heinemann, Woburn, MA, 1997, 622 pages,
  479.   ISBN 1-55558-164-1.
  480. The present document is a supplement to "Using C-Kermit" 2nd Ed, not a
  481. replacement for it.
  482.   US single-copy price: $44.95; quantity discounts available.  Available in
  483.   bookstores or directly from Columbia University:
  484.     The Kermit Project
  485.     Columbia University
  486.     612 West 115th Street
  487.     New York NY  10025-7799
  488.     USA
  489.     Telephone: +1 (212) 854-3703
  490.     Fax:       +1 (212) 663-8202
  491.   Domestic and overseas orders accepted.  Price: US $44.95 (US, Canada, and
  492.   Mexico).  Shipping: $4.00 within the USA; $15.00 to all other countries.
  493.   Orders may be paid by MasterCard or Visa, or prepaid by check in US dollars.
  494.   Add $65 bank fee for checks not drawn on a US bank.  Do not include sales
  495.   tax.  Inquire about quantity discounts.
  496.   You can also order by phone from the publisher, Digital Press /
  497.   Butterworth-Heinemann, with MasterCard, Visa, or American Express:
  498.     +1 800 366-2665   (Woburn, Massachusetts office for USA & Canada)
  499.     +44 1865 314627   (Oxford, England distribution centre for UK & Europe)
  500.     +61 03 9245 7111  (Melbourne, Vic, office for Australia & NZ)
  501.     +65 356-1968      (Singapore office for Asia)
  502.     +27 (31) 2683111  (Durban office for South Africa)
  503.   A German-language edition of the First Edition is also available:
  504.     Frank da Cruz and Christine M. Gianone, "C-Kermit - Einfuehrung und
  505.     Referenz", Verlag Heinz Heise, Hannover, Germany (1994).
  506.     ISBN 3-88229-023-4.  Deutsch von Gisbert W. Selke.  Price: DM 88,00.
  507.     Verlag Heinz Heise GmbH & Co. KG, Helstorfer Strasse 7, D-30625 Hannover.
  508.     Tel. +49 (05 11) 53 52-0, Fax. +49 (05 11) 53 52-1 29.
  509. The Kermit file transfer protocol is specified in:
  510.   Frank da Cruz, "Kermit, A File Transfer Protocol", Digital Press,
  511.   Bedford, MA, 1987, 379 pages, ISBN 0-932376-88-6.
  512.   US single-copy price: $39.95.  Availability as above.
  513. News and articles about Kermit software and protocol are published
  514. periodically in the journal, Kermit News.  Subscriptions are free; contact
  515. Columbia University at the address above.
  516. Online news about Kermit is published in the comp.protocols.kermit.announce
  517. and comp.protocols.kermit.misc newsgroups.
  518. ------------------------------
  519. II. NEW FEATURES
  520. Support for the Bell Labs Plan 9 operating system was added to version 6.0
  521. too late to be mentioned in the book (although it does appear on the cover).
  522. Specific changes and additions are grouped together by major topic, roughly
  523. corresponding to the chapters of "Using C-Kermit".
  524. (0) INCOMPATIBILITIES WITH PREVIOUS RELEASES
  525. C-Kermit 7.0 uses FAST Kermit protocol settings by default.  This includes
  526. "unprefixing" of certain control characters.  Because of this, file transfers
  527. that worked with previous releases might not work in the new release (but it
  528. is more likely that they will work, and much faster).  If a transfer fails,
  529. you'll get a context-sensitive hint suggesting possible causes and cures.
  530. C-Kermit 7.0 transfers files in BINARY mode by default.  To restore the
  531. previous behavior, put SET FILE TYPE TEXT in your C-Kermit initialization
  532. file.
  533. No matter whether FILE TYPE is BINARY or TEXT by default, C-Kermit 7.0 now
  534. switches between text and binary mode automatically on a per-file basis
  535. according to various criteria, including (a) which kind of platform is on the
  536. other end of the connection (if known), (b) the version of Kermit on the other
  537. end, and (c) the file's name (see Sections 4 and 4.3).  To disable this
  538. automatic switching and restore the earlier behavior, put SET TRANSFER MODE
  539. MANUAL in your C-Kermit initialization file.  To disable automatic switching
  540. for a particular transfer, include a /TEXT or /BINARY switch with your SEND or
  541. GET command.
  542. The RESEND and REGET commands automatically switch to binary mode; previously
  543. if RESEND or REGET were attempted when FILE TYPE was TEXT, these commands
  544. would fail immediately, with a message telling you they work only when the
  545. FILE TYPE is BINARY.  Now they simply do this for you.  See section 4.23 for
  546. additional (important) information.
  547. SET PREFIXING CAUTIOUS and MINIMAL now both prefix linefeed (10 and 138)
  548. in case rlogin or cu are "in the middle", since otherwise <LF>~ might appear
  549. in Kermit packets, and this would rlogin or cu to disconnect, suspend,
  550. escape back, or otherwise wreck the file transfer.  Xon and Xoff are now
  551. always prefixed too, even when Xon/Xoff flow control is not in effect, since
  552. unprefixing them has proven dangerous on TCP/IP connections.
  553. In UNIX, VMS, Windows, and OS/2, the DIRECTORY command is built into C-Kermit
  554. itself rather than implemented by running an external command or program.
  555. The built-in command might not behave the way the platform-specific external
  556. one did, but many options are available for customization.  Of course the
  557. underlying platform-specific command can still be accessed with "!", "@",
  558. or "RUN" wherever the installation does not forbid.  In UNIX, the "ls"
  559. command can be accessed directly as "ls" in C-Kermit.  See Section 4.5.1 for
  560. details.
  561. SEND ? prints a list of switches rather than a list of filenames.  If you want
  562. to see a list of filenames, use a (system-dependent) construction such as
  563. SEND ./? (for UNIX, Windows, or OS/2), SEND []? (VMS), etc.  See Sections 1.5
  564. and 4.7.1.
  565. In UNIX, OS-9, and Kermit 95, the wildcard characters in previous versions
  566. were * and ?.  In C-Kermit 7.0 they are *, ?, [, ], {, and }, with dash used
  567. inside []'s to denote ranges and comma used inside {} to separate list
  568. elements.  If you need to include any of these characters literally in a
  569. filename, precede each one with backslash ().  See Section 4.9.
  570. SET QUIET { ON, OFF } is now on the command stack, just like SET INPUT CASE,
  571. SET COUNT, SET MACRO ERROR, etc, as described on p.458 of "Using C-Kermit",
  572. 2nd Edition.  This allows any macro or command file to SET QUIET ON or OFF
  573. without worrying about saving & restoring the global QUIET value.  For example,
  574. this lets you write a script that tries SET LINE on lots of devices until it
  575. finds one free without spewing out loads of error messages, and also without
  576. disturbing the global QUIET setting, whatever it was.
  577. Because of the new "." operator (which introduces assignments), macros whose
  578. names begin with "." can not be invoked "by name".  However, they still can
  579. be invoked with DO.
  580. The syntax of the EVALUATE command has changed.  See Section 7.9.2.  To
  581. restore the previous syntax, use SET EVALUATE OLD.
  582. The v(directory) variable now includes the trailing directory separator;
  583. in previous releases it did not.  This is to allow constructions such as:
  584.   cd v(dir)tmp
  585. to work across platforms that might have different directory notation, such
  586. as UNIX, Windows, and VMS.
  587. Prior to C-Kermit 7.0, the FLOW-CONTROL setting was global and sticky.
  588. In C-Kermit 7.0, there is an array of default flow-control values for each
  589. kind of connection, that are applied automatically at SET LINE/PORT/HOST time.
  590. Thus a SET FLOW command given before SET LINE/PORT/HOST is likely to be undone.
  591. Therefore SET FLOW can be guaranteed to have the desired effect only if given
  592. after the SET LINE/PORT/HOST command.
  593. Character-set translation works differently in the TRANSMIT command when (a)
  594. the file character-set is not the same as the local end of the terminal
  595. character-set, or (b) when the terminal character-set is TRANSPARENT.
  596. (1) PROGRAM AND FILE MANAGEMENT AND COMMANDS
  597. 1.0. Bug Fixes
  598. The following patches were issued to correct bugs in C-Kermit 6.0.  These are
  599. described in detail in the 6.0 PATCHES file.  All of these fixes have been
  600. incorporated in C-Kermit 6.1 (never released except as K95 1.1.16-17) and 7.0.
  601.  0001   All UNIX         C-Kermit mishandles timestamps on files before 1970
  602.  0002 Solaris 2.5++    Compilation error on Solaris 2.5 with Pro C
  603.  0003 All VMS          CKERMIT.INI Fix for VMS
  604.  0004 VMS/VAX/UCX 2.0  C-Kermit 6.0 can't TELNET on VAX/VMS with UCX 2.0
  605.  0005 All              C-Kermit Might Send Packets Outside Window
  606.  0006 All              MOVE from SEND-LIST does not delete original files
  607.  0007 Solaris 2.5++    Higher serial speeds on Solaris 2.5
  608.  0008   All              C-Kermit application file name can't contain spaces
  609.  0009   AT&T 7300 UNIXPC setuid and hardware flow-control problems
  610.  0010   Linux on Alpha   Patch to make ckutio.c compile on Linux/Alpha
  611.  0011   OS-9/68000 2.4   Patch to make ck9con.c compile on OS-9/68000 2.4
  612.  0012   MW Coherent 4.2  Patches for successful build on Coherent 4.2
  613.  0013   SINIX-Y 5.43     "delay" variable conflicts with <sys/clock.h>
  614.  0014   VMS/VAX/CMU-IP   Subject: Patches for VAX/VMS 5.x + CMU-IP
  615.  0015   All              XECHO doesn't flush its output
  616.  0016   VMS              CD and other directory operations might not work
  617.  0017   Linux 1.2.x++    Use standard POSIX interface for high serial speeds
  618.  0018   UNIX             SET WILDCARD-EXPANSION SHELL dumps core
  619.  0019   All              Hayes V.34 modem init string problem
  620.  0020   All              READ command does not fail if file not open
  621.  0021   All              Problems with long function arguments
  622.  0022   All              Certain function()s can misbehave
  623.  0023   All              X MOD 0 crashes program
  624.  0024   All              Internal bulletproofing for lower() function
  625.  0025   OpenBSD          Real OpenBSD support for C-Kermit 6.0
  626.  0026   All              Incorrect checks for macro/command-file nesting depth
  627.  0027   All              ANSWER doesn't automatically CONNECT
  628.  0028   All              Overzealous EXIT warning
  629.  0029   All              OUTPUT doesn't echo when DUPLEX is HALF
  630.  0030   All              Minor problems with REMOTE DIRECTORY/DELETE/etc
  631.  0031   All              CHECK command broken
  632.  0032   All              Problem with SET TRANSMIT ECHO
  633.  0033   UNIX, VMS, etc   HELP SET SERVER says too much
  634.  0034   All              READ and !READ too picky about line terminators
  635.  0035   All              END from inside SWITCH doesn't work
  636.  0036   All              Problem telnetting to multihomed hosts
  637.  0037   All              Redirection failures in REMOTE xxx > file
  638. REDIRECT was missing in many UNIX C-Kermit implementations; in version 7.0,
  639. it should be available in all of them.
  640. 1.1. Command Continuation
  641. Comments that start with ";" or "#" can no longer be continued.  In:
  642.   ; this is a comment -
  643.   echo blah
  644. the ECHO command will execute, rather than being taken as a continuation of
  645. the preceding comment line.  This allows easy "commenting out" of commands
  646. from macro definitions.
  647. However, the text of the COMMENT command can still be continued onto
  648. subsequent lines:
  649.   comment this is a comment -
  650.   echo blah
  651. As of version 6.0, backslash is no longer a valid continuation character.
  652. Only hyphen should be used for command continuation.  This is to make it
  653. possible to issue commands like "cd a:" on DOS-like systems.
  654. As of version 7.0:
  655.  . You can quote a final dash to prevent it from being a continuation
  656.    character:
  657.       echo foo-
  658.    This prints "foo-".  The command is not continued.
  659.  . You can enter commands such as:
  660.      echo foo - ; this is a comment
  661.    interactively and they will be properly treated as continued commands.
  662.    Previously this worked only in command files.
  663. 1.2. Editor Interface
  664. SET EDITOR <name> [ <options> ]
  665.   Lets you specify a text-editing program.  The <name> can be a fully
  666.   specified pathname like /usr/local/bin/emacs19/emacs, or it can be the
  667.   name of any program in your PATH, e.g. "set editor emacs".  In VMS, it
  668.   must be a DCL command like "edit", "edit/tpu", "emacs", etc.  If an
  669.   environment variable EDITOR is defined when Kermit starts, its value is
  670.   the default editor.  You can also specify options to be included on the
  671.   editor command line.  Returns to Kermit when the editor exits.
  672. EDIT [ <filename> ]
  673.   If the EDIT command is given without a filename, then if a previous filename
  674.   had been given to an EDIT command, it is used; if not, the editor is started
  675.   without a file.  If a filename is given, the editor is started on that file,
  676.   and the filename is remembered for subsequent EDIT commands.
  677. SHOW EDITOR
  678.   Displays the full pathname of your text editor, if any, along with any
  679.   command line options, and the file most recently edited (and therefore the
  680.   default filename for your next EDIT command).
  681. Related variables: v(editor), v(editopts), v(editfile).
  682. 1.3. Web Browser and FTP Interface
  683. C-Kermit includes an FTP command, which simply runs the FTP program; C-Kermit
  684. does not include any built-in support for Internet File Transfer Protocol,
  685. nor any method for interacting directly with an FTP server.  In version 7.0,
  686. however, C-Kermit lets you specify your FTP client:
  687.   SET FTP-CLIENT [ <name> [ <options ] ]
  688. The name is the name of the FTP executable.  In UNIX, Windows, or OS/2, it
  689. can be the filename of any executable program in your PATH (e.g. "ftp.exe" in
  690. Windows, "ftp" in UNIX); elsewhere (or if you do not have a PATH definition),
  691. it must be the fully specified pathname of the FTP program.  If the name
  692. contains any spaces, enclose it braces.  Include any options after the
  693. filename; these depend the particular ftp client.
  694. The Web browser interface is covered in the following subsections.
  695. 1.3.1. Invoking your Browser from C-Kermit
  696. BROWSE [ <url> ]
  697.   Starts your preferred Web browser on the URL, if one is given, otherwise
  698.   on the most recently given URL, if any.  Returns to Kermit when the browser
  699.   exits.
  700. SET BROWSER [ <name> [ <options> ] ]
  701.   Use this command to specify the name of your Web browser program, for
  702.   example: "set browser lynx".  The <name> must be in your PATH, or else
  703.   it must be a fully specified filename; in VMS it must be a DCL command.
  704. SHOW BROWSER
  705.   Displays the current browser, options, and most recent URL.
  706. Related variables: v(browser), v(browsopts), v(browsurl).
  707. Also see Section 2.15: Contacting Web Servers with the HTTP Command.
  708. 1.3.2. Invoking C-Kermit from your Browser
  709. The method for doing this depends, of course, on your browser.  Here are
  710. some examples:
  711. Netscape on UNIX (X-based):
  712.   In the Options->Applications section, set your Telnet application to:
  713.     xterm -e /usr/local/bin/kermit/kermit -J %h %p
  714.   (replace "/usr/local/bin/kermit/kermit" by C-Kermit's actual pathname).
  715.   -J is C-Kermit's command-line option to "be like Telnet"; %h and %p are
  716.   Netscape placeholders for hostname and port.
  717. Lynx:
  718.   As far as we know, this can be done only at compile time.  Add the
  719.   following line to the Lynx userdefs.h file before building the Lynx binary:
  720. #define TELNET_COMMAND "/opt/bin/kermit -J"
  721.   And then add lines like the following to the Lynx.cfg file:
  722. DOWNLOADER:Kermit binary download:/opt/bin/kermit -i -V -s %s -a %s:TRUE
  723. DOWNLOADER:Kermit text download:/opt/bin/kermit -s %s -a %s:TRUE
  724. UPLOADER:Kermit binary upload:/opt/bin/kermit -i -r -a %s:TRUE
  725. UPLOADER:Kermit text upload:/opt/bin/kermit -r -a %s:TRUE
  726. UPLOADER:Kermit text get:/opt/bin/kermit -g %s:TRUE
  727. UPLOADER:Kermit binary get:/opt/bin/kermit -ig %s:TRUE
  728. 1.4. Command Editing
  729. Ctrl-W ("Word delete") was changed in 7.0 to delete back to the previous
  730. non-alphanumeric, rather than all the way back to the previous space.
  731. 1.5. Command Switches
  732. As of 7.0, C-Kermit's command parser supports a new type of field, called
  733. a "switch".  This is an optional command modifier.
  734. 1.5.1. General Switch Syntax
  735. A switch is a keyword beginning with a slash (/).  If it takes a value, then
  736. the value is appended to it (with no intervening spaces), separated by a colon
  737. (:) or equal sign (=).  Depending on the switch, the value may be a number,
  738. a keyword, a filename, a date/time, etc.  Examples:
  739.   send oofa.txt                              ; No switches
  740.   send /binary oofa.zip                      ; A switch without a value
  741.   send /protocol:zmodem oofa.zip             ; A switch with a value (:)
  742.   send /protocol=zmodem oofa.zip             ; A switch with a value (=)
  743.   send /text /delete /as-name:x.x oofa.txt   ; Several switches
  744. Like other command fields, switches are separated from other fields, and from
  745. each other, by whitespace, as shown in the examples just above.  You can not
  746. put them together like so:
  747.   send/text/delete/as-name:x.x oofa.txt
  748. (as you might do in VMS or DOS, or as we might once have done in TOPS-10 or
  749. TOPS0-20, or PIP).  This is primarily due to ambiguity between "/" as switch
  750. introducer versus "/" as UNIX directory separator; e.g. in:
  751.   send /delete/as-name:foo/text oofa.txt
  752. Does "foo/text" mean the filename is "foo" and the transfer is to be in
  753. text mode, or does it mean the filename is "foo/text"?  Therefore we require
  754. whitespace between switches to resolve the ambiguity.  (That's only one of
  755. several possible ambiguities -- it is also conceivable that a file called
  756. "text" exists in the path "/delete/as-name:foo/").
  757. In general, if a switch can take a value, but you omit it, then either a
  758. reasonable default value is supplied, or an error message is printed:
  759.   send /print:-Plaserwriter oofa.txt         ; Value included = print options
  760.   send /print oofa.txt                       ; Value omitted, OK
  761.   send /mail:kermit@columbia.edu oofa.txt    ; Value included = address
  762.   send /mail oofa.txt                        ; Not OK - address required
  763.   ?Address required
  764. Context-sensitive help (?) and completion (Esc or Tab) are available in the
  765. normal manner:
  766.   C-Kermit> send /pr? Switch, one of the following:
  767.     /print /protocol
  768.   C-Kermit> send /pro<ESC>tocol:?  File-transfer protocol,
  769.    one of the following:
  770.     kermit   xmodem   ymodem   ymodem-g   zmodem
  771.   C-Kermit> send /protocol:k<TAB>ermit
  772. If a switch takes a value and you use completion on it, a colon (:) is printed
  773. at the end of its name to indicate this.  If it does not take a value, a space
  774. is printed.
  775. Also, if you type ? in a switch field, switches that take values are shown
  776. with a trailing colon; those that don't take values are shown without one.
  777. 1.5.2. Order and Effect of Switches
  778. The order of switches should not matter, except that they are evaluated from
  779. left to right, so if you give two switches with opposite effects, the
  780. rightmost one is used:
  781.   send /text /binary oofa.zip                ; Sends oofa.zip in binary mode.
  782. Like other command fields, switches have no effect whatsoever until the
  783. command is entered (by pressing the Return or Enter key).  Even then, switches
  784. affect only the command with which they are included; they do not have global
  785. effect or side effects.
  786. 1.5.3. Distinguishing Switches from Other Fields
  787. All switches are optional.  A command that uses switches lets you give any
  788. number of them, including none at all.  Example:
  789.   send /binary oofa.zip
  790.   send /bin /delete oofa.zip
  791.   send /bin /as-name:mupeen.zip oofa.zip
  792.   send oofa.zip
  793. But how does Kermit know when the first "non-switch" is given?  It has been
  794. told to look for both a switch and for something else, the data type of the
  795. next field (filename, number, etc).  In most cases, this works well.  But
  796. conflicts are not impossible.  Suppose, for example, in UNIX there was a file
  797. named "text" in the top-level directory.  The command to send it would be:
  798.   send /text
  799. But C-Kermit would think this was the "/text" switch.  To resolve the
  800. conflict, use braces:
  801.   send {/text}
  802. or other circumlocutions such as "send //text", "send /./text", etc.
  803. The opposite problem can occur if you give an illegal switch that happens
  804. to match a directory name.  For example:
  805.   send /f oofa.txt
  806. There is no "/f" switch (there are several switches that begin with "/f",
  807. so "/f" is ambiguous).  Now suppose there is an "f" directory in the root
  808. directory; then this command would be interpreted as:
  809.   Send all the files in the "/f" directory,
  810.   giving each one an as-name of "oofa.txt".
  811. This could be a mistake, or it could be exactly what you intended; C-Kermit
  812. has no way of telling the difference.  To avoid situations like this, spell
  813. switches out in full until you are comfortable enough with them to know the
  814. minimum abbreviation for each one.  Hint: use ? and completion while typing
  815. switches to obtain the necessary feedback.
  816. 1.5.4. Standard File Selection Switches
  817. The following switches are used on different file-oriented commands (such as
  818. SEND, DIRECTORY, DELETE, PURGE) to refine the selection of files that match
  819. the given specification.
  820.   /AFTER:<date-time>
  821.     Select only those files having a date-time later than the one given.
  822.     See Section 1.6 for date-time formats.  Synonym: /SINCE.
  823.   /NOT-AFTER:<date-time>
  824.     Select only those files having a date-time not later than (i.e. earlier or
  825.     equal to) the one given.  Synonym: /NOT-SINCE.
  826.   /BEFORE:<date-time>
  827.     Select only those files having a date-time earlier than the one given.
  828.   /NOT-BEFORE:<date-time>
  829.     Select only those files having a date-time not earlier than (i.e. later or
  830.     equalto) the one given.
  831.   /DOTFILES
  832.     UNIX and OS-9 only: The filespec is allowed to match files whose names
  833.     start with (dot) period.  Normally these files are not shown.
  834.   /NODOTFILES
  835.     (UNIX and OS-9 only) Don't show files whose names start with dot (period).
  836.     This is the opposite of /DOTFILES, and is the default.  Note that when a
  837.     directory name starts with a period, the directory and (in recursive
  838.     operations) all its subdirectories are skipped.
  839.   /LARGER-THAN:<number>
  840.     Only select files larger than the given number of bytes.
  841.   /SMALLER-THAN:<number>
  842.     Only select files smaller than the given number of bytes.
  843.   /EXCEPT:pattern
  844.     Specifies that any files whose names match the pattern, which can be a
  845.     regular filename, or may contain "*" and/or "?" metacharacters (wildcards),
  846.     are not to be selected.  Example:
  847.       send /except:*.log *.*
  848.     sends all files in the current directory except those with a filetype of
  849.     ".log".  Another:
  850.       send /except:*.~*~ *.*
  851.     sends all files except the ones that look like Kermit or EMACS backup
  852.     files (such as "oofa.txt.~17~") (of course you can also use the /NOBACKUP
  853.     switch for this).
  854.     The pattern matcher is the same one used by IF MATCH <string> <pattern>
  855.     (Section 7.4), so you can test your patterns using IF MATCH.  If you need
  856.     to match a literal * or ? (etc), precede it by a backslash ().  If the
  857.     pattern contains any spaces, it must be enclosed in braces:
  858.       send /except:{Foo bar} *.*
  859.     The pattern can also be a list of up to 8 patterns.  In this case, the
  860.     entire pattern must be enclosed in braces, and each sub-pattern must also
  861.     be enclosed in braces; this eliminates the need for designating a
  862.     separator character, which is likely to also be a legal filename character
  863.     on some platform or other, and therefore a source of confusion.  You may
  864.     include spaces between the subpatterns but they are not necessary.  The
  865.     following two commands are equivalent:
  866.       send /except:{{ck*.o} {ck*.c}} ck*.?
  867.       send /except:{{ck*.o}{ck*.c}} ck*.?
  868.     If a pattern is to include a literal brace character, precede it with .
  869.     Also note the apparent conflict of this list format and the string-list
  870.     format described in section 4.9.1.  In case you want to include a wildcard
  871.     string-list with braces on its outer ends as an /EXCEPT: argument, do it
  872.     like this:
  873.       send /except:{{{ckuusr.c,ckuus2.c,ckuus6.c}}} ckuus*.c
  874. 1.5.5. Setting Preferences for Different Commands
  875. Certain oft-used commands offer lots of switches because different people
  876. have different requirements or preferences.  For example, some people want
  877. to be able to delete files without having to watch a list of the deleted
  878. files scroll past, while others want to be prompted for permission to delete
  879. each file.  Different people prefer different directory-listing styles.  And
  880. so on.  Such commands can be tailored with the SET OPTIONS command:
  881. SET OPTIONS <command> [ switch [  switch [ ... ] ] ]
  882.   Sets each switch as the default for the given command, replacing the
  883.   "factory default".  Of course you can also override any defaults established
  884.   by the SET OPTIONS command by including the relevant switches in the
  885.   affected command any time you issue it.
  886. SHOW OPTIONS
  887.   Lists the commands that allows option-setting, and the options currently
  888.   in effect, if any, for each.  Switches that have synonyms are shown under
  889.   their primary name; for example. /LOG and /VERBOSE are shown as /LIST.
  890. Commands for which options may be set include DIRECTORY, DELETE, PURGE,
  891. and TYPE.  Examples:
  892.   SET OPTIONS DIRECTORY /PAGE /NOBACKUP /HEADING /SORT:DATE /REVERSE
  893.   SET OPTIONS DELETE /LIST /NOHEADING /NOPAGE /NOASK /NODOTFILES
  894.   SET OPTIONS TYPE /PAGE
  895. Not necessarily all of a command's switches can be set as options.  For
  896. example, file selection switches, since these would normally be different for
  897. each command.
  898. Put the desired SET OPTIONS commands in your C-Kermit customization file for
  899. each command whose default switches you want to change every time you run
  900. C-Kermit.
  901. 1.6. Dates and Times
  902. Some commands and switches take date-time values, such as:
  903.   send /after:{8-Feb-2000 10:28:01}
  904. Various date-time formats are acceptable.  The rules for the date are:
  905.  . The year must have 4 digits.
  906.  . If the year comes first, the second field is the month.
  907.  . The day, month, and year may be separated by spaces, /, -, or underscore.
  908.  . The month may be numeric (1 = January) or spelled out or abbreviated in
  909.    English.
  910. If the date-time string contains any spaces, it must be enclosed in braces.
  911. Examples of legal dates:
  912.                            Interpretation:
  913.   2000-Feb-8                8 February 2000
  914.   {2000 Feb 8}              8 February 2000
  915.   2000/Feb/8                8 February 2000
  916.   2000_Feb_8                8 February 2000
  917.   2000-2-8                  8 February 2000
  918.   2000-02-08                8 February 2000
  919.   8-Feb-2000                8 February 2000
  920.   08-Feb-2000               8 February 2000
  921.   12/25/2000                25 December 2000
  922.   25/12/2000                25 December 2000
  923. The last two examples show that when the year comes last, and the month is
  924. given numerically, the order of the day and month doesn't matter as long as
  925. the day is 13 or greater (mm/dd/yyyy is commonly used in the USA, whereas
  926. dd/mm/yyyy is the norm in Europe).  However:
  927.   08/02/2000                Is ambiguous and therefore not accepted.
  928. If a date is given, the time is optional and defaults to 00:00:00.  If the
  929. time is given with a date, it must follow the date, separated by space, /, -,
  930. or underscore, and with hours, minutes, and seconds separated by colon (:).
  931. Example:
  932.   2000-Feb-8 10:28:01       Represents 8 February 2000, 10:28:01am
  933. If a date is not given, the current date is used and a time is required.
  934. Time format is hh:mm:ss or hh:mm or hh in 24-hour format, or followed by "am"
  935. or "pm" (or "AM" or "PM") to indicate morning or afternoon.  Examples of times
  936. that are acceptable:
  937.                            Interpretation:
  938.   3:23:56                    3:23:56am
  939.   3:23:56am                  3:23:56am
  940.   3:23:56pm                  3:23:56pm = 15:23:56
  941.  15:23:56                    3:23:56pm = 15:23:56
  942.   3:23pm                     3:23:00pm = 15:23:00
  943.   3:23PM                     3:23:00pm = 15:23:00
  944.   3pm                        3:00:00pm = 15:00:00
  945. Examples of legal date-times:
  946.   send /after:{8 Feb 2000 10:28:01}
  947.   send /after:8_Feb_2000_10:28:01
  948.   send /after:8-Feb-2000/10:28:01
  949.   send /after:2000/02/08/10:28:01
  950.   send /after:2000/02/08_10:28:01
  951.   send /after:2000/02/08_10:28:01am
  952.   send /after:2000/02/08_10:28:01pm
  953.   send /after:2000/02/08_10:28pm
  954.   send /after:2000/02/08_10pm
  955.   send /after:10:00:00pm
  956.   send /after:10:00pm
  957.   send /after:10pm
  958.   send /after:22
  959. Finally, there is a special all-numeric format you can use:
  960.   yyyymmdd hh:mm:ss
  961. For example:
  962.   20000208 10:28:01
  963. This is Kermit's standard date-time format (based on ISO 8601), and is
  964. accepted (among other formats) by any command or switch that requires a
  965. date-time, and is output by any function whose result is a calendar date-time.
  966. There are no optional parts to this format and it must be exactly 17
  967. characters long, punctuated as shown (except you can substitute underscore
  968. for space in contexts where a single "word" is required).  The time is in
  969. 24-hour format (23:00:00 is 11:00pm).  This is the format returned by
  970. fdate(filename), so you can also use constructions like this:
  971.   send /after:fdate(oofa.txt)
  972. which means "all files newer than oofa.txt".
  973. Besides explicit dates, you can also use the any of the following shortcuts:
  974. TODAY
  975.   Stands for the current date at 00:00:00.
  976. TODAY 12:34:56
  977.   Stands for the current date at the given time.
  978. YESTERDAY
  979.   Stands for yesterday's date at 00:00:00.  A time may also be given.
  980. TOMORROW
  981.   Stands for tomorrow's date at 00:00:00.  A time may also be given.
  982. + <number> { DAYS, WEEKS, MONTHS, YEARS } [ time ]
  983.   Is replaced by the future date indicated, relative to the current date.
  984.   If the time is omitted, 00:00:00 is used.  Examples: +3days, +2weeks,
  985.   +1year, +37months.
  986. - <number> { DAYS, WEEKS, MONTHS, YEARS } [ time ]
  987.   Is replaced by the past date indicated, relative to the current date.
  988.   If the time is omitted, 00:00:00 is used.
  989. The time can be separated from the date shortcut by any of the same separators
  990. that are allowed for explicit date-times: space, hyphen, slash, period, or
  991. underscore.  In switches and other space-delimited fields, use non-spaces
  992. to separate date/time fields, or enclose the date-time in braces, e.g.:
  993.   purge /before:-4days_12:00:00
  994. or:
  995.   purge /before:{- 4 days 12:00:00}
  996. Of course you can also use variables:
  997.   define %n 43
  998.   purge /before:-%ndays_12:00:00
  999. Shortcut names can be abbreviated to any length that still distinguishes them
  1000. from any other name that can appear in the same context, e.g. "TOD" for today,
  1001. "Y" for yesterday.  Also, the special abbreviation "wks" is accepted for
  1002. WEEKS, and "yrs" for "YEARS".
  1003. (To see how to specify dates relative to a specific date, rather than the
  1004. current one, see the fmjd() function description below.)
  1005. You can check date formats with the DATE command.  DATE by itself prints the
  1006. current date and time in standard format: yyyymmdd hh:mm:ss.  DATE followed by
  1007. a date and/or time (including shortcuts) converts it to standard format if it
  1008. can understand it, otherwise it prints an error message.
  1009. The following variables and functions deal with dates and times; any function
  1010. argument designated as "date-time" can be in any of the formats described
  1011. above.
  1012. v(day)
  1013.   The first three letters of the English word for the current day of the
  1014.   week, e.g. "Wed".
  1015. fday(date-time)
  1016.   The first three letters of the English word for day of the week of
  1017.   the given date.  If a time is included, it is ignored.  Example:
  1018.   fday(8 Feb 1988) = "Mon".
  1019. v(nday)
  1020.   The numeric day of the week: 0 = Sunday, 1 = Monday, ..., 6 = Saturday.
  1021. fnday(date-time)
  1022.   The numeric day of the week for the given date.  If a time is included, it
  1023.   is ignored.  Example: fnday(8 Feb 1988) = "1".
  1024. v(date)
  1025.   The current date as dd mmm yyyy, e.g. "08 Feb 2000" (as in this example,
  1026.   a leading zero is supplied for day-of-month less than 10).
  1027. v(ndate)
  1028.   The current date in numeric format: yyyymmdd, e.g. "20000208".
  1029. v(time)
  1030.   The current time as hh:mm:ss, e.g. "15:27:14".
  1031. ftime(time)
  1032.   The given free-format date and/or time (e.g. "3pm") returns the time
  1033.   (without the date) converted to hh:mm:ss 24-hour format, e.g. "15:00:00"
  1034.   (the date, if given, is ignored).
  1035. v(ntime)
  1036.   The current time as seconds since midnight, e.g. "55634".
  1037. v(tftime)
  1038.   The elapsed time of the most recent file-transfer operation in seconds.
  1039. v(intime)
  1040.   The elapsed time for the most recent INPUT command to complete, in
  1041.   milliseconds.
  1042. fntime(time)
  1043.   The given free-format date and/or time is converted to seconds since
  1044.   midnight (the date, if given, is ignored).  This function replaces
  1045.   ftod2secs(), which is now a synonym for fntime().  Unlike ftod2secs(),
  1046.   fntime() allows a date to be included, and it allows the time to be in
  1047.   free format (like 3pm), and it allows the amount of time to be more than
  1048.   24 hours.  E.g. fntime(48:00:00) = 172800.  Example of use:
  1049.     set alarm fntime(48:00:00) ; set alarm 48 hours from now.
  1050. fn2time(seconds)
  1051.   The given number of seconds is converted to hh:mm:ss format.
  1052. fdate(filename)
  1053.   Returns the modification date-time of the given file in standard format:
  1054.   yyyymmdd hh:mm:ss.
  1055. fcvtdate(date-time)
  1056.   Converts a free-format date and/or time to Kermit standard format: yyyymmdd
  1057.   hh:mm:ss.  If no argument is given, returns the current date-time in
  1058.   standard format.  If a date is given but no time, the converted date is
  1059.   returned without a time.  If a time is given with no date, the current
  1060.   date is supplied.  Examples:
  1061.     fcvtdate(4 Jul 2000 2:21:17pm) = 20000704 14:21:17
  1062.     fcvtdate() = 20000704 14:21:17 (on 4 Jul 2000 at 2:21:17pm).
  1063.     fcvtd(4 Jul 2000) = 20000704
  1064.     fcvtd(6pm) = 20000704 18:00:00 (on 4 Jul 2000 at 6:00pm).
  1065. fdayofyear(date-time)
  1066. fdoy(date-time)
  1067.   Converts a free-format date and/or time to yyyyddd, where ddd is the 3-digit
  1068.   day of the year, where 1 January is Day 1.  If a time is included with the
  1069.   date, it is returned in standard format.  If a date is included but no time,
  1070.   the date is returned without a time.  If a time is given with no date, the
  1071.   time is converted and the current date is supplied.  If no argument is
  1072.   given, the current date-time is returned.  Synonym: fdoy().  Examples:
  1073.     fddayofyear(4 Jul 2000 2:21:17pm) = 2000185 14:21:17
  1074.     fdoy() = 2000185 14:21:17 (on 4 Jul 2000 at 2:21:17pm).
  1075.     fdoy(4 Jul 2000) = 2000185
  1076.     fdoy(6pm) = 2000185 18:00:00 (on 4 Jul 2000 at 6:00pm).
  1077. Note: The yyyyddd day-of-year format is often erroneously referred to as a
  1078. Julian date.  However, a true Julian date is a simple counting number, the
  1079. number of days since a certain fixed day in the past.  See fmjd() below.
  1080. fdoy2date(date-time)
  1081.   Converts a date or date-time in day-of-year format to a standard format
  1082.   date.  A yyyyddd-format date must be supplied; time is optional.  The
  1083.   given date is converted to yyyymmdd format.  If a time is given, it is
  1084.   converted to 24-hour format.  Examples:
  1085.     fdoy2date(2000185) = 20000704
  1086.     fdoy2(2000185 3pm) = 20000704 15:00:00
  1087. fmjd(date-time)
  1088.   Converts free-format date and/or time to a Modified Julian Date (MJD),
  1089.   the number of days since 17 Nov 1858 00:00:00.  If a time is given, it is
  1090.   ignored.  Examples:
  1091.      fmjd(4 Jul 2000) = 50998
  1092.      fmjd(17 Nov 1858) = 0
  1093.      fmjd(16 Nov 1858) = -1
  1094. fmjd2date(mjd)
  1095.   Converts an MJD (integer) to standard date format, yyyymmdd:
  1096.      fmjd2(50998) = 4 Jul 1998
  1097.      fmjd2(0) = 17 Nov 1858
  1098.      fmjd2(-1) = 16 Nov 1858
  1099.      fmjd2(-365) = 17 Nov 1857
  1100. MJDs are normal integers and, unlike DOYs, may be added, subtracted, etc, with
  1101. each other or with other integers, to obtain meaningful results.  For example,
  1102. to find out the date 212 days ago:
  1103.   echo fmjd2date(fmjd()-212)
  1104. Constructions such as this can be used in any command where a date-time
  1105. is required, e.g.:
  1106.   send /after:fmjd2date(fmjd()-212)
  1107. to send all files that are not older than 212 days (this is equivalent to
  1108. "send /after:-212days").
  1109. MJDs also have other regularities not exhibited by other date formats.  For
  1110. example, fmodulus(fmjd(any-date),7) gives the day of the week for any date
  1111. (where 4=Sun, 5=Mon, ..., 3=Sat).  (However, it is easier to use fnday() for
  1112. this purpose, and it gives the more conventional result of 0=Sun, 1=Mon, ...,
  1113. 6=Sat).
  1114. Note that if MJDs are to be compared, they must be compared numerically
  1115. (IF <, =, >) and not lexically (IF LLT, EQUAL, LGT), whereas DOYs must be
  1116. compared lexically if they include a time (which contains ":" characters);
  1117. however, if DOYs do not include a time, they may also be compared numerically.
  1118. In any case, lexical comparison of DOYs always produces the appropriate
  1119. result, as does numeric comparison of MJDs.
  1120. The same comments apply to sorting.  Also note that DOYs are fixed length, but
  1121. MJDs can vary in length.  However, all MJDs between 3 April 1886 and 30 Aug
  1122. 2132 are 5 decimal digits long.  (MJDs become 6 digits long on 31 Aug 2132,
  1123. and 7 digits long on 13 Oct 4596).
  1124. 1.7. Partial Completion of Keywords
  1125. Partial completion of keywords was added in C-Kermit 7.0.  In prior versions,
  1126. if completion was attempted (by pressing the Esc or Tab key) on a string that
  1127. matched different keywords, you'd just get a beep.  Now Kermit completes up to
  1128. the first character where the possibly matching keywords differ and then
  1129. beeps.  For example:
  1130.   send /n<Tab>
  1131. which matches /NOT-BEFORE and /NOT-AFTER, now completes up to the dash:
  1132.   send /n<Tab>ot-<Beep>
  1133. Partial completion works for filenames too (as it has for some years).
  1134. 1.8. Command Recall
  1135. C-Kermit has had a command history buffer for some time, which could be
  1136. scrolled interactively using control characters or (in Kermit 95 only) arrow
  1137. keys.  Version 7.0 adds a REDO command that allows the most recent command
  1138. matching a given pattern to be re-executed:
  1139. { REDO, RR, ^ } [ <pattern> ]
  1140.   Search the command history list for the most recent command that matches
  1141.   the given pattern, and if one is found, execute it again.
  1142. The pattern can be a simple string (like "send"), in which case the last SEND
  1143. command is re-executed.  Or it can contain wildcard characters "*" and/or "?",
  1144. which match any string and any single character, respectively (note that "?"
  1145. must be preceded by backslash to override its normal function of giving help),
  1146. and in most C-Kermit versions may also include [] character lists and {}
  1147. string lists (see Section 4.9).
  1148. The match works by appending "*" to the end of the given pattern (if you
  1149. didn't put one there yourself).  Thus "redo *oofa" becomes "redo *oofa*" and
  1150. therefore matches the most recent command that contains "oofa" anywhere within
  1151. the command.  If you want to inhibit the application of the trailing "*",
  1152. e.g. to force matching a string at the end of a command, enclose the pattern
  1153. in braces:
  1154.   redo {*oofa}
  1155. matches the most recent command that ends with "oofa".
  1156. REDO commands themselves are not entered into the command history list.  If no
  1157. pattern is given, the previous (non-REDO) command is re-executed.  The REDOne
  1158. command is reinserted at the end of the command history buffer, so the command
  1159. scrollback character (Ctrl-P, Ctrl-B, or Uparrow) can retrieve it.
  1160. Examples:
  1161.   C-Kermit>echo foo
  1162.   foo
  1163.   C-Kermit>show alarm
  1164.   (no alarm set)
  1165.   C-Kermit>echo blah
  1166.   blah
  1167.   C-Kermit>redo          ; Most recent command
  1168.   blah
  1169.   C-Kermit>redo s        ; Most recent command starting with "s"
  1170.   (no alarm set)
  1171.   C-Kermit>redo echo f   ; Most recent command starting with "echo f"
  1172.   foo
  1173.   C-Kermit>redo *foo     ; Most recent command that has "foo" in it
  1174.   foo
  1175.   C-Kermit><Ctrl-P>      ; Scroll back
  1176.   C-Kermit>echo foo      ; The REDOne command is there
  1177.   C-Kermit>redo {*foo}   ; Most recent command that ends with "foo"
  1178.   foo
  1179.   C-Kermit>
  1180. Since REDO, REDIAL, and REDIRECT all start the same way, and RED is the
  1181. designated non-unique abbreviation for REDIAL, REDO must be spelled out in
  1182. full.  For convenience, RR is included as an invisible easy-to-type synonym
  1183. for REDO.  You can also use the "^" character for this:
  1184.   C-Kermit>^             ; Most recent command
  1185.   C-Kermit>^ s           ; Most recent command starting with "s"
  1186.   C-Kermit>^s            ; Ditto (space not required after "^").
  1187.   C-Kermit>^*foo         ; Most recent command that has "foo" in it.
  1188.   C-Kermit>^{*foo}       ; Most recent command ends with "foo".
  1189. Unlike the manual command-history-scrolling keys, the REDO command can be
  1190. used in a script, but it's not recommended (since the command to be REDOne
  1191. might not be found, so if the REDO command fails, you can't tell whether it
  1192. was because REDO failed to find the requested command, or because the command
  1193. was found but it failed).
  1194. 1.9. EXIT Messages
  1195. The EXIT and QUIT commands now accept an optional message to be printed.
  1196. This makes the syntax of EXIT and QUIT just like END and STOP:
  1197.   { EXIT, QUIT, END, STOP } [ <status-code> [ <message> ] ]
  1198. where <status-code> is a number (0 indicating success, nonzero indicating
  1199. failure).  This is handy in scripts that are never supposed to enter
  1200. interactive mode:
  1201.   dial 7654321
  1202.   if fail exit 1 Can't make connection - try again later.
  1203. Previously this could only be done in two steps:
  1204.   dial 7654321
  1205.   xif fail { echo Can't make connection - try again later, exit 1 }
  1206. A status code must be included in order to specify a message.  In the case
  1207. of EXIT and QUIT, the default status code is contained in the variable
  1208. v(exitstatus), and is set automatically by various events (file transfer
  1209. failures, etc; it can also be set explicitly with the SET EXIT STATUS
  1210. command).  If you want to give an EXIT or QUIT command with a message, but
  1211. without changing the exit status from what it normally would have been, use
  1212. the v(exitstatus) variable, e.g.:
  1213.    exit v(existatus) Goodbye from v(cmdfile).
  1214. The EXIT status is returned to the system shell or whatever other process
  1215. invoked C-Kermit, e.g. in UNIX:
  1216.   C-Kermit> exit 97 bye bye
  1217.   bye bye
  1218.   $ echo $?
  1219.   97
  1220.   $
  1221. 1.10. Managing Keyboard Interruptions
  1222. When C-Kermit is in command or file-transfer mode (as opposed to CONNECT
  1223. mode), it can be interrupted with Ctrl-C.  Version 7.0 adds the ability to
  1224. disarm the Ctrl-C interrupt:
  1225. SET COMMAND INTERRUPT { ON, OFF }
  1226.   COMMAND INTERRUPT is ON by default, meaning the Ctrl-C can be used to
  1227.   interrupt a command or a file transfer in progress.  Use OFF to disable
  1228.   these interruptions, and use it with great caution for obvious reasons.
  1229. SET TRANSFER INTERRUPT { ON, OFF }
  1230.   This can be used to disable keyboard interruption of file transfer when
  1231.   C-Kermit is in local mode, or to re-enable it after it has been disabled.
  1232.   This applies to the X, Z, E, and similar keys as well as to the system
  1233.   interrupt character, usually Ctrl-C.  This is distinct from SET TRANSFER
  1234.   CANCELLATION, which tells whether packet mode can be exited by sending a
  1235.   special sequence of characters.
  1236. Several other commands can be interrupted by pressing any key while they are
  1237. active.  Version 7.0 adds the ability to disable this form of interruption
  1238. also:
  1239. SET INPUT CANCELLATION { ON, OFF }
  1240.   Whether an INPUT command in progress can be interrupted by pressing a key.
  1241.   Normally ON.  Setting INPUT CANCELLATION OFF makes INPUT commands
  1242.   uninterruptible except by Ctrl-C (unless COMMAND INTERRUPTION is also OFF).
  1243. SET SLEEP CANCELLATION { ON, OFF }
  1244.   Whether a SLEEP, PAUSE, or WAIT command in progress can be interrupted by
  1245.   pressing a key.  Normally ON.  Setting SLEEP CANCELLATION OFF makes these
  1246.   commands uninterruptible except by Ctrl-C (unless COMMAND INTERRUPTION is
  1247.   also OFF).  Synonyms: SET PAUSE CANCELLATION, SET WAIT CANCELLATION.
  1248. So to make certain a script is not interruptible by the user, include these
  1249. commands:
  1250.   SET TRANSFER INTERRUPT OFF
  1251.   SET SLEEP CANCELLATION OFF
  1252.   SET INPUT CANCELLATION OFF
  1253.   SET COMMAND INTERRUPTION OFF
  1254. Make sure to turn them back on afterwards.
  1255. When a PAUSE, SLEEP, WAIT, or INPUT command is interrupted from the keyboard,
  1256. the new variable v(kbchar) contains a copy of the (first) character that was
  1257. typed and caused the interruption, provided it was not the command interrupt
  1258. character (usually Ctrl-C).  If these commands complete successfully or time
  1259. out without a keyboard interruption, the v(kbchar) variable is empty.
  1260. The v(kbchar) variable (like any other variable) can be tested with:
  1261.   if defined v(kbchar) <command>
  1262. The <command> is executed if the variable is not empty.
  1263. The v(kbchar) variable can be reset with WAIT 0 (PAUSE 0, SLEEP 0, etc).
  1264. 1.11. Taming The Wild Backslash -- Part Deux
  1265. "Using C-Kermit", 2nd Edition, contains a brief section, "Taming the Wild
  1266. Backslash", on page 48, which subsequent experience has shown to be inadequate
  1267. for Kermit users intent on writing scripts that deal with Windows, DOS, and
  1268. OS/2 filenames, in which backslash () is used as the directory separator.
  1269. This section fills in the blanks.
  1270. 1.11.1. Background
  1271. The Kermit command language shares a certain unavoidable but annoying
  1272. characteristic with most other command languages that are capable of string
  1273. replacement, namely the necessity to "quote" certain characters when you want
  1274. them to be taken literally.  This is a consequence of the facts that:
  1275.  a. One or more characters must be set aside to denote replacement, rather
  1276.     than acting as literal text.
  1277.  b. We have only 96 printable characters to work with in ASCII, which is
  1278.     still the only universally portable character set.
  1279.  c. There is no single printable character that is unused everywhere.
  1280.  d. Variables are not restricted to certain contexts, as they are
  1281.     in formal programming languages like C and Fortran, but can appear
  1282.     anywhere at all within a command, and therefore require special syntax.
  1283. Thus there can be conflicts.  To illustrate, the standard UNIX shell uses
  1284. dollar sign ($) to introduce variables.  So the shell command:
  1285.   echo $TERM
  1286. displays the value of the TERM variable, e.g. vt320.  But suppose you want to
  1287. display a real dollar sign:
  1288.   echo The price is $10.20
  1289. This causes the shell to evaluate the variable "$1", which might or might not
  1290. exist, and substitute its value, e.g.:
  1291.   The price is 0.20
  1292. (in this case the $1 variable had no value.)  This is probably not what you
  1293. wanted.  To force the dollar sign to be taken literally, you must apply a
  1294. "quoting rule", such as "precede a character by backslash () to force the
  1295. shell to take the character literally":
  1296.   echo The price is $10.20
  1297.   The price is $10.20
  1298. But now suppose you want the backslash AND the dollar sign to be taken
  1299. literally:
  1300.   echo The price is \$10.20
  1301. This doesn't work, since the first backslash quotes the second one, thereby
  1302. leaving the dollar sign unquoted again:
  1303.   The price is .20
  1304. Quoting the dollar sign requires addition of a third backslash:
  1305.   echo The price is \$10.20
  1306.   The price is $10.20
  1307. The first backslash quotes the second one, and the third backslash quotes
  1308. the dollar sign.
  1309. Every command language -- all UNIX shells, VMS DCL, DOS Batch, AOS/VS CLI, etc
  1310. etc -- has similar rules.  UNIX shell rules are probably the most complicated,
  1311. since many printable characters -- not just one -- are special there: dollar
  1312. sign, single quote, double quote, backslash, asterisk, accent grave, number
  1313. sign, ampersand, question mark, parentheses, brackets, braces, etc --
  1314. practically every non-alphanumeric character needs some form of quoting if it
  1315. is to be taken literally.  And to add to the confusion, the UNIX shell offers
  1316. many forms of quoting, and many alternative UNIX shells are available, each
  1317. using slightly different syntax.
  1318. 1.11.2. Kermit's Quoting Rules
  1319. Kermit's basic quoting rules are simple by comparison (there are, of course,
  1320. additional syntax requirements for macro definitions, command blocks, function
  1321. calls, etc, but they are not relevant here).
  1322. The following characters are special in Kermit commands:
  1323. Backslash ()
  1324.   Introduces a variable, or the numeric representation of a special character,
  1325.   or a function, or other item for substitution.  If the backslash is followed
  1326.   by a digit or by any of the following characters:
  1327.     x, o, d, m, f, v, $, %, &, {
  1328.   this indicates a special substitution item; otherwise the following
  1329.   character is to be taken literally (exceptions:  at end of line is taken
  1330.   literally; n, b, and n are special items in the OUTPUT command only).
  1331. Semicolon (;)
  1332.   (Only when at the beginning of a line or preceded by at least one space
  1333.   or tab)  Introduces a comment.
  1334. Number sign (#)
  1335.   (Only when at the beginning of a line or preceded by at least one space
  1336.   or tab)  Just like semicolon; introduces a comment.
  1337. Question mark (?)
  1338.   (Only at the command prompt - not in command files or macros)  Requests
  1339.   context-sensitive help.
  1340. To force Kermit to take any of these characters literally, simply precede it
  1341. by a backslash ().
  1342. Sounds easy!  And it is, except when backslash also has a special meaning to
  1343. the underlying operating system, as it does in DOS, Windows, and OS/2, where
  1344. it serves as the directory separator in filenames such as:
  1345.   D:K95KEYMAPSREAD.ME
  1346. Using our rule, we would need to refer to this file in Kermit commands as
  1347. follows:
  1348.   D:\K95\KEYMAPS\READ.ME
  1349. But this would not be obvious to new users of Kermit software on DOS, Windows,
  1350. or OS/2, and it would be annoying to seasoned ones.  Thus MS-DOS Kermit and
  1351. Kermit 95 go to rather extreme lengths to allow the more natural notation, as
  1352. in:
  1353.   send d:k95keymapsread.me
  1354. The reason this is tricky is that we also need to allow for variables and
  1355. other expressions introduced by backslash in the same command.  For example,
  1356. suppose %a is a variable whose value is "oofa" (without the quotes).  What
  1357. does the following command do?
  1358.   send d:%a
  1359. Does it send the file named "oofa" in the current directory of the D: disk, or
  1360. does it send a file named "%a" in the root directory of the D: disk?  This is
  1361. the kind of trouble we get into when we attempt to bend the rules in the
  1362. interest of user friendliness.  (The answer is: if the variable %a has
  1363. definition that is the name of an existing file, that file is sent; if a file
  1364. d:%a exists, it is sent; otherwise if both conditions are true, the variable
  1365. takes precedence, and the literal filename can be forced by quoting: \%a.)
  1366. In Kermit 95 (but not MS-DOS Kermit), we also bend the rules another way by
  1367. allowing you to use forward slash (/) rather than backslash () as the
  1368. directory separator:
  1369.   send d:/k95/keymaps/read.me
  1370. This looks more natural to UNIX users, and in fact is perfectly acceptable to
  1371. the Windows 95/98/NT and OS/2 operating systems on the API level.  BUT (there
  1372. is always a "but") the Microsoft shell, COMMAND.COM, for Windows 95/98 and NT
  1373. does not allow this notation, and therefore it can not be used in any Kermit
  1374. command -- such as RUN -- that invokes the Windows command shell AND your
  1375. command shell is COMMAND.COM or any other shell that does not allow forward
  1376. slash as directory separator (some alternative shells do allow this).
  1377.   NOTE: There exists a wide variety of alternative shells from third
  1378.   parties that do not have this restriction.  If you are using a shell
  1379.   that accepts forward slash as a directory separator, you can stop
  1380.   reading right now -- UNLESS (there is always an "unless") you want your
  1381.   scripts to be portable to systems that have other shells.  Also note
  1382.   that some Windows shells might actually REQUIRE forward slashes
  1383.   (instead of backslashes) as directory separators; we do not treat this
  1384.   situation below, but the treatment is obvious -- use slash rather
  1385.   backslash as the directory separator.
  1386. 1.11.3. Passing DOS Filenames from Kermit to Shell Commands
  1387. The following Kermit commands invoke the system command shell:
  1388.   RUN (and its synonyms ! and @)
  1389.   REDIRECT
  1390.   PIPE
  1391. Each of these commands takes a shell command as an operand.  These shell
  1392. commands are not, and can not be, parsed by Kermit since Kermit does not know
  1393. the syntax of shell commands, and so can't tell the difference between a
  1394. keyword, a filename, a variable, a switch, or other item.  Therefore the rules
  1395. can not be bent since Kermit doesn't know where or how to bend them.  To
  1396. illustrate (using the regular Windows shell):
  1397.   run c:\windows\command\chkdsk.exe
  1398. works OK, but:
  1399.   run c:/windows/command/chkdsk.exe
  1400. is not accepted by COMMAND.COM.  But:
  1401.   run c:windowscommandchkdsk.exe
  1402. results in Kermit applying its quoting rules before sending the text to the
  1403. shell.  Since "w" and "c" are not in the list of backslash-item codes, the
  1404. backslash means "take the following character literally".  Thus, by the
  1405. time this filename gets to the Windows shell, it has become:
  1406.   c:windowscommandchkdsk.exe
  1407. which is probably not what you wanted.  (If "w" and "c" were in the list,
  1408. the results could be even stranger.)  Even more confusing is the case where
  1409. a directory or filename starts with one or more digits:
  1410.   run c:123lotus.exe
  1411. in which "123" is the Kermit notation for ASCII character 123, which happens
  1412. to be left brace ({), resulting in "c:{lotus.exe".
  1413. So when passing filenames to a Windows shell, always use double backslashes as
  1414. directory separators, to ensure that the shell gets single backslashes:
  1415.   run c:\windows\command\chkdsk.exe
  1416.   run c:\123\lotus.exe
  1417. Similar problems might occur with the built-in EDIT, BROWSE, and FTP commands.
  1418. These commands result in Kermit building a shell command internally to invoke
  1419. the associated helper program; the form of this command might conflict with
  1420. the form demanded by certain alternative shells.
  1421. 1.11.4. Using Variables to Hold DOS Filenames
  1422. Now to the next level.  Suppose you want to write a script in which filenames
  1423. are parameters, and therefore are stored in variables.  Example:
  1424.   define %f c:windowscommandchkdsk.exe
  1425.   ...
  1426.   run %f
  1427. Obviously this won't work for the reasons just noted; the RUN command requires
  1428. directory separators be coded as double backslashes:
  1429.   define %f c:\windows\command\chkdsk.exe
  1430.   ...
  1431.   run %f
  1432. This will work; no surprises here.  However, if you had used ASSIGN rather
  1433. than DEFINE, you might have been surprised after all; review pages 348-349 of
  1434. "Using C-Kermit" (2nd Ed) for the difference between DEFINE and ASSIGN.
  1435. We have said that any Kermit 95 or MS-DOS Kermit command that parses filenames
  1436. itself -- SEND, for example -- does not require double backslashes since it
  1437. knows it is parsing a filename.  So since the following works:
  1438.   send c:windowscommandchkdsk.exe
  1439. Should the following also work?
  1440.   define %f c:windowscommandchkdsk.exe
  1441.   ...
  1442.   send %f
  1443. Answer: No.  Why?  Because %f is evaluated "recursively", to allow for the
  1444. possibility that its definition contains further variable references.  This is
  1445. true of all "backslash-percent-letter" (or -digit) variables, and also for
  1446. array references.  So %f becomes c:windowscommandchkdsk.exe, which
  1447. becomes c:windowscommandchkdsk.exe.
  1448. The trick here is to use the "other" kind of variable, that is evaluated
  1449. only "one level deep" rather than recursively:
  1450.   define filename c:windowscommandchkdsk.exe
  1451.   ...
  1452.   send m(filename)
  1453. Similarly if you want to prompt the user for a filename:
  1454.   ask filename { Please type a filename: }
  1455.    Please type a filename: c:windowscommandchkdsk.exe
  1456.   send m(filename)
  1457. 1.11.5. Passing DOS Filenames as Parameters to Macros
  1458. Suppose you want to pass a DOS filename containing backslashes as a parameter
  1459. to a Kermit macro.  This raises two issues:
  1460.  1. Parameters to macros are "just text" and so are fully evaluated before
  1461.     they are passed to the macro.
  1462.  2. Once inside the macro, the formal parameters %1, %2, ... %9 are the
  1463.     type of variable that is evaluated recursively.
  1464. Thus a DOS filename is ruined once in the act of parsing the macro invocation,
  1465. and again when referring to it from within the macro.  To illustrate, suppose
  1466. "test" is a macro.  Then in the invocation:
  1467.   test c:mydirblah.txt
  1468. "c:mydirblah.txt" is assigned to %1.  However, if we double the backslashes:
  1469.   test c:\mydir\blah.txt
  1470. "c:mydirblah.txt" is assigned to %1.  But then when you refer to %1 in
  1471. the macro, it is evaluated recursively, resulting in "c:mydirblah.txt".
  1472. To illustrate:
  1473.   define test echo %1
  1474.   test c:mydirblah.txt
  1475.   c:mydirblah.txt
  1476.   test c:\mydir\blah.txt
  1477.   c:mydirblah.txt
  1478.   test c:\\mydir\\blah.txt
  1479.   c:mydirblah.txt
  1480. Let's address each part of the problem separately.  First, inside the macro.
  1481. You can use the fcontents() function to force a backslash-percent variable
  1482. (such as a macro argument) to be evaluated one level deep instead of
  1483. recursively, for example:
  1484.   define test echo { The filename is "fcontents(%1)"}
  1485.   test c:mydirblah.txt               ; We don't expect this to work
  1486.    The filename is "c:mydirblah.txt"   ; and it doesn't.
  1487.   test c:\mydir\blah.txt             ; But this does...
  1488.    The filename is "c:mydirblah.txt"
  1489. Thus if the filename arrives inside the macro with single backslashes, the
  1490. backslashes are preserved if you always refer to the parameter through the
  1491. fcontents() function.
  1492. Now how to ensure that backslashes are not stripped or misinterpreted when
  1493. passing a filename to a macro?  This brings us back to what we learned in
  1494. earlier sections:
  1495.  1. If it is a literal filename, either double the backslashes, or (if the
  1496.     filename is to be used only within Kermit itself and not passed to a
  1497.     DOS shell, or it is to be passed to an alternative shell that accepts
  1498.     forward slash as a directory separator), use forward slash instead of
  1499.     backslash as the directory separator.
  1500.  2. If it is a variable that contains a filename, make sure you use a
  1501.     macro-style variable name, rather than a backslash-percent-character
  1502.     name.
  1503. Examples:
  1504.   define test echo fcontents(%1)
  1505.   define filename c:mydirblah.txt
  1506.   test c:\mydir\blah.txt  ; Literal filename with double backslashes
  1507.   c:mydirblah.txt
  1508.   test c:/mydir/blah.txt    ; Literal filename with forward slashes
  1509.   c:/mydir/blah.txt
  1510.   test m(filename)         ; Variable
  1511.   c:mydirblah.txt
  1512. But what if you don't like these rules and you still want to pass a literal
  1513. filename containing single backslashes to a macro?  This is possible too, but
  1514. a bit tricky: turn command quoting off before invoking the macro, and then
  1515. turn it back on inside the macro.  Example:
  1516.   define test set command quoting on, echo fcontents(%1)
  1517.   set command quoting off
  1518.   test c:mydirblah.txt
  1519.   c:mydirblah.txt
  1520. Upon return from the macro, command quoting is back on (since the macro
  1521. turned it on).
  1522. Obviously this trick can not be used if the filename is stored in a variable,
  1523. since it prevents the variable from being evaluated.
  1524. 1.11.6. Passing DOS File Names from Macro Parameters to the DOS Shell
  1525. Now suppose you need to pass a DOS filename to a macro, and the macro needs
  1526. to pass it, in turn, to the Windows shell via (say) Kermit's RUN command.
  1527. This works too:
  1528.   define xrun run fcontents(%1)
  1529.   xrun c:\windows\command\chkdsk.exe
  1530. (or you can use the SET COMMAND QUOTING OFF / ON technique described above
  1531. to avoid the double backslashes.)  But..
  1532.   xrun c:/windows/command/chkdsk.exe
  1533. does not work if the Windows shell does not recognize "/" as a directory
  1534. separator.  If there is a chance that a filename might be passed to the macro
  1535. in this form, the macro will need to convert it to a form acceptable to the
  1536. shell:
  1537.   define xrun run freplace(fcontents(%1),/,\)
  1538. Here we replace all occurrences (if any) of "/" in the argument with "" prior
  1539. to issuing the RUN command.  Of course, in order to specify "" as a literal
  1540. character in the freplace() argument list, we have to double it.
  1541. 1.11.7. Passing DOS Filenames to Kermit from the Shell
  1542. As noted in the manual, the &@[] array contains Kermit's command-line
  1543. arguments.  Suppose one of these arguments, say &@[3], is a DOS filename
  1544. such as C:FOOBARBAZOOFA.TXT.  (Note: In C-Kermit 7.0 and K95 1.1.18
  1545. and later, command-line arguments after "=" or "--" are also available in
  1546. the top-level %1..9 variables; see Section 7.5.)
  1547. Of course you can eliminate any problems by using forward slashes rather
  1548. than backslashes in the filename, but sometimes this is not possible, as when
  1549. the Kermit command line is being generated by another program than can only
  1550. generate "native" format DOS filenames.
  1551. As noted in the manual, "%x" variables and &x[] arrays are always evaluated
  1552. "all the way" (recursively).  If the contents of one of these variables
  1553. contains backslashes, this causes another level of evaluation.
  1554. There is another kind of variable, which is evaluated only "one level deep".
  1555. You can use this to prevent interpretation of the backslashes in the
  1556. filenames.
  1557. Example:
  1558.   assign filename fcontents(&@[3])  ; Transfer contents
  1559.   ...
  1560.   send m(filename)
  1561. Or, more simply:
  1562.   send fcontents(&@[3])
  1563. 1.12. Debugging
  1564. The debug log is produced when you give a "log debug" command.  This is
  1565. normally done at the request of the Kermit help desk, for forwarding to the
  1566. Kermit developers for analysis as a last resort in troubleshooting problems.
  1567. (Last resort because it can grow quite huge in a very short time.)  In cases
  1568. where timing information is critical to understanding a problem, you can
  1569. tell C-Kermit to put a timestamp on each debug log line by giving the command:
  1570.   SET DEBUG TIMESTAMP ON
  1571. At any time before or after activating the debug log (SET DEBUG TIMESTAMP OFF
  1572. turns off timestamping).  Timestamps can be turned off and on as desired while
  1573. logging.  Obviously, they increase the size and growth rate of the log
  1574. significantly, and so should be used sparingly.  Timestamps are of the form
  1575. hh:mm:ss.xxx, where .xxx is thousands of a second (but is included only on
  1576. platforms that include this feature).
  1577. 1.13. Logs
  1578. In UNIX C-Kermit and in K-95, you can now direct any log to a pipe.  This
  1579. not only lets you send your logs to places other than disk files, but also
  1580. lets you customize them to any desired degree.
  1581. LOG { DEBUG, PACKETS, SESSION, TRANSACTION, CONNECTION } { file, pipe } ...
  1582.   A "pipe" is the name of a command, preceded by a vertical bar.  If the
  1583.   pipe contains any spaces, it must be enclosed in braces.
  1584. Here are some examples for UNIX (always remember the importance of getting
  1585. the UNIX shell quoting rules right):
  1586. LOG TRANSACTIONS |lpr
  1587.   This sends the transaction log to the default UNIX printer, rather than
  1588.   to a file (use "lp" rather than "lpr" if necessary).
  1589. LOG TRANSACTIONS {| myfilter > t.log}
  1590.   For those who don't like the format of the transaction log, or want to
  1591.   extract certain information from it; write your own output filter.
  1592. LOG SESSION {| lpr -Plaserwriter}
  1593.   This sends the session log to a specific UNIX printer, rather than to a
  1594.   file.  Note the braces around the pipeline.  These are required because
  1595.   it contains spaces.
  1596. LOG DEBUG {| tail -100 > debug.log}
  1597.   This causes the debug log file to contain only the final 100 lines.
  1598.   Suppose C-Kermit crashes under some unpredictable circumstances, and
  1599.   you need a debug log to catch it in the act.  But the debug log can grow
  1600.   to huge proportions very quickly, possibly filling up the disk.  Piping
  1601.   the debug log through "tail" results in keeping only the last 100 lines
  1602.   (or other number of your choice).
  1603. LOG DEBUG {| grep "^TELNET" > debug.log}
  1604.   This one shows how to log only Telnet negotiations.  Piping the debug log
  1605.   through grep or egrep lets you log only specific information, rather than
  1606.   everything.  "man grep" for further info.
  1607. LOG DEBUG {| gzip -c > debug.log.gz}
  1608.   Creates a full debug log, but compressed by gzip to save space.
  1609. LOG PACKETS {| tr "\01" "X" | cut -c9- > packet.log}
  1610.   This one writes the regular packet log, but translates the Ctrl-A that
  1611.   starts each packet to the letter "X" and removes the s-nn-nn- notation
  1612.   from the beginning of each line.  Note the double backslash (normal Kermit
  1613.   quoting rules).  "man tr" and "man cut" for further info.
  1614. See Section 2.12 for information about the new connection log.
  1615. 1.14. Automatic File-Transfer Packet Recognition at the Command Prompt
  1616. Beginning in version 7.0, C-Kermit can recognize Kermit (and in some cases
  1617. also Zmodem) file-transfer packets while at its command prompt.  This is
  1618. convenient (for example), if you escaped back from a remote Kermit program
  1619. and told the local Kermit program to send a file, but forgot to tell the
  1620. remote Kermit program to receive it (and the local Kermit did not have the
  1621. "send a Kermit receive command" feature available).  This feature is
  1622. controlled by the following command:
  1623. SET COMMAND AUTODOWNLOAD { ON, OFF }
  1624.   When ON, which is the default, the command parser recognizes Kermit
  1625.   packets when Kermit is in remote mode.  An S packet makes it go into
  1626.   receive mode, an I packet makes it go into server mode.  When OFF, packet
  1627.   recognition is disabled and the behavior when a packet is received at the
  1628.   command prompt is as it was in C-Kermit 6.1 and earlier (namely to print
  1629.   an error message).
  1630. COMMAND AUTODOWNLOAD is the command-mode equivalent of TERMINAL AUTODOWNLOAD,
  1631. which is effective during CONNECT mode.
  1632. 1.15. The TYPE Command
  1633. The TYPE command now accepts a selection of optional switches (Section 1.5),
  1634. and also sets several variables.
  1635. Syntax: TYPE [ switches... ] filename
  1636. Variables:
  1637.   v(ty_ln)  Line number of current line (during TYPE command; see /PREFIX)
  1638.   v(ty_lc)  Line count of file most recently TYPEd.
  1639.   v(ty_mc)  Match count of file most recently TYPEd (see /MATCH).
  1640. Switches:
  1641. /PAGE
  1642.   If /PAGE is included, Kermit pauses at the end of each screenful and issues
  1643.   a "more?" prompt.  You may press the space bar to view the next page
  1644.   (screenful), or press "q" or "n" to return to the C-Kermit prompt.  If this
  1645.   switch is given, it overrides the COMMAND MORE-PROMPTING setting for this
  1646.   command only.  If it is not given, paging is according to COMMAND
  1647.   MORE-PROMPTING.
  1648. /NOPAGE
  1649.   Do not pause at the end of each screenful; show the whole file (or all
  1650.   selected lines) at once.  If this switch is given, it overrides the COMMAND
  1651.   MORE-PROMPTING setting for this command only.  If it is not given, paging is
  1652.   according to COMMAND MORE-PROMPTING.
  1653. /HEAD[:n]
  1654.   Only show the first "n" lines of the file (where n is a number).
  1655.   If n is omitted, 10 is used.
  1656. /TAIL[:n]
  1657.   Only show the last "n" lines of the file (where n is a number).  If n is
  1658.   omitted, 10 is used.  Note: /HEAD and /TAIL can't be combined; if you give
  1659.   both switches, only the most recent one is used.
  1660. /MATCH:pattern
  1661.   Only type lines from the file that match the given pattern (see Section
  1662.   4.9.1 for pattern notation).  UNIX users familiar with grep should note
  1663.   a significant difference: there is no implied "*" at the beginning and end
  1664.   of the pattern.  Thus:
  1665.     TYPE /MATCH:foo    Lists lines whose entire contents are "foo".
  1666.     TYPE /MATCH:foo*   Lists lines that start with "foo".
  1667.     TYPE /MATCH:*foo   Lists lines that end with "foo".
  1668.     TYPE /MATCH:*foo*  Lists lines that have "foo" anywhere in them.
  1669.   /HEAD and /TAIL apply after /MATCH, so "type /tail:20 /match:x*" shows the
  1670.   last 20 lines in the file that start with "x".
  1671. /PREFIX:string
  1672.   Print the given string at the beginning of each line.  The string may be a
  1673.   constant, a variable, or a quoted variable.  If it's an unquoted variable,
  1674.   its value at the time the TYPE command was given is used as a constant.
  1675.   If it is a quoted variable, it is re-evaluated for each line; a useful
  1676.   variable for this context is v(ty_ln) (the line number of the current line
  1677.   being typed).  If the prefix is to include spaces, it must be enclosed in
  1678.   braces.  Examples:
  1679.   type /prefix:{oofa.txt: } /match:*thing* oofa.txt
  1680.     Prints all lines in oofa.txt that contain "thing" with the filename
  1681.     itself as the prefix (similar to UNIX grep).
  1682.   type /prefix:{v(time). } oofa.txt
  1683.     Prefixes each line of oofa.txt with the time at which the TYPE command
  1684.     was given (one backslash)
  1685.   type /prefix:{\v(time). } oofa.txt
  1686.     Prefixes each line of oofa.txt with the time at which that line is
  1687.     being typed (two backslashes).
  1688.   type /prefix:{\v(ty_ln). } oofa.txt
  1689.     Prefixes each line of oofa.txt with its line number.
  1690.   type /prefix:{\flpad(\v(ty_ln),4). } oofa.txt
  1691.     Same as the previous example, except the line number is right-adjusted
  1692.     in a 4-column field.
  1693. /WIDTH[:n]
  1694.   Truncates each line at column "n" (which must be a number) prior to printing
  1695.   it.  This option can be used for long lines when you don't want them to wrap.
  1696.   If n is omitted, your current screen width is used.
  1697. /COUNT
  1698.   Counts lines and -- if /MATCH was included, matches -- but does not print
  1699.   any lines from the file.  The line and match count is shown at the end,
  1700.   and the variables v(ty_lc) and v(ty_lm) are set accordingly.
  1701. SET OPTIONS TYPE { /PAGE, /NOPAGE, /WIDTH:n }
  1702.   Sets the paging default for TYPE commands, which can be overridden in any
  1703.   particular TYPE command by including the desired switch.
  1704. If a TYPE command is given with no switch, and no SET OPTIONS TYPE selection
  1705. is in effect, paging is according to your COMMAND MORE-PROMPTING setting
  1706. (SHOW COMMAND).
  1707. 1.16. The RESET Command
  1708. The RESET command, added in 7.0, closes all open files and logs, but does not
  1709. affect the open connection (if any).
  1710. 1.17. The COPY and RENAME Commands
  1711. As of C-Kermit 7.0, in the UNIX version only, the COPY and RENAME commands are
  1712. built in and do not call the underlying platform's COPY or RENAME command.
  1713. This allows them to work in "NOPUSH" versions and other circumstances where it
  1714. can't access system commands, and it allows file copying and renaming to be
  1715. done portably in scripts.  The characteristics of the built-in COPY or RENAME
  1716. include:
  1717.  . It fails if the source file is a directory or is wild or lacks read access.
  1718.  . It fails if the source file is the destination file.
  1719.  . It allows the destination file to be a directory, in which case the source
  1720.    file is copied (or renamed) into it with the same name.
  1721.  . It overwrites an existing destination file if its permission allows.
  1722.  . It sets the new file's permission according to umask but also carries
  1723.    forward the source file's execute permission bits if the destination file
  1724.    did not already exist.
  1725.  . It fails if interrupted by Ctrl-C.
  1726.  . Upon error, it prints an appropriate message.
  1727.  . It returns standardized error codes that can be tested by IF SUCCESS / FAIL.
  1728. These commands now also accept the following switches:
  1729.   /LIST (/LOG, /VERBOSE)    = Print "file1 => file2 (OK)" (or error message).
  1730.   /NOLIST (/NOLOG, /QUIET)  = Don't print anything (except error messages).
  1731. /NOLIST is the default.
  1732. The same built-in code is used by the UNIX C-Kermit server to execute REMOTE
  1733. COPY commands (except in this case no switches are available).
  1734. The COPY command also accepts the following additional switches.  When any of
  1735. these are given (and they can be used in any combination except /SWAP and
  1736. /APPEND), some of the checks listed above are relaxed, and thus it might be
  1737. possible to get into trouble in certain cases, e.g. when the source and target
  1738. files are the same file:
  1739.   /APPEND                   = Append source file to destination file.
  1740.   /SWAP-BYTES               = Swap bytes (see Section 6.6.5).
  1741.   /FROMB64                  = Decode the source file from Base64 encoding.
  1742.   /TOB64                    = Encode the target file in Base64.
  1743. Base64 is the encoding commonly used for enclosures in Internet email.
  1744. 1.18. The MANUAL Command
  1745. The MANUAL command can be used to access the appropriate Kermit manual or
  1746. other manual.  The general syntax is:
  1747. MANUAL [ string ]
  1748.   If the string is omitted, C-Kermit asks the underlying system to access the
  1749.   C-Kermit manual using whatever method is appropriate for the system.
  1750. The specific action depends on the system.  In UNIX, a "man" command is
  1751. issued; "kermit" is the default argument but other manual topics may be
  1752. specified.  If the "man" command allows index or string searching, the
  1753. appropriate syntax may be included.
  1754. In Kermit 95, the MANUAL command brings up the HTML online K95 manual.
  1755. In VMS and elsewhere, "man" is simply translated to "help", with a default
  1756. argument of "kermit"; other and/or additional arguments may be included
  1757. according to the definition of the system's "help" command.
  1758. Correct operation of the "man" command in C-Kermit depends on the appropriate
  1759. man page or help topic having been installed in the right place with the
  1760. right permissions and format.
  1761. 1.19. String and Filename Matching Patterns
  1762. A pattern is a string that includes special notation for matching classes or
  1763. sequences of characters.  C-Kermit 7.0 / K95 1.1.18 supports patterns in
  1764. several places:
  1765.  . Filenames (Section 4.9)
  1766.  . SWITCH case labels (Section 7.18)
  1767.  . The new IF MATCH statement (Section 7.4)
  1768.  . TYPE /MATCH (Section 1.15)
  1769.  . SET FILE TEXT-PATTERNS and BINARY-PATTERNS (Section 4.3)
  1770.  . The fsearch() and farraylook() functions (Sections 7.3 and 7.10.7)
  1771.  . The fpattern() function used with [M,RE]INPUT (Section 7.1)
  1772. Patterns are also called wildcards, especially when used for filename
  1773. matching.  C-Kermit's pattern syntax is explained in Section 4.9.1, and also
  1774. by the HELP WILDCARDS command.
  1775. 1.20. Multiple Commands on One Line
  1776. As of C-Kermit 7.0, commands can be grouped together on one line by separating
  1777. the commands with commas and enclosing the list in braces.  For example:
  1778.   { echo One, echo Two, echo Three }
  1779. or:
  1780.   do { echo One, echo Two, echo Three }
  1781. Command lists can be nested:
  1782.   [ do ] { echo One, echo Two, if true { echo A, echo B}, echo Three }
  1783. and the END command works as it does in macros:
  1784.   [ do ] { echo One, echo Two, if true end, echo Three }
  1785. The "one line" stricture is, of course, pliant to line-continuation
  1786. conventions, namely that lines ending in hyphen (-) or left brace ({) are
  1787. to be continued.  Thus the first example can also be rendered:
  1788.   [ do ] {
  1789.       echo One
  1790.       echo Two
  1791.       echo Three
  1792.   }
  1793. (the "do" is optional).
  1794. 1.21. What Do I Have?
  1795. C-Kermit can be built for hundreds of different platforms with practically
  1796. countless configuration options.  Certain commands might not be available in
  1797. certain configurations, etc.  Even on the same platform, different builds are
  1798. possible: "maximum functionality", "minimum size", "maximum performance", and
  1799. so on.  You can find out a lot about the configuration of your C-Kermit
  1800. program with the SHOW FEATURES command.  Of course, a lot of what it says,
  1801. especially in the bottom part, might seem like gibberish, but can be
  1802. deciphered with a Rosetta Stone (such as the C-Kermit source or the ckccfg.txt
  1803. file).  In any case, the output from SHOW FEATURES might easily explain why
  1804. some expected feature is missing, or some buffer is smaller than expected.
  1805. Here's a sample of the bottom section for the SunOS version:
  1806. C-Kermit 7.0.196, 1 Jan 2000
  1807. Major optional features included:
  1808.  Network support (type SHOW NET for further info)
  1809.  Telnet Kermit Option
  1810.  Hardware flow control
  1811.  External XYZMODEM protocol support
  1812.  Latin-1 (West European) character-set translation
  1813.  Latin-2 (East European) character-set translation
  1814.  Cyrillic (Russian, Ukrainian, etc) character-set translation
  1815.  Greek character-set translation
  1816.  Hebrew character-set translation
  1817.  Japanese character-set translation
  1818.  Unicode character-set translation
  1819.  Pseudoterminal control
  1820.  REDIRECT command
  1821.  RESEND command
  1822.  Fullscreen file transfer display
  1823.  Control-character unprefixing
  1824.  Streaming
  1825.  Autodownload
  1826. Major optional features not included:
  1827.  No Kerberos(TM) authentication
  1828.  No SRP(TM) (Secure Remote Password) protocol
  1829.  No Secure Sockets Layer (SSL) protocol
  1830.  No Transport Layer Security (TLS) protocol
  1831.  No encryption
  1832.  No X Windows forwarding
  1833. Host info:
  1834.  Machine:    sun4m
  1835.  Model:      (unknown)
  1836.  OS:         SunOS
  1837.  OS Release: 4.1.3_U1
  1838.  OS Version: 4
  1839. Target: sunos41gsc
  1840. GCC version: 2.7.2
  1841. Compiled Dec 31 1999 10:38:54, options:
  1842.  __GNUC__ __STDC__ _POSIX_JOB_CONTROL _SC_JOB_CONTROL ARRAYREFLEN=1024 BIGBUFOK
  1843.  BROWSER BSD4 CK_ANSIC CK_APC CK_AUTODL CK_CURSES CK_DNS_SRV CK_ENVIRONMENT
  1844.  CK_FAST CK_LOGIN CK_MKDIR CK_NAWS CK_PCT_BAR CK_PERMS CK_RECALL CK_RTSCTS
  1845.  CK_SPEED CK_TIMERS CK_TMPDIR CK_TTGWSIZ CK_TTYFD CK_WREFRESH CKEXEC
  1846.  CKFLOAT=double CKGHNLHOST ckmaxfiles=64 CKMAXOPEN=64 CKMAXPATH=1023 CKREALPATH
  1847.  CKREGEX CKSYSLOG CKTUNING CMDBL=32763 CMDDEP=64 CONGSPD DCMDBUF DIRENT DYNAMIC
  1848.  FNFLOAT FORDEPTH=32 GFTIMER HADDRLIST HDBUUCP IFDEBUG IKS_OPTION IKSDB
  1849.  IKSDCONF INBUFSIZE=32768 INPBUFSIZ=4096 MAC_MAX=16384 MACLEVEL=128 MAXDDIR=32
  1850.  MAXDNUMS=4095 MAXGETPATH=128 MAXTAKE=54 MAXWLD=102400 MSENDMAX=1024 NETCMD
  1851.  NETCONN NETPTY NOKVERBS NOSETBUF OBUFSIZE=32768 PARSENSE PATTERNS PIPESEND
  1852.  RENAME RLOGCODE SAVEDUID SELECT SIG_V SOL_SOCKET sparc STREAMING sun SUNOS4
  1853.  SYSTIMEH TCPSOCKET TIMEH TLOG TNCODE TTLEBUF TTSPDLIST UIDBUFLEN=256 UNIX
  1854.  UNPREFIXZERO USE_LSTAT USE_MEMCPY VNAML=4096 WHATAMI XFRCAN Z_MAXCHAN=46
  1855.  z_maxchan=46 ZXREWIND
  1856.  byte order: big endian
  1857.  sizeofs: int=4 long=4 short=2 char=1 char*=4 float=4 double=8
  1858.  floating-point: precision=16 rounding=1
  1859. Without going into detail about what all the notation means, notice a couple
  1860. things:
  1861.  . The Options section shows symbols ("macros") in effect during compilation,
  1862.    together with their values (for those that have values).  The options are
  1863.    listed in alphabetical order to make any particular option easier to find.
  1864.  . MAXWLD is the maximum number of files that a wildcard can expand to.
  1865.  . Anything starting with "NO" is a feature (or something other than a
  1866.    feature) that has been deliberately "compiled out", or omitted.
  1867.  . Important items for script writers include: CMDBL=32763 (the size of the
  1868.    command buffer and therefore the maximum length for a macro or variable
  1869.    definition; CMDDEP=64 (the limit on recursion depth); FORDEPTH=32 (the
  1870.    nesting limit on FOR loops); INBUFSIZE=32768 (the size of the INPUT command
  1871.    circular buffer); MAC_MAX=16384 (the maximum number of macros), etc.
  1872. See the ckccfg.txt file for details.
  1873. 1.22. Generalized File Input and Output
  1874. C-Kermit 7.0 adds a new generalized I/O system for stream files, augmenting
  1875. (and to some extent, overlapping with) the older OPEN, READ, WRITE, and CLOSE
  1876. commands.  In the new file i/o system, which can be used simultaneously with
  1877. the old one, all commands are grouped together under the new FILE keyword,
  1878. and some related functions and variables are added.
  1879. 1.22.1. Why Another I/O System?
  1880. The well-known LOG, OPEN, READ, WRITE, and CLOSE commands have the following
  1881. restrictions:
  1882.  a. Only one READ file and one WRITE file can be open at a time.
  1883.  b. The READ and WRITE commands are strictly line oriented.
  1884.  c. These commands can not be used with binary files.
  1885.  d. They do not support read/write access or random access.
  1886.  e. The syntax is a bit counterintuitive for programmers.
  1887. The new file i/o system allows multiple files to be open at once, in any
  1888. desired combination of modes (read/write/append) supported by the operating
  1889. system, for line, block (record), or character i/o, for sequential or random
  1890. access, using consistent syntax and conventions.
  1891. The new system, however, does not replace the old one, since the old system
  1892. still must be used for:
  1893.  a. The session, packet, debug, transaction, and connection logs.
  1894.  b. Reading and writing commands rather than files.
  1895.  c. Existing scripts.
  1896. The new system works only with regular files, not with commands or pipes or
  1897. mailboxes or pseudoterminals.  No special provisions are made in the FILE
  1898. commands for handling devices or network connections, nor for preventing you
  1899. from trying to open them; if the underlying operating system treats them
  1900. like regular stream disk files, the FILE commands (except, of course SEEK,
  1901. REWIND, and COUNT) might work with them.  (In C programming terms, the FILE
  1902. commands are, at present, nothing more than a front end to fopen() / fread()
  1903. / fwrite() / fclose() and friends, which are a portable API to sequential
  1904. files, but this might change in the future for platforms like VMS and VOS
  1905. that have more complicated file systems.)
  1906. Definitions:
  1907. Channel
  1908.   A number assigned to a file when it is opened, by which it must be referred
  1909.   to in all input/output operations.
  1910. Read/Write Pointer
  1911.   The current position in an open file, expressed as the 0-based byte count
  1912.   from the beginning.
  1913. 1.22.2. The FILE Command
  1914. The FILE command has the following syntax:
  1915.   FILE <keyword> [ <switches> ] <channel> [ <data> ]
  1916. The <keyword> specifies the function: FILE OPEN, FILE READ, FILE WRITE, FILE
  1917. CLOSE, etc.  For convenience (and for familiarity to C programmers), the
  1918. two-word FILE commands can be shortened to the single words FOPEN, FREAD,
  1919. FWRITE, FCLOSE, and so on.  Switches are optional, and modify or amplify the
  1920. requested file function.
  1921. As in C, Fortran, and other programming languages, open files are referred to
  1922. by "channels", integers such as 0, 1, 2, 3, and so on.  A channel number is
  1923. assigned when you open a file.  The number of available channels depends on
  1924. the underlying operating system, and can be seen in the variable:
  1925.   v(f_max)
  1926. or by giving the FILE LIST (FLIST) command.  Channels are discussed in
  1927. greater detail in Section 1.22.4.
  1928. FILE command errors can be caught with IF FAIL after the FILE command.  In
  1929. addition, the v(f_error) variable is set to the completion code of the
  1930. command: 0 if no error, or a negative number if there was an error.  The error
  1931. codes are listed in Section 1.22.5.
  1932. The command to open a file is:
  1933. FILE OPEN [ switches ] <variable> <filename>
  1934.   Opens a file for the type of access specified by the switches, or for
  1935.   read-only access if no switches are given.  Upon success, a channel number
  1936.   is assigned to this file and stored in the given variable so you can refer
  1937.   to the open file in subsequent i/o commands.  If the file can not be opened,
  1938.   the FILE OPEN command fails.  Synonym: FOPEN.
  1939. The FILE OPEN switches are:
  1940. /READ
  1941.   Open the file for read access.  If no switches are given, /READ is assumed.
  1942.   If the file does not exist or can't be opened for read access, the FILE OPEN
  1943.   command fails.
  1944. /WRITE
  1945.   Allow writing.  If a file of the same name already exists, it is
  1946.   overwritten unless /READ or /APPEND is also included.  If a file of the
  1947.   given name does not exist, it is created.
  1948. /APPEND
  1949.   Equivalent to /WRITE, except that if the file exists, it is not destroyed.
  1950.   The read/write pointer is set to the end of the file, so unless you change
  1951.   it with FILE SEEK or REWIND (see below), the first FILE WRITE command adds
  1952.   to the end of the file, preserving what was there already.  If /WRITE is
  1953.   also given, it is ignored.
  1954. /BINARY
  1955.   Open the file in "binary" mode, rather than text mode.  This switch is
  1956.   meaningless (but still can be used) in UNIX.  In VMS, Windows, and OS/2,
  1957.   it inhibits end-of-line processing and conversion, and so should be used
  1958.   for binary files and/or files that are to be accessed in record or
  1959.   character mode rather than line by line.
  1960. The variable for the channel number can be any kind of variable: the %x kind,
  1961. a macro name, or an array element.  But it must be a variable, not a number --
  1962. C-Kermit assigns the channel number; you can't tell it what number to use.
  1963. Example:
  1964.   FILE OPEN %c oofa.txt                  ; Open oofa.txt for reading.
  1965.   IF FAIL exit 1 Can't open oofa.txt      ; Always check to see if it worked.
  1966.   ECHO oofa.txt: channel = %c
  1967. If the file oofa.txt is opened successfully, a channel number is assigned
  1968. to the variable %c.  Here's another example using a macro name for the
  1969. channel number:
  1970.   FILE OPEN channel oofa.txt              ; Open oofa.txt for reading.
  1971.   IF SUCCESS ECHO oofa.txt: channel = m(channel)
  1972. Switches can be combined when it makes sense and the underlying operating
  1973. system allows it.  For example, to open a file in binary mode for reading and
  1974. writing (sometimes called "update"):
  1975.   FILE OPEN /READ /WRITE /BINARY %c budget.db
  1976. Some combinations might be allowed, others not.  For example /READ /APPEND
  1977. will usually not be allowed.  /WRITE /APPEND is treated as /APPEND.
  1978. A major advantage of the new system over the older one is that you can have
  1979. multiple files open at once.  Suppose, for example, that you want to open all
  1980. the files in a certain directory at once:
  1981.   .%n := ffiles(/usr/olga*,&f)          ; Get file list into array.
  1982.   if ( > %n v(f_max) ) {                ; Make sure there aren't too many.
  1983.       exit 1 {v(dir): %n = Too many files}
  1984.   }
  1985.   declare &c[%n]                        ; Make array for channel numbers.
  1986.   for %i 1 %n 1 {                       ; Loop to open every file...
  1987.       file open &c[%i] &f[%i]         ; Try to open this one
  1988.       if fail exit 1 Open error: &f[%i] ; Check for failure
  1989.   }
  1990. If this loop completes successfully, the &c[] array will contain %n
  1991. channel numbers of open files in elements 1 through %n.
  1992. Any file that you open with FILE OPEN stays open until you close it.  The
  1993. command to close a file is:
  1994. FILE CLOSE { ALL, <channel> }
  1995.   If a channel number is given and the channel refers to an open file, the
  1996.   file is closed and the channel is freed for reuse; if the channel does not
  1997.   refer to an open file, an error message is printed and the command fails.
  1998.   If ALL is specified instead of a specific channel, all files opened with
  1999.   FILE OPEN are closed and if all open files were closed successfully (even
  2000.   if no files were open), the command succeeds; if any open file could not be
  2001.   closed, the command fails; however, all open files that could be closed are
  2002.   still closed.  Synonym: FCLOSE.
  2003. FILE CLOSE might fail because, for example, the disk filled up or a quota
  2004. was exceeded.
  2005. Example:
  2006.   fopen /write %c new.txt                ; Open new.txt for writing.
  2007.   if fail exit 1                          ; Check for error.
  2008.   fclose %c                              ; Close the file we just opened.
  2009. This creates a 0-length file called new.txt.
  2010. Note that FILE OPEN /WRITE (without /READ or /APPEND) always creates a new
  2011. file, and therefore destroys any file with the same name that might already
  2012. exist (assuming you have permission to delete it).  To avoid overwriting
  2013. existing files, simply check first:
  2014.   if exist new.txt exit 1 {Fatal - new.txt already exists}
  2015.   fopen /write %c new.txt
  2016.   if fail ...
  2017. The next two commands give information about open files:
  2018. FILE STATUS <channel>
  2019.   Tells the name of the file, if any, open on the given channel and the
  2020.   switches it was opened with.  The read/write pointer is also shown; this is
  2021.   where the next read or write will occur; "[EOF]" is shown if the current
  2022.   position in the open file is the end -- i.e. the next read will fail if the
  2023.   file was opened in /READ mode; the next write will add material to the end.
  2024.   The current line number (0-based) is also shown if known.  The FILE STATUS
  2025.   command succeeds if the <channel> is open, and fails if there is no open
  2026.   file on the given channel, or if the channel number is invalid or out of
  2027.   range.  Synonym FSTATUS.
  2028. FILE LIST
  2029.   Lists the channel number and name of each open file, along with its OPEN
  2030.   modes (R, W, A, B, RW, etc) and its current read/write pointer or "[EOF]" if
  2031.   it is at the end.  Also tells the number of files currently opened with FILE
  2032.   OPEN, plus the maximum number of open files allowed by the system and the
  2033.   maximum number allowed for FILE OPEN.  Synonym: FLIST.
  2034. Next come the commands for reading and writing files:
  2035. FILE READ [ switches ] <channel> [ <variable> ]
  2036.   Reads data from the file on the given channel number into the <variable>,
  2037.   if one was given; if no variable was given, the result is printed on the
  2038.   screen.  IMPORTANT: The variable should normally be a macro name rather
  2039.   than a %x or &x[] variable if you want backslash characters in the file
  2040.   to be taken literally (see pp.408-412 of "Using C-Kermit" for an
  2041.   explanation; you can also read into a %x or &x[] variable, but then you
  2042.   must remember to protect future references to it by fcontents() if you
  2043.   don't want C-Kermit to process any backslashes it might contain).  The
  2044.   desired amount of data (according to the switches) is read from the file at
  2045.   the current read/write pointer, and upon completion the read/write position
  2046.   is updated to first byte after the data that was read, no matter what
  2047.   switches were given.  Synonym: FREAD.
  2048. FILE WRITE [ switches ] <channel> <text>
  2049.   Writes the given text to the file on the given channel number.  The <text>,
  2050.   of course, can be literal text or a variable, or any combination.  If the
  2051.   text might contain leading or trailing spaces, it must be enclosed in braces
  2052.   if you want to preserve them.  Synonym: FWRITE.
  2053. Before proceeding, a caution about the NUL character.  C-Kermit is so named
  2054. because it is a Kermit program written in the C language.  In C, character
  2055. strings are represented as a sequence of non-NUL bytes terminated by a NUL
  2056. byte (a byte in which all bits are 0).  Thus a C string can not contain NUL
  2057. bytes; it always ends with the first NUL byte.  C-Kermit variables are
  2058. implemented as C strings and therefore can't contain NUL bytes either, so the
  2059. FILE READ and FILE WRITE commands do not handle files or strings that contain
  2060. NUL bytes, except when the /CHARACTER switch is included with the FILE READ or
  2061. WRITE command, or when /LPAD:0 or /RPAD:0 is given with the FILE WRITE command;
  2062. these switches are explained below.
  2063. Also note that Kermit can not be used read or write binary numbers in the
  2064. machine's internal format (integer or floating-point); in general, numbers can
  2065. be processed only when represented as numeric or floating-point strings.
  2066. FILE READ switches are:
  2067. /LINE
  2068.   Specifies that a line of text is to be read.  A line is defined according
  2069.   to the underlying operating system's text-file format.  For example, in
  2070.   UNIX a line is a sequence of characters up to and including a linefeed,
  2071.   or the end of the file, which ever comes first.  The line terminator (if
  2072.   any) is removed before assigning the text to the variable.  If no switches
  2073.   are included with the FILE READ command, /LINE is assumed.  Normally this
  2074.   switch should not be used with files opened in /BINARY mode (but nothing
  2075.   prevents it either).
  2076. /SIZE:number
  2077.   Specifies that the given number of bytes (characters) is to be read.  The
  2078.   actual number of bytes returned will be less if the end of file is reached
  2079.   (or a NUL byte is encountered).  For example, if a file is 514 bytes long,
  2080.   FILE READ /SIZE:512 returns 512 bytes the first time and 2 bytes the second
  2081.   time.  FILE READ /SIZE provides a kind of "record i/o" for files that do not
  2082.   necessarily contain lines.  The resulting block of characters is assigned to
  2083.   the variable without any editing.  Synonym: /BLOCK.
  2084. /CHARACTER
  2085.   Equivalent to /SIZE:1.  If FILE READ /CHAR succeeds but the <variable> is
  2086.   empty, this indicates a NUL byte was read.  Synonym: BYTE.
  2087. FILE WRITE switches are:
  2088. /LINE
  2089.   Specifies that an appropriate line terminator is to be added to the
  2090.   end of the <text>.  If no switches are included, /LINE is assumed.
  2091. /SIZE:number
  2092.   Specifies that the given number of bytes (characters) is to be written.
  2093.   If the given <text> is longer than the requested size, it is truncated;
  2094.   if is shorter, it is padded according /LPAD and /RPAD switches.  Synonym:
  2095.   /BLOCK.
  2096. /LPAD[:value]
  2097.   If /SIZE was given, but the <text> is shorter than the requested size, the
  2098.   text is padded on the left with sufficient copies of the character whose
  2099.   ASCII value is given to write the given length.  If no value is specified,
  2100.   32 (the code for Space) is used.  The value can also be 0 to write the