- [ [1]Contents ] [ [2]C-Kermit ] [ [3]Kermit Home ]
+ [1]The Columbia Crown The Kermit Project | Columbia University
+ 612 West 115th Street, New York NY 10025 USA o [2]kermit@columbia.edu
+ ...since 1981
+ [3]Home [4]Kermit 95 [5]C-Kermit [6]Scripts [7]Current [8]New [9]FAQ
+ [10]Support
- Supplement to Using C-Kermit, Second Edition
+Supplement to [11]Using C-Kermit , 2nd Edition
For C-Kermit 7.0
As of C-Kermit version: 7.0.196
-This file last updated: 8 February 2000
+This file created: 8 February 2000
+This file last updated:
+Mon Aug 8 10:39:18 2011
+
Authors: Frank da Cruz and Christine M. Gianone
Address: The Kermit Project
New York NY 10025-7799
USA
Fax: +1 (212) 662-6442
-E-Mail: [4]kermit-support@columbia.edu
-Web: [5]http://www.columbia.edu/kermit/
-Or: [6]http://www.kermit-project.org/
-Or: [7]http://www.columbia.nyc.ny.us/kermit/
- _________________________________________________________________
+E-Mail: [12]kermit-support@columbia.edu
+Web: [13]http://www.columbia.edu/kermit/
+Or: [14]http://www.kermit-project.org/
+Or: [15]http://www.columbia.nyc.ny.us/kermit/
- NOTICES
+NOTICES
This document:
Copyright © 1997, 2000, Frank da Cruz and Christine M. Gianone.
C-Kermit:
Copyright © 1985, 2000,
Trustees of Columbia University in the City of New York. All
- rights reserved. See the C-Kermit [8]COPYING.TXT file or the
- copyright text in the [9]ckcmai.c module for disclaimer and
+ rights reserved. See the C-Kermit [16]COPYING.TXT file or the
+ copyright text in the [17]ckcmai.c module for disclaimer and
permissions.
When Kerberos(TM) and/or SRP(TM) (Secure Remote Password) and/or SSL
California.
Portions Copyright © 1991, 1992, 1993, 1994, 1995 by AT&T.
Portions Copyright © 1997, Stanford University.
- Portions Copyright © 1995-1997, Eric Young
- <eay@cryptosoft.com>.
+ Portions Copyright © 1995-1997, Eric Young <eay@cryptosoft.com>.
For the full text of the third-party copyright notices, see
- [10]Appendix V.
- _________________________________________________________________
+ [18]Appendix V.
- WHAT IS IN THIS FILE
+WHAT IS IN THIS FILE
This file lists changes made to C-Kermit since the second edition of
- the book [11]Using C-Kermit was published and C-Kermit 6.0 was
- released in November 1996. Use this file as a supplement to the second
- edition of Using C-Kermit until the third edition is published some
- time in 2000. If the "most recent update" shown above is long ago,
- contact Columbia University to see if there is a newer release.
+ the book [19]Using C-Kermit was published and C-Kermit 6.0 was released
+ in November 1996. Use this file as a supplement to the second edition
+ of Using C-Kermit until the third edition is published some time in
+ 2000. If the "most recent update" shown above is long ago, contact
+ Columbia University to see if there is a newer release.
- For further information, also see the [12]CKCBWR.TXT ("C-Kermit
+ For further information, also see the [20]CKCBWR.TXT ("C-Kermit
beware") file for hints, tips, tricks, restrictions, frequently asked
questions, etc, plus the system-specific "beware file", e.g.
- [13]CKUBWR.TXT for UNIX, [14]CKVBWR.TXT for VMS, etc, and also any
- system-specific update files such as KERMIT95.HTM for Kermit 95 (in
- the DOCS\MANUAL\ subdirectory of your K95 directory).
+ [21]CKUBWR.TXT for UNIX, [22]CKVBWR.TXT for VMS, etc, and also any
+ system-specific update files such as KERMIT95.HTM for Kermit 95 (in the
+ DOCS\MANUAL\ subdirectory of your K95 directory).
This Web-based copy of the C-Kermit 7.0 update notes supersedes the
plain-text CKERMIT2.TXT file. All changes after 19 January 2000
appear only here in the Web version. If you need an up-to-date
plain-text copy, use your Web browser to save this page as plain
- text.
- _________________________________________________________________
+ text.
- ABOUT FILENAMES
+ABOUT FILENAMES
In this document, filenames are generally shown in uppercase, but on
file systems with case-sensitive names such as UNIX, OS-9, and AOS/VS,
- lowercase names are used: [15]ckubwr.txt, [16]ckermit70.txt, etc.
- _________________________________________________________________
+ lowercase names are used: [23]ckubwr.txt, [24]ckermit70.txt, etc.
- ADDITIONAL FILES
+ADDITIONAL FILES
Several other files accompany this new Kermit release:
Discussion of Kermit's new authentication and encryption
features:
- + [17]Plain-text version
- + [18]HTML (hypertext) version
+ + [25]Plain-text version
+ + [26]HTML (hypertext) version
IKSD.TXT
How to install and manage an Internet Kermit Service Daemon.
- + [19]Plain-text version
- + [20]HTML (hypertext) version
+ + [27]Plain-text version
+ + [28]HTML (hypertext) version
- Also see [21]cuiksd.htm for instructions for use.
+ Also see [29]cuiksd.htm for instructions for use.
TELNET.TXT
- A thorough presentation of Kermit's new advanced Telnet
- features and controls.
+ A thorough presentation of Kermit's new advanced Telnet features
+ and controls.
- + [22]Plain-text version
- + [23]HTML (hypertext) version
- _________________________________________________________________
+ + [30]Plain-text version
+ + [31]HTML (hypertext) version
- THE NEW C-KERMIT LICENSE
+THE NEW C-KERMIT LICENSE
The C-Kermit license was rewritten for version 7.0 to grant automatic
permission to packagers of free operating-system distributions to
include C-Kermit 7.0. Examples include Linux (GNU/Linux), FreeBSD,
- NetBSD, etc. The new license is in the [24]COPYING.TXT file, and is
+ NetBSD, etc. The new license is in the [32]COPYING.TXT file, and is
also displayed by C-Kermit itself when you give the VERSION or
COPYRIGHT command. The new C-Kermit license does not apply to
- [25]Kermit 95.
- _________________________________________________________________
+ [33]Kermit 95.
- ACKNOWLEDGMENTS
+ACKNOWLEDGMENTS
Thanks to Jeff Altman, who joined the Kermit Project in 1995, for much
of what you see in C-Kermit 7.0, especially in the networking and
Internet Kermit Service Daemon. And special thanks to Lucas Hart for
lots of help with the VMS version; to Peter Eichhorn for continuous
testing on the full range of HP-UX versions and for a consolidated set
- of HP-UX makefile targets; and to Colin Allen, Mark Allen, Roger
- Allen, Ric Anderson, William Bader, Mitch Baker, Mitchell Bass, Nelson
- Beebe, Gerry Belanger, Jeff Bernsten, Mark Berryman, John Bigg, Volker
+ of HP-UX makefile targets; and to Colin Allen, Mark Allen, Roger Allen,
+ Ric Anderson, William Bader, Mitch Baker, Mitchell Bass, Nelson Beebe,
+ Gerry Belanger, Jeff Bernsten, Mark Berryman, John Bigg, Volker
Borchert, Jonathan Boswell, Tim Boyer, Frederick Bruckman, Kenneth
Cochran, Jared Crapo, Bill Delaney, Igor Sobrado Delgado, Clarence
Dold, Joe Doupnik, John Dunlap, Max Evarts, Patrick French, Carl
Kevin Handy, Andy Harper, Randolph Herber, Sven Holström, Michal
Jaegermann, Graham Jenkins, Dick Jones, Terry Kennedy, Robert D Keys,
Nick Kisseberth, Igor Kovalenko, David Lane, Adam Laurie, Jeff
- Liebermann, Eric Lonvick, Hoi Wan Louis, Arthur Marsh, Gregorie
- Martin, Peter Mauzey, Dragan Milicic, Todd Miller, Christian Mondrup,
- Daniel Morato, Dat Nguyen, Herb Peyerl, Jean-Pierre Radley, Steve
- Rance, Stephen Riehm, Nigel Roles, Larry Rosenman, Jay S Rouman, David
+ Liebermann, Eric Lonvick, Hoi Wan Louis, Arthur Marsh, Gregorie Martin,
+ Peter Mauzey, Dragan Milicic, Todd Miller, Christian Mondrup, Daniel
+ Morato, Dat Nguyen, Herb Peyerl, Jean-Pierre Radley, Steve Rance,
+ Stephen Riehm, Nigel Roles, Larry Rosenman, Jay S Rouman, David
Sanderson, John Santos, Michael Schmitz, Steven Schultz, Bob Shair,
Richard Shuford, Fred Smith, Michael Sokolov, Jim Spath, Peter Szell,
Ted T'so, Brian Tillman, Linus Torvalds, Patrick Volkerding, Martin
- Vorländer, Steve Walton, Ken Weaverling, John Weekley, Martin
- Whitaker, Jim Whitby, Matt Willman, Joellen Windsor, Farrell Woods,
- and many others for binaries, hosting, reviews, suggestions, advice,
- bug reports, and all the rest over the 3+ year C-Kermit 7.0
- development cycle. Thanks to Russ Nelson and the board of the Open
- Software Initiative ([26]http://www.opensource.org) for their
- cooperation in developing the new C-Kermit license and to the
- proprietors of those free UNIX distributions that have incorporated
- C-Kermit 7.0 for their cooperation and support, especially FreeBSD's
- Jörg Wunsch.
- _________________________________________________________________
-
- NOTE TO KERMIT 95 USERS
+ Vorländer, Steve Walton, Ken Weaverling, John Weekley, Martin Whitaker,
+ Jim Whitby, Matt Willman, Joellen Windsor, Farrell Woods, and many
+ others for binaries, hosting, reviews, suggestions, advice, bug
+ reports, and all the rest over the 3+ year C-Kermit 7.0 development
+ cycle. Thanks to Russ Nelson and the board of the Open Software
+ Initiative ([34]http://www.opensource.org) for their cooperation in
+ developing the new C-Kermit license and to the proprietors of those
+ free UNIX distributions that have incorporated C-Kermit 7.0 for their
+ cooperation and support, especially FreeBSD's Jörg Wunsch.
+
+NOTE TO KERMIT 95 USERS
Kermit 95 and C-Kermit share the same command and scripting language,
the same Kermit file-transfer protocol implementation, and much else
besides.
- Like the book [27]Using C-Kermit, this file concentrates on the
- aspects of C-Kermit that are common to all versions: UNIX, VMS,
- Windows, OS/2, VOS, AOS/VS, etc. Please refer to your Kermit 95
- documentation for information that is specific to Kermit 95.
+ Like the book [35]Using C-Kermit, this file concentrates on the aspects
+ of C-Kermit that are common to all versions: UNIX, VMS, Windows, OS/2,
+ VOS, AOS/VS, etc. Please refer to your Kermit 95 documentation for
+ information that is specific to Kermit 95.
C-Kermit 7.0 corresponds to Kermit 95 1.1.19.
- _________________________________________________________________
- C-KERMIT VERSIONS AND VERSION NUMBERS
+C-KERMIT VERSIONS AND VERSION NUMBERS
"C-Kermit" refers to all the many programs that are compiled in whole
or in part from common C-language source code, comprising:
* A character-set translation module.
and several others. These "system-independent" modules are combined
- with system-dependent modules for each platform to provide the
- required input/output functions, and also in some cases overlaid with
- an alternative user interface, such as Macintosh Kermit's
- point-and-click interface, and in some cases also a terminal emulator,
- as Kermit 95.
+ with system-dependent modules for each platform to provide the required
+ input/output functions, and also in some cases overlaid with an
+ alternative user interface, such as Macintosh Kermit's point-and-click
+ interface, and in some cases also a terminal emulator, as Kermit 95.
The C-Kermit version number started as 1.0, ... 3.0, 4.0, 4.1 and then
(because of confusion at the time with Berkeley UNIX 4.2), 4B, 4C, and
so on, with the specific edit number in parentheses, for example
4E(072) or 5A(188). This scheme was used through 5A(191), but now we
- have gone back to the traditional numbering scheme with decimal
- points: major.minor.edit; for example 7.0.196. Internal version
- numbers (the \v(version) variable), however, are compatible in
- C-Kermit 5A upwards.
+ have gone back to the traditional numbering scheme with decimal points:
+ major.minor.edit; for example 7.0.196. Internal version numbers (the
+ \v(version) variable), however, are compatible in C-Kermit 5A upwards.
- Meanwhile, C-Kermit derivatives for some platforms (Windows,
- Macintosh) might go through several releases while C-Kermit itself
- remains the same. These versions have their own platform-specific
- version numbers, such as Kermit 95 1.1.1, 1.1.2, and so on.
+ Meanwhile, C-Kermit derivatives for some platforms (Windows, Macintosh)
+ might go through several releases while C-Kermit itself remains the
+ same. These versions have their own platform-specific version numbers,
+ such as Kermit 95 1.1.1, 1.1.2, and so on.
C-Kermit Version History:
(*) Never formally released (4.0 was a total rewrite)
(1) Using C-Kermit, 1st Edition
(2) Using C-Kermit, 2nd Edition
- _________________________________________________________________
CONTENTS
- I. [28]C-KERMIT DOCUMENTATION
-
- II. [29]NEW FEATURES
-
- (0) [30]INCOMPATIBILITIES WITH PREVIOUS RELEASES
- (1) [31]PROGRAM AND FILE MANAGEMENT AND COMMANDS
- 1.0. [32]Bug fixes
- 1.1. [33]Command Continuation
- 1.2. [34]Editor Interface
- 1.3. [35]Web Browser and FTP Interface
- 1.4. [36]Command Editing
- 1.5. [37]Command Switches
- 1.5.1. [38]General Switch Syntax
- 1.5.2. [39]Order and Effect of Switches
- 1.5.3. [40]Distinguishing Switches from Other Fields
- 1.5.4. [41]Standard File Selection Switches
- 1.5.5. [42]Setting Preferences for Different Commands
- 1.6. [43]Dates and Times
- 1.7. [44]Partial Completion of Keywords
- 1.8. [45]Command Recall
- 1.9. [46]EXIT Messages
- 1.10. [47]Managing Keyboard Interruptions
- 1.11. [48]Taming the Wild Backslash -- Part Deux
- 1.11.1. [49]Background
- 1.11.2. [50]Kermit's Quoting Rules
- 1.11.3. [51]Passing DOS Filenames from Kermit to Shell Commands
- 1.11.4. [52]Using Variables to Hold DOS Filenames
- 1.11.5. [53]Passing DOS Filenames as Parameters to Macros
- 1.11.6. [54]Passing DOS File Names from Macro Parameters to the
-DOS Shell
- 1.11.7. [55]Passing DOS Filenames to Kermit from the Shell
- 1.12. [56]Debugging
- 1.13. [57]Logs
- 1.14. [58]Automatic File-Transfer Packet Recognition at the Command Pr
-ompt
- 1.15. [59]The TYPE Command
- 1.16. [60]The RESET Command
- 1.17. [61]The COPY and RENAME Commands
- 1.18. [62]The MANUAL Command
- 1.19. [63]String and Filename Matching Patterns
- 1.20. [64]Multiple Commands on One Line
- 1.21. [65]What Do I Have?
- 1.22. [66]Generalized File Input and Output
- 1.22.1. [67]Why Another I/O System?
- 1.22.2. [68]The FILE Command
- 1.22.3. [69]FILE Command Examples
- 1.22.4. [70]Channel Numbers
- 1.22.5. [71]FILE Command Error Codes
- 1.22.6. [72]File I/O Variables
- 1.22.7. [73]File I/O Functions
- 1.22.8. [74]File I/O Function Examples
- 1.23. [75]The EXEC Command
- 1.24. [76]Getting Keyword Lists with '?'
- (2) [77]MAKING AND USING CONNECTIONS
- 2.0. [78]SET LINE and SET HOST Command Switches
- 2.1. [79]Dialing
- 2.1.1. [80]The Dial Result Message
- 2.1.2. [81]Long-Distance Dialing Changes
- 2.1.3. [82]Forcing Long-Distance Dialing
- 2.1.4. [83]Exchange-Specific Dialing Decisions
- 2.1.5. [84]Cautions about Cheapest-First Dialing
- 2.1.6. [85]Blind Dialing (Dialing with No Dialtone)
- 2.1.7. [86]Trimming the Dialing Dialog
- 2.1.8. [87]Controlling the Dialing Speed
- 2.1.9. [88]Pretesting Phone Number Conversions
- 2.1.10. [89]Greater Control over Partial Dialing
- 2.1.11. [90]New DIAL-related Variables and Functions
- 2.1.12. [91]Increased Flexibility of PBX Dialing
- 2.1.13. [92]The DIAL macro - Last-Minute Phone Number Conversions
- 2.1.14. [93]Automatic Tone/Pulse Dialing Selection
- 2.1.15. [94]Dial-Modifier Variables
- 2.1.16. [95]Giving Multiple Numbers to the DIAL Command
- 2.2. [96]Modems
- 2.2.1. [97]New Modem Types
- 2.2.2. [98]New Modem Controls
- 2.3. [99]TELNET and RLOGIN
- 2.3.0. [100]Bug Fixes
- 2.3.1. [101]Telnet Binary Mode Bug Adjustments
- 2.3.2. [102]VMS UCX Telnet Port Bug Adjustment
- 2.3.3. [103]Telnet New Environment Option
- 2.3.4. [104]Telnet Location Option
- 2.3.5. [105]Connecting to Raw TCP Sockets
- 2.3.6. [106]Incoming TCP Connections
- 2.4. [107]The EIGHTBIT Command
- 2.5. [108]The Services Directory
- 2.6. [109]Closing Connections
- 2.7. [110]Using C-Kermit with External Communication Programs
- 2.7.0. [111]C-Kermit over tn3270 and tn5250
- 2.7.1. [112]C-Kermit over Telnet
- 2.7.2. [113]C-Kermit over Rlogin
- 2.7.3. [114]C-Kermit over Serial Communication Programs
- 2.7.4. [115]C-Kermit over Secure Network Clients
- 2.7.4.1. [116]SSH
- 2.7.4.2. [117]SSL
- 2.7.4.3. [118]SRP
- 2.7.4.4. [119]SOCKS
- 2.7.4.5. [120]Kerberos and SRP
- 2.8. [121]Scripting Local Programs
- 2.9. [122]X.25 Networking
- 2.9.1. [123]IBM AIXLink/X.25 Network Provider Interface for AIX
- 2.9.2. [124]HP-UX X.25
- 2.10. [125]Additional Serial Port Controls
- 2.11. [126]Getting Access to the Dialout Device
- 2.12. [127]The Connection Log
- 2.13. [128]Automatic Connection-Specific Flow Control Selection
- 2.14. [129]Trapping Connection Establishment and Loss
- 2.15. [130]Contacting Web Servers with the HTTP Command
- (3) [131]TERMINAL CONNECTION
- 3.1. [132]CONNECT Command Switches
- 3.2. [133]Triggers
- 3.3. [134]Transparent Printing
- 3.4. [135]Binary and Text Session Logs
- (4) [136]FILE TRANSFER AND MANAGEMENT
- 4.0. [137]Bug Fixes, Minor Changes, and Clarifications
- 4.1. [138]File-Transfer Filename Templates
- 4.1.1. [139]Templates in the As-Name
- 4.1.2. [140]Templates on the Command Line
- 4.1.3. [141]Post-Transfer Renaming
- 4.2. [142]File-Transfer Pipes and Filters
- 4.2.1. [143]Introduction
- 4.2.1.1. [144]Terminology
- 4.2.1.2. [145]Notation
- 4.2.1.3. [146]Security
- 4.2.2. [147]Commands for Transferring from and to Pipes
- 4.2.2.1. [148]Sending from a Command
- 4.2.2.2. [149]Receiving to a Command
- 4.2.3. [150]Using File-Transfer Filters
- 4.2.3.1. [151]The SEND Filter
- 4.2.3.2. [152]The RECEIVE Filter
- 4.2.4. [153]Implicit Use of Pipes
- 4.2.5. [154]Success and Failure of Piped Commands
- 4.2.6. [155]Cautions about Using Pipes to Transfer Directory Trees
- 4.2.7. [156]Pipes and Encryption
- 4.2.8. [157]Commands and Functions Related to Pipes
- 4.2.8.1. [158]The OPEN !READ and OPEN !WRITE Commands
- 4.2.8.2. [159]The REDIRECT Command
- 4.2.8.3. [160]Receiving Mail and Print Jobs
- 4.2.8.4. [161]Pipe-Related Functions
- 4.3. [162]Automatic Per-File Text/Binary Mode Switching
- 4.3.1. [163]Exceptions
- 4.3.2. [164]Overview
- 4.3.3. [165]Commands
- 4.3.4. [166]Examples
- 4.4. [167]File Permissions
- 4.4.1. [168]When ATTRIBUTES PROTECTION is OFF
- 4.4.1.1. [169]Unix
- 4.4.1.2. [170]VMS
- 4.4.2. [171]When ATTRIBUTES PROTECTION is ON
- 4.4.2.1. [172]System-Specific Permissions
- 4.4.2.1.1. [173]UNIX
- 4.4.2.1.2. [174]VMS
- 4.4.2.2. [175]System-Independent Permissions
- 4.5. [176]File Management Commands
- 4.5.1. [177]The DIRECTORY Command
- 4.5.2. [178]The CD and BACK Commands
- 4.5.2.1. [179]Parsing Improvements
- 4.5.2.2. [180]The CDPATH
- 4.5.3. [181]Creating and Removing Directories
- 4.5.4. [182]The DELETE and PURGE Commands
- 4.6. [183]Starting the Remote Kermit Server Automatically
- 4.7. [184]File-Transfer Command Switches
- 4.7.1. [185]SEND Command Switches
- 4.7.2. [186]GET Command Switches
- 4.7.3. [187]RECEIVE Command Switches
- 4.8. [188]Minor Kermit Protocol Improvements
- 4.8.1. [189]Multiple Attribute Packets
- 4.8.2. [190]Very Short Packets
- 4.9. [191]Wildcard / File Group Expansion
- 4.9.1. [192]In UNIX C-Kermit
- 4.9.2. [193]In Kermit 95
- 4.9.3. [194]In VMS, AOS/VS, OS-9, VOS, etc.
- 4.10. [195]Additional Pathname Controls
- 4.11. [196]Recursive SEND and GET: Transferring Directory Trees
- 4.11.1. [197]Command-Line Options
- 4.11.2. [198]The SEND /RECURSIVE Command
- 4.11.3. [199]The GET /RECURSIVE Command
- 4.11.4. [200]New and Changed File Functions
- 4.11.5. [201]Moving Directory Trees Between Like Systems
- 4.11.6. [202]Moving Directory Trees Between Unlike Systems
- 4.12. [203]Where Did My File Go?
- 4.13. [204]File Output Buffer Control
- 4.14. [205]Improved Responsiveness
- 4.15. [206]Doubling and Ignoring Characters for Transparency
- 4.16. [207]New File-Transfer Display Formats
- 4.17. [208]New Transaction Log Formats
- 4.17.1. [209]The BRIEF Format
- 4.17.2. [210]The FTP Format
- 4.18. [211]Unprefixing NUL
- 4.19. [212]Clear-Channel Protocol
- 4.20. [213]Streaming Protocol
- 4.20.1. [214]Commands for Streaming
- 4.20.2. [215]Examples of Streaming
- 4.20.2.1. [216]Streaming on Socket-to-Socket Connections
- 4.20.2.2. [217]Streaming on Telnet Connections
- 4.20.2.3. [218]Streaming with Limited Packet Length
- 4.20.2.4. [219]Streaming on Dialup Connections
- 4.20.2.5. [220]Streaming on X.25 Connections
- 4.20.3. [221]Streaming - Preliminary Conclusions
- 4.21. [222]The TRANSMIT Command
- 4.22. [223]Coping with Faulty Kermit Implementations
- 4.22.1. [224]Failure to Accept Modern Negotiation Strings
- 4.22.2. [225]Failure to Negotiate 8th-bit Prefixing
- 4.22.3. [226]Corrupt Files
- 4.22.4. [227]Spurious Cancellations
- 4.22.5. [228]Spurious Refusals
- 4.22.6. [229]Failures during the Data Transfer Phase
- 4.22.7. [230]Fractured Filenames
- 4.22.8. [231]Bad File Dates
- 4.23. [232]File Transfer Recovery
- 4.24. [233]FILE COLLISION UPDATE Clarification
- 4.25. [234]Autodownload Improvements
- (5) [235]CLIENT/SERVER
- 5.0. [236]Hints
- 5.1. [237]New Command-Line Options
- 5.2. [238]New Client Commands
- 5.3. [239]New Server Capabilities
- 5.3.1. [240]Creating and Removing Directories
- 5.3.2. [241]Directory Listings
- 5.4. [242]Syntax for Remote Filenames with Embedded Spaces
- 5.5. [243]Automatic Orientation Messages upon Directory Change
- 5.6. [244]New Server Controls
- 5.7. [245]Timeouts during REMOTE HOST Command Execution
- (6) [246]INTERNATIONAL CHARACTER SETS
- 6.0. [247]ISO 8859-15 Latin Alphabet 9
- 6.1. [248]The HP-Roman8 Character Set
- 6.2. [249]Greek Character Sets
- 6.3. [250]Additional Latin-2 Character Sets
- 6.4. [251]Additional Cyrillic Character Sets
- 6.5. [252]Automatic Character-Set Switching
- 6.6. [253]Unicode
- 6.6.1. [254]Overview of Unicode
- 6.6.2. [255]UCS Byte Order
- 6.6.2. [256]UCS Transformation Formats
- 6.6.3. [257]Conformance Levels
- 6.6.4. [258]Relationship of Unicode with Kermit's Other Character Sets
- 6.6.5. [259]Kermit's Unicode Features
- 6.6.5.1. [260]File Transfer
- 6.6.5.2. [261]The TRANSLATE Command
- 6.6.5.3. [262]Terminal Connection
- 6.6.5.4. [263]The TRANSMIT Command
- 6.6.5.5. [264]Summary of Kermit Unicode Commands
- 6.7. [265]Client/Server Character-Set Switching
- (7) [266]SCRIPT PROGRAMMING
- 7.0. [267]Bug Fixes
- 7.1. [268]The INPUT Command
- 7.1.1. [269]INPUT Timeouts
- 7.1.2. [270]New INPUT Controls
- 7.1.3. [271]INPUT with Pattern Matching
- 7.1.4. [272]The INPUT Match Result
- 7.2. [273]New or Improved Built-In Variables
- 7.3. [274]New or Improved Built-In Functions
- 7.4. [275]New IF Conditions
- 7.5. [276]Using More than Ten Macro Arguments
- 7.6. [277]Clarification of Function Call Syntax
- 7.7. [278]Autodownload during INPUT Command Execution
- 7.8. [279]Built-in Help for Functions.
- 7.9. [280]Variable Assignments
- 7.9.1. [281]Assignment Operators
- 7.9.2. [282]New Assignment Commands
- 7.10. [283]Arrays
- 7.10.1. [284]Array Initializers
- 7.10.2. [285]Turning a String into an Array of Words
- 7.10.3. [286]Arrays of Filenames
- 7.10.4. [287]Automatic Arrays
- 7.10.5. [288]Sorting Arrays
- 7.10.6. [289]Displaying Arrays
- 7.10.7. [290]Other Array Operations
- 7.10.8. [291]Hints for Using Arrays
- 7.10.9. [292]Do-It-Yourself Arrays
- 7.10.10. [293]Associative Arrays
- 7.11. [294]OUTPUT Command Improvements
- 7.12. [295]Function and Variable Diagnostics
- 7.13. [296]Return Value of Macros
- 7.14. [297]The ASSERT, FAIL, and SUCCEED Commands.
- 7.15. [298]Using Alarms
- 7.16. [299]Passing Arguments to Command Files
- 7.17. [300]Dialogs with Timed Responses
- 7.18. [301]Increased Flexibility of SWITCH Case Labels
- 7.19. "[302]Kerbang" Scripts
- 7.20. [303]IF and XIF Statement Syntax
- 7.20.1. [304]The IF/XIF Distinction
- 7.20.2. [305]Boolean Expressions (The IF/WHILE Condition)
- 7.21. [306]Screen Formatting and Cursor Control
- 7.22. [307]Evaluating Arithmetic Expressions
- 7.23. [308]Floating-Point Arithmetic
- 7.24. [309]Tracing Script Execution
- 7.25. [310]Compact Substring Notation
- 7.26. [311]New WAIT Command Options
- 7.26.1. [312]Waiting for Modem Signals
- 7.26.2. [313]Waiting for File Events
- 7.27. [314]Relaxed FOR and SWITCH Syntax
- (8) [315]USING OTHER FILE TRANSFER PROTOCOLS
- (9) [316]COMMAND-LINE OPTIONS
- 9.0. [317]Extended-Format Command-Line Options
- 9.1. [318]Command Line Personalities
- 9.2. [319]Built-in Help for Command Line Options
- 9.3. [320]New Command-Line Options
- (10) [321]C-KERMIT AND G-KERMIT
-
-III. [322]APPENDICES
-
-III.1. [323]Character Set Tables
-III.1.1. [324]The Hewlett Packard Roman8 Character Set
-III.1.2. [325]Greek Character Sets
-III.1.2.1. [326]The ISO 8859-7 Latin / Greek Alphabet
-III.1.2.2. [327]The ELOT 927 Character Set
-III.1.2.3. [328]PC Code Page 869
-III.2. [329]Updated Country Codes
-
-IV. [330]ERRATA & CORRIGENDA: Corrections to "Using C-Kermit" 2nd Edition.
-V. [331]ADDITIONAL COPYRIGHT NOTICES
- _________________________________________________________________
+ I. [36]C-KERMIT DOCUMENTATION
+
+ II. [37]NEW FEATURES
+
+ (0) [38]INCOMPATIBILITIES WITH PREVIOUS RELEASES
+ (1) [39]PROGRAM AND FILE MANAGEMENT AND COMMANDS
+ 1.0. [40]Bug fixes
+ 1.1. [41]Command Continuation
+ 1.2. [42]Editor Interface
+ 1.3. [43]Web Browser and FTP Interface
+ 1.4. [44]Command Editing
+ 1.5. [45]Command Switches
+ 1.5.1. [46]General Switch Syntax
+ 1.5.2. [47]Order and Effect of Switches
+ 1.5.3. [48]Distinguishing Switches from Other Fields
+ 1.5.4. [49]Standard File Selection Switches
+ 1.5.5. [50]Setting Preferences for Different Commands
+ 1.6. [51]Dates and Times
+ 1.7. [52]Partial Completion of Keywords
+ 1.8. [53]Command Recall
+ 1.9. [54]EXIT Messages
+ 1.10. [55]Managing Keyboard Interruptions
+ 1.11. [56]Taming the Wild Backslash -- Part Deux
+ 1.11.1. [57]Background
+ 1.11.2. [58]Kermit's Quoting Rules
+ 1.11.3. [59]Passing DOS Filenames from Kermit to Shell Commands
+ 1.11.4. [60]Using Variables to Hold DOS Filenames
+ 1.11.5. [61]Passing DOS Filenames as Parameters to Macros
+ 1.11.6. [62]Passing DOS File Names from Macro Parameters to the D
+OS Shell
+ 1.11.7. [63]Passing DOS Filenames to Kermit from the Shell
+ 1.12. [64]Debugging
+ 1.13. [65]Logs
+ 1.14. [66]Automatic File-Transfer Packet Recognition at the Command Pro
+mpt
+ 1.15. [67]The TYPE Command
+ 1.16. [68]The RESET Command
+ 1.17. [69]The COPY and RENAME Commands
+ 1.18. [70]The MANUAL Command
+ 1.19. [71]String and Filename Matching Patterns
+ 1.20. [72]Multiple Commands on One Line
+ 1.21. [73]What Do I Have?
+ 1.22. [74]Generalized File Input and Output
+ 1.22.1. [75]Why Another I/O System?
+ 1.22.2. [76]The FILE Command
+ 1.22.3. [77]FILE Command Examples
+ 1.22.4. [78]Channel Numbers
+ 1.22.5. [79]FILE Command Error Codes
+ 1.22.6. [80]File I/O Variables
+ 1.22.7. [81]File I/O Functions
+ 1.22.8. [82]File I/O Function Examples
+ 1.23. [83]The EXEC Command
+ 1.24. [84]Getting Keyword Lists with '?'
+ (2) [85]MAKING AND USING CONNECTIONS
+ 2.0. [86]SET LINE and SET HOST Command Switches
+ 2.1. [87]Dialing
+ 2.1.1. [88]The Dial Result Message
+ 2.1.2. [89]Long-Distance Dialing Changes
+ 2.1.3. [90]Forcing Long-Distance Dialing
+ 2.1.4. [91]Exchange-Specific Dialing Decisions
+ 2.1.5. [92]Cautions about Cheapest-First Dialing
+ 2.1.6. [93]Blind Dialing (Dialing with No Dialtone)
+ 2.1.7. [94]Trimming the Dialing Dialog
+ 2.1.8. [95]Controlling the Dialing Speed
+ 2.1.9. [96]Pretesting Phone Number Conversions
+ 2.1.10. [97]Greater Control over Partial Dialing
+ 2.1.11. [98]New DIAL-related Variables and Functions
+ 2.1.12. [99]Increased Flexibility of PBX Dialing
+ 2.1.13. [100]The DIAL macro - Last-Minute Phone Number Conversions
+ 2.1.14. [101]Automatic Tone/Pulse Dialing Selection
+ 2.1.15. [102]Dial-Modifier Variables
+ 2.1.16. [103]Giving Multiple Numbers to the DIAL Command
+ 2.2. [104]Modems
+ 2.2.1. [105]New Modem Types
+ 2.2.2. [106]New Modem Controls
+ 2.3. [107]TELNET and RLOGIN
+ 2.3.0. [108]Bug Fixes
+ 2.3.1. [109]Telnet Binary Mode Bug Adjustments
+ 2.3.2. [110]VMS UCX Telnet Port Bug Adjustment
+ 2.3.3. [111]Telnet New Environment Option
+ 2.3.4. [112]Telnet Location Option
+ 2.3.5. [113]Connecting to Raw TCP Sockets
+ 2.3.6. [114]Incoming TCP Connections
+ 2.4. [115]The EIGHTBIT Command
+ 2.5. [116]The Services Directory
+ 2.6. [117]Closing Connections
+ 2.7. [118]Using C-Kermit with External Communication Programs
+ 2.7.0. [119]C-Kermit over tn3270 and tn5250
+ 2.7.1. [120]C-Kermit over Telnet
+ 2.7.2. [121]C-Kermit over Rlogin
+ 2.7.3. [122]C-Kermit over Serial Communication Programs
+ 2.7.4. [123]C-Kermit over Secure Network Clients
+ 2.7.4.1. [124]SSH
+ 2.7.4.2. [125]SSL
+ 2.7.4.3. [126]SRP
+ 2.7.4.4. [127]SOCKS
+ 2.7.4.5. [128]Kerberos and SRP
+ 2.8. [129]Scripting Local Programs
+ 2.9. [130]X.25 Networking
+ 2.9.1. [131]IBM AIXLink/X.25 Network Provider Interface for AIX
+ 2.9.2. [132]HP-UX X.25
+ 2.10. [133]Additional Serial Port Controls
+ 2.11. [134]Getting Access to the Dialout Device
+ 2.12. [135]The Connection Log
+ 2.13. [136]Automatic Connection-Specific Flow Control Selection
+ 2.14. [137]Trapping Connection Establishment and Loss
+ 2.15. [138]Contacting Web Servers with the HTTP Command
+ (3) [139]TERMINAL CONNECTION
+ 3.1. [140]CONNECT Command Switches
+ 3.2. [141]Triggers
+ 3.3. [142]Transparent Printing
+ 3.4. [143]Binary and Text Session Logs
+ (4) [144]FILE TRANSFER AND MANAGEMENT
+ 4.0. [145]Bug Fixes, Minor Changes, and Clarifications
+ 4.1. [146]File-Transfer Filename Templates
+ 4.1.1. [147]Templates in the As-Name
+ 4.1.2. [148]Templates on the Command Line
+ 4.1.3. [149]Post-Transfer Renaming
+ 4.2. [150]File-Transfer Pipes and Filters
+ 4.2.1. [151]Introduction
+ 4.2.1.1. [152]Terminology
+ 4.2.1.2. [153]Notation
+ 4.2.1.3. [154]Security
+ 4.2.2. [155]Commands for Transferring from and to Pipes
+ 4.2.2.1. [156]Sending from a Command
+ 4.2.2.2. [157]Receiving to a Command
+ 4.2.3. [158]Using File-Transfer Filters
+ 4.2.3.1. [159]The SEND Filter
+ 4.2.3.2. [160]The RECEIVE Filter
+ 4.2.4. [161]Implicit Use of Pipes
+ 4.2.5. [162]Success and Failure of Piped Commands
+ 4.2.6. [163]Cautions about Using Pipes to Transfer Directory Trees
+ 4.2.7. [164]Pipes and Encryption
+ 4.2.8. [165]Commands and Functions Related to Pipes
+ 4.2.8.1. [166]The OPEN !READ and OPEN !WRITE Commands
+ 4.2.8.2. [167]The REDIRECT Command
+ 4.2.8.3. [168]Receiving Mail and Print Jobs
+ 4.2.8.4. [169]Pipe-Related Functions
+ 4.3. [170]Automatic Per-File Text/Binary Mode Switching
+ 4.3.1. [171]Exceptions
+ 4.3.2. [172]Overview
+ 4.3.3. [173]Commands
+ 4.3.4. [174]Examples
+ 4.4. [175]File Permissions
+ 4.4.1. [176]When ATTRIBUTES PROTECTION is OFF
+ 4.4.1.1. [177]Unix
+ 4.4.1.2. [178]VMS
+ 4.4.2. [179]When ATTRIBUTES PROTECTION is ON
+ 4.4.2.1. [180]System-Specific Permissions
+ 4.4.2.1.1. [181]UNIX
+ 4.4.2.1.2. [182]VMS
+ 4.4.2.2. [183]System-Independent Permissions
+ 4.5. [184]File Management Commands
+ 4.5.1. [185]The DIRECTORY Command
+ 4.5.2. [186]The CD and BACK Commands
+ 4.5.2.1. [187]Parsing Improvements
+ 4.5.2.2. [188]The CDPATH
+ 4.5.3. [189]Creating and Removing Directories
+ 4.5.4. [190]The DELETE and PURGE Commands
+ 4.6. [191]Starting the Remote Kermit Server Automatically
+ 4.7. [192]File-Transfer Command Switches
+ 4.7.1. [193]SEND Command Switches
+ 4.7.2. [194]GET Command Switches
+ 4.7.3. [195]RECEIVE Command Switches
+ 4.8. [196]Minor Kermit Protocol Improvements
+ 4.8.1. [197]Multiple Attribute Packets
+ 4.8.2. [198]Very Short Packets
+ 4.9. [199]Wildcard / File Group Expansion
+ 4.9.1. [200]In UNIX C-Kermit
+ 4.9.2. [201]In Kermit 95
+ 4.9.3. [202]In VMS, AOS/VS, OS-9, VOS, etc.
+ 4.10. [203]Additional Pathname Controls
+ 4.11. [204]Recursive SEND and GET: Transferring Directory Trees
+ 4.11.1. [205]Command-Line Options
+ 4.11.2. [206]The SEND /RECURSIVE Command
+ 4.11.3. [207]The GET /RECURSIVE Command
+ 4.11.4. [208]New and Changed File Functions
+ 4.11.5. [209]Moving Directory Trees Between Like Systems
+ 4.11.6. [210]Moving Directory Trees Between Unlike Systems
+ 4.12. [211]Where Did My File Go?
+ 4.13. [212]File Output Buffer Control
+ 4.14. [213]Improved Responsiveness
+ 4.15. [214]Doubling and Ignoring Characters for Transparency
+ 4.16. [215]New File-Transfer Display Formats
+ 4.17. [216]New Transaction Log Formats
+ 4.17.1. [217]The BRIEF Format
+ 4.17.2. [218]The FTP Format
+ 4.18. [219]Unprefixing NUL
+ 4.19. [220]Clear-Channel Protocol
+ 4.20. [221]Streaming Protocol
+ 4.20.1. [222]Commands for Streaming
+ 4.20.2. [223]Examples of Streaming
+ 4.20.2.1. [224]Streaming on Socket-to-Socket Connections
+ 4.20.2.2. [225]Streaming on Telnet Connections
+ 4.20.2.3. [226]Streaming with Limited Packet Length
+ 4.20.2.4. [227]Streaming on Dialup Connections
+ 4.20.2.5. [228]Streaming on X.25 Connections
+ 4.20.3. [229]Streaming - Preliminary Conclusions
+ 4.21. [230]The TRANSMIT Command
+ 4.22. [231]Coping with Faulty Kermit Implementations
+ 4.22.1. [232]Failure to Accept Modern Negotiation Strings
+ 4.22.2. [233]Failure to Negotiate 8th-bit Prefixing
+ 4.22.3. [234]Corrupt Files
+ 4.22.4. [235]Spurious Cancellations
+ 4.22.5. [236]Spurious Refusals
+ 4.22.6. [237]Failures during the Data Transfer Phase
+ 4.22.7. [238]Fractured Filenames
+ 4.22.8. [239]Bad File Dates
+ 4.23. [240]File Transfer Recovery
+ 4.24. [241]FILE COLLISION UPDATE Clarification
+ 4.25. [242]Autodownload Improvements
+ (5) [243]CLIENT/SERVER
+ 5.0. [244]Hints
+ 5.1. [245]New Command-Line Options
+ 5.2. [246]New Client Commands
+ 5.3. [247]New Server Capabilities
+ 5.3.1. [248]Creating and Removing Directories
+ 5.3.2. [249]Directory Listings
+ 5.4. [250]Syntax for Remote Filenames with Embedded Spaces
+ 5.5. [251]Automatic Orientation Messages upon Directory Change
+ 5.6. [252]New Server Controls
+ 5.7. [253]Timeouts during REMOTE HOST Command Execution
+ (6) [254]INTERNATIONAL CHARACTER SETS
+ 6.0. [255]ISO 8859-15 Latin Alphabet 9
+ 6.1. [256]The HP-Roman8 Character Set
+ 6.2. [257]Greek Character Sets
+ 6.3. [258]Additional Latin-2 Character Sets
+ 6.4. [259]Additional Cyrillic Character Sets
+ 6.5. [260]Automatic Character-Set Switching
+ 6.6. [261]Unicode
+ 6.6.1. [262]Overview of Unicode
+ 6.6.2. [263]UCS Byte Order
+ 6.6.2. [264]UCS Transformation Formats
+ 6.6.3. [265]Conformance Levels
+ 6.6.4. [266]Relationship of Unicode with Kermit's Other Character Sets
+ 6.6.5. [267]Kermit's Unicode Features
+ 6.6.5.1. [268]File Transfer
+ 6.6.5.2. [269]The TRANSLATE Command
+ 6.6.5.3. [270]Terminal Connection
+ 6.6.5.4. [271]The TRANSMIT Command
+ 6.6.5.5. [272]Summary of Kermit Unicode Commands
+ 6.7. [273]Client/Server Character-Set Switching
+ (7) [274]SCRIPT PROGRAMMING
+ 7.0. [275]Bug Fixes
+ 7.1. [276]The INPUT Command
+ 7.1.1. [277]INPUT Timeouts
+ 7.1.2. [278]New INPUT Controls
+ 7.1.3. [279]INPUT with Pattern Matching
+ 7.1.4. [280]The INPUT Match Result
+ 7.2. [281]New or Improved Built-In Variables
+ 7.3. [282]New or Improved Built-In Functions
+ 7.4. [283]New IF Conditions
+ 7.5. [284]Using More than Ten Macro Arguments
+ 7.6. [285]Clarification of Function Call Syntax
+ 7.7. [286]Autodownload during INPUT Command Execution
+ 7.8. [287]Built-in Help for Functions.
+ 7.9. [288]Variable Assignments
+ 7.9.1. [289]Assignment Operators
+ 7.9.2. [290]New Assignment Commands
+ 7.10. [291]Arrays
+ 7.10.1. [292]Array Initializers
+ 7.10.2. [293]Turning a String into an Array of Words
+ 7.10.3. [294]Arrays of Filenames
+ 7.10.4. [295]Automatic Arrays
+ 7.10.5. [296]Sorting Arrays
+ 7.10.6. [297]Displaying Arrays
+ 7.10.7. [298]Other Array Operations
+ 7.10.8. [299]Hints for Using Arrays
+ 7.10.9. [300]Do-It-Yourself Arrays
+ 7.10.10. [301]Associative Arrays
+ 7.11. [302]OUTPUT Command Improvements
+ 7.12. [303]Function and Variable Diagnostics
+ 7.13. [304]Return Value of Macros
+ 7.14. [305]The ASSERT, FAIL, and SUCCEED Commands.
+ 7.15. [306]Using Alarms
+ 7.16. [307]Passing Arguments to Command Files
+ 7.17. [308]Dialogs with Timed Responses
+ 7.18. [309]Increased Flexibility of SWITCH Case Labels
+ 7.19. "[310]Kerbang" Scripts
+ 7.20. [311]IF and XIF Statement Syntax
+ 7.20.1. [312]The IF/XIF Distinction
+ 7.20.2. [313]Boolean Expressions (The IF/WHILE Condition)
+ 7.21. [314]Screen Formatting and Cursor Control
+ 7.22. [315]Evaluating Arithmetic Expressions
+ 7.23. [316]Floating-Point Arithmetic
+ 7.24. [317]Tracing Script Execution
+ 7.25. [318]Compact Substring Notation
+ 7.26. [319]New WAIT Command Options
+ 7.26.1. [320]Waiting for Modem Signals
+ 7.26.2. [321]Waiting for File Events
+ 7.27. [322]Relaxed FOR and SWITCH Syntax
+ (8) [323]USING OTHER FILE TRANSFER PROTOCOLS
+ (9) [324]COMMAND-LINE OPTIONS
+ 9.0. [325]Extended-Format Command-Line Options
+ 9.1. [326]Command Line Personalities
+ 9.2. [327]Built-in Help for Command Line Options
+ 9.3. [328]New Command-Line Options
+ (10) [329]C-KERMIT AND G-KERMIT
+
+III. [330]APPENDICES
+
+III.1. [331]Character Set Tables
+III.1.1. [332]The Hewlett Packard Roman8 Character Set
+III.1.2. [333]Greek Character Sets
+III.1.2.1. [334]The ISO 8859-7 Latin / Greek Alphabet
+III.1.2.2. [335]The ELOT 927 Character Set
+III.1.2.3. [336]PC Code Page 869
+III.2. [337]Updated Country Codes
+
+IV. [338]ERRATA & CORRIGENDA: Corrections to "Using C-Kermit" 2nd Edition.
+V. [339]ADDITIONAL COPYRIGHT NOTICES
I. C-KERMIT DOCUMENTATION
The user manual for C-Kermit is:
- Frank da Cruz and Christine M. Gianone, [332]Using C-Kermit, Second
+ Frank da Cruz and Christine M. Gianone, [340]Using C-Kermit, Second
Edition, Digital Press / Butterworth-Heinemann, Woburn, MA, 1997,
622 pages, ISBN 1-55558-164-1.
- [333]CLICK HERE for reviews.
+ [341]CLICK HERE for reviews.
The present document is a supplement to Using C-Kermit 2nd Ed, not a
replacement for it.
bank. Do not include sales tax. Inquire about quantity discounts.
You can also order by phone from the publisher, Digital Press /
- [334]Butterworth-Heinemann, with MasterCard, Visa, or American
- Express:
+ [342]Butterworth-Heinemann, with MasterCard, Visa, or American Express:
+1 800 366-2665 (Woburn, Massachusetts office for USA & Canada)
+44 1865 314627 (Oxford, England distribution centre for UK & Europe)
+65 356-1968 (Singapore office for Asia)
+27 (31) 2683111 (Durban office for South Africa)
- A [335]German-language edition of the First Edition is also available:
+ A [343]German-language edition of the First Edition is also available:
Frank da Cruz and Christine M. Gianone, C-Kermit - Einführung und
Referenz, Verlag Heinz Heise, Hannover, Germany (1994). ISBN
- 3-88229-023-4. Deutsch von Gisbert W. Selke. Price: DM 88,00.
- Verlag Heinz Heise GmbH & Co. KG, Helstorfer Strasse 7, D-30625
- Hannover. Tel. +49 (05 11) 53 52-0, Fax. +49 (05 11) 53 52-1 29.
+ 3-88229-023-4. Deutsch von Gisbert W. Selke. Price: DM 88,00. Verlag
+ Heinz Heise GmbH & Co. KG, Helstorfer Strasse 7, D-30625 Hannover.
+ Tel. +49 (05 11) 53 52-0, Fax. +49 (05 11) 53 52-1 29.
- The [336]Kermit file transfer protocol is specified in:
+ The [344]Kermit file transfer protocol is specified in:
Frank da Cruz, Kermit, A File Transfer Protocol, Digital Press,
Bedford, MA, 1987, 379 pages, ISBN 0-932376-88-6. US single-copy
price: $39.95. Availability as above.
News and articles about Kermit software and protocol are published
- periodically in the journal, [337]Kermit News. Subscriptions are free;
+ periodically in the journal, [345]Kermit News. Subscriptions are free;
contact Columbia University at the address above.
Online news about Kermit is published in the
- [338]comp.protocols.kermit.announce and
- [339]comp.protocols.kermit.misc newsgroups.
- _________________________________________________________________
+ [346]comp.protocols.kermit.announce and [347]comp.protocols.kermit.misc
+ newsgroups.
II. NEW FEATURES
the cover).
Specific changes and additions are grouped together by major topic,
- roughly corresponding to the chapters of [340]Using C-Kermit.
- _________________________________________________________________
+ roughly corresponding to the chapters of [348]Using C-Kermit.
- 0. INCOMPATIBILITIES WITH PREVIOUS RELEASES
+0. INCOMPATIBILITIES WITH PREVIOUS RELEASES
1. C-Kermit 7.0 uses FAST Kermit protocol settings by default. This
includes "unprefixing" of certain control characters. Because of
this, file transfers that worked with previous releases might not
- work in the new release (but it is more likely that they will
- work, and much faster). If a transfer fails, you'll get a
+ work in the new release (but it is more likely that they will work,
+ and much faster). If a transfer fails, you'll get a
context-sensitive hint suggesting possible causes and cures.
Usually SET PREFIXING ALL does the trick.
2. C-Kermit 7.0 transfers files in BINARY mode by default. To restore
7.0 now switches between text and binary mode automatically on a
per-file basis according to various criteria, including (a) which
kind of platform is on the other end of the connection (if known),
- (b) the version of Kermit on the other end, and (c) the file's
- name (see [341]Section 4, especially [342]4.3). To disable this
+ (b) the version of Kermit on the other end, and (c) the file's name
+ (see [349]Section 4, especially [350]4.3). To disable this
automatic switching and restore the earlier behavior, put SET
TRANSFER MODE MANUAL in your C-Kermit initialization file. To
disable automatic switching for a particular transfer, include a
/TEXT or /BINARY switch with your SEND or GET command.
4. The RESEND and REGET commands automatically switch to binary mode;
previously if RESEND or REGET were attempted when FILE TYPE was
- TEXT, these commands would fail immediately, with a message
- telling you they work only when the FILE TYPE is BINARY. Now they
- simply do this for you. See [343]Section 4.23 for additional
- (important) information.
- 5. SET PREFIXING CAUTIOUS and MINIMAL now both prefix linefeed (10
- and 138) in case rlogin, ssh, or cu are "in the middle", since
+ TEXT, these commands would fail immediately, with a message telling
+ you they work only when the FILE TYPE is BINARY. Now they simply do
+ this for you. See [351]Section 4.23 for additional (important)
+ information.
+ 5. SET PREFIXING CAUTIOUS and MINIMAL now both prefix linefeed (10 and
+ 138) in case rlogin, ssh, or cu are "in the middle", since
otherwise <LF>~ might appear in Kermit packets, and this would
- cause rlogin, ssh, or cu to disconnect, suspend,escape back, or
+ cause rlogin, ssh, or cu to disconnect, suspend, escape back, or
otherwise wreck the file transfer. Xon and Xoff are now always
prefixed too, even when Xon/Xoff flow control is not in effect,
since unprefixing them has proven dangerous on TCP/IP connections.
6. In UNIX, VMS, Windows, and OS/2, the DIRECTORY command is built
- into C-Kermit itself rather than implemented by running an
- external command or program. The built-in command might not behave
- the way the platform-specific external one did, but many options
- are available for customization. Of course the underlying
+ into C-Kermit itself rather than implemented by running an external
+ command or program. The built-in command might not behave the way
+ the platform-specific external one did, but many options are
+ available for customization. Of course the underlying
platform-specific command can still be accessed with "!", "@", or
"RUN" wherever the installation does not forbid. In UNIX, the "ls"
command can be accessed directly as "ls" in C-Kermit. See
- [344]Section 4.5.1 for details.
+ [352]Section 4.5.1 for details.
7. SEND ? prints a list of switches rather than a list of filenames.
If you want to see a list of filenames, use a (system-dependent)
construction such as SEND ./? (for UNIX, Windows, or OS/2), SEND
- []? (VMS), etc. See [345]Sections 1.5 and [346]4.7.1.
+ []? (VMS), etc. See [353]Sections 1.5 and [354]4.7.1.
8. In UNIX, OS-9, and Kermit 95, the wildcard characters in previous
versions were * and ?. In C-Kermit 7.0 they are *, ?, [, ], {, and
}, with dash used inside []'s to denote ranges and comma used
inside {} to separate list elements. If you need to include any of
these characters literally in a filename, precede each one with
- backslash (\). See [347]Section 4.9.
+ backslash (\). See [355]Section 4.9.
9. SET QUIET { ON, OFF } is now on the command stack, just like SET
INPUT CASE, SET COUNT, SET MACRO ERROR, etc, as described on p.458
- of [348]Using C-Kermit, 2nd Edition. This allows any macro or
+ of [356]Using C-Kermit, 2nd Edition. This allows any macro or
command file to SET QUIET ON or OFF without worrying about saving
and restoring the global QUIET value. For example, this lets you
write a script that tries SET LINE on lots of devices until it
10. Because of the new "." operator (which introduces assignments),
macros whose names begin with "." can not be invoked "by name".
However, they still can be invoked with DO.
- 11. The syntax of the EVALUATE command has changed. See [349]Section
+ 11. The syntax of the EVALUATE command has changed. See [357]Section
7.9.2. To restore the previous syntax, use SET EVALUATE OLD.
12. The \v(directory) variable now includes the trailing directory
separator; in previous releases it did not. This is to allow
constructions such as:
cd \v(dir)data.tmp
+
to work across platforms that might have different directory
notation, such as UNIX, Windows, and VMS.
13. Prior to C-Kermit 7.0, the FLOW-CONTROL setting was global and
SET LINE/PORT/HOST is likely to be undone. Therefore SET FLOW can
be guaranteed to have the desired effect only if given after the
SET LINE/PORT/HOST command.
- 14. Character-set translation works differently in the TRANSMIT
- command when (a) the file character-set is not the same as the
- local end of the terminal character-set, or (b) when the terminal
- character-set is TRANSPARENT.
- _________________________________________________________________
+ 14. Character-set translation works differently in the TRANSMIT command
+ when (a) the file character-set is not the same as the local end of
+ the terminal character-set, or (b) when the terminal character-set
+ is TRANSPARENT.
- 1. PROGRAM AND FILE MANAGEMENT AND COMMANDS
+1. PROGRAM AND FILE MANAGEMENT AND COMMANDS
- 1.0. Bug Fixes
+1.0. Bug Fixes
The following patches were issued to correct bugs in C-Kermit 6.0.
These are described in detail in the 6.0 PATCHES file. All of these
REDIRECT was missing in many UNIX C-Kermit implementations; in version
7.0, it should be available in all of them.
- _________________________________________________________________
- 1.1. Command Continuation
+1.1. Command Continuation
Comments that start with ";" or "#" can no longer be continued. In:
echo blah
As of version 6.0, backslash is no longer a valid continuation
- character. Only hyphen should be used for command continuation. This
- is to make it possible to issue commands like "cd a:\" on DOS-like
+ character. Only hyphen should be used for command continuation. This is
+ to make it possible to issue commands like "cd a:\" on DOS-like
systems.
As of version 7.0:
* You can quote a final dash to prevent it from being a continuation
character:
echo foo\-
+
This prints "foo-". The command is not continued.
* You can enter commands such as:
echo foo - ; this is a comment
+
interactively and they are properly treated as continued commands.
Previously this worked only in command files.
- _________________________________________________________________
- 1.2. Editor Interface
+1.2. Editor Interface
SET EDITOR name [ options ]
- Lets you specify a text-editing program. The name can be a
- fully specified pathname like /usr/local/bin/emacs19/emacs, or
- it can be the name of any program in your PATH, e.g. "set
- editor emacs". In VMS, it must be a DCL command like "edit",
+ Lets you specify a text-editing program. The name can be a fully
+ specified pathname like /usr/local/bin/emacs19/emacs, or it can
+ be the name of any program in your PATH, e.g. "set editor
+ emacs". In VMS, it must be a DCL command like "edit",
"edit/tpu", "emacs", etc. If an environment variable EDITOR is
- defined when Kermit starts, its value is the default editor.
- You can also specify options to be included on the editor
- command line. Returns to Kermit when the editor exits.
+ defined when Kermit starts, its value is the default editor. You
+ can also specify options to be included on the editor command
+ line. Returns to Kermit when the editor exits.
EDIT [ filename ]
If the EDIT command is given without a filename, then if a
- previous filename had been given to an EDIT command, it is
- used; if not, the editor is started without a file. If a
- filename is given, the editor is started on that file, and the
- filename is remembered for subsequent EDIT commands.
+ previous filename had been given to an EDIT command, it is used;
+ if not, the editor is started without a file. If a filename is
+ given, the editor is started on that file, and the filename is
+ remembered for subsequent EDIT commands.
SHOW EDITOR
Displays the full pathname of your text editor, if any, along
- with any command line options, and the file most recently
- edited (and therefore the default filename for your next EDIT
- command).
+ with any command line options, and the file most recently edited
+ (and therefore the default filename for your next EDIT command).
Related variables: \v(editor), \v(editopts), \v(editfile).
- _________________________________________________________________
- 1.3. Web Browser and FTP Interface
+1.3. Web Browser and FTP Interface
C-Kermit includes an FTP command, which simply runs the FTP program;
C-Kermit does not include any built-in support for Internet File
client:
SET FTP-CLIENT [ name [ options ] ]
- The name is the name of the FTP executable. In UNIX, Windows,
- or OS/2, it can be the filename of any executable program in
- your PATH (e.g. "ftp.exe" in Windows, "ftp" in UNIX); elsewhere
- (or if you do not have a PATH definition), it must be the fully
+ The name is the name of the FTP executable. In UNIX, Windows, or
+ OS/2, it can be the filename of any executable program in your
+ PATH (e.g. "ftp.exe" in Windows, "ftp" in UNIX); elsewhere (or
+ if you do not have a PATH definition), it must be the fully
specified pathname of the FTP program. If the name contains any
spaces, enclose it braces. Include any options after the
filename; these depend the particular ftp client.
The Web browser interface is covered in the following subsections.
- _________________________________________________________________
- 1.3.1. Invoking your Browser from C-Kermit
+1.3.1. Invoking your Browser from C-Kermit
BROWSE [ url ]
Starts your preferred Web browser on the URL, if one is given,
SET BROWSER [ name [ options ] ]
Use this command to specify the name of your Web browser
program, for example: "set browser lynx". The name must be in
- your PATH, or else it must be a fully specified filename; in
- VMS it must be a DCL command.
+ your PATH, or else it must be a fully specified filename; in VMS
+ it must be a DCL command.
SHOW BROWSER
Displays the current browser, options, and most recent URL.
Related variables: \v(browser), \v(browsopts), \v(browsurl).
- Also see [350]Section 2.15: Contacting Web Servers with the HTTP
+ Also see [358]Section 2.15: Contacting Web Servers with the HTTP
Command.
- _________________________________________________________________
- 1.3.2. Invoking C-Kermit from your Browser
+1.3.2. Invoking C-Kermit from your Browser
- The method for doing this depends, of course, on your browser. Here
- are some examples:
+ The method for doing this depends, of course, on your browser. Here are
+ some examples:
Netscape on UNIX (X-based)
In the Options->Applications section, set your Telnet
But none of the above is necessary if you make C-Kermit your default
Telnet client, which you can do by making a symlink called 'telnet' to
- the C-Kermit 7.0 binary. See [351]Section 9.1 for details.
- _________________________________________________________________
+ the C-Kermit 7.0 binary. See [359]Section 9.1 for details.
- 1.4. Command Editing
+1.4. Command Editing
Ctrl-W ("Word delete") was changed in 7.0 to delete back to the
- previous non-alphanumeric, rather than all the way back to the
- previous space.
- _________________________________________________________________
+ previous non-alphanumeric, rather than all the way back to the previous
+ space.
- 1.5. Command Switches
+1.5. Command Switches
As of version 7.0, C-Kermit's command parser supports a new type of
field, called a "switch". This is an optional command modifier.
- 1.5.1. General Switch Syntax
+1.5.1. General Switch Syntax
A switch is a keyword beginning with a slash (/). If it takes a value,
then the value is appended to it (with no intervening spaces),
send /delete/as-name:foo/text oofa.txt
- Does "foo/text" mean the filename is "foo" and the transfer is to be
- in text mode, or does it mean the filename is "foo/text"? Therefore we
+ Does "foo/text" mean the filename is "foo" and the transfer is to be in
+ text mode, or does it mean the filename is "foo/text"? Therefore we
require whitespace between switches to resolve the ambiguity. (That's
- only one of several possible ambiguities -- it is also conceivable
- that a file called "text" exists in the path "/delete/as-name:foo/").
+ only one of several possible ambiguities -- it is also conceivable that
+ a file called "text" exists in the path "/delete/as-name:foo/").
In general, if a switch can take a value, but you omit it, then either
- a reasonable default value is supplied, or an error message is
- printed:
+ a reasonable default value is supplied, or an error message is printed:
send /print:-Plaserwriter oofa.txt ; Value included = print options
send /print oofa.txt ; Value omitted, OK
send /mail oofa.txt ; Not OK - address required
?Address required
- Context-sensitive help (?) and completion (Esc or Tab) are available
- in the normal manner:
+ Context-sensitive help (?) and completion (Esc or Tab) are available in
+ the normal manner:
C-Kermit> send /pr? Switch, one of the following:
/print /protocol
Also, if you type ? in a switch field, switches that take values are
shown with a trailing colon; those that don't take values are shown
without one.
- _________________________________________________________________
- 1.5.2. Order and Effect of Switches
+1.5.2. Order and Effect of Switches
- The order of switches should not matter, except that they are
- evaluated from left to right, so if you give two switches with
- opposite effects, the rightmost one is used:
+ The order of switches should not matter, except that they are evaluated
+ from left to right, so if you give two switches with opposite effects,
+ the rightmost one is used:
send /text /binary oofa.zip ; Sends oofa.zip in binary mode.
- Like other command fields, switches have no effect whatsoever until
- the command is entered (by pressing the Return or Enter key). Even
- then, switches affect only the command with which they are included;
- they do not have global effect or side effects.
- _________________________________________________________________
+ Like other command fields, switches have no effect whatsoever until the
+ command is entered (by pressing the Return or Enter key). Even then,
+ switches affect only the command with which they are included; they do
+ not have global effect or side effects.
- 1.5.3. Distinguishing Switches from Other Fields
+1.5.3. Distinguishing Switches from Other Fields
All switches are optional. A command that uses switches lets you give
any number of them, including none at all. Example:
"/f", so "/f" is ambiguous). Now suppose there is an "f" directory in
the root directory; then this command would be interpreted as:
- Send all the files in the "/f" directory, giving each one an
- as-name of "oofa.txt".
+ Send all the files in the "/f" directory, giving each one an as-name
+ of "oofa.txt".
This could be a mistake, or it could be exactly what you intended;
- C-Kermit has no way of telling the difference. To avoid situations
- like this, spell switches out in full until you are comfortable enough
- with them to know the minimum abbreviation for each one. Hint: use ?
- and completion while typing switches to obtain the necessary feedback.
- _________________________________________________________________
+ C-Kermit has no way of telling the difference. To avoid situations like
+ this, spell switches out in full until you are comfortable enough with
+ them to know the minimum abbreviation for each one. Hint: use ? and
+ completion while typing switches to obtain the necessary feedback.
- 1.5.4. Standard File Selection Switches
+1.5.4. Standard File Selection Switches
The following switches are used on different file-oriented commands
(such as SEND, DIRECTORY, DELETE, PURGE) to refine the selection of
/AFTER:date-time
Select only those files having a date-time later than the one
- given. See [352]Section 1.6 for date-time formats. Synonym:
+ given. See [360]Section 1.6 for date-time formats. Synonym:
/SINCE.
/NOT-AFTER:date-time
(i.e. later or equal to) the one given.
/DOTFILES
- UNIX and OS-9 only: The filespec is allowed to match files
- whose names start with (dot) period. Normally these files are
- not shown.
+ UNIX and OS-9 only: The filespec is allowed to match files whose
+ names start with (dot) period. Normally these files are not
+ shown.
/NODOTFILES
- (UNIX and OS-9 only) Don't show files whose names start with
- dot (period). This is the opposite of /DOTFILES, and is the
- default. Note that when a directory name starts with a period,
- the directory and (in recursive operations) all its
- subdirectories are skipped.
+ (UNIX and OS-9 only) Don't show files whose names start with dot
+ (period). This is the opposite of /DOTFILES, and is the default.
+ Note that when a directory name starts with a period, the
+ directory and (in recursive operations) all its subdirectories
+ are skipped.
/LARGER-THAN:number
Only select files larger than the given number of bytes.
use the /NOBACKUP switch for this).
The pattern matcher is the same one used by IF MATCH string
- pattern ([353]Section 7.4), so you can test your patterns using
+ pattern ([361]Section 7.4), so you can test your patterns using
IF MATCH. If you need to match a literal * or ? (etc), precede
it by a backslash (\). If the pattern contains any spaces, it
must be enclosed in braces:
The pattern can also be a list of up to 8 patterns. In this
case, the entire pattern must be enclosed in braces, and each
- sub-pattern must also be enclosed in braces; this eliminates
- the need for designating a separator character, which is likely
- to also be a legal filename character on some platform or
- other, and therefore a source of confusion. You may include
- spaces between the subpatterns but they are not necessary. The
+ sub-pattern must also be enclosed in braces; this eliminates the
+ need for designating a separator character, which is likely to
+ also be a legal filename character on some platform or other,
+ and therefore a source of confusion. You may include spaces
+ between the subpatterns but they are not necessary. The
following two commands are equivalent:
send /except:{{ck*.o} {ck*.c}} ck*.?
send /except:{{ck*.o}{ck*.c}} ck*.?
- If a pattern is to include a literal brace character, precede
- it with "\". Also note the apparent conflict of this list
- format and the string-list format described in [354]Section
- 4.9.1. In case you want to include a wildcard string-list with
- braces on its outer ends as an /EXCEPT: argument, do it like
- this:
+ If a pattern is to include a literal brace character, precede it
+ with "\". Also note the apparent conflict of this list format
+ and the string-list format described in [362]Section 4.9.1. In
+ case you want to include a wildcard string-list with braces on
+ its outer ends as an /EXCEPT: argument, do it like this:
send /except:{{{ckuusr.c,ckuus2.c,ckuus6.c}}} ckuus*.c
- _________________________________________________________________
- 1.5.5. Setting Preferences for Different Commands
+1.5.5. Setting Preferences for Different Commands
Certain oft-used commands offer lots of switches because different
people have different requirements or preferences. For example, some
people want to be able to delete files without having to watch a list
of the deleted files scroll past, while others want to be prompted for
permission to delete each file. Different people prefer different
- directory-listing styles. And so on. Such commands can be tailored
- with the SET OPTIONS command:
+ directory-listing styles. And so on. Such commands can be tailored with
+ the SET OPTIONS command:
SET OPTIONS command [ switch [ switch [ ... ] ] ]
- Sets each switch as the default for the given command,
- replacing the "factory default". Of course you can also
- override any defaults established by the SET OPTIONS command by
- including the relevant switches in the affected command any
- time you issue it.
+ Sets each switch as the default for the given command, replacing
+ the "factory default". Of course you can also override any
+ defaults established by the SET OPTIONS command by including the
+ relevant switches in the affected command any time you issue it.
SHOW OPTIONS
Lists the commands that allows option-setting, and the options
synonyms are shown under their primary name; for example. /LOG
and /VERBOSE are shown as /LIST.
- Commands for which options may be set include DIRECTORY, DELETE,
- PURGE, and TYPE. Examples:
+ Commands for which options may be set include DIRECTORY, DELETE, PURGE,
+ and TYPE. Examples:
SET OPTIONS DIRECTORY /PAGE /NOBACKUP /HEADING /SORT:DATE /REVERSE
SET OPTIONS DELETE /LIST /NOHEADING /NOPAGE /NOASK /NODOTFILES
Put the desired SET OPTIONS commands in your C-Kermit customization
file for each command whose default switches you want to change every
time you run C-Kermit.
- _________________________________________________________________
- 1.6. Dates and Times
+1.6. Dates and Times
Some commands and switches take date-time values, such as:
12/25/2000 25 December 2000
25/12/2000 25 December 2000
- The last two examples show that when the year comes last, and the
- month is given numerically, the order of the day and month doesn't
- matter as long as the day is 13 or greater (mm/dd/yyyy is commonly
- used in the USA, whereas dd/mm/yyyy is the norm in Europe). However:
+ The last two examples show that when the year comes last, and the month
+ is given numerically, the order of the day and month doesn't matter as
+ long as the day is 13 or greater (mm/dd/yyyy is commonly used in the
+ USA, whereas dd/mm/yyyy is the norm in Europe). However:
08/02/2000 Is ambiguous and therefore not accepted.
20000208 10:28:01
This is Kermit's standard date-time format (based on ISO 8601), and is
- accepted (among other formats) by any command or switch that requires
- a date-time, and is output by any function whose result is a calendar
+ accepted (among other formats) by any command or switch that requires a
+ date-time, and is output by any function whose result is a calendar
date-time.
There are no optional parts to this format and it must be exactly 17
characters long, punctuated as shown (except you can substitute
underscore for space in contexts where a single "word" is required).
- The time is in 24-hour format (23:00:00 is 11:00pm). This is the
- format returned by \fdate(filename), so you can also use constructions
- like this:
+ The time is in 24-hour format (23:00:00 is 11:00pm). This is the format
+ returned by \fdate(filename), so you can also use constructions like
+ this:
send /after:\fdate(oofa.txt)
abbreviation "wks" is accepted for WEEKS, and "yrs" for "YEARS".
(To see how to specify dates relative to a specific date, rather than
- the current one, see the [355]\fmjd() function description below.)
+ the current one, see the [363]\fmjd() function description below.)
- You can check date formats with the DATE command. DATE by itself
- prints the current date and time in standard format: yyyymmdd
- hh:mm:ss. DATE followed by a date and/or time (including shortcuts)
- converts it to standard format if it can understand it, otherwise it
- prints an error message.
+ You can check date formats with the DATE command. DATE by itself prints
+ the current date and time in standard format: yyyymmdd hh:mm:ss. DATE
+ followed by a date and/or time (including shortcuts) converts it to
+ standard format if it can understand it, otherwise it prints an error
+ message.
The following variables and functions deal with dates and times; any
function argument designated as "date-time" can be in any of the
The given free-format date and/or time is converted to seconds
since midnight (the date, if given, is ignored). This function
replaces \ftod2secs(), which is now a synonym for \fntime().
- Unlike \ftod2secs(), \fntime() allows a date to be included,
- and it allows the time to be in free format (like 3pm), and it
+ Unlike \ftod2secs(), \fntime() allows a date to be included, and
+ it allows the time to be in free format (like 3pm), and it
allows the amount of time to be more than 24 hours. E.g.
\fntime(48:00:00) = 172800. Example of use:
The given number of seconds is converted to hh:mm:ss format.
\fdate(filename)
- Returns the modification date-time of the given file in
- standard format: yyyymmdd hh:mm:ss.
+ Returns the modification date-time of the given file in standard
+ format: yyyymmdd hh:mm:ss.
\fcvtdate(date-time)
Converts a free-format date and/or time to Kermit standard
\fdayofyear(date-time)
\fdoy(date-time)
- Converts a free-format date and/or time to yyyyddd, where ddd
- is the 3-digit day of the year, and 1 January is Day 1. If a
- time is included with the date, it is returned in standard
- format. If a date is included but no time, the date is returned
- without a time. If a time is given with no date, the time is
- converted and the current date is supplied. If no argument is
- given, the current date-time is returned. Synonym: \fdoy().
- Examples:
+ Converts a free-format date and/or time to yyyyddd, where ddd is
+ the 3-digit day of the year, and 1 January is Day 1. If a time
+ is included with the date, it is returned in standard format. If
+ a date is included but no time, the date is returned without a
+ time. If a time is given with no date, the time is converted and
+ the current date is supplied. If no argument is given, the
+ current date-time is returned. Synonym: \fdoy(). Examples:
\fddayofyear(4 Jul 2000 2:21:17pm) = 2000185 14:21:17
\fdoy() = 2000185 14:21:17 (on 4 Jul 2000 at 2:21:17pm).
Note: The yyyyddd day-of-year format is often erroneously referred to
as a Julian date. However, a true Julian date is a simple counting
number, the number of days since a certain fixed day in the past.
- [356]See \fmjd() below.
+ [364]See \fmjd() below.
\fdoy2date(date-time)
- Converts a date or date-time in day-of-year format to a
- standard format date. A yyyyddd-format date must be supplied;
- time is optional. The given date is converted to yyyymmdd
- format. If a time is given, it is converted to 24-hour format.
- Examples:
+ Converts a date or date-time in day-of-year format to a standard
+ format date. A yyyyddd-format date must be supplied; time is
+ optional. The given date is converted to yyyymmdd format. If a
+ time is given, it is converted to 24-hour format. Examples:
\fdoy2date(2000185) = 20000704
\fdoy2(2000185 3pm) = 20000704 15:00:00
echo \fmjd2date(\fmjd()-212)
- Constructions such as this can be used in any command where a
- date-time is required, e.g.:
+ Constructions such as this can be used in any command where a date-time
+ is required, e.g.:
send /after:\fmjd2date(\fmjd()-212)
to "send /after:-212days").
MJDs also have other regularities not exhibited by other date formats.
- For example, \fmodulus(\fmjd(any-date),7) gives the day of the week
- for any date (where 4=Sun, 5=Mon, ..., 3=Sat). (However, it is easier
- to use \fnday() for this purpose, and it gives the more conventional
+ For example, \fmodulus(\fmjd(any-date),7) gives the day of the week for
+ any date (where 4=Sun, 5=Mon, ..., 3=Sat). (However, it is easier to
+ use \fnday() for this purpose, and it gives the more conventional
result of 0=Sun, 1=Mon, ..., 6=Sat).
- Note that if MJDs are to be compared, they must be compared
- numerically (IF <, =, >) and not lexically (IF LLT, EQUAL, LGT),
- whereas DOYs must be compared lexically if they include a time (which
- contains ":" characters); however, if DOYs do not include a time, they
- may also be compared numerically.
+ Note that if MJDs are to be compared, they must be compared numerically
+ (IF <, =, >) and not lexically (IF LLT, EQUAL, LGT), whereas DOYs must
+ be compared lexically if they include a time (which contains ":"
+ characters); however, if DOYs do not include a time, they may also be
+ compared numerically.
- In any case, lexical comparison of DOYs always produces the
- appropriate result, as does numeric comparison of MJDs.
+ In any case, lexical comparison of DOYs always produces the appropriate
+ result, as does numeric comparison of MJDs.
The same comments apply to sorting. Also note that DOYs are fixed
length, but MJDs can vary in length. However, all MJDs between 3 April
1886 and 30 Aug 2132 are 5 decimal digits long. (MJDs become 6 digits
long on 31 Aug 2132, and 7 digits long on 13 Oct 4596).
- _________________________________________________________________
- 1.7. Partial Completion of Keywords
+1.7. Partial Completion of Keywords
Partial completion of keywords was added in C-Kermit 7.0. In prior
versions, if completion was attempted (by pressing the Esc or Tab key)
- on a string that matched different keywords, you'd just get a beep.
- Now Kermit completes up to the first character where the possibly
- matching keywords differ and then beeps. For example:
+ on a string that matched different keywords, you'd just get a beep. Now
+ Kermit completes up to the first character where the possibly matching
+ keywords differ and then beeps. For example:
C-Kermit> send /n<Tab>
- which matches /NOT-BEFORE and /NOT-AFTER, now completes up to the
- dash:
+ which matches /NOT-BEFORE and /NOT-AFTER, now completes up to the dash:
C-Kermit> send /n<Tab>ot-<Beep>
Partial completion works for filenames too (as it has for some years).
- _________________________________________________________________
- 1.8. Command Recall
+1.8. Command Recall
- C-Kermit has had a command history buffer for some time, which could
- be scrolled interactively using control characters or (in Kermit 95
- only) arrow keys. Version 7.0 adds a REDO command that allows the most
- recent command matching a given pattern to be re-executed:
+ C-Kermit has had a command history buffer for some time, which could be
+ scrolled interactively using control characters or (in Kermit 95 only)
+ arrow keys. Version 7.0 adds a REDO command that allows the most recent
+ command matching a given pattern to be re-executed:
{ REDO, RR, ^ } [ pattern ]
- Search the command history list for the most recent command
- that matches the given pattern, and if one is found, execute it
+ Search the command history list for the most recent command that
+ matches the given pattern, and if one is found, execute it
again.
The pattern can be a simple string (like "send"), in which case the
- last SEND command is re-executed. Or it can contain wildcard
- characters "*" and/or "?", which match any string and any single
- character, respectively (note that "?" must be preceded by backslash
- to override its normal function of giving help), and in most C-Kermit
- versions may also include [] character lists and {} string lists (see
- [357]Section 4.9).
+ last SEND command is re-executed. Or it can contain wildcard characters
+ "*" and/or "?", which match any string and any single character,
+ respectively (note that "?" must be preceded by backslash to override
+ its normal function of giving help), and in most C-Kermit versions may
+ also include [] character lists and {} string lists (see [365]Section
+ 4.9).
The match works by appending "*" to the end of the given pattern (if
you didn't put one there yourself). Thus "redo *oofa" becomes "redo
*oofa*" and therefore matches the most recent command that contains
"oofa" anywhere within the command. If you want to inhibit the
- application of the trailing "*", e.g. to force matching a string at
- the end of a command, enclose the pattern in braces:
+ application of the trailing "*", e.g. to force matching a string at the
+ end of a command, enclose the pattern in braces:
redo {*oofa}
matches the most recent command that ends with "oofa".
- REDO commands themselves are not entered into the command history
- list. If no pattern is given, the previous (non-REDO) command is
- re-executed. The REDOne command is reinserted at the end of the
- command history buffer, so the command scrollback character (Ctrl-P,
- Ctrl-B, or Uparrow) can retrieve it.
+ REDO commands themselves are not entered into the command history list.
+ If no pattern is given, the previous (non-REDO) command is re-executed.
+ The REDOne command is reinserted at the end of the command history
+ buffer, so the command scrollback character (Ctrl-P, Ctrl-B, or
+ Uparrow) can retrieve it.
Examples:
foo
C-Kermit>
- Since REDO, REDIAL, and REDIRECT all start the same way, and RED is
- the designated non-unique abbreviation for REDIAL, REDO must be
- spelled out in full. For convenience, RR is included as an invisible
- easy-to-type synonym for REDO. You can also use the "^" character for
- this:
+ Since REDO, REDIAL, and REDIRECT all start the same way, and RED is the
+ designated non-unique abbreviation for REDIAL, REDO must be spelled out
+ in full. For convenience, RR is included as an invisible easy-to-type
+ synonym for REDO. You can also use the "^" character for this:
C-Kermit> ^ ; Most recent command
C-Kermit> ^ s ; Most recent command starting with "s"
Unlike the manual command-history-scrolling keys, the REDO command can
be used in a script, but it's not recommended (since the command to be
- REDOne might not be found, so if the REDO command fails, you can't
- tell whether it was because REDO failed to find the requested command,
- or because the command was found but it failed).
- _________________________________________________________________
+ REDOne might not be found, so if the REDO command fails, you can't tell
+ whether it was because REDO failed to find the requested command, or
+ because the command was found but it failed).
- 1.9. EXIT Messages
+1.9. EXIT Messages
The EXIT and QUIT commands now accept an optional message to be
- printed. This makes the syntax of EXIT and QUIT just like END and
- STOP:
+ printed. This makes the syntax of EXIT and QUIT just like END and STOP:
{ EXIT, QUIT, END, STOP } [ status-code [ message ] ]
- where status-code is a number (0 indicating success, nonzero
- indicating failure). This is handy in scripts that are never supposed
- to enter interactive mode:
+ where status-code is a number (0 indicating success, nonzero indicating
+ failure). This is handy in scripts that are never supposed to enter
+ interactive mode:
dial 7654321
if fail exit 1 Can't make connection - try again later.
with a message, but without changing the exit status from what it
normally would have been, use the \v(exitstatus) variable, e.g.:
- exit \v(existatus) Goodbye from \v(cmdfile).
+ exit \v(exitstatus) Goodbye from \v(cmdfile).
The EXIT status is returned to the system shell or whatever other
process invoked C-Kermit, e.g. in UNIX:
$ echo $?
97
$
- _________________________________________________________________
- 1.10. Managing Keyboard Interruptions
+1.10. Managing Keyboard Interruptions
When C-Kermit is in command or file-transfer mode (as opposed to
CONNECT mode), it can be interrupted with Ctrl-C. Version 7.0 adds the
transfer when C-Kermit is in local mode, or to re-enable it
after it has been disabled. This applies to the X, Z, E, and
similar keys as well as to the system interrupt character,
- usually Ctrl-C. This is distinct from SET TRANSFER
- CANCELLATION, which tells whether packet mode can be exited by
- sending a special sequence of characters.
+ usually Ctrl-C. This is distinct from SET TRANSFER CANCELLATION,
+ which tells whether packet mode can be exited by sending a
+ special sequence of characters.
Several other commands can be interrupted by pressing any key while
they are active. Version 7.0 adds the ability to disable this form of
When a PAUSE, SLEEP, WAIT, or INPUT command is interrupted from the
keyboard, the new variable \v(kbchar) contains a copy of the (first)
character that was typed and caused the interruption, provided it was
- not the command interrupt character (usually Ctrl-C). If these
- commands complete successfully or time out without a keyboard
- interruption, the \v(kbchar) variable is empty.
+ not the command interrupt character (usually Ctrl-C). If these commands
+ complete successfully or time out without a keyboard interruption, the
+ \v(kbchar) variable is empty.
The \v(kbchar) variable (like any other variable) can be tested with:
The \v(kbchar) variable can be reset with WAIT 0 (PAUSE 0, SLEEP 0,
etc).
- _________________________________________________________________
- 1.11. Taming The Wild Backslash -- Part Deux
+1.11. Taming The Wild Backslash -- Part Deux
- [358]Using C-Kermit, 2nd Edition, contains a brief section, "Taming
- the Wild Backslash", on page 48, which subsequent experience has shown
- to be inadequate for Kermit users intent on writing scripts that deal
- with Windows, DOS, and OS/2 filenames, in which backslash (\) is used
- as the directory separator. This section fills in the blanks.
+ [366]Using C-Kermit, 2nd Edition, contains a brief section, "Taming the
+ Wild Backslash", on page 48, which subsequent experience has shown to
+ be inadequate for Kermit users intent on writing scripts that deal with
+ Windows, DOS, and OS/2 filenames, in which backslash (\) is used as the
+ directory separator. This section fills in the blanks.
- 1.11.1. Background
+1.11.1. Background
The Kermit command language shares a certain unavoidable but annoying
characteristic with most other command languages that are capable of
taken literally. And to add to the confusion, the UNIX shell offers
many forms of quoting, and many alternative UNIX shells are available,
each using slightly different syntax.
- _________________________________________________________________
- 1.11.2. Kermit's Quoting Rules
+1.11.2. Kermit's Quoting Rules
Kermit's basic quoting rules are simple by comparison (there are, of
course, additional syntax requirements for macro definitions, command
this indicates a special substitution item; otherwise the
following character is to be taken literally (exceptions: \ at
- end of line is taken literally; \n, \b, and \n are special
- items in the OUTPUT command only).
+ end of line is taken literally; \n, \b, and \n are special items
+ in the OUTPUT command only).
Semicolon (;)
(Only when at the beginning of a line or preceded by at least
precede it by a backslash (\).
Sounds easy! And it is, except when backslash also has a special
- meaning to the underlying operating system, as it does in DOS,
- Windows, and OS/2, where it serves as the directory separator in
- filenames such as:
+ meaning to the underlying operating system, as it does in DOS, Windows,
+ and OS/2, where it serves as the directory separator in filenames such
+ as:
D:\K95\KEYMAPS\READ.ME
send d:\%a
Does it send the file named "oofa" in the current directory of the D:
- disk, or does it send a file named "%a" in the root directory of the
- D: disk? This is the kind of trouble we get into when we attempt to
- bend the rules in the interest of user friendliness. (The answer is:
- if the variable \%a has definition that is the name of an existing
- file, that file is sent; if a file d:\%a exists, it is sent; otherwise
- if both conditions are true, the variable takes precedence, and the
- literal filename can be forced by quoting: \\%a.)
+ disk, or does it send a file named "%a" in the root directory of the D:
+ disk? This is the kind of trouble we get into when we attempt to bend
+ the rules in the interest of user friendliness. (The answer is: if the
+ variable \%a has definition that is the name of an existing file, that
+ file is sent; if a file d:\%a exists, it is sent; otherwise if both
+ conditions are true, the variable takes precedence, and the literal
+ filename can be forced by quoting: \\%a.)
In Kermit 95 (but not MS-DOS Kermit), we also bend the rules another
way by allowing you to use forward slash (/) rather than backslash (\)
This looks more natural to UNIX users, and in fact is perfectly
acceptable to the Windows 95/98/NT and OS/2 operating systems on the
API level. BUT (there is always a "but") the Microsoft shell,
- COMMAND.COM, for Windows 95/98 and NT does not allow this notation,
- and therefore it can not be used in any Kermit command -- such as RUN
- -- that invokes the Windows command shell AND your command shell is
+ COMMAND.COM, for Windows 95/98 and NT does not allow this notation, and
+ therefore it can not be used in any Kermit command -- such as RUN --
+ that invokes the Windows command shell AND your command shell is
COMMAND.COM or any other shell that does not allow forward slash as
directory separator (some alternative shells do allow this).
that accepts forward slash as a directory separator, you can stop
reading right now -- UNLESS (there is always an "unless") you want
your scripts to be portable to systems that have other shells. Also
- note that some Windows shells might actually REQUIRE forward
- slashes (instead of backslashes) as directory separators; we do not
- treat this situation below, but the treatment is obvious -- use
- slash rather backslash as the directory separator.
- _________________________________________________________________
+ note that some Windows shells might actually REQUIRE forward slashes
+ (instead of backslashes) as directory separators; we do not treat
+ this situation below, but the treatment is obvious -- use slash
+ rather backslash as the directory separator.
- 1.11.3. Passing DOS Filenames from Kermit to Shell Commands
+1.11.3. Passing DOS Filenames from Kermit to Shell Commands
The following Kermit commands invoke the system command shell:
REDIRECT
PIPE
- Each of these commands takes a shell command as an operand. These
- shell commands are not, and can not be, parsed by Kermit since Kermit
- does not know the syntax of shell commands, and so can't tell the
- difference between a keyword, a filename, a variable, a switch, or
- other item. Therefore the rules can not be bent since Kermit doesn't
- know where or how to bend them. To illustrate (using the regular
- Windows shell):
+ Each of these commands takes a shell command as an operand. These shell
+ commands are not, and can not be, parsed by Kermit since Kermit does
+ not know the syntax of shell commands, and so can't tell the difference
+ between a keyword, a filename, a variable, a switch, or other item.
+ Therefore the rules can not be bent since Kermit doesn't know where or
+ how to bend them. To illustrate (using the regular Windows shell):
run c:\\windows\\command\\chkdsk.exe
run c:\windows\command\chkdsk.exe
- results in Kermit applying its quoting rules before sending the text
- to the shell. Since "w" and "c" are not in the list of backslash-item
+ results in Kermit applying its quoting rules before sending the text to
+ the shell. Since "w" and "c" are not in the list of backslash-item
codes, the backslash means "take the following character literally".
Thus, by the time this filename gets to the Windows shell, it has
become:
internally to invoke the associated helper program; the form of this
command might conflict with the form demanded by certain alternative
shells.
- _________________________________________________________________
- 1.11.4. Using Variables to Hold DOS Filenames
+1.11.4. Using Variables to Hold DOS Filenames
Now to the next level. Suppose you want to write a script in which
filenames are parameters, and therefore are stored in variables.
This will work; no surprises here. However, if you had used ASSIGN
rather than DEFINE, you might have been surprised after all; review
- pages 348-349 of [359]Using C-Kermit (2nd Ed) for the difference
+ pages 348-349 of [367]Using C-Kermit (2nd Ed) for the difference
between DEFINE and ASSIGN.
We have said that any Kermit 95 or MS-DOS Kermit command that parses
ask filename { Please type a filename: }
Please type a filename: c:\windows\command\chkdsk.exe
send \m(filename)
- _________________________________________________________________
- 1.11.5. Passing DOS Filenames as Parameters to Macros
+1.11.5. Passing DOS Filenames as Parameters to Macros
Suppose you want to pass a DOS filename containing backslashes as a
parameter to a Kermit macro. This raises two issues:
learned in earlier sections:
1. If it is a literal filename, either double the backslashes, or (if
- the filename is to be used only within Kermit itself and not
- passed to a DOS shell, or it is to be passed to an alternative
- shell that accepts forward slash as a directory separator), use
- forward slash instead of backslash as the directory separator.
+ the filename is to be used only within Kermit itself and not passed
+ to a DOS shell, or it is to be passed to an alternative shell that
+ accepts forward slash as a directory separator), use forward slash
+ instead of backslash as the directory separator.
2. If it is a variable that contains a filename, make sure you use a
macro-style variable name, rather than a
backslash-percent-character name.
But what if you don't like these rules and you still want to pass a
literal filename containing single backslashes to a macro? This is
possible too, but a bit tricky: turn command quoting off before
- invoking the macro, and then turn it back on inside the macro.
- Example:
+ invoking the macro, and then turn it back on inside the macro. Example:
define test set command quoting on, echo \fcontents(\%1)
test c:\mydir\blah.txt
c:\mydir\blah.txt
- Upon return from the macro, command quoting is back on (since the
- macro turned it on).
+ Upon return from the macro, command quoting is back on (since the macro
+ turned it on).
Obviously this trick can not be used if the filename is stored in a
variable, since it prevents the variable from being evaluated.
- _________________________________________________________________
- 1.11.6. Passing DOS File Names from Macro Parameters to the DOS Shell
+1.11.6. Passing DOS File Names from Macro Parameters to the DOS Shell
Now suppose you need to pass a DOS filename to a macro, and the macro
needs to pass it, in turn, to the Windows shell via (say) Kermit's RUN
Here we replace all occurrences (if any) of "/" in the argument with
"\" prior to issuing the RUN command. Of course, in order to specify
- "\" as a literal character in the \freplace() argument list, we have
- to double it.
- _________________________________________________________________
+ "\" as a literal character in the \freplace() argument list, we have to
+ double it.
- 1.11.7. Passing DOS Filenames to Kermit from the Shell
+1.11.7. Passing DOS Filenames to Kermit from the Shell
As noted in the manual, the \&@[] array contains Kermit's command-line
arguments. Suppose one of these arguments, say \&@[3], is a DOS
filename such as C:\FOO\BAR\BAZ\OOFA.TXT. (Note: In C-Kermit 7.0 and
- K95 1.1.18 and later, command-line arguments after "=" or "--" are
- also available in the top-level \%1..9 variables; see [360]Section
- 7.5.)
+ K95 1.1.18 and later, command-line arguments after "=" or "--" are also
+ available in the top-level \%1..9 variables; see [368]Section 7.5.)
Of course you can eliminate any problems by using forward slashes
rather than backslashes in the filename, but sometimes this is not
- possible, as when the Kermit command line is being generated by
- another program than can only generate "native" format DOS filenames.
+ possible, as when the Kermit command line is being generated by another
+ program than can only generate "native" format DOS filenames.
As noted in the manual, "\%x" variables and \&x[] arrays are always
evaluated "all the way" (recursively). If the contents of one of these
evaluation.
There is another kind of variable, which is evaluated only "one level
- deep". You can use this to prevent interpretation of the backslashes
- in the filenames. Example:
+ deep". You can use this to prevent interpretation of the backslashes in
+ the filenames. Example:
assign filename \fcontents(\&@[3]) ; Transfer contents
...
Or, more simply:
send \fcontents(\&@[3])
- _________________________________________________________________
- 1.12. Debugging
+1.12. Debugging
The debug log is produced when you give a "log debug" command. This is
- normally done at the request of the Kermit help desk, for forwarding
- to the Kermit developers for analysis as a last resort in
- troubleshooting problems. (Last resort because it can grow quite huge
- in a very short time.) In cases where timing information is critical
- to understanding a problem, you can tell C-Kermit to put a timestamp
- on each debug log line by giving the command:
+ normally done at the request of the Kermit help desk, for forwarding to
+ the Kermit developers for analysis as a last resort in troubleshooting
+ problems. (Last resort because it can grow quite huge in a very short
+ time.) In cases where timing information is critical to understanding a
+ problem, you can tell C-Kermit to put a timestamp on each debug log
+ line by giving the command:
SET DEBUG TIMESTAMP ON
At any time before or after activating the debug log (SET DEBUG
- TIMESTAMP OFF turns off timestamping). Timestamps can be turned off
- and on as desired while logging. Obviously, they increase the size and
+ TIMESTAMP OFF turns off timestamping). Timestamps can be turned off and
+ on as desired while logging. Obviously, they increase the size and
growth rate of the log significantly, and so should be used sparingly.
Timestamps are of the form hh:mm:ss.xxx, where .xxx is thousands of a
second (but is included only on platforms that include this feature).
- _________________________________________________________________
- 1.13. Logs
+1.13. Logs
In UNIX C-Kermit and in K-95, you can now direct any log to a pipe.
This not only lets you send your logs to places other than disk files,
but also lets you customize them to any desired degree.
- LOG { DEBUG, PACKETS, SESSION, TRANSACTION, CONNECTION } { file, pipe
- } ...
+ LOG { DEBUG, PACKETS, SESSION, TRANSACTION, CONNECTION } { file, pipe }
+ ...
A "pipe" is the name of a command, preceded by a vertical bar.
If the pipe contains any spaces, it must be enclosed in braces.
LOG TRANSACTIONS |lpr
This sends the transaction log to the default UNIX printer,
- rather than to a file (use "lp" rather than "lpr" if
- necessary).
+ rather than to a file (use "lp" rather than "lpr" if necessary).
LOG TRANSACTIONS {| myfilter > t.log}
For those who don't like the format of the transaction log, or
LOG PACKETS {| tr "\\01" "X" | cut -c9- > packet.log}
This one writes the regular packet log, but translates the
- Ctrl-A that starts each packet to the letter "X" and removes
- the s-nn-nn- notation from the beginning of each line. Note the
+ Ctrl-A that starts each packet to the letter "X" and removes the
+ s-nn-nn- notation from the beginning of each line. Note the
double backslash (normal Kermit quoting rules). "man tr" and
"man cut" for further info.
- See [361]Section 2.12 for information about the new connection log.
- _________________________________________________________________
+ See [369]Section 2.12 for information about the new connection log.
- 1.14. Automatic File-Transfer Packet Recognition at the Command Prompt
+1.14. Automatic File-Transfer Packet Recognition at the Command Prompt
Beginning in version 7.0, C-Kermit can recognize Kermit (and in some
cases also Zmodem) file-transfer packets while at its command prompt.
COMMAND AUTODOWNLOAD is the command-mode equivalent of TERMINAL
AUTODOWNLOAD, which is effective during CONNECT mode.
- _________________________________________________________________
- 1.15. The TYPE Command
+1.15. The TYPE Command
The TYPE command now accepts a selection of optional switches
- ([362]Section 1.5), and also sets several variables.
+ ([370]Section 1.5), and also sets several variables.
Syntax: TYPE [ switches... ] filename
Switches:
/PAGE
- If /PAGE is included, Kermit pauses at the end of each
- screenful and issues a "more?" prompt. You may press the space
- bar to view the next page (screenful), or press "q" or "n" to
- return to the C-Kermit prompt. If this switch is given, it
- overrides the COMMAND MORE-PROMPTING setting for this command
- only. If it is not given, paging is according to COMMAND
- MORE-PROMPTING.
+ If /PAGE is included, Kermit pauses at the end of each screenful
+ and issues a "more?" prompt. You may press the space bar to view
+ the next page (screenful), or press "q" or "n" to return to the
+ C-Kermit prompt. If this switch is given, it overrides the
+ COMMAND MORE-PROMPTING setting for this command only. If it is
+ not given, paging is according to COMMAND MORE-PROMPTING.
/NOPAGE
Do not pause at the end of each screenful; show the whole file
If n is omitted, 10 is used.
/TAIL[:n]
- Only show the last n lines of the file (where n is a number).
- If nis omitted, 10 is used. Note: /HEAD and /TAIL can't be
- combined; if you give both switches, only the most recent one
- is used.
+ Only show the last n lines of the file (where n is a number). If
+ nis omitted, 10 is used. Note: /HEAD and /TAIL can't be
+ combined; if you give both switches, only the most recent one is
+ used.
/MATCH:pattern
Only type lines from the file that match the given pattern (see
- [363]Section 4.9.1 for pattern notation). UNIX users familiar
+ [371]Section 4.9.1 for pattern notation). UNIX users familiar
with grep should note a significant difference: there is no
implied "*" at the beginning and end of the pattern. Thus:
TYPE /MATCH:*foo Lists lines that end with "foo".
TYPE /MATCH:*foo* Lists lines that have "foo" anywhere in them.
- /HEAD and /TAIL apply after /MATCH, so "type /tail:20
- /match:x*" shows the last 20 lines in the file that start with
- "x".
+ /HEAD and /TAIL apply after /MATCH, so "type /tail:20 /match:x*"
+ shows the last 20 lines in the file that start with "x".
/PREFIX:string
- Print the given string at the beginning of each line. The
- string may be a constant, a variable, or a quoted variable. If
- it's an unquoted variable, its value at the time the TYPE
- command was given is used as a constant. If it is a quoted
- variable, it is re-evaluated for each line; a useful variable
- for this context is \v(ty_ln) (the line number of the current
- line being typed). If the prefix is to include spaces, it must
- be enclosed in braces. Examples:
+ Print the given string at the beginning of each line. The string
+ may be a constant, a variable, or a quoted variable. If it's an
+ unquoted variable, its value at the time the TYPE command was
+ given is used as a constant. If it is a quoted variable, it is
+ re-evaluated for each line; a useful variable for this context
+ is \v(ty_ln) (the line number of the current line being typed).
+ If the prefix is to include spaces, it must be enclosed in
+ braces. Examples:
type /prefix:{oofa.txt: } /match:*thing* oofa.txt
- Prints all lines in oofa.txt that contain "thing" with
- the filename itself as the prefix (similar to UNIX grep).
+ Prints all lines in oofa.txt that contain "thing" with the
+ filename itself as the prefix (similar to UNIX grep).
type /prefix:{\v(time). } oofa.txt
Prefixes each line of oofa.txt with the time at which the
TYPE command was given (one backslash)
type /prefix:{\\v(time). } oofa.txt
- Prefixes each line of oofa.txt with the time at which
- that line is being typed (two backslashes).
+ Prefixes each line of oofa.txt with the time at which that
+ line is being typed (two backslashes).
type /prefix:{\\v(ty_ln). } oofa.txt
Prefixes each line of oofa.txt with its line number.
If a TYPE command is given with no switch, and no SET OPTIONS TYPE
selection is in effect, paging is according to your COMMAND
MORE-PROMPTING setting (SHOW COMMAND).
- _________________________________________________________________
- 1.16. The RESET Command
+1.16. The RESET Command
The RESET command, added in 7.0, closes all open files and logs, but
does not affect the open connection (if any).
- _________________________________________________________________
- 1.17. The COPY and RENAME Commands
+1.17. The COPY and RENAME Commands
As of C-Kermit 7.0, in the UNIX version only, the COPY and RENAME
- commands are built in and do not call the underlying platform's COPY
- or RENAME command. This allows them to work in "NOPUSH" versions and
- other circumstances where it can't access system commands, and it
- allows file copying and renaming to be done portably in scripts. The
+ commands are built in and do not call the underlying platform's COPY or
+ RENAME command. This allows them to work in "NOPUSH" versions and other
+ circumstances where it can't access system commands, and it allows file
+ copying and renaming to be done portably in scripts. The
characteristics of the built-in COPY or RENAME include:
- * It fails if the source file is a directory or is wild or lacks
- read access.
+ * It fails if the source file is a directory or is wild or lacks read
+ access.
* It fails if the source file is the destination file.
- * It allows the destination file to be a directory, in which case
- the source file is copied (or renamed) into it with the same name.
+ * It allows the destination file to be a directory, in which case the
+ source file is copied (or renamed) into it with the same name.
* It overwrites an existing destination file if its permission
allows.
* It sets the new file's permission according to umask but also
when the source and target files are the same file:
/APPEND = Append source file to destination file.
- /SWAP-BYTES = Swap bytes (see [364]Section 6.6.5).
+ /SWAP-BYTES = Swap bytes (see [372]Section 6.6.5).
/FROMB64 = Decode the source file from Base64 encoding.
/TOB64 = Encode the target file in Base64.
Base64 is the encoding commonly used for enclosures in Internet email.
- _________________________________________________________________
- 1.18. The MANUAL Command
+1.18. The MANUAL Command
The MANUAL command can be used to access the appropriate Kermit manual
or other manual. The general syntax is:
MANUAL [ string ]
- If the string is omitted, C-Kermit asks the underlying system
- to access the C-Kermit manual using whatever method is
- appropriate for the system.
+ If the string is omitted, C-Kermit asks the underlying system to
+ access the C-Kermit manual using whatever method is appropriate
+ for the system.
The specific action depends on the system. In UNIX, a "man" command is
- issued; "kermit" is the default argument but other manual topics may
- be specified. If the "man" command allows index or string searching,
- the appropriate syntax may be included.
+ issued; "kermit" is the default argument but other manual topics may be
+ specified. If the "man" command allows index or string searching, the
+ appropriate syntax may be included.
In Kermit 95, the MANUAL command brings up the HTML online K95 manual.
Correct operation of the "man" command in C-Kermit depends on the
appropriate man page or help topic having been installed in the right
place with the right permissions and format.
- _________________________________________________________________
- 1.19. String and Filename Matching Patterns
+1.19. String and Filename Matching Patterns
A pattern is a string that includes special notation for matching
classes or sequences of characters. C-Kermit 7.0 / K95 1.1.19 supports
patterns in several places:
- * Filenames ([365]Section 4.9)
- * SWITCH case labels ([366]Section 7.18)
- * The new IF MATCH statement ([367]Section 7.4)
- * TYPE /MATCH ([368]Section 1.15)
- * SET FILE TEXT-PATTERNS and BINARY-PATTERNS ([369]Section 4.3)
- * The \fsearch() and \farraylook() functions ([370]Sections 7.3 and
- [371]7.10.7)
- * The \fpattern() function used with [M,RE]INPUT ([372]Section 7.1)
+ * Filenames ([373]Section 4.9)
+ * SWITCH case labels ([374]Section 7.18)
+ * The new IF MATCH statement ([375]Section 7.4)
+ * TYPE /MATCH ([376]Section 1.15)
+ * SET FILE TEXT-PATTERNS and BINARY-PATTERNS ([377]Section 4.3)
+ * The \fsearch() and \farraylook() functions ([378]Sections 7.3 and
+ [379]7.10.7)
+ * The \fpattern() function used with [M,RE]INPUT ([380]Section 7.1)
Patterns are also called wildcards, especially when used for filename
- matching. C-Kermit's pattern syntax is explained in [373]Section
- 4.9.1, and also by the HELP WILDCARDS command.
- _________________________________________________________________
+ matching. C-Kermit's pattern syntax is explained in [381]Section 4.9.1,
+ and also by the HELP WILDCARDS command.
- 1.20. Multiple Commands on One Line
+1.20. Multiple Commands on One Line
As of C-Kermit 7.0, commands can be grouped together on one line by
separating the commands with commas and enclosing the list in braces.
}
(the "do" is optional).
- _________________________________________________________________
- 1.21. What Do I Have?
+1.21. What Do I Have?
C-Kermit can be built for hundreds of different platforms with
- practically countless configuration options. Certain commands might
- not be available in certain configurations, etc. Even on the same
- platform, different builds are possible: "maximum functionality",
- "minimum size", "maximum performance", and so on. You can find out a
- lot about the configuration of your C-Kermit program with the SHOW
- FEATURES command. Of course, a lot of what it says, especially in the
- bottom part, might seem like gibberish, but can be deciphered with a
- Rosetta Stone (such as the C-Kermit source or the [374]ckccfg.txt
- file). In any case, the output from SHOW FEATURES might easily explain
- why some expected feature is missing, or some buffer is smaller than
- expected. Here's a sample of the bottom section for the SunOS version:
+ practically countless configuration options. Certain commands might not
+ be available in certain configurations, etc. Even on the same platform,
+ different builds are possible: "maximum functionality", "minimum size",
+ "maximum performance", and so on. You can find out a lot about the
+ configuration of your C-Kermit program with the SHOW FEATURES command.
+ Of course, a lot of what it says, especially in the bottom part, might
+ seem like gibberish, but can be deciphered with a Rosetta Stone (such
+ as the C-Kermit source or the [382]ckccfg.txt file). In any case, the
+ output from SHOW FEATURES might easily explain why some expected
+ feature is missing, or some buffer is smaller than expected. Here's a
+ sample of the bottom section for the SunOS version:
C-Kermit 7.0.196, 1 Jan 2000
particular option easier to find.
* MAXWLD is the maximum number of files that a wildcard can expand
to.
- * Anything starting with "NO" is a feature (or something other than
- a feature) that has been deliberately "compiled out", or omitted.
+ * Anything starting with "NO" is a feature (or something other than a
+ feature) that has been deliberately "compiled out", or omitted.
* Important items for script writers include: CMDBL=32763 (the size
of the command buffer and therefore the maximum length for a macro
or variable definition; CMDDEP=64 (the limit on recursion depth);
size of the INPUT command circular buffer); MAC_MAX=16384 (the
maximum number of macros), etc.
- See the [375]ckccfg.txt file for details.
- _________________________________________________________________
+ See the [383]ckccfg.txt file for details.
- 1.22. Generalized File Input and Output
+1.22. Generalized File Input and Output
C-Kermit 7.0 adds a new generalized I/O system for stream files,
- augmenting (and to some extent, overlapping with) the older OPEN,
- READ, WRITE, and CLOSE commands. In the new file i/o system, which can
- be used simultaneously with the old one, all commands are grouped
- together under the new FILE keyword, and some related functions and
- variables are added.
+ augmenting (and to some extent, overlapping with) the older OPEN, READ,
+ WRITE, and CLOSE commands. In the new file i/o system, which can be
+ used simultaneously with the old one, all commands are grouped together
+ under the new FILE keyword, and some related functions and variables
+ are added.
- 1.22.1. Why Another I/O System?
+1.22.1. Why Another I/O System?
The well-known LOG, OPEN, READ, WRITE, and CLOSE commands have the
following restrictions:
commands (except, of course SEEK, REWIND, and COUNT) might work with
them. (In C programming terms, the FILE commands are, at present,
nothing more than a front end to fopen() / fread() / fwrite() /
- fclose() and friends, which are a portable API to sequential files,
- but this might change in the future for platforms like VMS and VOS
- that have more complicated file systems.)
+ fclose() and friends, which are a portable API to sequential files, but
+ this might change in the future for platforms like VMS and VOS that
+ have more complicated file systems.)
Definitions:
Read/Write Pointer
The current position in an open file, expressed as the 0-based
byte count from the beginning.
- _________________________________________________________________
- 1.22.2. The FILE Command
+1.22.2. The FILE Command
FILE keyword [ switches ] channel [ data ]
The keyword specifies the function: FILE OPEN, FILE READ, FILE
\v(f_max)
or by giving the FILE LIST (FLIST) command. Channels are discussed in
- greater detail in [376]Section 1.22.4.
+ greater detail in [384]Section 1.22.4.
FILE command errors can be caught with IF FAIL after the FILE command.
In addition, the \v(f_error) variable is set to the completion code of
- the command: 0 if no error, or a negative number if there was an
- error. The error codes are listed in [377]Section 1.22.5.
+ the command: 0 if no error, or a negative number if there was an error.
+ The error codes are listed in [385]Section 1.22.5.
The command to open a file is:
/APPEND
Equivalent to /WRITE, except that if the file exists, it is not
- destroyed. The read/write pointer is set to the end of the
- file, so unless you change it with FILE SEEK or REWIND (see
- below), the first FILE WRITE command adds to the end of the
- file, preserving what was there already. If /WRITE is also
- given, it is ignored.
+ destroyed. The read/write pointer is set to the end of the file,
+ so unless you change it with FILE SEEK or REWIND (see below),
+ the first FILE WRITE command adds to the end of the file,
+ preserving what was there already. If /WRITE is also given, it
+ is ignored.
/BINARY
Open the file in "binary" mode, rather than text mode. This
line by line.
The variable for the channel number can be any kind of variable: the
- \%x kind, a macro name, or an array element. But it must be a
- variable, not a number -- C-Kermit assigns the channel number; you
- can't tell it what number to use.
+ \%x kind, a macro name, or an array element. But it must be a variable,
+ not a number -- C-Kermit assigns the channel number; you can't tell it
+ what number to use.
Example:
ECHO oofa.txt: channel = \%c
If the file oofa.txt is opened successfully, a channel number is
- assigned to the variable \%c. Here's another example using a macro
- name for the channel number:
+ assigned to the variable \%c. Here's another example using a macro name
+ for the channel number:
FILE OPEN channel oofa.txt ; Open oofa.txt for reading.
IF SUCCESS ECHO oofa.txt: channel = \m(channel)
If this loop completes successfully, the \&c[] array will contain \%n
channel numbers of open files in elements 1 through \%n.
- Any file that you open with FILE OPEN stays open until Kermit exits,
- or you close it explicitly. The command to close a file is:
+ Any file that you open with FILE OPEN stays open until Kermit exits, or
+ you close it explicitly. The command to close a file is:
FILE CLOSE { ALL, channel }
If a channel number is given and the channel refers to an open
file, the file is closed and the channel is freed for reuse; if
the channel does not refer to an open file, an error message is
printed and the command fails. If ALL is specified instead of a
- specific channel, all files opened with FILE OPEN are closed
- and if all open files were closed successfully (even if no
- files were open), the command succeeds; if any open file could
- not be closed, the command fails; however, all open files that
- could be closed are still closed. Synonym: FCLOSE.
+ specific channel, all files opened with FILE OPEN are closed and
+ if all open files were closed successfully (even if no files
+ were open), the command succeeds; if any open file could not be
+ closed, the command fails; however, all open files that could be
+ closed are still closed. Synonym: FCLOSE.
FILE CLOSE might fail because, for example, the disk filled up or a
quota was exceeded. Example:
This creates a 0-length file called new.txt.
Note that FILE OPEN /WRITE (without /READ or /APPEND) always creates a
- new file, and therefore destroys any file with the same name that
- might already exist (assuming you have permission to delete it). To
- avoid overwriting existing files, simply check first:
+ new file, and therefore destroys any file with the same name that might
+ already exist (assuming you have permission to delete it). To avoid
+ overwriting existing files, simply check first:
if exist new.txt exit 1 {Fatal - new.txt already exists}
fopen /write \%c new.txt
Tells the name of the file, if any, open on the given channel
and the switches it was opened with. The read/write pointer is
also shown; this is where the next read or write will occur;
- "[EOF]" is shown if the current position in the open file is
- the end -- i.e. the next read will fail if the file was opened
- in /READ mode; the next write will add material to the end. The
+ "[EOF]" is shown if the current position in the open file is the
+ end -- i.e. the next read will fail if the file was opened in
+ /READ mode; the next write will add material to the end. The
current line number (0-based) is also shown if known. The FILE
STATUS command succeeds if the channel is open, and fails if
there is no open file on the given channel, or if the channel
FILE LIST
Lists the channel number and name of each open file, along with
its OPEN modes (R, W, A, B, RW, etc) and its current read/write
- pointer or "[EOF]" if it is at the end. Also tells the number
- of files currently opened with FILE OPEN, plus the maximum
- number of open files allowed by the system and the maximum
- number allowed for FILE OPEN. Synonym: FLIST.
+ pointer or "[EOF]" if it is at the end. Also tells the number of
+ files currently opened with FILE OPEN, plus the maximum number
+ of open files allowed by the system and the maximum number
+ allowed for FILE OPEN. Synonym: FLIST.
Next come the commands for reading and writing files:
FILE READ [ switches ] channel [ variable ]
Reads data from the file on the given channel number into the
- variable, if one was given; if no variable was given, the
- result is printed on the screen. IMPORTANT: The variable should
+ variable, if one was given; if no variable was given, the result
+ is printed on the screen. IMPORTANT: The variable should
normally be a macro name rather than a \%x or \&x[] variable if
you want backslash characters in the file to be taken literally
- (see pp.408-412 of [378]Using C-Kermit for an explanation; you
+ (see pp.408-412 of [386]Using C-Kermit for an explanation; you
can also read into a \%x or \&x[] variable, but then you must
remember to protect future references to by \fcontents() if you
don't want C-Kermit to process any backslashes it might
- contain). The desired amount of data (according to the
- switches) is read from the file at the current read/write
- pointer, and upon completion the read/write position is updated
- to first byte after the data that was read, no matter what
- switches were given. Synonym: FREAD.
+ contain). The desired amount of data (according to the switches)
+ is read from the file at the current read/write pointer, and
+ upon completion the read/write position is updated to first byte
+ after the data that was read, no matter what switches were
+ given. Synonym: FREAD.
FILE WRITE [ switches ] channel text
Writes the given text to the file on the given channel number.
/LINE
Specifies that a line of text is to be read. A line is defined
- according to the underlying operating system's text-file
- format. For example, in UNIX a line is a sequence of characters
- up to and including a linefeed, or the end of the file, which
- ever comes first. The line terminator (if any) is removed
- before assigning the text to the variable. If no switches are
- included with the FILE READ command, /LINE is assumed. Normally
- this switch should not be used with files opened in /BINARY
- mode (but nothing prevents it either).
+ according to the underlying operating system's text-file format.
+ For example, in UNIX a line is a sequence of characters up to
+ and including a linefeed, or the end of the file, which ever
+ comes first. The line terminator (if any) is removed before
+ assigning the text to the variable. If no switches are included
+ with the FILE READ command, /LINE is assumed. Normally this
+ switch should not be used with files opened in /BINARY mode (but
+ nothing prevents it either).
/SIZE:number
Specifies that the given number of bytes (characters) is to be
/SIZE:number
Specifies that the given number of bytes (characters) is to be
- written. If the given text is longer than the requested size,
- it is truncated; if is shorter, it is padded according /LPAD
- and /RPAD switches. Synonym: /BLOCK.
+ written. If the given text is longer than the requested size, it
+ is truncated; if is shorter, it is padded according /LPAD and
+ /RPAD switches. Synonym: /BLOCK.
/LPAD[:value]
If /SIZE was given, but the text is shorter than the requested
file close \%c ; Close the two files
file close \%d
- Note that since /LINE is the default for both FILE READ and FILE
- WRITE, it can be omitted as in the following example, where we also
- use the short names for the FILE commands.
+ Note that since /LINE is the default for both FILE READ and FILE WRITE,
+ it can be omitted as in the following example, where we also use the
+ short names for the FILE commands.
fopen /read \%c oofa.txt ; Open input file
if fail exit 1 Can't open input file ; Check that it's open
fclose \%d
Here's the same example using "record i/o" (the open and close
- sequences are are omitted since they are the same as above). The
- result is the same, but execution is much faster:
+ sequences are are omitted since they are the same as above). The result
+ is the same, but execution is much faster:
while true { ; Loop to copy blocks
fread /size:512 \%c block ; Read a block into \%a
}
Although character i/o is slow, it is the only way to process files
- that contain NUL characters (i.e. bytes composed of only zero bits).
- In the example above, when "fread /char \%c c" returns a NUL, the c
+ that contain NUL characters (i.e. bytes composed of only zero bits). In
+ the example above, when "fread /char \%c c" returns a NUL, the c
variable is empty. But since the FREAD /CHAR command did not fail, we
know the result was really a NUL. FWRITE /CHAR, when given an empty
- variable (or no variable at all) writes a NUL. Thus the loop above
- will copy any file at all (very slowly). In non-copying applications,
- NULs are detected like this:
+ variable (or no variable at all) writes a NUL. Thus the loop above will
+ copy any file at all (very slowly). In non-copying applications, NULs
+ are detected like this:
fread /char \%c c
if fail (do something)
By default, or if the /BYTES switch is given, counts the bytes
in the file, if any, open on the given channel. If the /LINES
switch is given, counts lines in the file. If the /LIST switch
- is given, the result is printed. If the /NOLIST switch is
- given, the result is not printed. /QUIET is a synonym for
- /NOLIST. If neither /LIST nor /NOLIST is given, the result is
- printed if the command is given at top level, i.e. not from a
- command file or macro. In all cases, the result of the most
- recent FILE COUNT command is stored in the variable
- \v(f_count). Note that FILE COUNT /LINE works (and can only
- work) by reading the entire file; expect it to take some time
- if the file is large. Synonym: FCOUNT.
+ is given, the result is printed. If the /NOLIST switch is given,
+ the result is not printed. /QUIET is a synonym for /NOLIST. If
+ neither /LIST nor /NOLIST is given, the result is printed if the
+ command is given at top level, i.e. not from a command file or
+ macro. In all cases, the result of the most recent FILE COUNT
+ command is stored in the variable \v(f_count). Note that FILE
+ COUNT /LINE works (and can only work) by reading the entire
+ file; expect it to take some time if the file is large. Synonym:
+ FCOUNT.
FILE REWIND channel
Moves the read/write pointer to the beginning of the file.
Equivalent to FILE SEEK channel 0. Synonym: FREWIND.
FILE SEEK [ switches ] channel { [{+,-}]number, LAST, EOF }
- Moves the read/write pointer for the file on this channel to
- the given position, which may be a byte (character) number or a
- line number, expressed in either absolute or relative terms.
+ Moves the read/write pointer for the file on this channel to the
+ given position, which may be a byte (character) number or a line
+ number, expressed in either absolute or relative terms.
Switches:
/BYTE
The number given is relative to the current position.
By default, or if the /BYTE switch is given, the number is a
- byte number (0 = first byte). If /LINE is given, the number is
- a line number (0 = first line). EOF means to move to the end of
+ byte number (0 = first byte). If /LINE is given, the number is a
+ line number (0 = first line). EOF means to move to the end of
the file. LAST means to move to the last line or character of
the file, depending on whether it's a line or character seek.
- If neither the /RELATIVE nor the /ABSOLUTE switch is given,
- then if a signed number is given, the motion is relative to the
+ If neither the /RELATIVE nor the /ABSOLUTE switch is given, then
+ if a signed number is given, the motion is relative to the
current position. An expression that evaluates to a negative
number is not considered signed for this purpose; that is, a
sign (+ or -) must be included as the first character of the
beginning of the file). Subsequent FILE READs or WRITEs will
take place at the new position.
- If the read/write pointer is placed after the end of the file,
- a subsequent FILE READ will fail, but a FILE WRITE will succeed
+ If the read/write pointer is placed after the end of the file, a
+ subsequent FILE READ will fail, but a FILE WRITE will succeed
(possibly creating a file with "holes"). If a FILE SEEK /BYTE
command is given, the current line becomes unknown (unless the
- position is 0) and subsequent FILE SEEK /RELATIVE /LINE
- commands will fail until the next non-relative FILE SEEK /LINE
- command is given. Synonym: FSEEK.
+ position is 0) and subsequent FILE SEEK /RELATIVE /LINE commands
+ will fail until the next non-relative FILE SEEK /LINE command is
+ given. Synonym: FSEEK.
An absolute FILE SEEK to a negative position fails silently, as does a
relative seek to a position before the beginning of the file.
- A caution about relative SEEKs: remember that the number is relative
- to the current position. Whenever you read or write, this changes the
+ A caution about relative SEEKs: remember that the number is relative to
+ the current position. Whenever you read or write, this changes the
position. In each of the following examples, assume the file open on
channel \%c is positioned at line n (the FREAD target variable is
omitted for lack of space):
FOPEN \%c samefilename
FSEEK \%c samespot
FREAD /SIZE:howmanybytes \%c variable
- _________________________________________________________________
- 1.22.3. FILE Command Examples
+1.22.3. FILE Command Examples
To read the last 10 lines of a text file into an array:
The loop works because a relative SEEK outside the file fails.
- It is also possible to use block i/o to manage random-access files
- with fixed-length records (as long as they don't contain NUL
- characters). Suppose, for example, you have a file of "card image"
- records with fixed-field information about customers, such as:
+ It is also possible to use block i/o to manage random-access files with
+ fixed-length records (as long as they don't contain NUL characters).
+ Suppose, for example, you have a file of "card image" records with
+ fixed-field information about customers, such as:
Name: Columns 1-32 (column numbers are 1-based)
Address: Columns 33-72
fclose \%c ; Close the file
REMEMBER: Using FILE SEEK to move beyond the end of file can result in
- a file with holes when writing; when reading, an end-of-file error
- will occur -- be sure to check for it.
- _________________________________________________________________
+ a file with holes when writing; when reading, an end-of-file error will
+ occur -- be sure to check for it.
- 1.22.4. Channel Numbers
+1.22.4. Channel Numbers
C-Kermit's channel numbers are integers from 0 to some
platform-dependent limit, such as 46 or 1985 (the value of \v(f_max)).
- This is the limit placed by the operating system on the number of
- files that may be opened by one process or user or job, minus the
- standard input, output, and error files, and minus the number of files
- reserved by C-Kermit for logs, OPEN READ and WRITE, and file transfer
- (and maybe some command files -- the \v(f_max) number can't be exact).
-
- Although you must include a variable in the FILE OPEN command, to
- which the channel number is assigned, you don't have to use a variable
- in the other FILE commands if you know what the number is -- you can
- just put the number. This saves you a few keystrokes when typing
- commands at the prompt:
+ This is the limit placed by the operating system on the number of files
+ that may be opened by one process or user or job, minus the standard
+ input, output, and error files, and minus the number of files reserved
+ by C-Kermit for logs, OPEN READ and WRITE, and file transfer (and maybe
+ some command files -- the \v(f_max) number can't be exact).
+
+ Although you must include a variable in the FILE OPEN command, to which
+ the channel number is assigned, you don't have to use a variable in the
+ other FILE commands if you know what the number is -- you can just put
+ the number. This saves you a few keystrokes when typing commands at the
+ prompt:
fopen \%c oofa.txt
flist
fread \%c \%a
you have trouble remembering which variable is which, note that the
- channel number is, indeed, a number. Anywhere C-Kermit accepts a
- number it can also accept an expression, so you can put parentheses
- around the channel number to remind you it's the channel number and
- not the variable into which data is to be read:
+ channel number is, indeed, a number. Anywhere C-Kermit accepts a number
+ it can also accept an expression, so you can put parentheses around the
+ channel number to remind you it's the channel number and not the
+ variable into which data is to be read:
fread (\%c) \%a
Normally channel numbers are assigned sequentially as 0, 1, 2, ... up
- to the limit. However, once you start closing files, there can be
- holes in the sequence. New channels are assigned to fill in the holes.
- Thus you can't depend on channel numbers being in any particular
- sequence.
- _________________________________________________________________
+ to the limit. However, once you start closing files, there can be holes
+ in the sequence. New channels are assigned to fill in the holes. Thus
+ you can't depend on channel numbers being in any particular sequence.
- 1.22.5. FILE Command Errors
+1.22.5. FILE Command Errors
- Each FILE command sets the variable \v(f_error) to one of the
- following values:
+ Each FILE command sets the variable \v(f_error) to one of the following
+ values:
0 = No error
-1 = System error
\v(errno) = System error number.
\v(errstring) = Error message corresponding to \v(errno).
- A special function is available for translating the \v(f_error) code
- to an error message string:
+ A special function is available for translating the \v(f_error) code to
+ an error message string:
\f_errmsg([code])
If the code is -1, returns error message of the most recent system
corresponding to the current \v(f_error) value is returned.
A FILE command that fails prints the appropriate error message
- automatically, except when the command is READ or SEEK and the error
- is -2 (end of file); in that case, the command still fails, but does
- not print a message. This allows constructions such as:
+ automatically, except when the command is READ or SEEK and the error is
+ -2 (end of file); in that case, the command still fails, but does not
+ print a message. This allows constructions such as:
fopen \%c oofa.txt
while success { fread \%c }
to work as expected, i.e. without an annoying message when the end of
file is reached.
- _________________________________________________________________
- 1.22.6. File I/O Variables
+1.22.6. File I/O Variables
The variables associated with the file i/o package are:
\v(f_max)
Maximum number of files open simultaneously.
- _________________________________________________________________
- 1.22.7. File I/O Functions
+1.22.7. File I/O Functions
Some of the FILE commands can also be issued as function calls, which
makes script writing a bit more convenient, especially for C
programmers. Also, several functions are provided that do not have
command equivalents. Each of these functions takes a channel number as
- the first argument. These functions do not work for OPEN { READ,
- !READ, WRITE, !WRITE, and APPEND } files.
+ the first argument. These functions do not work for OPEN { READ, !READ,
+ WRITE, !WRITE, and APPEND } files.
\f_status(channel)
- Returns 0 if the channel is not open, otherwise a number
- between 1 and 15 which is the sum of the OPEN modes:
+ Returns 0 if the channel is not open, otherwise a number between
+ 1 and 15 which is the sum of the OPEN modes:
1 = /READ
2 = /WRITE
8 = /BINARY
The remaining functions work only for open channels. Each of these
- functions can fail for the applicable reasons listed in [379]Section
- 1.22.5. For instructions on handling function errors, see [380]Section
+ functions can fail for the applicable reasons listed in [387]Section
+ 1.22.5. For instructions on handling function errors, see [388]Section
7.12.
\f_pos(channel)
\f_handle(channel)
Returns the "file handle" of the file. That is, it translates
- the portable C-Kermit channel number into a system-specific
- file handle or number that can be passed to other programs on
- the same platform. In UNIX this is a file descriptor. There is
- no FILE command equivalent.
+ the portable C-Kermit channel number into a system-specific file
+ handle or number that can be passed to other programs on the
+ same platform. In UNIX this is a file descriptor. There is no
+ FILE command equivalent.
\f_eof(channel)
Returns 1 if the read/write pointer of the file on the given
\f_getline(channel)
Equivalent to FREAD /LINE. Returns the line actually read, but
- with the line terminator stripped. If \f_getline() does not
- fail but the return value is empty, this normally means an
- empty line was read.
+ with the line terminator stripped. If \f_getline() does not fail
+ but the return value is empty, this normally means an empty line
+ was read.
\f_getblock(channel,n)
Equivalent to FREAD /SIZE:n. Returns the block of characters
Equivalent to FWRITE /LINE. Writes the string and adds the
appropriate line termination character or sequence. If the
string is empty or omitted, an empty line is written. Returns
- the number of characters written on success, or a negative
- error code upon failure.
+ the number of characters written on success, or a negative error
+ code upon failure.
\f_putblock(channel,string)
- Equivalent to FWRITE /STRING. Writes the string as given. If
- the string is empty or omitted, nothing is written. Returns the
+ Equivalent to FWRITE /STRING. Writes the string as given. If the
+ string is empty or omitted, nothing is written. Returns the
number of characters written on success, or a negative error
code upon failure.
- _________________________________________________________________
- 1.22.8. File I/O Function Examples
+1.22.8. File I/O Function Examples
fopen /read \%c oofa.txt ; Open our favorite file for reading
if failure exit 1 ; Check that it's open
for \%i 0 \v(f_max)-1 1 {
if \f_status(\%i) fclose \%i
}
- _________________________________________________________________
- 1.23. The EXEC Command
+1.23. The EXEC Command
The EXEC command is available only in UNIX.
EXEC [ /REDIRECT ] command [ arg1 [ arg2 [ ... ] ]
- Runs the given command with the arguments in such a way that
- the command replaces C-Kermit in memory, and C-Kermit ceases to
+ Runs the given command with the arguments in such a way that the
+ command replaces C-Kermit in memory, and C-Kermit ceases to
execute. EXEC is like RUN, except instead of returning to
C-Kermit when finished, the command returns to whatever process
invoked Kermit.
- In the normal case, no files are closed, so the EXEC'd command
- inherits the open files, read/write pointers, working directory,
- process ID, user ID (unless command is SUID), group ID (unless command
- is SGID), groups, etc. (In UNIX, the EXEC command is simply a front
- end for execvp().)
+ In the normal case, no files are closed, so the EXEC'd command inherits
+ the open files, read/write pointers, working directory, process ID,
+ user ID (unless command is SUID), group ID (unless command is SGID),
+ groups, etc. (In UNIX, the EXEC command is simply a front end for
+ execvp().)
If the /REDIRECT switch is included, then if a connection is open (SET
LINE or SET HOST), it becomes the standard input and output of the
* You can have Kermit fetch the number or numbers from a dialing
directory.
* You can have Kermit cycle through a list of phone numbers (this is
- new in C-Kermit 7.0; see [381]Section 2.1.16) without having to
+ new in C-Kermit 7.0; see [389]Section 2.1.16) without having to
enter the numbers in a dialing directory.
* Dialing is location-independent; you can use the same script to
dial from different areas or countries.
* Once the connection is made, the full power of Kermit's script
- language is available to manage the dialog with the terminal
- server or other device that answers the phone call.
+ language is available to manage the dialog with the terminal server
+ or other device that answers the phone call.
NOTE: PPP and SLIP dialing are not available in Windows 95/98/NT/2000,
whose APIs do not provide a method for an application to hand over a
connection to the PPP or SLIP driver.
- _________________________________________________________________
- 1.24. Getting Keyword Lists with '?'
+1.24. Getting Keyword Lists with '?'
Suppose you type "te" at the C-Kermit> 6.0 prompt and then Esc or Tab
to request keyword completion. Kermit beeps, indicating that more than
- one command starts with "te". But if you type '?' to see what they
- are, Kermit shows only "telnet". So why the beep? Because of invisible
+ one command starts with "te". But if you type '?' to see what they are,
+ Kermit shows only "telnet". So why the beep? Because of invisible
keywords like "telopt", "terminal", and "text". Lots of keywords are
invisible because they are either synonyms for other keywords or else
esoteric options to be used only in special circumstances, so we don't
are shown, as before (so, in this example, if '?' is typed at the
C-Kermit> prompt, "telnet" is the only command shown that starts with
"te").
- _________________________________________________________________
- 2. MAKING AND USING CONNECTIONS The SET LINE, SET HOST, and SET PORT (a
- synonym for SET LINE) commands have new synonyms, in which the word SET is
- replaced by the word OPEN: OPEN LINE, etc. There is no new functionality
- here, but OPEN is a better verb, since SET generally takes no action, whereas
- these commands actually try to open a connection. Furthermore, there is the
- symmetry with CLOSE.
- ________________________________________________________________________
+2. MAKING AND USING CONNECTIONS The SET LINE, SET HOST, and SET PORT (a
+synonym for SET LINE) commands have new synonyms, in which the word SET is
+replaced by the word OPEN: OPEN LINE, etc. There is no new functionality
+here, but OPEN is a better verb, since SET generally takes no action, whereas
+these commands actually try to open a connection. Furthermore, there is the
+symmetry with CLOSE. 2.0. SET LINE and SET HOST Command SwitchesThe SET LINE
+(SET PORT) and SET HOST commands now allow switches before the device or host
+name, in most cases, and under certain circumstances, also at the end. The
+new syntax is backwards compatible with the previous syntax; thus SET LINE,
+SET PORT, and SET HOST commands in command files written for C-Kermit 6.0 or
+earlier still work. The expanded syntax is:
- 2.0. SET LINE and SET HOST Command SwitchesThe SET LINE (SET PORT) and SET
- HOST commands now allow switches before the device or host name, in most
- cases, and under certain circumstances, also at the end. The new syntax is
- backwards compatible with the previous syntax; thus SET LINE, SET PORT, and
- SET HOST commands in command files written for C-Kermit 6.0 or earlier still
- work. The expanded syntax is:
+{ OPEN, SET } { LINE, PORT, HOST } [ switches ] device-or-address [ switches
+]
- { OPEN, SET } { LINE, PORT, HOST } [ switches ] device-or-address [ switches
- ]
-
- The first group of switches is:
+The first group of switches is:
/NETWORK-TYPE:{TCP/IP,X.25,PIPE,PTY...}
When more than one network type is available, this lets you
specify the type of network to use for this connection without
- affecting your global SET NETWORK TYPE. See [382]Section 2.7
+ affecting your global SET NETWORK TYPE. See [390]Section 2.7
about pipes and ptys.
/USERID:[string]
This switch is equivalent to SET LOGIN USERID. If a string is
given, it sent to host during Telnet negotiations; if this
- switch is given but the string is omitted, no user ID is sent
- to the host. If this switch is not given, your current LOGIN
- USERID (\v(userid) value), if any, is sent. Unlike most other
- switches, this one is "sticky", since the value must persist
- throughout the session in case the server requests the ID
- string at a later time.
+ switch is given but the string is omitted, no user ID is sent to
+ the host. If this switch is not given, your current LOGIN USERID
+ (\v(userid) value), if any, is sent. Unlike most other switches,
+ this one is "sticky", since the value must persist throughout
+ the session in case the server requests the ID string at a later
+ time.
/CONNECT
Enter CONNECT mode immediately and automatically after the
opening the device.
/SERVER
- Enter server mode immediately and automatically after the
- device or connection is open. Treatment of carrier is the same
- as for /CONNECT.
+ Enter server mode immediately and automatically after the device
+ or connection is open. Treatment of carrier is the same as for
+ /CONNECT.
/WAIT
/NOWAIT
For Telnet connections only: Like SET TELNET WAIT { ON, OFF },
but applies only to this connection, and in fact applies only
- when OPENing this connection (which is usually the only place
- it matters). Typically you would use TELNET /NOWAIT to make a
- connection to a misbehaving Telnet server that does not reply
- to negotiations as required by the Telnet protocol definition.
+ when OPENing this connection (which is usually the only place it
+ matters). Typically you would use TELNET /NOWAIT to make a
+ connection to a misbehaving Telnet server that does not reply to
+ negotiations as required by the Telnet protocol definition.
- Note: /CONNECT and /SERVER switches are not available in the RLOGIN
- and TELNET commands, since these commands already include an implicit
+ Note: /CONNECT and /SERVER switches are not available in the RLOGIN and
+ TELNET commands, since these commands already include an implicit
/CONNECT and preclude automatic entry into server mode.
The /CONNECT and /SERVER switches are especially useful with "set host
set host * 3000
- and then wait for a connection to come in, and only then could you
- give the SERVER command (or else define a macro to do this, and then
- execute the macro). Now you can do it in one step:
+ and then wait for a connection to come in, and only then could you give
+ the SERVER command (or else define a macro to do this, and then execute
+ the macro). Now you can do it in one step:
set host /server * 3000
mode once it comes in, no matter how long it takes. Similarly, "set
host /conn *" can be used to wait for a "chat" connection to come in.
- Another set of switches is available in VMS only, for use only with
- SET LINE:
+ Another set of switches is available in VMS only, for use only with SET
+ LINE:
/SHARE
- Allows the SET LINE device to be opened in shared mode.
- Normally it makes no sense to open a serial device in shared
- mode, but it's necessary when C-Kermit is running in an
- environment such as DECIntact, that opens your job's
- controlling terminal in such a way that C-Kermit can't open it
- too, unless it enables SHARE privilege. Note: SHARE privilege
- is required.
+ Allows the SET LINE device to be opened in shared mode. Normally
+ it makes no sense to open a serial device in shared mode, but
+ it's necessary when C-Kermit is running in an environment such
+ as DECIntact, that opens your job's controlling terminal in such
+ a way that C-Kermit can't open it too, unless it enables SHARE
+ privilege. Note: SHARE privilege is required.
/NOSHARE
Requires that the SET LINE device not be in use by any other
The second group of switches is:
/NO-TELNET-INIT
- Do not send initial Telnet negotiations even if this is a
- Telnet port.
+ Do not send initial Telnet negotiations even if this is a Telnet
+ port.
/RAW-SOCKET
- This is a connection to a raw TCP socket ([383]Section 2.3.5).
+ This is a connection to a raw TCP socket ([391]Section 2.3.5).
/RLOGIN
Use Rlogin protocol even if this is not an Rlogin port.
Additional switches might be added in the future; type "set host ?" or
"set line ?" to see a current list.
- _________________________________________________________________
- 2.1. Dialing
+2.1. Dialing
Automatic redialing is illegal or restricted in many countries, so
until C-Kermit 7.0, it was disabled by default, i.e. until a SET DIAL
RETRIES command was given. In C-Kermit 7.0, if no SET DIAL RETRIES
command has been given, a default is picked dynamically at DIAL time
based on the calling country code, if known. At this writing, the only
- country code known to have no restrictions on automatic redialing is
- 1. So in this case a limit of 10 is chosen; otherwise 1. If you have
- not given an explicit SET DIAL RETRIES command, SHOW DIAL shows the
- value as "(auto)", and then the value actually used is shown when you
- give the DIAL command.
+ country code known to have no restrictions on automatic redialing is 1.
+ So in this case a limit of 10 is chosen; otherwise 1. If you have not
+ given an explicit SET DIAL RETRIES command, SHOW DIAL shows the value
+ as "(auto)", and then the value actually used is shown when you give
+ the DIAL command.
As of C-Kermit 7.0, automatic redialing is automatically canceled if
the call could not be placed because no dialtone was detected.
- _________________________________________________________________
- 2.1.1. The Dial Result Message
+2.1.1. The Dial Result Message
If DIAL DISPLAY is not ON, the "Call complete" message now shows the
modem's call result message, for example:
}
}
- (See [384]Section 7.5 about the \%* variable.)
- _________________________________________________________________
+ (See [392]Section 7.5 about the \%* variable.)
- 2.1.2. Long-Distance Dialing Changes
+2.1.2. Long-Distance Dialing Changes
Due to the glut of cell phones, pagers, fax machines, ISPs, etc, area
codes and dialing rules are changing all the time. In the North
- American Numbering Plan (NANP) countries (USA, Canada, etc), area
- codes are split or overlayed with increasing frequency, and 10- and
- 11-digit dialing is gradually becoming the norm for local calls.
- Changes are occurring In Europe, too, partly for these reasons and
- partly because of some new EC rules.
+ American Numbering Plan (NANP) countries (USA, Canada, etc), area codes
+ are split or overlayed with increasing frequency, and 10- and 11-digit
+ dialing is gradually becoming the norm for local calls. Changes are
+ occurring In Europe, too, partly for these reasons and partly because
+ of some new EC rules.
In France, effective 18 October 1996, all calls, even local ones, must
be dialed with an area code. French area codes are presently 1-digit
In Italy beginning 19 June 1998, all calls to fixed (as opposed to
mobile) numbers must be prefixed by 0. When calling into Italy from
- outside, the 0 must follow the country code (39). Calls to cell
- phones, however, must be placed without the 0. Then on 29 December
- 2000, the 0 will become a 4 (for calling fixed numbers) and a prefix
- of 3 must used for calling mobile phones. More info at:
+ outside, the 0 must follow the country code (39). Calls to cell phones,
+ however, must be placed without the 0. Then on 29 December 2000, the 0
+ will become a 4 (for calling fixed numbers) and a prefix of 3 must used
+ for calling mobile phones. More info at:
http://www.telecomitalia.it/npnn/.
In Spain, effective 4 April 1998, with hard cutover on 18 July 1998,
all calls within the country must be dialed with 9 digits, and all
calls from outside Spain must also be dialed with 9 digits (after the
country code, 34). The new 9-digit numbers all begin with "9". More
- info at: [385]http://www.telefonica.es/cambiodenumeracion/
+ info at: [393]http://www.telefonica.es/cambiodenumeracion/
Several new dialing features and commands have been added in version
6.1 and 7.0 to address these changes.
C-Kermit 6.0 and Kermit 95 1.1.11 and earlier handle the French
- situation via a reasonable subterfuge (setting the local area code to
- a nonexistent one), but did not handle "ten-digit dialing" well at
- all; the recommended technique was to change the long-distance dialing
+ situation via a reasonable subterfuge (setting the local area code to a
+ nonexistent one), but did not handle "ten-digit dialing" well at all;
+ the recommended technique was to change the long-distance dialing
prefix to nothing, but this defeated Kermit's "list numbers for one
name" feature when the numbers were in different locations. For
example:
whose area code is in this list, it is dialed WITHOUT the
long-distance prefix, but WITH the area code.
- So in Maryland, which (last time we looked) has two area codes, 410
- and 301, the setup would be:
+ So in Maryland, which (last time we looked) has two area codes, 410 and
+ 301, the setup would be:
SET DIAL LC-AREA-CODES 410 301
The SET DIAL LC-AREA-CODES command does not replace the SET DIAL
AREA-CODE command. The latter specifies the area code you are dialing
- from. If the called number is in the same area code, then the area
- code is dialed if it is also in the LC-AREA-CODES list, and it is not
- dialed otherwise. So if "301" had not appeared in the LC-AREA-CODES
- list in the previous example:
+ from. If the called number is in the same area code, then the area code
+ is dialed if it is also in the LC-AREA-CODES list, and it is not dialed
+ otherwise. So if "301" had not appeared in the LC-AREA-CODES list in
+ the previous example:
SET DIAL LD-PREFIX 1
SET DIAL AREA-CODE 301
DIAL +1 (301) 765-4321 <-- Dials 97654321* (local)
DIAL +1 (410) 765-4321 <-- Dials 94107654321* (local with area code)
DIAL +1 (212) 765-4321 <-- Dials 12127654321 (long distance)
- _________________________________________________________________
- 2.1.3. Forcing Long-Distance Dialing
+2.1.3. Forcing Long-Distance Dialing
Suppose a number is in your country and area, but for some reason you
- need to dial it long-distance anyway (as is always the case in
- France). There have always been various ways to handle this:
+ need to dial it long-distance anyway (as is always the case in France).
+ There have always been various ways to handle this:
1. Temporarily set your area code to a different (or nonexistent or
impossible) one (but this required knowledge of which area codes
were nonexistent or impossible in each country).
- 2. Dial the number literally instead of using the portable format,
- but this defeats the purpose of the portable dialing directory.
+ 2. Dial the number literally instead of using the portable format, but
+ this defeats the purpose of the portable dialing directory.
Now there is also a new command that, very simply, can force
long-distance dialing:
SET DIAL FORCE-LONG-DISTANCE { ON, OFF }
If a call is placed to a portable phone number within the same
country code as the calling number, it is dialed with the
- long-distance prefix and the area code if FORCE-LONG-DISTANCE
- is ON. If OFF, the regular rules and procedures apply.
+ long-distance prefix and the area code if FORCE-LONG-DISTANCE is
+ ON. If OFF, the regular rules and procedures apply.
Example (France):
(In fact, SET DIAL COUNTRY-CODE 33 automatically sets DIAL
FORCE-LONG-DISTANCE ON...)
- Example (USA, for a certain type of reverse-charge calling in which
- the called number must always be fully specified):
+ Example (USA, for a certain type of reverse-charge calling in which the
+ called number must always be fully specified):
SET DIAL PREFIX 18002666328$ ; 1-800-COLLECT
SET DIAL COUNTRY-CODE 1
SET DIAL AREA-CODE 212
SET DIAL FORCE-LONG-DISTANCE ON
- Example (Toronto, where calls to exchange 976 within area code 416
- must be dialed as long distance, even when you are dialing from area
- code 416):
+ Example (Toronto, where calls to exchange 976 within area code 416 must
+ be dialed as long distance, even when you are dialing from area code
+ 416):
SET DIAL COUNTRY-CODE 1
SET DIAL AREA-CODE 416
end \%x
}
- (See [386]Section 7.5 about the \%* variable.)
- _________________________________________________________________
+ (See [394]Section 7.5 about the \%* variable.)
- 2.1.4. Exchange-Specific Dialing Decisions
+2.1.4. Exchange-Specific Dialing Decisions
This applies mainly to the North American Numbering Plan (NANP). Refer
- to the section "Alternative notations" in [387]Using C-Kermit 2nd
+ to the section "Alternative notations" in [395]Using C-Kermit 2nd
Edition, pages 106-107, and the story about Toronto on page 110. Using
the new LC-AREA-CODES list, we can address the problem by treating the
exchange as part of the area code:
111) and in any other place where dialing to some exchanges within a
particular area code is local, but to others in the same area code is
long distance.
- _________________________________________________________________
- 2.1.5. Cautions about Cheapest-First Dialing
+2.1.5. Cautions about Cheapest-First Dialing
Kermit does not maintain a knowledge base of telephony information; it
only provides the tools to let you enter a phone number in a standard
illustration would be certain online services that have toll-free
dialup numbers which they charge you a premium (in your online service
bill) for using.
- _________________________________________________________________
- 2.1.6. Blind Dialing (Dialing with No Dialtone)
+2.1.6. Blind Dialing (Dialing with No Dialtone)
C-Kermit's init string for Hayes-like modems generally includes an X4
command to enable as many result codes as possible, so that Kermit can
before it will dial.
It is becoming increasingly necessary to force a modem to dial even
- though it does not hear a dialtone on the phone line; for example,
- with PBXs that have strange dialtones, or with phone systems in
- different countries, or with ISDN phones, etc. This is called "blind
- dialing".
+ though it does not hear a dialtone on the phone line; for example, with
+ PBXs that have strange dialtones, or with phone systems in different
+ countries, or with ISDN phones, etc. This is called "blind dialing".
C-Kermit 7.0 has two new commands to cope with this situation:
2. The ATX3 command generally disables not only NO DIALTONE, but also
BUSY. So this will prevent Kermit from detecting when the line is
busy. This is a property of the modem, not of Kermit.
- _________________________________________________________________
- 2.1.7. Trimming the Dialing Dialog
+2.1.7. Trimming the Dialing Dialog
The command:
That is, specify a pair of empty braces as the command, for example:
SET MODEM COMMAND ERROR-CORRECTION ON {}
- _________________________________________________________________
- 2.1.8. Controlling the Dialing Speed
+2.1.8. Controlling the Dialing Speed
The rate at which characters are sent to the modem during dialing is
normally controlled by the built-in modem database. You might want to
new command was added for this in C-Kermit 7.0:
SET DIAL PACING number
- Specifies the number of milliseconds (thousandths of seconds)
- to pause between each character when sending commands to the
- modem during DIAL or ANSWER command execution. 0 means no pause
- at all, -1 (the default) or any other negative number means to
- use the value from the database. Any number greater than 0 is
- the number of milliseconds to pause.
+ Specifies the number of milliseconds (thousandths of seconds) to
+ pause between each character when sending commands to the modem
+ during DIAL or ANSWER command execution. 0 means no pause at
+ all, -1 (the default) or any other negative number means to use
+ the value from the database. Any number greater than 0 is the
+ number of milliseconds to pause.
HINT: You might also need to control the rate at which the modem
generates Touch Tones during dialing, for example when sending a
- numeric page. There are two ways to do this. One way is to insert
- pause characters into the dialing string. For modems that use the AT
- command set, the pause character is comma (,) and causes a 2-second
- pause. On most modems, you can use the S8 register to change the pause
- interval caused by comma in the dialing string. The other way is to
- set your modem's tone generation interval, if it has a command for
- that. Most AT-command-set modems use S11 for this; the value is in
- milliseconds. For example on USR modems:
+ numeric page. There are two ways to do this. One way is to insert pause
+ characters into the dialing string. For modems that use the AT command
+ set, the pause character is comma (,) and causes a 2-second pause. On
+ most modems, you can use the S8 register to change the pause interval
+ caused by comma in the dialing string. The other way is to set your
+ modem's tone generation interval, if it has a command for that. Most
+ AT-command-set modems use S11 for this; the value is in milliseconds.
+ For example on USR modems:
ATS11=200
Hint: To add S-Register settings or other commands to your dialing
procedure, use the new SET MODEM COMMAND PREDIAL-INIT command
- ([388]Section 2.2.2).
- _________________________________________________________________
+ ([396]Section 2.2.2).
- 2.1.9. Pretesting Phone Number Conversions
+2.1.9. Pretesting Phone Number Conversions
The LOOKUP command now accepts telephone numbers as well as
directory-entry names, for example:
+1 (212) 7654321 => 93,7654321
C-Kermit>
- You can also use the \fdialconvert(phone-number) function
- ([389]Section 2.1.11) to do this programmatically:
+ You can also use the \fdialconvert(phone-number) function ([397]Section
+ 2.1.11) to do this programmatically:
C-Kermit> echo "\fdialconvert(+1 (212) 7654321)"
"93,7654321"
So the new LOOKUP behaves as follows:
LOOKUP portable-format-phone-number
- Displays how the number would actually be dialed Sets FAILURE
- if there was a conversion error, otherwise SUCCESS.
+ Displays how the number would actually be dialed Sets FAILURE if
+ there was a conversion error, otherwise SUCCESS.
LOOKUP literal-format-phone-number
Displays the same literal-format-phone-number Always sets
LOOKUP dialing-directory-name
Displays all matching entries and converts portable phone
- numbers. Sets SUCCESS if at least one entry was found,
- otherwise FAILURE.
+ numbers. Sets SUCCESS if at least one entry was found, otherwise
+ FAILURE.
LOOKUP =anything
Displays "=anything" and sets SUCCESS.
There is, at present, no programmatic way to fetch numbers from the
dialing directory. This will be considered for a future release.
- _________________________________________________________________
- 2.1.10. Greater Control over Partial Dialing
+2.1.10. Greater Control over Partial Dialing
The following rules now apply to partial dialing:
* Phone number transformations based on country and area code,
application of prefixes, etc, are performed only on the first
PDIAL.
- * Each PDIAL argument is looked up in the dialing directory, so it
- is possible have directory entries for pieces of phone numbers or
+ * Each PDIAL argument is looked up in the dialing directory, so it is
+ possible have directory entries for pieces of phone numbers or
other information.
* Suffixes are not applied automatically, since there is no way for
C-Kermit to know in which PDIAL segment you want them to be
pdial {\v(dialsuffix)}
pdial {\m(my_long_distance_pager_number_part_3)}
pdial {@\m(numeric_pager_code)#}
- _________________________________________________________________
- 2.1.11. New DIAL-related Variables and Functions
+2.1.11. New DIAL-related Variables and Functions
\fdialconvert(s)
s is a phone number in either literal or portable format (not a
same as the result of LOOKUP when given a telephone number.
\v(dialsuffix)
- Contains the suffix, if any, that was applied in the most
- recent DIAL command, or the suffix that would have been applied
- in the most recent PDIAL command. Use this variable to send the
- dial suffix at any desired point in a PDIAL sequence.
+ Contains the suffix, if any, that was applied in the most recent
+ DIAL command, or the suffix that would have been applied in the
+ most recent PDIAL command. Use this variable to send the dial
+ suffix at any desired point in a PDIAL sequence.
\v(dialtype)
A number indicating the type of call that was most recently
first PDIAL command in a PDIAL sequence. Values are:
-2: Unknown because TAPI handled the phone number translation.
- -1: Unknown because some kind of error occured.
+ -1: Unknown because some kind of error occurred.
0: Internal within PBX.
1: Toll-free.
2: Local within calling area.
\v(dialcount)
The current value of the DIAL retry counter, for use in a DIAL
- macro ([390]Section 2.1.13).
+ macro ([398]Section 2.1.13).
\v(d$px)
- PBX Exchange (see [391]Section 2.1.12).
+ PBX Exchange (see [399]Section 2.1.12).
- Other dial-related variables, already documented in [392]Using
- C-Kermit (or other sections of this document, e.g. [393]Section
- 2.1.1), include \v(dialnumber), \v(dialstatus), etc. A convenient way
- to display all of them is:
+ Other dial-related variables, already documented in [400]Using C-Kermit
+ (or other sections of this document, e.g. [401]Section 2.1.1), include
+ \v(dialnumber), \v(dialstatus), etc. A convenient way to display all of
+ them is:
show variable dial ; hint: abbreviate "sho var dial"
This shows the values of all the variables whose names start with
"dial". Also "show variable d$" (to show the \v(d$...) variables).
- _________________________________________________________________
- 2.1.12. Increased Flexibility of PBX Dialing
+2.1.12. Increased Flexibility of PBX Dialing
- Refer to [394]Using C-Kermit, 2nd Edition, pages 107-108. Recall that
- three commands are needed to configure C-Kermit for dialing from a
- PBX:
+ Refer to [402]Using C-Kermit, 2nd Edition, pages 107-108. Recall that
+ three commands are needed to configure C-Kermit for dialing from a PBX:
SET DIAL PBX-EXCHANGE number
SET DIAL PBX-INSIDE-PREFIX number
SET DIAL PBX-OUTSIDE-PREFIX number
- Unfortunately, this model does not accommodate PBXs that have more
- than one exchange. For example our PBX at Columbia University (which
- must handle more than 10,000 phones) has 853-xxxx and 854-xxxx
- exchanges.
+ Unfortunately, this model does not accommodate PBXs that have more than
+ one exchange. For example our PBX at Columbia University (which must
+ handle more than 10,000 phones) has 853-xxxx and 854-xxxx exchanges.
Beginning in C-Kermit 7.0, the SET DIAL PBX-EXCHANGE command accepts a
list of exchanges, e.g.:
(multiple exchanges are separated by spaces, not commas).
So now when dialing a portable-format number that has the same country
- and area codes as those of your dialing location, C-Kermit compares
- the exchange of the dialed number with each number in the PBX Exchange
- list (rather than with a single PBX Exchange number, as it did
- formerly) to determine whether this is an internal PBX number or an
- external call. If it is an external call, then the PBX Outside Prefix
- is applied, and then the normal dialing rules for local or
- long-distance calls.
+ and area codes as those of your dialing location, C-Kermit compares the
+ exchange of the dialed number with each number in the PBX Exchange list
+ (rather than with a single PBX Exchange number, as it did formerly) to
+ determine whether this is an internal PBX number or an external call.
+ If it is an external call, then the PBX Outside Prefix is applied, and
+ then the normal dialing rules for local or long-distance calls.
If it is an inside call, the exchange is replaced by the PBX Inside
Prefix. But if the PBX has more than one exchange, a single fixed PBX
University, we must dial 3-xxxx for an internal call to 853-xxxx, but
4-xxxx for a call to 854-xxxx. That is, the inside prefix is the final
digit of the exchange we are dialing. For this reason, C-Kermit 7.0
- provides a method to determine the inside prefix dynamically at
- dialing time, consisting of a new variable and new syntax for the SET
- DIAL PBX-INSIDE-PREFIX command:
+ provides a method to determine the inside prefix dynamically at dialing
+ time, consisting of a new variable and new syntax for the SET DIAL
+ PBX-INSIDE-PREFIX command:
\v(d$px)
This variable contains the exchange that was matched when a PBX
also be set to a single exchange, as before:
export K_PBX_XCH=853
- _________________________________________________________________
- 2.1.13. The DIAL macro - Last-Minute Phone Number Conversions
+2.1.13. The DIAL macro - Last-Minute Phone Number Conversions
After a DIAL or LOOKUP command is given, a list of phone numbers is
assembled from the dialing directory (if any), with all
location-dependent conversion rules applied as described in Chapter 5
- of [395]Using C-Kermit.
+ of [403]Using C-Kermit.
However, additional conversions might still be required at the last
- minute based on local or ephemeral conditions. So that you can have
- the final word on the exact format of the dial string, C-Kermit 7.0
- lets you pass the converted string through a macro of your own design
- for final processing before dialing. The relevant command is:
+ minute based on local or ephemeral conditions. So that you can have the
+ final word on the exact format of the dial string, C-Kermit 7.0 lets
+ you pass the converted string through a macro of your own design for
+ final processing before dialing. The relevant command is:
SET DIAL MACRO [ name ]
Specifies the name of a macro to be run on each phone number
after all built-in conversions have been applied, just before
the number is dialed. If no name is given, no macro is run. The
- phone number, as it would have been dialed if there were no
- dial macro, is passed to the macro.
+ phone number, as it would have been dialed if there were no dial
+ macro, is passed to the macro.
The dial macro can do anything at all (except start a file transfer).
However, the normal use for the macro would be to modify the phone
number. For this reason the phone number is passed to the macro as
argument number 1 (\%1). To cause a modified number to be dialed, the
macro should terminate with a RETURN statement specifying a return
- value. To leave the number alone, the macro should simply end.
- Example:
+ value. To leave the number alone, the macro should simply end. Example:
define xxx return 10108889999$\%1
set dial macro xxx
referencing a dialing directory entry, "xyzcorp". The macro is
automatically applied to each matching number.
- Numerous dial-, modem-, communications-, and time-related variables
- are available for decision making your dial macro. Type SHOW VARIABLES
- for a list. Of particular interest is the \v(dialcount) variable,
- which tells how many times the DIAL command gone through its retry
- loop: 1 on the first try, 2 on the second, 3 on the third, and so on,
- and the \v(dialresult) and \v(dialstatus) variables.
+ Numerous dial-, modem-, communications-, and time-related variables are
+ available for decision making your dial macro. Type SHOW VARIABLES for
+ a list. Of particular interest is the \v(dialcount) variable, which
+ tells how many times the DIAL command gone through its retry loop: 1 on
+ the first try, 2 on the second, 3 on the third, and so on, and the
+ \v(dialresult) and \v(dialstatus) variables.
Here are some other applications for the DIAL MACRO (from users):
* Phone numbers in the dialing directory are formatted with '-' for
readability, but some modems don't like the hyphens, so the DIAL
- macro is used to remove them before dialing; e.g
- 0090-123-456-78-99 becomes 00901234567899: "def xxx return
- \freplace(\%1,-)".
+ macro is used to remove them before dialing; e.g 0090-123-456-78-99
+ becomes 00901234567899: "def xxx return \freplace(\%1,-)".
* To set some specific modem (or other) options depending on the
called customer or telephone number.
- * Choosing the most appropriate provider based on (e.g.) time of
- day, or cycling through a list of providers in case some providers
- might be busy.
+ * Choosing the most appropriate provider based on (e.g.) time of day,
+ or cycling through a list of providers in case some providers might
+ be busy.
To illustrate the final item, suppose you have a choice among many
phone service providers; the provider is chosen by dialing an access
code before the number. Different providers might be better (e.g.
cheaper) for certain times of day or days of the week, or for dialing
- certain locations; you can use the DIAL macro to add the access for
- the most desirable provider.
+ certain locations; you can use the DIAL macro to add the access for the
+ most desirable provider.
Similarly, when the same number might be reached through multiple
providers, it's possible that one provider might not be able to
SET DIAL TEST { ON, OFF }
Normally OFF, so the DIAL command actually dials. When ON, the
DIAL command performs all lookups and number conversions, and
- then goes through the number list and retry loop, but instead
- of actually dialing, lists the numbers it would have called if
- none of the DIAL attempts succeeded (or more precisely, every
- number was always busy).
- _________________________________________________________________
+ then goes through the number list and retry loop, but instead of
+ actually dialing, lists the numbers it would have called if none
+ of the DIAL attempts succeeded (or more precisely, every number
+ was always busy).
- 2.1.14. Automatic Tone/Pulse Dialing Selection
+2.1.14. Automatic Tone/Pulse Dialing Selection
SET DIAL METHOD { AUTO, DEFAULT, PULSE, TONE }
Chooses the dialing method for subsequent calls.
Prior to version 7.0, C-Kermit's DIAL METHOD was DEFAULT by default,
meaning it does not specify a dialing method to the modem, but relies
- on the modem to have an appropriate default dialing method set. So,
- for example, when using Hayes compatible modems, the dial string would
- be something like ATD7654321, rather than ATDT7654321 or ATDP7654321.
+ on the modem to have an appropriate default dialing method set. So, for
+ example, when using Hayes compatible modems, the dial string would be
+ something like ATD7654321, rather than ATDT7654321 or ATDP7654321.
In C-Kermit 7.0 and K95 1.1.19, the dial method can be set from the
environment variable:
from a location where pulse dialing is mandatory, pulse dialing is
used.
- The "tone country" and "pulse country" lists are preloaded according
- to our knowledge at the time of release. You can see their contents in
- the SHOW DIAL listing. You can change the lists with:
+ The "tone country" and "pulse country" lists are preloaded according to
+ our knowledge at the time of release. You can see their contents in the
+ SHOW DIAL listing. You can change the lists with:
SET DIAL TONE-COUNTRIES [ cc [ cc [ ... ] ] ]
Replaces the current TONE-COUNTRIES list with the one given.
set dial tone-countries 1 358 44 46 49
If no country codes are given, the current list, if any, is
- removed, in which case SET DIAL METHOD AUTO is equivalent to
- SET DIAL METHOD DEFAULT.
+ removed, in which case SET DIAL METHOD AUTO is equivalent to SET
+ DIAL METHOD DEFAULT.
SET DIAL PULSE-COUNTRIES [ cc [ cc [ ... ] ] ]
Replaces the current PULSE-COUNTRIES list with the one give.
Syntax and operation is like SET DIAL TONE-COUNTRIES.
- If the same country code appears in both lists, Pulse takes
- precedence.
+ If the same country code appears in both lists, Pulse takes precedence.
- The SET DIAL TONE- and PULSE-COUNTRIES commands perform no
- verification whatsoever on the cc's, since almost any syntax might be
- legal in some settings. Furthermore, there is no facility to edit the
- lists; you can only replace the whole list. However, since the only
- purpose of these lists is to establish a basis for picking tone or
- pulse dialing automatically, all you need to override the effect of
- the list is to set a specific dialing method with SET DIAL METHOD TONE
- or SET DIAL METHOD PULSE.
- _________________________________________________________________
+ The SET DIAL TONE- and PULSE-COUNTRIES commands perform no verification
+ whatsoever on the cc's, since almost any syntax might be legal in some
+ settings. Furthermore, there is no facility to edit the lists; you can
+ only replace the whole list. However, since the only purpose of these
+ lists is to establish a basis for picking tone or pulse dialing
+ automatically, all you need to override the effect of the list is to
+ set a specific dialing method with SET DIAL METHOD TONE or SET DIAL
+ METHOD PULSE.
- 2.1.15. Dial-Modifier Variables
+2.1.15. Dial-Modifier Variables
As of C-Kermit 7.0, dial modifiers are available in the following
variables:
\v(dm_wd) = W
\v(dm_rc) = ;
C-Kermit>exit
- _________________________________________________________________
- 2.1.16. Giving Multiple Numbers to the DIAL Command
+2.1.16. Giving Multiple Numbers to the DIAL Command
Prior to C-Kermit 7.0, the only way to give a DIAL command a list of
phone numbers to try until one answers was to create a dialing
directory that had multiple entries under the same name, and then use
- that entry name in the DIAL command. Now a list of numbers can be
- given to the DIAL command directly in the following format:
+ that entry name in the DIAL command. Now a list of numbers can be given
+ to the DIAL command directly in the following format:
dial {{number1}{number2}{number3}...}
and then:
work
- _________________________________________________________________
- 2.2. Modems
+2.2. Modems
- 2.2.1. New Modem Types
+2.2.1. New Modem Types
Since C-Kermit 6.0:
One of the new types, "generic-high-speed" needs a bit of explanation.
This type was added to easily handle other types that are not
explicitly covered, without going through the bother of adding a
- complete user-defined modem type. This one works for modern modems
- that use the AT command set, on the assumption that all the default
+ complete user-defined modem type. This one works for modern modems that
+ use the AT command set, on the assumption that all the default
("factory") settings of the modem (a) are appropriate for Kermit, (b)
include error correction, data compression, and speed buffering; and
(c) are recallable with the command AT&F.
If the command to recall your modem's profile is not AT&F, use the SET
MODEM COMMAND INIT-STRING command to specify the appropriate modem
- command. The default init-string is AT&F\13 (that is, AT, ampersand,
- F, and then carriage return); a survey of about 20 modern modem types
+ command. The default init-string is AT&F\13 (that is, AT, ampersand, F,
+ and then carriage return); a survey of about 20 modern modem types
shows they all support this, but they might mean different things by
it. For example, the USR Sportster or Courier needs AT&F1 (not AT&F,
which is equivalent to AT&F0, which recalls an inappropriate profile),
Of course, USR modems already have their own built-in modem type. But
if you use this one instead, it will dial faster because it has fewer
- commands to give to the modem; in that sense "&F1" is like a macro
- that bundles numerous commands into a single one. See your modem
- manual for details about factory profiles and commands to recall them.
+ commands to give to the modem; in that sense "&F1" is like a macro that
+ bundles numerous commands into a single one. See your modem manual for
+ details about factory profiles and commands to recall them.
WARNING: Do not use the generic-high-speed modem type in operating
- systems like VMS where hardware flow control is not available, at
- least not unless you change the init string from AT&F\13 to something
- else that enables local Xon/Xoff or other appropriate type of flow
- control.
+ systems like VMS where hardware flow control is not available, at least
+ not unless you change the init string from AT&F\13 to something else
+ that enables local Xon/Xoff or other appropriate type of flow control.
- Also see [396]Section 2.1.7 for additional hints about making dialing
+ Also see [404]Section 2.1.7 for additional hints about making dialing
go faster.
- _________________________________________________________________
- 2.2.2. New Modem Controls
+2.2.2. New Modem Controls
SET MODEM CAPABILITIES list
In C-Kermit 7.0, this command automatically turns MODEM
turns it ON if SB is absent.
SET MODEM COMMAND PREDIAL-INIT [ text ]
- Commands to be sent to the modem just prior to dialing.
- Normally none.
+ Commands to be sent to the modem just prior to dialing. Normally
+ none.
SET MODEM SPEAKER { ON, OFF }
Determines whether modem speaker is on or off while call is
- being placed. ON by default. Note: This command does not
- provide fine-grained control over when the speaker is on or
- off. Normally, ON means while the call is being placed, until
- the point at which carrier is successfully established. If your
+ being placed. ON by default. Note: This command does not provide
+ fine-grained control over when the speaker is on or off.
+ Normally, ON means while the call is being placed, until the
+ point at which carrier is successfully established. If your
modem has a different speaker option that you want to choose,
then use the SET MODEM COMMAND SPEAKER ON text command to
specify this option.
SET MODEM COMMAND SPEAKER { ON, OFF } [ text ]
- Specify or override the commands to turn your modem's speaker
- on and off.
+ Specify or override the commands to turn your modem's speaker on
+ and off.
SET MODEM VOLUME { LOW, MEDIUM, HIGH }
When MODEM SPEAKER is on, select volume. Note: In some modems,
- especially internal ones, these commands have no effect; this
- is a limitation of the particular modem, not of Kermit.
+ especially internal ones, these commands have no effect; this is
+ a limitation of the particular modem, not of Kermit.
SET MODEM COMMAND VOLUME { LOW, MEDIUM, HIGH } [ text ]
Specify or override the commands to set your modem's speaker
volume.
SET MODEM COMMAND IGNORE-DIALTONE [ text ]
- The command to enable blind dialing ([397]Section 2.1.6).
+ The command to enable blind dialing ([405]Section 2.1.6).
SET MODEM ESCAPE-CHARACTER code
Has been augmented to allow codes of 0 or less: < 0 means the
escape mechanism is disabled. = 0 means to use (restore) the
default value from the modem database. > 0 and < 128 is a
- literal value to be used instead of the default one. > 127
- means the escape mechanism is disabled. This affects "modem
- hangup". When the escape mechanism is disabled, but SET MODEM
+ literal value to be used instead of the default one. > 127 means
+ the escape mechanism is disabled. This affects "modem hangup".
+ When the escape mechanism is disabled, but SET MODEM
HANGUP-METHOD is MODEM-COMMAND, it sends the hangup command
immediately, without the <pause>+++<pause> business first. This
is useful (for example) when sending lots of numeric pages, a
- process in which never we go online, and so never need to
- escape back. Eliminating the unnecessary pauses and escape
- sequence allows a lot more pages to be sent per unit time.
+ process in which never we go online, and so never need to escape
+ back. Eliminating the unnecessary pauses and escape sequence
+ allows a lot more pages to be sent per unit time.
Recall that C-Kermit can dial modems to which it is connected via
- TCP/IP (Telnet or Rlogin) as described on page 126 of [398]Using
+ TCP/IP (Telnet or Rlogin) as described on page 126 of [406]Using
C-Kermit, 2nd Ed. In this case the MODEM HANGUP-METHOD should be
- MODEM-COMMAND, since RS-232 signals don't work over TCP/IP
- connections. As noted in the manual, such connections are set up by
- the following sequence:
+ MODEM-COMMAND, since RS-232 signals don't work over TCP/IP connections.
+ As noted in the manual, such connections are set up by the following
+ sequence:
set host host [ port ]
set modem type name
close
set modem type name
set port name
- _________________________________________________________________
- 2.3. TELNET and RLOGIN
+2.3. TELNET and RLOGIN
- For additional background, please also read the [399]TELNET.TXT file,
- also available on the Web in [400]HTML format.
+ For additional background, please also read the [407]TELNET.TXT file,
+ also available on the Web in [408]HTML format.
Cautions:
- * If making a Telnet connection with C-Kermit takes a very long
- time, like over a minute, whereas the system Telnet program makes
- the same connection immediately, try including the /NOWAIT switch:
+ * If making a Telnet connection with C-Kermit takes a very long time,
+ like over a minute, whereas the system Telnet program makes the
+ same connection immediately, try including the /NOWAIT switch:
C-Kermit> telnet /nowait hostname
- See [401]TELNET.TXT or [402]TELNET.HTM for details. If it also
+
+ See [409]TELNET.TXT or [410]TELNET.HTM for details. If it also
takes a very long time to make a Telnet connection with system
- Telnet, then the delay is most likely caused by reverse DNS
- lookups when your host is not properly registered in DNS.
+ Telnet, then the delay is most likely caused by reverse DNS lookups
+ when your host is not properly registered in DNS.
* When supplying numeric IP addresses to C-Kermit or to any other
application (regular Telnet, Rlogin, etc), do not include leading
0's in any fields unless you intend for those fields to be
All numbers supplied as "parts" in a "." notation may be decimal,
octal, or hexadecimal, as specified in the C language (that is, a
- leading 0x or 0X implies hexadecimal; otherwise, a leading 0
- implies octal; otherwise, the number is interpreted as decimal).
+ leading 0x or 0X implies hexadecimal; otherwise, a leading 0 implies
+ octal; otherwise, the number is interpreted as decimal).
To illustrate, 128.59.39.2 and 128.059.039.002 are not the same
host! Even though most of the fields contain non-octal digits.
Using system Telnet (not Kermit):
$ telnet 128.059.039.002
Trying 128.49.33.2 ...
- Of course the same thing happens with Kermit because it uses (as
- it must) the same system service for resolving network addresses
- that Telnet, FTP, and all other TCP/IP applications use.
+
+ Of course the same thing happens with Kermit because it uses (as it
+ must) the same system service for resolving network addresses that
+ Telnet, FTP, and all other TCP/IP applications use.
* The RLOGIN section on page 123 does not make it clear that you can
use the SET TELNET TERMINAL-TYPE command to govern the terminal
type that is reported by C-Kermit to the RLOGIN server.
SET TCP REVERSE-DNS-LOOKUP { ON, OFF, AUTO }
Tells Kermit whether to perform a reverse DNS lookup on TCP/IP
- connections. This allows Kermit to determine the actual
- hostname of the host it is connected to, which is useful for
- connections to host pools, and is required for Kerberos
- connections to host pools and for incoming connections. If the
- other host does not have a DNS entry, the reverse lookup could
- take a long time (minutes) to fail, but the connection will
- still be made. Turn this option OFF for speedier connections if
- you do not need to know exactly which host you are connected to
- and you are not using Kerberos. AUTO, the default, means the
- lookup is done on hostnames, but not on numeric IP addresses.
+ connections. This allows Kermit to determine the actual hostname
+ of the host it is connected to, which is useful for connections
+ to host pools, and is required for Kerberos connections to host
+ pools and for incoming connections. If the other host does not
+ have a DNS entry, the reverse lookup could take a long time
+ (minutes) to fail, but the connection will still be made. Turn
+ this option OFF for speedier connections if you do not need to
+ know exactly which host you are connected to and you are not
+ using Kerberos. AUTO, the default, means the lookup is done on
+ hostnames, but not on numeric IP addresses.
SET TELNET WAIT-FOR-NEGOTIATIONS { ON, OFF }
Each Telnet option must be fully negotiated either On or Off
Kermit must wait for the negotiations to complete. Of course,
Kermit has no way of knowing whether a reply is delayed or not
coming at all, and so will wait a minute or more for required
- replies before continuing the session. If you know that
- Kermit's Telnet partner will not be sending the required
- replies, you can set this option of OFF to avoid the long
- timeouts. Or you can instruct Kermit to REFUSE specific options
- with the SET TELOPT command.
+ replies before continuing the session. If you know that Kermit's
+ Telnet partner will not be sending the required replies, you can
+ set this option of OFF to avoid the long timeouts. Or you can
+ instruct Kermit to REFUSE specific options with the SET TELOPT
+ command.
SET TELOPT [ { /CLIENT, /SERVER } ] option
{ ACCEPTED, REFUSED, REQUESTED, REQUIRED }
disconnect if the option is refused. REQUESTED causes Kermit to
offer an option to the peer. ACCEPTED results in no offer but
Kermit will attempt to negotiate the option if it is requested.
- REFUSED instructs Kermit to refuse the option if it is
- requested by the peer.
+ REFUSED instructs Kermit to refuse the option if it is requested
+ by the peer.
Some options are negotiated in two directions and accept
separate policies for each direction; the first keyword applies
- to Kermit itself, the second applies to Kermit's Telnet
- partner; if the second keyword is omitted, an appropriate
+ to Kermit itself, the second applies to Kermit's Telnet partner;
+ if the second keyword is omitted, an appropriate
(option-specific) default is applied. You can also include a
- /CLIENT or /SERVER switch to indicate whether the given
- policies apply when Kermit is the Telnet client or the Telnet
- server; if no switch is given, the command applies to the
- client.
+ /CLIENT or /SERVER switch to indicate whether the given policies
+ apply when Kermit is the Telnet client or the Telnet server; if
+ no switch is given, the command applies to the client.
Note that some of Kermit's Telnet partners fail to refuse
- options that they do not recognize and instead do not respond
- at all. In this case it is possible to use SET TELOPT to
- instruct Kermit to REFUSE the option before connecting to the
- problem host, thus skipping the problematic negotiation.
+ options that they do not recognize and instead do not respond at
+ all. In this case it is possible to use SET TELOPT to instruct
+ Kermit to REFUSE the option before connecting to the problem
+ host, thus skipping the problematic negotiation.
Use SHOW TELOPT to view current Telnet Option negotiation
settings. SHOW TELNET displays current Telnet settings.
- _________________________________________________________________
- 2.3.0. Bug Fixes
+2.3.0. Bug Fixes
If "set host nonexistent-host" was given (and it properly failed),
followed by certain commands like SEND, the original line and modem
- type were not restored and C-Kermit thought that it still had a
- network hostname; fixed in 7.0.
+ type were not restored and C-Kermit thought that it still had a network
+ hostname; fixed in 7.0.
- 2.3.1. Telnet Binary Mode Bug Adjustments
+2.3.1. Telnet Binary Mode Bug Adjustments
SET TELNET BUG BINARY-ME-MEANS-U-TOO { ON, OFF } was added to edit 192
after the book was printed. Also SET TELNET BUG BINARY-U-MEANS-ME-TOO.
is in binary mode, contrary to the Telnet specification, which says
that binary mode must be negotiated in each direction separately.
- 2.3.2. VMS UCX Telnet Port Bug Adjustment
+2.3.2. VMS UCX Telnet Port Bug Adjustment
A new command, SET TCP UCX-PORT-BUG, was added for VMS versions with
UCX (DEC TCP/IP), applying only to early versions of UCX, like 2.2 or
earlier. If you try to use VMS C-Kermit to make a Telnet connection
using a port name (like "telnet", which is used by default), the
- underlying UCX getservbyname() function might return the service
- number with its bytes swapped and the connection will fail. If "telnet
+ underlying UCX getservbyname() function might return the service number
+ with its bytes swapped and the connection will fail. If "telnet
hostname 23" works, then your version of UCX has this bug and you can
put "set tcp ucx-port-bug on" in your CKERMIT.INI file to get around
it.
- 2.3.3. Telnet New Environment Option
+2.3.3. Telnet New Environment Option
- The TELNET NEW-ENVIRONMENT option ([403]RFC 1572) is supported as 7.0.
+ The TELNET NEW-ENVIRONMENT option ([411]RFC 1572) is supported as 7.0.
This option allows the C-Kermit Telnet client to send certain
well-known variables to the Telnet server, including USER, PRINTER,
DISPLAY, and several others. This feature is enabled by default in
When ON, and you Telnet to another computer, you might (or might not)
notice that the "login:" or "Username:" prompt does not appear --
that's because your username was sent ahead, in which case the remote
- system might prompt you only for your password (similar to Rlogin).
- Use "set telnet environment off" to defeat this feature, particularly
- in scripts where the dialog must be predictable. You can also use this
- command to specify or override specific well-known environment
- variable values:
+ system might prompt you only for your password (similar to Rlogin). Use
+ "set telnet environment off" to defeat this feature, particularly in
+ scripts where the dialog must be predictable. You can also use this
+ command to specify or override specific well-known environment variable
+ values:
SET TELNET ENVIRONMENT { ACCT,DISPLAY,JOB,PRINTER,SYSTEMTYPE,USER } [ text ]
- 2.3.4. Telnet Location Option
+2.3.4. Telnet Location Option
- The TELNET LOCATION option ([404]RFC 779) is supported in 7.0. This
+ The TELNET LOCATION option ([412]RFC 779) is supported in 7.0. This
option allows the C-Kermit Telnet client to send a location string to
- the server if the server indicates its willingness to accept one. If
- an environment variable named LOCATION exists at the time C-Kermit
- starts, its value is used as the location string. If you want to
- change it, use:
+ the server if the server indicates its willingness to accept one. If an
+ environment variable named LOCATION exists at the time C-Kermit starts,
+ its value is used as the location string. If you want to change it,
+ use:
SET TELNET LOCATION text
If you omit the text from this command, the Telnet location feature is
disabled.
- SET TELNET ENVIRONMENT DISPLAY is used to set the DISPLAY variable
- that is sent to the host, as well as the the XDISPLAY location.
+ SET TELNET ENVIRONMENT DISPLAY is used to set the DISPLAY variable that
+ is sent to the host, as well as the XDISPLAY location.
- 2.3.5. Connecting to Raw TCP Sockets
+2.3.5. Connecting to Raw TCP Sockets
The SET HOST and TELNET commands now accept an optional switch,
/RAW-SOCKET, at the end, only if you first give a host and a port.
telnet xyzcorp.com 3000 /raw
Without this switch, C-Kermit behaves as a Telnet client when (a) the
- port is 23 or 1649, or (b) the port is not 513 and the server sent
- what appeared to be Telnet negotiations -- that is, messages starting
- with 0xFF (IAC). With this switch, Kermit should treat all incoming
- bytes as raw data, and will not engage in any Telnet negotiations or
- NVT CRLF manipulations. This allows transparent operation through
- (e.g.) raw TCP ports on Cisco terminal servers, through the 'modemd'
- modem server, etc.
+ port is 23 or 1649, or (b) the port is not 513 and the server sent what
+ appeared to be Telnet negotiations -- that is, messages starting with
+ 0xFF (IAC). With this switch, Kermit should treat all incoming bytes as
+ raw data, and will not engage in any Telnet negotiations or NVT CRLF
+ manipulations. This allows transparent operation through (e.g.) raw TCP
+ ports on Cisco terminal servers, through the 'modemd' modem server,
+ etc.
- 2.3.6. Incoming TCP Connections
+2.3.6. Incoming TCP Connections
Accomplished via SET HOST * port, were introduced in C-Kermit 6.0, but
for UNIX only. In Version 7.0, they are also available for VMS.
- _________________________________________________________________
- 2.4. The EIGHTBIT Command
+2.4. The EIGHTBIT Command
EIGHTBIT is simply a shorthand for: SET PARITY NONE, SET TERMINAL
BYTESIZE 8, SET COMMAND BYTESIZE 8; that is, a way to set up an 8-bit
clean connection in a single command.
- _________________________________________________________________
- 2.5. The Services Directory
+2.5. The Services Directory
- Chapter 7 of [405]Using C-Kermit does not mention the ULOGIN macro,
+ Chapter 7 of [413]Using C-Kermit does not mention the ULOGIN macro,
which is used by our sample services directory, CKERMIT.KND. Unlike
- UNIXLOGIN, VMSLOGIN, etc, this one is for use with systems that
- require a user ID but no password. Therefore it doesn't prompt for a
- password or wait for a password prompt from the remote service.
+ UNIXLOGIN, VMSLOGIN, etc, this one is for use with systems that require
+ a user ID but no password. Therefore it doesn't prompt for a password
+ or wait for a password prompt from the remote service.
In version 7.0, the CALL macro was changed to not execute a SET MODEM
TYPE command if the given modem type was the same as the current one;
otherwise the new SET MODEM TYPE command would overwrite any
customizations that the user had made to the modem settings. Ditto for
SET LINE / SET PORT and SET SPEED.
- _________________________________________________________________
- 2.6. Closing Connections
+2.6. Closing Connections
Until version 7.0, there was never an obvious and general way to close
a connection. If a serial connection was open, it could be closed by
expect, especially if you are a Telnet or Ftp user.
Also see the description of the new SET CLOSE-ON-DISCONNECT command in
- [406]Section 2.10.
- _________________________________________________________________
+ [414]Section 2.10.
- 2.7. Using C-Kermit with External Communication Programs
+2.7. Using C-Kermit with External Communication Programs
C-Kermit 7.0 includes a new ability to create and conduct sessions
through other communications programs. Two methods are available:
not on any non-UNIX platforms.
2. Pipe: The external program's standard input and output are
redirected through a "pipe" controlled by Kermit. This method is
- relatively portable -- it should work across all UNIX versions,
- and it also works in Windows and OS/2 -- but it is effective only
- when the external program actually uses standard i/o (and many
- don't).
+ relatively portable -- it should work across all UNIX versions, and
+ it also works in Windows and OS/2 -- but it is effective only when
+ the external program actually uses standard i/o (and many don't).
The two methods are started differently but are used the same way
thereafter.
The purpose of this feature is to let you use C-Kermit services like
- file transfer, character-set translation, scripting, automatic
- dialing, etc, on connections that Kermit can't otherwise make itself.
+ file transfer, character-set translation, scripting, automatic dialing,
+ etc, on connections that Kermit can't otherwise make itself.
- This feature is the opposite of the REDIRECT feature, in which
- C-Kermit makes the connection, and redirects an external (local)
- command or program over this connection. In a pty or pipe connection,
- C-Kermit runs and controls a local command or program, which makes the
+ This feature is the opposite of the REDIRECT feature, in which C-Kermit
+ makes the connection, and redirects an external (local) command or
+ program over this connection. In a pty or pipe connection, C-Kermit
+ runs and controls a local command or program, which makes the
connection. (The same method can be used to simply to control a local
- program without making a connection; see [407]Section 2.8.)
+ program without making a connection; see [415]Section 2.8.)
To find out if your version of Kermit includes PTY support, type "show
features" and look for NETPTY in the alphabetical list of options. For
* COMMAND is an invisible synonym for PIPE.
* The command and its arguments are case-sensitive in UNIX.
- The SET NETWORK TYPE, SET HOST sequence sets the given network type
- for all subsequent SET HOST commands until another SET NETWORK TYPE
- command is given to change it.
+ The SET NETWORK TYPE, SET HOST sequence sets the given network type for
+ all subsequent SET HOST commands until another SET NETWORK TYPE command
+ is given to change it.
You can also use the new /NETWORK-TYPE:PTY or /NETWORK-TYPE:PIPE (or
simply /PIPE or /PTY) switches on the SET HOST command itself:
SET HOST /NETWORK-TYPE:PTY command ; Ditto
SET HOST /PTY command
- These are like SET NETWORK TYPE followed by SET HOST, except they
- apply only to the connection being made and do not change the global
- network type setting (see [408]Section 1.5 about the difference
- between switches and SET commands).
+ These are like SET NETWORK TYPE followed by SET HOST, except they apply
+ only to the connection being made and do not change the global network
+ type setting (see [416]Section 1.5 about the difference between
+ switches and SET commands).
- Include any command-line options with the command that might be
- needed, as in this example where C-Kermit uses another copy of itself
- as the communications program:
+ Include any command-line options with the command that might be needed,
+ as in this example where C-Kermit uses another copy of itself as the
+ communications program:
SET HOST /PIPE /CONNECT kermit -YQJ xyzcorp.com
+ IMPORTANT: In Unix, wildcards and redirectors are interpreted by the
+ shell. If you want to run a program with (say) SET HOST /PTY with
+ its i/o redirected or with wildcard file arguments, you will need to
+ invoke the shell too. Example:
+
+SET HOST /PTY {sh -c "crypt < foo.x"}
+SET HOST /PTY {sh -c "grep somestring *.txt"}
+
As usual, if you include the /CONNECT switch, SET HOST enters CONNECT
mode immediately upon successful execution of the given command.
Therefore new commands are available as a shorthand for SET HOST
PIPE [ command ]
The PTY and PIPE commands work like the TELNET and RLOGIN
commands: they set up the connection (in this case, using the
- given command) and then enter CONNECT mode automatically (if
- the PIPE or PTY command is given without a command, it
- continues the current session if one is active; otherwise it
- gives an error message).
+ given command) and then enter CONNECT mode automatically (if the
+ PIPE or PTY command is given without a command, it continues the
+ current session if one is active; otherwise it gives an error
+ message).
The PIPE command is named after the mechanism by which C-Kermit
communicates with the command: UNIX pipes. C-Kermit's i/o is "piped"
IMPORTANT:
If you are writing a script, do not use the PIPE, PTY, TELNET,
or RLOGIN command unless you really want C-Kermit to enter
- CONNECT mode at that point. Normally SET HOST is used in
- scripts to allow the login and other dialogs to be controlled
- by the script itself, rather than by an actively participating
- human at the keyboard.
+ CONNECT mode at that point. Normally SET HOST is used in scripts
+ to allow the login and other dialogs to be controlled by the
+ script itself, rather than by an actively participating human at
+ the keyboard.
- Throughput of pty and pipe connections is limited by the performance
- of the chosen command or program and by the interprocess communication
+ Throughput of pty and pipe connections is limited by the performance of
+ the chosen command or program and by the interprocess communication
(IPC) method used and/or buffering capacity of the pipe or pty, which
in turn depends on the underlying operating system.
In one trial (on SunOS 4.1.3), we observed file transfer rates over an
rlogin connection proceeding at 200Kcps for downloads, but only 10Kcps
for uploads on the same connection with the same settings (similar
- disparities were noted in HP-UX). Examination of the logs revealed
- that a write to the pipe could take as long as 5 seconds, whereas
- reads were practically instantaneous. On the other hand, using Telnet
- as the external program rather than rlogin, downloads and uploads were
- better matched at about 177K each.
-
- Most external communication programs, like C-Kermit itself, have
- escape characters or sequences. Normally these begin with (or consist
- entirely of) a control character. You must be sure that this control
- character is not "unprefixed" when uploading files, otherwise the
- external program will "escape back" to its prompt, or close the
- connection, or take some other unwanted action. When in CONNECT mode,
- observe the program's normal interaction rules. Of course C-Kermit's
- own escape character (normally Ctrl-\) is active too, unless you have
- taken some action to disable it.
+ disparities were noted in HP-UX). Examination of the logs revealed that
+ a write to the pipe could take as long as 5 seconds, whereas reads were
+ practically instantaneous. On the other hand, using Telnet as the
+ external program rather than rlogin, downloads and uploads were better
+ matched at about 177K each.
+
+ Most external communication programs, like C-Kermit itself, have escape
+ characters or sequences. Normally these begin with (or consist entirely
+ of) a control character. You must be sure that this control character
+ is not "unprefixed" when uploading files, otherwise the external
+ program will "escape back" to its prompt, or close the connection, or
+ take some other unwanted action. When in CONNECT mode, observe the
+ program's normal interaction rules. Of course C-Kermit's own escape
+ character (normally Ctrl-\) is active too, unless you have taken some
+ action to disable it.
On PTY connections, the underlying PTY driver is not guaranteed to be
- transparent to control characters -- for example, it might expand
- tabs, translate carriage returns, generate signals if it sees an
- interrupt character, and so on. Similar things might happen on a PIPE
- connection. For this reason, if you plan to transfer files over a PTY
- or PIPE connection, tell the file sender to:
+ transparent to control characters -- for example, it might expand tabs,
+ translate carriage returns, generate signals if it sees an interrupt
+ character, and so on. Similar things might happen on a PIPE connection.
+ For this reason, if you plan to transfer files over a PTY or PIPE
+ connection, tell the file sender to:
SET PREFIXING ALL
This causes all control characters to be prefixed and
transmitted as printable ASCII characters.
- If the external connection program is not 8-bit clean, you should
- also:
+ If the external connection program is not 8-bit clean, you should also:
SET PARITY SPACE
This causes 8-bit data to be encoded in 7 bits using single
SET STREAMING OFF
This forces C-Kermit to treat the connection as unreliable and
- to engage in its normal ACK/NAK protocol for error detection
- and correction, rather than "streaming" its packets, as it
- normally does on a network connection ([409]Section 4.20).
-
- In some cases, buffer sizes might be restricted, so you might also
- need to reduce the Kermit packet length to fit; this is a
- trial-and-error affair. For example, if transfers always fail with
- 4000-byte packets, try 2000. If that fails too, try 1000, and so on.
- The commands are:
+ to engage in its normal ACK/NAK protocol for error detection and
+ correction, rather than "streaming" its packets, as it normally
+ does on a network connection ([417]Section 4.20).
+
+ In some cases, buffer sizes might be restricted, so you might also need
+ to reduce the Kermit packet length to fit; this is a trial-and-error
+ affair. For example, if transfers always fail with 4000-byte packets,
+ try 2000. If that fails too, try 1000, and so on. The commands are:
SET RECEIVE PACKET-LENGTH number
- This tells the file receiver to tell the file sender the
- longest packet length it can accept.
+ This tells the file receiver to tell the file sender the longest
+ packet length it can accept.
SET SEND PACKET-LENGTH number
This tells the file sender not to send packets longer than the
throughput.
Note that when starting a PIPE connection, and the connection program
- (such as telnet or rlogin) prints some greeting or information
- messages before starting the connection, these are quite likely to be
- printed with a stairstep effect (linefeed without carriage return).
- This is because the program is not connected with the UNIX terminal
- driver; there's not much Kermit can do about it. Once the connection
- is made, everything should go back to normal. This shouldn't happen on
- a PTY connection because a PTY is, indeed, a terminal.
+ (such as telnet or rlogin) prints some greeting or information messages
+ before starting the connection, these are quite likely to be printed
+ with a stairstep effect (linefeed without carriage return). This is
+ because the program is not connected with the UNIX terminal driver;
+ there's not much Kermit can do about it. Once the connection is made,
+ everything should go back to normal. This shouldn't happen on a PTY
+ connection because a PTY is, indeed, a terminal.
On a similar note, some connection programs (like Solaris 2.5 rlogin)
might print lots of error messages like "ioctl TIOCGETP: invalid
argument" when used through a pipe. They are annoying but usually
harmless. If you want to avoid these messages, and your shell allows
- redirection of stderr, you can redirect stderr in your pipe command,
- as in this example where the user's shell is bash:
+ redirection of stderr, you can redirect stderr in your pipe command, as
+ in this example where the user's shell is bash:
PIPE rlogin xyzcorp.com 2> /dev/null
Or use PTY rather than PIPE, since PTY is available on Solaris.
- _________________________________________________________________
- 2.7.0. C-Kermit over tn3270 and tn5250
+2.7.0. C-Kermit over tn3270 and tn5250
Now you can make a connection from C-Kermit "directly" to an IBM
mainframe and transfer files with it, assuming it has Kermit-370
SET HOST /PIPE does not work in this case, at least not for file
transfer. File transfer does work, however, with SET HOST /PTY,
- provided you use the default packet length of 90 bytes; anything
- longer seems to kill the session.
+ provided you use the default packet length of 90 bytes; anything longer
+ seems to kill the session.
You can also make connections to IBM AS/400 computers if you have a
tn5250 program installed:
pty tn5250 hostname
- In this case, however, file transfer is probably not in the cards
- since nobody has ever succeeded in writing a Kermit program for the
- AS/400. Hint:
+ In this case, however, file transfer is probably not in the cards since
+ nobody has ever succeeded in writing a Kermit program for the AS/400.
+ Hint:
define tn3270 {
check pty
pty tn3270 \%*
}
- Similarly for tn5250. Note that CHECK PTY and CHECK PIPE can be used
- in macros and scripts to test whether PTY or PIPE support is
- available.
- _________________________________________________________________
+ Similarly for tn5250. Note that CHECK PTY and CHECK PIPE can be used in
+ macros and scripts to test whether PTY or PIPE support is available.
- 2.7.1. C-Kermit over Telnet
+2.7.1. C-Kermit over Telnet
Although C-Kermit includes its own Telnet implementation, you might
need to use an external Telnet program to make certain connections;
or, equivalently:
PTY (or PIPE) telnet abccorp.com
- _________________________________________________________________
- 2.7.2. C-Kermit over Rlogin
+2.7.2. C-Kermit over Rlogin
C-Kermit includes its own Rlogin client, but this can normally be used
- only if you are root, since the rlogin TCP port is privileged. But
- ptys and pipes let you make rlogin connections with C-Kermit through
- your computer's external rlogin program, which is normally installed
- as a privileged program:
+ only if you are root, since the rlogin TCP port is privileged. But ptys
+ and pipes let you make rlogin connections with C-Kermit through your
+ computer's external rlogin program, which is normally installed as a
+ privileged program:
SET PREFIXING ALL
followed by Tilde (~), but only when the tilde is followed by certain
other characters; the exact behavior depends on your rlogin client, so
read its documentation.
- _________________________________________________________________
- 2.7.3. C-Kermit over Serial Communication Programs
+2.7.3. C-Kermit over Serial Communication Programs
Ptys and pipes also let you use programs that make serial connections,
- such as cu or tip. For example, C-Kermit can be used through cu to
- make connections that otherwise might not be allowed, e.g. because
- C-Kermit is not installed with the required write permissions to the
- dialout device and the UUCP lockfile directory.
+ such as cu or tip. For example, C-Kermit can be used through cu to make
+ connections that otherwise might not be allowed, e.g. because C-Kermit
+ is not installed with the required write permissions to the dialout
+ device and the UUCP lockfile directory.
Suppose your UUCP Devices file contains an entry for a serial device
tty04 to be used for direct connections, but this device is protected
sequence, which is the same as the rlogin program's: Carriage Return
followed by Tilde (followed by another character to specify an action,
like "." for closing the connection and exiting from cu).
- _________________________________________________________________
- 2.7.4. C-Kermit over Secure Network Clients
+2.7.4. C-Kermit over Secure Network Clients
DISCLAIMER: There are laws in the USA and other countries regarding
use, import, and/or export of encryption and/or decryption or other
- forms of security software, algorithms, technology, and
- intellectual property. The Kermit Project attempts to follow all
- known statutes, and neither intends nor suggests that Kermit
- software can or should be used in any way, in any location, that
- circumvents any regulations, laws, treaties, covenants, or other
- legitimate canons or instruments of law, international relations,
- trade, ethics, or propriety.
+ forms of security software, algorithms, technology, and intellectual
+ property. The Kermit Project attempts to follow all known statutes,
+ and neither intends nor suggests that Kermit software can or should
+ be used in any way, in any location, that circumvents any
+ regulations, laws, treaties, covenants, or other legitimate canons
+ or instruments of law, international relations, trade, ethics, or
+ propriety.
For secure connections or connections through firewalls, C-Kermit 7.0
can be a Kerberos, SRP, and/or SOCKS client when built with the
- appropriate options and libraries. But other application-level
- security acronyms and methods -- SSH, SSL, SRP, TLS -- pop up at an
- alarming rate and are (a) impossible to keep up with, (b) usually
- mutually incompatible, and (c) have restrictions on export or
- redistribution and so cannot be included in C-Kermit itself.
+ appropriate options and libraries. But other application-level security
+ acronyms and methods -- SSH, SSL, SRP, TLS -- pop up at an alarming
+ rate and are (a) impossible to keep up with, (b) usually mutually
+ incompatible, and (c) have restrictions on export or redistribution and
+ so cannot be included in C-Kermit itself.
However, if you have a secure text-based Telnet (or other) client that
employs one of these security methods, you can use C-Kermit "through"
it via a pty or pipe.
- _________________________________________________________________
- 2.7.4.1. SSH
+2.7.4.1. SSH
- C-Kermit does not and can not incorporate SSH due to licensing,
- patent, and USA export law restrictions.
+ C-Kermit does not and can not incorporate SSH due to licensing, patent,
+ and USA export law restrictions.
The UNIX SSH client does not use standard input/output, and therefore
can be used only by Kermit's PTY interface, if one is present. The
- cautions about file transfer, etc, are the same as for Rlogin.
- Example:
+ cautions about file transfer, etc, are the same as for Rlogin. Example:
SET PREFIXING ALL
PTY ssh XYZCORP.COM
if fail end 1 Sorry - no PTY support...
pty ssh \%*
}
- _________________________________________________________________
- 2.7.4.2. SSL
+2.7.4.2. SSL
- Secure Sockets Layer (SSL) is another TCP/IP security overlay, this
- one designed by and for Netscape. An SSL Telnet client is available
- for UNIX from the University of Queensland. More info at:
+ Secure Sockets Layer (SSL) is another TCP/IP security overlay, this one
+ designed by and for Netscape. An SSL Telnet client is available for
+ UNIX from the University of Queensland. More info at:
- [410]http://www.psy.uq.oz.au/~ftp/Crypto/
+ [418]http://www.psy.uq.oz.au/~ftp/Crypto/
Interoperability with C-Kermit is unknown. C-Kermit also includes its
- own built-in SSL/TLS support, but it is not exportable; [411]CLICK
- HERE file for details.
- _________________________________________________________________
+ own built-in SSL/TLS support, but it is not exportable; [419]CLICK HERE
+ file for details.
- 2.7.4.3. SRP
+2.7.4.3. SRP
SRP(TM) is Stanford University's Secure Remote Password protocol. An
SRP Telnet client is available from Stanford:
- [412]http://srp.stanford.edu/srp/
+ [420]http://srp.stanford.edu/srp/
Stanford's SRP Telnet client for UNIX has been tested on SunOS and
- works fine with C-Kermit, as described in [413]Section 2.7.1, e.g.
+ works fine with C-Kermit, as described in [421]Section 2.7.1, e.g.
SET PREFIX ALL
PTY (or PIPE) srp-telnet xenon.stanford.edu
C-Kermit itself can be built as an SRP Telnet client on systems that
- have libsrp.a installed; the C-Kermit support code, however, may not
- be exported outside the USA or Canada.
- _________________________________________________________________
+ have libsrp.a installed; the C-Kermit support code, however, may not be
+ exported outside the USA or Canada.
- 2.7.4.4. SOCKS
+2.7.4.4. SOCKS
C-Kermit can be built as a SOCKS-aware client on systems that have a
- SOCKS library. See section 8.1.1 of the [414]ckccfg.txt file.
+ SOCKS library. See section 8.1.1 of the [422]ckccfg.txt file.
C-Kermit 7.0 can also be run over SOCKSified Telnet or rlogin clients
with SET NETWORK TYPE COMMAND. Suppose the Telnet program on your
SET PREFIX ALL
PTY (or PIPE) telnet zzz.com
- _________________________________________________________________
- 2.7.4.5. Kerberos
+2.7.4.5. Kerberos
- UNIX C-Kermit can be built with MIT Kerberos IV or V authentication
- and encryption. Instructions are available in a [415]separate
- document. Additional modules are required that can not be exported
- from the USA to any country except Canada, by US law.
+ UNIX C-Kermit can be built with MIT Kerberos IV or V authentication and
+ encryption. Instructions are available in a [423]separate document.
+ Additional modules are required that can not be exported from the USA
+ to any country except Canada, by US law.
If you have Kerberos installed but you don't have a Kerberized version
of C-Kermit, you can use ktelnet as C-Kermit's external communications
SET PREFIX ALL
PTY (or PIPE) ktelnet cia.gov
- _________________________________________________________________
- 2.8. Scripting Local Programs
+2.8. Scripting Local Programs
- If your version of Kermit has PTY support built in, then any
- text-based program can be invoked with SET HOST /PTY or equivalent
- command and controlled using the normal sequence of OUTPUT, INPUT, IF
- SUCCESS commands (this is the same service that is provided by the
- 'expect' program, but controlled by the Kermit script language rather
- than Tcl).
+ If your version of Kermit has PTY support built in, then any text-based
+ program can be invoked with SET HOST /PTY or equivalent command and
+ controlled using the normal sequence of OUTPUT, INPUT, IF SUCCESS
+ commands (this is the same service that is provided by the 'expect'
+ program, but controlled by the Kermit script language rather than Tcl).
When PTY service is not available, then any program that uses standard
input and output can be invoked with SET HOST /PIPE.
Here's an example in which we start an external Kermit program, wait
- for its prompt, give it a VERSION command, and then extract the
- numeric version number from its response:
+ for its prompt, give it a VERSION command, and then extract the numeric
+ version number from its response:
set host /pty kermit -Y
if fail stop 1 {Can't start external command}
even those that do screen formatting (like Emacs or Vi), if you can
figure out the sequence of events. If your Kermit program doesn't have
PTY support, then the commands are restricted to those using standard
- i/o, including certain shells, interactive text-mode "hardcopy"
- editors like ex, and so on.
+ i/o, including certain shells, interactive text-mode "hardcopy" editors
+ like ex, and so on.
If you are using the PTY interface, you should be aware that it runs
the given program or command directly on the pty, without any
- intervening shell to interpret metacharacters, redirectors, etc. If
- you need this sort of thing, include the appropriate shell invocation
- as part of your command; for example:
+ intervening shell to interpret metacharacters, redirectors, etc. If you
+ need this sort of thing, include the appropriate shell invocation as
+ part of your command; for example:
pty echo *
set host /pty ksh -c "for i in *; do echo $i; done"
- The PIPE interface, on the other hand, invokes the shell
- automatically, so:
+ The PIPE interface, on the other hand, invokes the shell automatically,
+ so:
pipe echo *
prints filenames, not "*".
- _________________________________________________________________
- 2.9. X.25 Networking
+2.9. X.25 Networking
- X.25 networking is documented in [416]Using C-Kermit, 2nd Edition.
- When the book was published, X.25 was available only in SunOS,
- Solaris, and Stratus VOS. Unlike TCP/IP, X.25 APIs are not
- standardized; each vendor's X.25 libraries and services (if they have
- them at all) are unique.
+ X.25 networking is documented in [424]Using C-Kermit, 2nd Edition. When
+ the book was published, X.25 was available only in SunOS, Solaris, and
+ Stratus VOS. Unlike TCP/IP, X.25 APIs are not standardized; each
+ vendor's X.25 libraries and services (if they have them at all) are
+ unique.
This section describes new additions.
- _________________________________________________________________
- 2.9.1. IBM AIXLink/X.25 Network Provider Interface for AIX
+2.9.1. IBM AIXLink/X.25 Network Provider Interface for AIX
Support for X.25 was added via IBM's Network Provider Interface (NPI),
AIXLink/X.25 1.1, to the AIX 4.x version of C-Kermit 7.0.
- Unfortunately, AIXLink/X.25 is a rather bare-bones facility, lacking
- in particular any form of PAD support (X.3, X.28, X.29). Thus, the AIX
- version of C-Kermit, when built to include X.25 networking, has
- neither a PAD command, nor a SET PAD command. The same is true for the
+ Unfortunately, AIXLink/X.25 is a rather bare-bones facility, lacking in
+ particular any form of PAD support (X.3, X.28, X.29). Thus, the AIX
+ version of C-Kermit, when built to include X.25 networking, has neither
+ a PAD command, nor a SET PAD command. The same is true for the
underlying AIX system: no PAD support. Thus it is not possible to have
- an interactive shell session over an X.25 connection into an AIX
- system (as far as we know), even from X.25-capable Kermit versions
- (such as Solaris or VOS) that do include PAD support.
+ an interactive shell session over an X.25 connection into an AIX system
+ (as far as we know), even from X.25-capable Kermit versions (such as
+ Solaris or VOS) that do include PAD support.
Thus the X.25 capabilities in AIX C-Kermit are limited to peer-to-peer
connections, e.g. from a C-Kermit client to a C-Kermit server. Unlike
set host xxxxxxx ; Specify the X.25/X.121 address
if fail stop 1 Can't open connection
- And at this point the client can use the full range of client
- commands: SEND, GET, REMOTE xxx, FINISH, BYE.
+ And at this point the client can use the full range of client commands:
+ SEND, GET, REMOTE xxx, FINISH, BYE.
The AIX version also adds two new variables:
The local X.25 address.
\v(x25remote_nua)
- The X.25 address of the host on the other end of the
- connection.
+ The X.25 address of the host on the other end of the connection.
C-Kermit's AIX X.25 client has not been tested against anything other
than a C-Kermit X.25 server on AIX. It is not known if it will
where xxxx can be any even-length string of hexadecimal digits, e.g.
123ABC.
- _________________________________________________________________
- 2.9.2. HP-UX X.25
+2.9.2. HP-UX X.25
- Although C-Kermit presently does not include built-in support for
- HP-UX X.25, it can still be used to make X.25 connections as follows:
- start Kermit and tell it to:
+ Although C-Kermit presently does not include built-in support for HP-UX
+ X.25, it can still be used to make X.25 connections as follows: start
+ Kermit and tell it to:
set prefixing all
set parity space
pty padem address
- This should work in HP-UX 9.00 and later (see [417]Section 2.7). If
- you have an earlier HP-UX version, or the PTY interface doesn't work
- or isn't available, try:
+ This should work in HP-UX 9.00 and later (see [425]Section 2.7). If you
+ have an earlier HP-UX version, or the PTY interface doesn't work or
+ isn't available, try:
set prefixing all
set parity space
Failing that, use Kermit to telnet to localhost and then after logging
back in, start padem as you would normally do to connect over X.25.
- _________________________________________________________________
- 2.10. Additional Serial Port Controls
+2.10. Additional Serial Port Controls
C-Kermit 7.0 adds the following commands for greater control over
serial ports. These commands are available only in C-Kermit versions
given, the device is reopened if it is still available. When it
has been automatically closed in this manner, SHOW
COMMUNICATIONS puts "(closed)" after its name, and in UNIX, the
- lockfile disappears -- both from SHOW COMM and from the
- lockfile directory itself. Synonym: SET CLOSE-ON-DISCONNECT.
+ lockfile disappears -- both from SHOW COMM and from the lockfile
+ directory itself. Synonym: SET CLOSE-ON-DISCONNECT.
SET EXIT ON-DISCONNECT { ON, OFF }
Like DISCONNECT, but makes the program exit if a connection
drops.
- Note that SET CLOSE-ON-DISCONNECT and SET EXIT ON-DISCONNECT apply
- only to connections that drop; they do not apply to connections that
- can't be made in the first place. For example, they have no effect
- when a SET LINE, SET HOST, TELNET, or DIAL command fails.
+ Note that SET CLOSE-ON-DISCONNECT and SET EXIT ON-DISCONNECT apply only
+ to connections that drop; they do not apply to connections that can't
+ be made in the first place. For example, they have no effect when a SET
+ LINE, SET HOST, TELNET, or DIAL command fails.
HANGUP
If [CLOSE-ON-]DISCONNECT is ON, and the HANGUP command is given
but will slow down serial transmission by approximately 10
percent. Historically, 2 stop bits were used with Teletypes (at
110 bps or below) for print-head recovery time. There is
- presently no method for choosing any number of stop bits
- besides 1 and 2.
+ presently no method for choosing any number of stop bits besides
+ 1 and 2.
SET SERIAL [ dps ]
dps stands for Data-bits, Parity, Stop-bits. This is the
notation familiar to many people for serial port configuration:
7E1, 8N1, 7O2, etc. The data bits number also becomes the
- TERMINAL BYTESIZE setting. The second character is E for Even,
- O for Odd, M for Mark, S for Space, or N for None. The list of
+ TERMINAL BYTESIZE setting. The second character is E for Even, O
+ for Odd, M for Mark, S for Space, or N for None. The list of
available options depends on the capabilities of the specific
platform. If dps is omitted, 8N1 is used. Type "set serial ?"
for a list of available choices. Examples:
TERM BYTE 8.
SET SERIAL
- Same as SET PARITY NONE and SET STOP-BITS 1, SET TERM
- BYTE 8.
+ Same as SET PARITY NONE and SET STOP-BITS 1, SET TERM BYTE
+ 8.
Notes:
explicit SET STOP-BITS or SET SERIAL command.
The \v(serial) variable shows the SET SERIAL setting (8N1, 7E1, etc).
- _________________________________________________________________
- 2.11. Getting Access to the Dialout Device
+2.11. Getting Access to the Dialout Device
This section is for UNIX only; note the special words about QNX at
- the end. Also see [418]Section 2.0 for SET LINE switches,
+ the end. Also see [426]Section 2.0 for SET LINE switches,
particularly the /SHARE switch for VMS only.
C-Kermit does its best to obey the UUCP lockfile conventions of each
- platform (machine, operating system, OS version) where it runs, if
- that platform uses UUCP.
+ platform (machine, operating system, OS version) where it runs, if that
+ platform uses UUCP.
- But simply obeying the conventions is often not good enough, due to
- the increasing likelihood that a particular serial device might have
- more than one name (e.g. /dev/tty00 and /dev/term/00 are the same
- device in Unixware 7; /dev/cua and /dev/cufa are the same device in
- NeXTSTEP), plus the increasingly widespread use of symlinks for device
- names, such as /dev/modem.
+ But simply obeying the conventions is often not good enough, due to the
+ increasing likelihood that a particular serial device might have more
+ than one name (e.g. /dev/tty00 and /dev/term/00 are the same device in
+ Unixware 7; /dev/cua and /dev/cufa are the same device in NeXTSTEP),
+ plus the increasingly widespread use of symlinks for device names, such
+ as /dev/modem.
C-Kermit 7.0 goes to greater lengths than previous versions to
successfully interlock with other communications program (and other
* The use, wherever possible, of lockfile names based on
inode/major/minor device number rather than device name.
- See the [419]ckuins.txt and [420]ckubwr.txt files for details.
+ See the [427]ckuins.txt and [428]ckubwr.txt files for details.
QNX is almost unique among UNIX varieties in having no UUCP programs
nor UUCP-oriented dialout-device locking conventions. QNX does,
however, allow a program to get the device open count. This can not be
a reliable form of locking unless all applications do it (and they
- don't), so by default, Kermit uses this information only for printing
- a warning message such as:
+ don't), so by default, Kermit uses this information only for printing a
+ warning message such as:
C-Kermit>set line /dev/ser1
WARNING - "/dev/ser1" looks busy...
process has it open. SHOW COMM (in QNX only) displays the setting, and
if you have a port open, it also shows the current open count (with
C-Kermit's own access always counting as 1).
- _________________________________________________________________
- 2.12. The Connection Log
+2.12. The Connection Log
C-Kermit 7.0 adds the ability to log connections, so you can see where
you've been and have a record of calls you've made. A connection is
for appending; i.e. new records are written to the end. If NEW
is specified, a new file is created; if a file of the same name
already existed, it is overwritten. If the filename is omitted,
- CX.LOG in your home (login) directory is used (note:
- uppercase). To accept all defaults, just use "log connections"
- (or "l c" for short). Synonym: LOG CONNECTIONS.
+ CX.LOG in your home (login) directory is used (note: uppercase).
+ To accept all defaults, just use "log connections" (or "l c" for
+ short). Synonym: LOG CONNECTIONS.
CLOSE CX-LOG
This closes the connection log if it was open. (Note, the CLOSE
elapsed time (since you opened it). Synonym: SHOW CONNECTION.
\v(cx_time)
- This variable shows the elapsed time of your current
- connection, or if there is no current connection, of your most
- recent connection, of if there have been no connections, 0.
+ This variable shows the elapsed time of your current connection,
+ or if there is no current connection, of your most recent
+ connection, of if there have been no connections, 0.
The connection contains one line per connection, of the form:
where the timestamp (in columns 1-18) shows when the connection was
made; username is the login identity of the person who made the
- connection; pid is Kermit's process ID when it made the connection.
- The p's are parameters that depend on the type of connection, and the
- v's are their values:
+ connection; pid is Kermit's process ID when it made the connection. The
+ p's are parameters that depend on the type of connection, and the v's
+ are their values:
T = Connection Type (TCP, SERIAL, DIAL, DECNET, etc).
H = The name of the Host from which the connection was made.
log connections
to your C-Kermit customization file. Note, however, that if you make a
- lot of connections, your CX.LOG will grow and grow. You can handle
- this by adding a "logrotate" procedure like the following to your
+ lot of connections, your CX.LOG will grow and grow. You can handle this
+ by adding a "logrotate" procedure like the following to your
customization file, before the "log connections" command:
define LOGROTATE { ; Define LOGROTATE macro
On multiuser systems, it is possible to keep a single, shared,
system-wide connection log, but this is not recommended since (a) it
- requires you keep a publicly write-accessible logfile (a glaring
- target for mischief), and (b) it would require each user to log to
- that file and not disable logging. A better method for logging
- connections, in UNIX at least, is syslogging (see [421]ckuins.txt
- Section 15 and [422]Section 4.2 of the [423]IKSD Administration Guide
- for details).
- _________________________________________________________________
+ requires you keep a publicly write-accessible logfile (a glaring target
+ for mischief), and (b) it would require each user to log to that file
+ and not disable logging. A better method for logging connections, in
+ UNIX at least, is syslogging (see [429]ckuins.txt Section 15 and
+ [430]Section 4.2 of the [431]IKSD Administration Guide for details).
- 2.13. Automatic Connection-Specific Flow Control Selection
+2.13. Automatic Connection-Specific Flow Control Selection
- Beginning in C-Kermit 7.0, the appropriate flow-control method for
- each connection type is kept in a table, for example:
+ Beginning in C-Kermit 7.0, the appropriate flow-control method for each
+ connection type is kept in a table, for example:
Remote: NONE
Modem: RTS/CTS
Direct-Serial: NONE
TCPIP: NONE
- The size of the table and values for each connection type can vary
- from platform to platform. Type "set flow ?" for a list of available
+ The size of the table and values for each connection type can vary from
+ platform to platform. Type "set flow ?" for a list of available
flow-control types.
The table is used to automatically select the appropriate kind of flow
- control whenever you make a connection. You can display the table
- with:
+ control whenever you make a connection. You can display the table with:
SHOW FLOW-CONTROL
NONE or XON/XOFF. This is because C-Kermit is not allowed to
find out what type of connection the incoming user has (*). No
kind of flow control will work on every kind of connection,
- including (unexpectedly) KEEP, which we would have liked to
- use, but not turning off flow control at the remote end during
- file transfer on TCP/IP connections is fatal to the transfer
- (except in VMS and HP-UX, where it must be set to Xon/Xoff!)
- Therefore if you are dialing in to a serial port on a server
- (UNIX or VMS) where C-Kermit is running, you will need to tell
- C-Kermit to "set flow keep" before transferring files (assuming
- the modem and port are configured correctly by the system
- administrator; otherwise you'll need to give a specific kind of
- flow control, e.g. "set flow xon/xoff"), so in this case
- C-Kermit will not disable flow control, as it must do when you
- are coming via Telnet (directly or through a terminal server,
- except on VMS and HP-UX).
+ including (unexpectedly) KEEP, which we would have liked to use,
+ but not turning off flow control at the remote end during file
+ transfer on TCP/IP connections is fatal to the transfer (except
+ in VMS and HP-UX, where it must be set to Xon/Xoff!) Therefore
+ if you are dialing in to a serial port on a server (UNIX or VMS)
+ where C-Kermit is running, you will need to tell C-Kermit to
+ "set flow keep" before transferring files (assuming the modem
+ and port are configured correctly by the system administrator;
+ otherwise you'll need to give a specific kind of flow control,
+ e.g. "set flow xon/xoff"), so in this case C-Kermit will not
+ disable flow control, as it must do when you are coming via
+ Telnet (directly or through a terminal server, except on VMS and
+ HP-UX).
Modem:
This applies when you dial out with a modem. In this case, the
SET FLOW XON/XOFF
- Thus, whenever you make a connection with SET PORT, SET LINE, DIAL,
- SET HOST, TELNET, RLOGIN, etc, an appropriate form of flow control is
- selected automatically. You can override the automatic selection with
- a subsequent SET FLOW command, such as SET FLOW NONE (no switch
+ Thus, whenever you make a connection with SET PORT, SET LINE, DIAL, SET
+ HOST, TELNET, RLOGIN, etc, an appropriate form of flow control is
+ selected automatically. You can override the automatic selection with a
+ subsequent SET FLOW command, such as SET FLOW NONE (no switch
included).
- The flow control is changed automatically too when you give a SET
- MODEM TYPE command. For example, suppose your operating system (say
- Linux) supports hardware flow control (RTS/CTS). Now suppose you give
- the following commands:
+ The flow control is changed automatically too when you give a SET MODEM
+ TYPE command. For example, suppose your operating system (say Linux)
+ supports hardware flow control (RTS/CTS). Now suppose you give the
+ following commands:
set line /dev/ttyS2 ; Automatically sets flow to NONE
set modem type usr ; Automatically sets flow to RTS/CTS
SET LINE TTA0:
SET FLOW KEEP
- _________________________________________________________________
- 2.14. Trapping Connection Establishment and Loss
+2.14. Trapping Connection Establishment and Loss
If you define a macro called ON_OPEN, it is executed any time that a
SET LINE, SET PORT, SET HOST, TELNET, RLOGIN or similar command
If you define a macro called ON_CLOSE, it will be executed any time
that a SET LINE, SET PORT, SET HOST, TELNET, RLOGIN or any other kind
- of connection that C-Kermit has made is closed, either by the remote
- or by a local CLOSE, HANGUP, or EXIT command or other local action,
- such as when a new connection is opened before an old one was
- explicitly closed.
+ of connection that C-Kermit has made is closed, either by the remote or
+ by a local CLOSE, HANGUP, or EXIT command or other local action, such
+ as when a new connection is opened before an old one was explicitly
+ closed.
As soon as C-Kermit notices the connection has been closed, the
ON_CLOSE macro is invoked at (a) the top of the command parsing loop,
read \%p ; Get port number
if fail stop 1 Tunnel failure: \%1
close read
- if fail stop 1 Tunnel failure: \%1 ; See [424]Section 4.2.8.1
+ if fail stop 1 Tunnel failure: \%1 ; See [432]Section 4.2.8.1
assign on_close { ; Set up close handler
echo Closing tunnel: \m(tunnelhost)
!tunnel stop \m(tunnelhost)
In this case, when the connection stops, we also need to shut down the
tunnel, even if it is at a later time after TUNNEL has finished
executing. This way we can escape back, reconnect, transfer files, and
- so on until the connection is broken by logging out from the remote,
- or by explicitly closing it, or by EXITing from C-Kermit, at which
- time the tunnel is shut down.
+ so on until the connection is broken by logging out from the remote, or
+ by explicitly closing it, or by EXITing from C-Kermit, at which time
+ the tunnel is shut down.
When the connection is closed, no matter how, the ON_CLOSE macro
executes and then undefines (destroys) itself, since we don't want to
1 - Closed by C-Kermit command.
0 - All others (normally closed by remote).
- which may be used for any purpose; for example, to add a comment to
- the connection log:
+ which may be used for any purpose; for example, to add a comment to the
+ connection log:
def on_close {
local \%m
}
if def \%m writeln cx {# \%m}
}
- _________________________________________________________________
- 2.15. Contacting Web Servers with the HTTP Command
+2.15. Contacting Web Servers with the HTTP Command
C-Kermit 7.0 (at this writing, the UNIX version only) supports direct
- contact and interaction with Web servers via HTTP 1.0 protocol. To
- make a connection, use Kermit's normal method for making a TCP/IP
+ contact and interaction with Web servers via HTTP 1.0 protocol. To make
+ a connection, use Kermit's normal method for making a TCP/IP
connection, but specify the HTTP port:
SET HOST host http [ switches ]
Make an secure private connection with SSL (only if SSL support
is included in your version of Kermit). In this case the port
name might need to be https rather than http, e.g. "set host
- secureserver.xyxcorp.com https /ssl".
+ secureserver.xyzcorp.com https /ssl".
/TLS
Make an secure private connection with TLS (only if TLS support
HTTP GET kermit/index.html
At this point the connection is closed, since that's how HTTP 1.0
- works. If you want to perform additional operations, you must
- establish a new connection with another SET HOST command.
+ works. If you want to perform additional operations, you must establish
+ a new connection with another SET HOST command.
The HTTP command acts as a client to the Web server, except instead of
displaying the results like a Web browser would, it stores them. Any
/HEADER:{{tag:value}{tag:value}...}
- For a listing of valid tag value and value formats see [425]RFC
+ For a listing of valid tag value and value formats see [433]RFC
1945: Hypertext Transfer Protocol -- HTTP/1.0. A maximum of
eight headers may be specified.
/ARRAY:arrayname
Tells Kermit to store the response headers in the given array,
- one line per element. The array need not be declared in
- advance. Example:
+ one line per element. The array need not be declared in advance.
+ Example:
C-Kermit? http /array:c get kermit/index.html
C-Kermit? show array c
As you can see, the header lines are like MIME e-mail header lines:
identifier, colon, value. The /ARRAY switch is the only method
- available to a script to process the server responses for a POST or
- PUT command.
+ available to a script to process the server responses for a POST or PUT
+ command.
The HTTP commands are:
HTTP [ switches ] GET remote-filename [ local-filename ]
- Retrieves the named file. If a local-filename is given, the
- file is stored locally under that name; otherwise it is stored
- with its own name.
+ Retrieves the named file. If a local-filename is given, the file
+ is stored locally under that name; otherwise it is stored with
+ its own name.
HTTP [ switches ] HEAD remote-filename local-filename
Like GET except without actually getting the file; instead it
the /ARRAY: switch description.
HTTP [ switches ] INDEX remote-directory [ local-filename ]
- Retrieves the file listing for the given server directory.
- NOTE: This command is not supported by most Web servers.
+ Retrieves the file listing for the given server directory. NOTE:
+ This command is not supported by most Web servers.
HTTP [ switches ] POST [ /MIME-TYPE:type ] local-file remote-file
- Used to send a response as if it were sent from a form. The
- data to be posted must be read from a file.
+ Used to send a response as if it were sent from a form. The data
+ to be posted must be read from a file.
HTTP [ switches ] PUT [ /MIME-TYPE:type ] local-file remote-file
Uploads a local file to a server file.
HTTP [ switches ] DELETE remote-filename
Instructs the server to delete the specified filename.
- _________________________________________________________________
- 3. TERMINAL CONNECTION
+3. TERMINAL CONNECTION
- 3.1. CONNECT Command Switches
+3.1. CONNECT Command Switches
- The following switches (see [426]Section 1.5) were added to the
- CONNECT command in 7.0:
+ The following switches (see [434]Section 1.5) were added to the CONNECT
+ command in 7.0:
/QUIETLY
Don't print the "Connecting to..." or "Back at..." messages. CQ
is an invisible command synonym for CONNECT /QUIETLY.
/TRIGGER:string
- Specify a trigger or triggers ([427]Section 3.2) effective for
+ Specify a trigger or triggers ([435]Section 3.2) effective for
this CONNECT command only, temporarily overriding any current
- SET TERMINAL TRIGGER values ([428]Section 3.2).
+ SET TERMINAL TRIGGER values ([436]Section 3.2).
Note: Other switches might also be available; type "connect ?" for a
list, "help connect" for a description of each.
- _________________________________________________________________
- 3.2. Triggers
+3.2. Triggers
Triggers were added for UNIX, VMS, AOS/VS, and K95 in C-Kermit 7.0.
; My modem always makes this noise when the connection is lost:
set terminal trigger |||ppp\{\{\{\{UUUUUUU
- If you want Kermit to look for more than one string simultaneously,
- use the following syntax:
+ If you want Kermit to look for more than one string simultaneously, use
+ the following syntax:
set terminal trigger {{string1}{string2}...{stringn}}
- In this case, C-Kermit will return to command mode automatically if
- any of the given strings is encountered. Up to 8 strings may be
- specified.
+ In this case, C-Kermit will return to command mode automatically if any
+ of the given strings is encountered. Up to 8 strings may be specified.
If the most recent return to command mode was caused by a trigger, the
new variable, \v(trigger), shows the trigger value; otherwise
The SHOW TRIGGER command displays the SET TERMINAL TRIGGER values as
well as the \v(trigger) value.
- _________________________________________________________________
- 3.3. Transparent Printing
+3.3. Transparent Printing
As noted in the manual, C-Kermit's CONNECT command on UNIX is not a
terminal emulator, but rather a "semitransparent pipe" between the
terminal or emulator you are using to access C-Kermit, and the remote
- host to which C-Kermit is connected. The "semitransparent" qualifier
- is because of character-set translation as well as several actions
- taken by the emulator in response to the characters or strings that
- pass through it, such as APCs, Kermit packets (autodownload),
- triggers, etc.
+ host to which C-Kermit is connected. The "semitransparent" qualifier is
+ because of character-set translation as well as several actions taken
+ by the emulator in response to the characters or strings that pass
+ through it, such as APCs, Kermit packets (autodownload), triggers, etc.
The UNIX version of C-Kermit 7.0 adds another such action: Transparent
printing, also called Controller printing (as distinct from Autoprint
subsequent arriving characters -- including NUL, control characters,
and escape sequences -- are sent to the SET PRINTER device instead of
to your screen until the printer-off sequence is received, or you
- escape back, whichever happens first. These bytes are not translated
- or modified or filtered in any way by Kermit (except for possibly
+ escape back, whichever happens first. These bytes are not translated or
+ modified or filtered in any way by Kermit (except for possibly
stripping of the 8th bit, as noted below), but if filtering or
translation is desired, this can be accomplished by your SET PRINTER
selection (e.g. by choosing a pipeline of filters).
By default, your SET PRINTER device is your default UNIX printer, but
it can also be a file, a command, or the null device (which causes all
- printer material to be discarded). See [429]Using C-Kermit, 2nd Ed.,
+ printer material to be discarded). See [437]Using C-Kermit, 2nd Ed.,
p.41 for details.
Transparent printing is controlled by the command:
your actual terminal or emulator, along with the data they
enclose. OFF is the default, for compatibility with earlier
C-Kermit releases. As noted in the manual, when the current SET
- PRINTER device is a file, transparent-print material is
- appended to it; the file is not overwritten.
+ PRINTER device is a file, transparent-print material is appended
+ to it; the file is not overwritten.
SET TERMINAL BYTESIZE { 7, 8 }
SET PARITY { EVEN, ODD, MARK, SPACE, NONE }
<ESC>[5i
Printer On. Send all subsequent incoming bytes to the printer
- without any kind of filtering, translation, or alteration.
- Note: <ESC> stands for ASCII character number 27 (decimal),
- Escape.
+ without any kind of filtering, translation, or alteration. Note:
+ <ESC> stands for ASCII character number 27 (decimal), Escape.
<ESC>[4i
Printer Off. Resume displaying incoming bytes on the screen.
- These are the same sequences used by DEC VT100 and higher terminals
- and other ANSI X3.64 and ISO 6429 compatible terminals. There is no
+ These are the same sequences used by DEC VT100 and higher terminals and
+ other ANSI X3.64 and ISO 6429 compatible terminals. There is no
provision for selecting other printer-control sequences.
Restrictions:
8-bit CSI C1 control is not recognized.
3. Autoprint is not supported, since this requires a full-fledged
terminal emulator with direct access to the screen.
- 4. The start-print and stop-print sequences pass through to the
- screen (there is no way to avoid this without causing unacceptable
- delays or deadlocks in CONNECT mode). Thus if your terminal or
- emulator also supports transparent printing via these same
- sequences, an empty file will be sent to its printer. Normally
- this has no effect.
+ 4. The start-print and stop-print sequences pass through to the screen
+ (there is no way to avoid this without causing unacceptable delays
+ or deadlocks in CONNECT mode). Thus if your terminal or emulator
+ also supports transparent printing via these same sequences, an
+ empty file will be sent to its printer. Normally this has no
+ effect.
- Point (4) is similar to the situation with autodownload and APC --
- when you have several Kermit clients in a chain, you should take care
- that these features are enabled in only one of them.
+ Point (4) is similar to the situation with autodownload and APC -- when
+ you have several Kermit clients in a chain, you should take care that
+ these features are enabled in only one of them.
Example 1:
set printer {| grep -v ^Received | lpr} ; Filter out some lines
Then use "pcprint" or "vtprint" commands on the host to initiate
- transparent print operations. See [430]Using C-Kermit, 2nd Ed., p.406
+ transparent print operations. See [438]Using C-Kermit, 2nd Ed., p.406
for details.
Here is a sample "pcprint" shell script for UNIX:
echo -n '<FF><ESC>[4i'
# (end)
- (Replace "<ESC>" by the actual ASCII Escape character and "<FF>" by
- the ASCII Formfeed character).
+ (Replace "<ESC>" by the actual ASCII Escape character and "<FF>" by the
+ ASCII Formfeed character).
If you always want transparent printing enabled, put "set term print
- on" in your C-Kermit customization file (~/.mykermrc in UNIX). The
- "set term bytesize" selection, however, is a property of each separate
+ on" in your C-Kermit customization file (~/.mykermrc in UNIX). The "set
+ term bytesize" selection, however, is a property of each separate
connection.
- _________________________________________________________________
- 3.4. Binary and Text Session Logs
+3.4. Binary and Text Session Logs
- C-Kermit 7.0 corrects an oversight in earlier releases, in which
- binary session logs (SET SESSION-LOG BINARY) translated character sets
- and performed various formatting transformations (e.g. "newline mode")
+ C-Kermit 7.0 corrects an oversight in earlier releases, in which binary
+ session logs (SET SESSION-LOG BINARY) translated character sets and
+ performed various formatting transformations (e.g. "newline mode")
before writing characters to the session log. In C-Kermit 7.0,
binary-mode session logging writes characters as they come in, before
anything (other that parity-bit stripping) is done to them. Text-mode
session logging records the characters after processing.
- _________________________________________________________________
- 4. FILE TRANSFER
+4. FILE TRANSFER
Every file is transferred either in text mode (which implies
record-format and character-set translation) or binary mode (in which
each byte is sent literally without any kind of conversion). The mode
in which a file is transferred is controlled by (a) the default mode,
- in the absence of any other indications; (b) the SET FILE TYPE
- command; (c) various automatic mechanisms based on client/server
- negotiations, directory information or filename patterns, etc.
+ in the absence of any other indications; (b) the SET FILE TYPE command;
+ (c) various automatic mechanisms based on client/server negotiations,
+ directory information or filename patterns, etc.
The default FILE TYPE was changed from TEXT to BINARY in C-Kermit 7.0
because:
the automatic mechanisms are affected.
* All file transfers on the Web are done in binary mode, so people
are accustomed to it and expect it.
- _________________________________________________________________
- 4.0. BUG FIXES, MINOR CHANGES, AND CLARIFICATIONS
+4.0. BUG FIXES, MINOR CHANGES, AND CLARIFICATIONS
- 4.0.0. Filenames with Spaces
+4.0.0. Filenames with Spaces
Filenames that contain spaces are a major nuisance to a program like
Kermit, whose command language is line- and word-oriented, in which
- words are separated by spaces and a filename is assumed to be a
- "word". In general (unless noted otherwise in the description of a
- particular command), there is only one way to refer to such files in
- Kermit commands, and that is to enclose the name in braces:
+ words are separated by spaces and a filename is assumed to be a "word".
+ In general (unless noted otherwise in the description of a particular
+ command), there is only one way to refer to such files in Kermit
+ commands, and that is to enclose the name in braces:
send {this file}
Tells Kermit to send the file whose name is "this file" (two words, no
- quotes). Of course, various circumlocutions are also possible, such
- as:
+ quotes). Of course, various circumlocutions are also possible, such as:
define \%a this file
send \%a
sends all files whose name contains a space.
- All things considered, it is best to avoid spaces in file and
- directory names if you can. Also see [431]Section 5.4 on this topic.
- _________________________________________________________________
+ All things considered, it is best to avoid spaces in file and directory
+ names if you can. Also see [439]Section 5.4 on this topic.
- 4.0.1. Packet out of Window
+4.0.1. Packet out of Window
C-Kermit 6.0 could send packets "out of window" if the window size was
greater than 1 and ACKs had arrived out of order. Fixed in 6.1.
- _________________________________________________________________
- 4.0.2. MOVE after ADD SEND-LIST
+4.0.2. MOVE after ADD SEND-LIST
ADD SEND-LIST followed by MOVE did not delete original files; fixed in
6.1. Carrier loss was not detected during transfer; in 7.0 C-Kermit
checks for this (but results can not be guaranteed). In any case, the
protocol will eventually time out if the connection is lost.
- _________________________________________________________________
- 4.0.3. GET and RECEIVE As-Names
+4.0.3. GET and RECEIVE As-Names
In 5A(190) through 6.0.192, the GET and RECEIVE as-name did not
properly override the RECEIVE PATHNAMES setting. In 7.0 it does.
- _________________________________________________________________
- 4.0.4. New Brief Statistics Listing
+4.0.4. New Brief Statistics Listing
Version 7.0 adds a /BRIEF switch to the STATISTICS command, to display
- a short file-transfer statistics report. /BRIEF is now the default.
- Use /VERBOSE to see the full display, which is about 25 lines long.
- _________________________________________________________________
+ a short file-transfer statistics report. /BRIEF is now the default. Use
+ /VERBOSE to see the full display, which is about 25 lines long.
- 4.0.5. Improved FAST Command
+4.0.5. Improved FAST Command
The preinstalled definition of the FAST macro did not take enough
factors into account. Now it sets packet lengths and window sizes
appropriate to the configuration. Furthermore, in IRIX only, it might
restrict the SEND packet length to 4000, to work around a bug in the
- IRIX Telnet server, depending on the IRIX version (see
- [432]ckubwr.txt, IRIX section). To see the built-in definition of the
- FAST macro, type "show macro fast". To change it, simply define it to
- be whatever you want -- it's just a macro, like any other.
- _________________________________________________________________
-
- 4.0.6. The SET SEND BACKUP Command
-
- Version 7.0 adds SET SEND BACKUP { ON, OFF }. This tells whether
- backup files should be sent. Backup files are the ones created by
- Kermit (and EMACS, and possibly other applications) to preserve old
- copies of files when creating new ones with the same name. Kermit does
- this when receiving a file and its FILE COLLISION setting is BACKUP
- (or RENAME, in which case it the new file gets the backup name). On
- most platforms, the backup name is formed by adding:
+ IRIX Telnet server, depending on the IRIX version (see [440]ckubwr.txt,
+ IRIX section). To see the built-in definition of the FAST macro, type
+ "show macro fast". To change it, simply define it to be whatever you
+ want -- it's just a macro, like any other.
+
+4.0.6. The SET SEND BACKUP Command
+
+ Version 7.0 adds SET SEND BACKUP { ON, OFF }. This tells whether backup
+ files should be sent. Backup files are the ones created by Kermit (and
+ EMACS, and possibly other applications) to preserve old copies of files
+ when creating new ones with the same name. Kermit does this when
+ receiving a file and its FILE COLLISION setting is BACKUP (or RENAME,
+ in which case it the new file gets the backup name). On most platforms,
+ the backup name is formed by adding:
.~n~
Also see PURGE, SET FILE COLLISION, SEND /NOBACKUP, DIRECTORY
/[NO]BACKUP.
- _________________________________________________________________
- 4.0.7. The SET { SEND, RECEIVE } VERSION-NUMBERS Command
+4.0.7. The SET { SEND, RECEIVE } VERSION-NUMBERS Command
VMS Only. Normally when sending files, VMS C-Kermit strips the version
number. For example, if the file is FOO.BAR;34, the name is sent as
FOO.BAR (without the ";34"). If you want to keep version numbers on
- when sending files, use SET SEND VERSION-NUMBERS ON. The effect
- depends on the receiver.
+ when sending files, use SET SEND VERSION-NUMBERS ON. The effect depends
+ on the receiver.
Normally when receiving files, and an incoming filename includes a
VMS-style version number (such as FOO.BAR;34) VMS C-Kermit strips it
before trying to create the new file; this way the new file receives
- the next highest version number in the customary manner for VMS. If
- you want version numbers on incoming filenames to be used in creating
- the new files, use SET RECEIVE VERSION-NUMBERS ON.
+ the next highest version number in the customary manner for VMS. If you
+ want version numbers on incoming filenames to be used in creating the
+ new files, use SET RECEIVE VERSION-NUMBERS ON.
Normally these commands would be effective only when VMS C-Kermit is
exchanging files with a non-VMS Kermit program, since VMS-to-VMS
set send version-numbers on
send *.*;*
- The resulting Unix files will have VMS-style version numbers as part
- of their name, for example "foo.bar;1", "foo.bar;2", etc.
+ The resulting Unix files will have VMS-style version numbers as part of
+ their name, for example "foo.bar;1", "foo.bar;2", etc.
Now suppose you want to send these files from Unix to another VMS
system and preserve the version numbers. Again we have a Unix C-Kermit
set receive version-numbers on
get *
- _________________________________________________________________
- 4.0.8. The SET { SEND, RECEIVE } { MOVE-TO, RENAME-TO } Commands
+4.0.8. The SET { SEND, RECEIVE } { MOVE-TO, RENAME-TO } Commands
These commands are persistent global versions of the /MOVE-TO: and
/RENAME-TO: switches of the SEND, GET, and RECEIVE commands. They
successfully, so that (for example) an independent, concurrent process
can notice when new files appear and process them immediately without
having to guess whether they are complete.
- _________________________________________________________________
- 4.0.9. SET FILE INCOMPLETE AUTO
+4.0.9. SET FILE INCOMPLETE AUTO
SET FILE INCOMPLETE { KEEP, DISCARD }, which tells whether to keep or
discard incompletely received files, has a new option, AUTO, which is
in binary mode, otherwise DISCARD it. This reduces the chances that a
subsequent recovery operation (RESEND, REGET, etc) could produce a
corrupt file, since recovery works only for binary-mode transfers.
- _________________________________________________________________
- 4.1. FILE-TRANSFER FILENAME TEMPLATES
+4.1. FILE-TRANSFER FILENAME TEMPLATES
File-transfer filename templates allow files to be renamed
automatically by the file sender, the receiver, or both, during
transfer of groups of files.
- 4.1.1. Templates in the As-Name
+4.1.1. Templates in the As-Name
Prior to C-Kermit 6.1 and Kermit 95 1.1.12 the only options that could
be used to affect the names of files being transferred were SET
specify as-names in SEND, RECEIVE, and related commands even for file
groups. This is accomplished by using replacement variables in the
as-name, along with optional material such character-string functions
- and/or constant strings. An as-name containing replacement variables
- is called a filename template.
+ and/or constant strings. An as-name containing replacement variables is
+ called a filename template.
The key to filename templates is the new variable:
send *.txt \freplace(\v(filename),.,_).new
- which replaces all periods in the original filename by underscores,
- and then appends ".new" to the result. So, for example, oofa.txt would
- be sent as oofa_txt.new.
+ which replaces all periods in the original filename by underscores, and
+ then appends ".new" to the result. So, for example, oofa.txt would be
+ sent as oofa_txt.new.
Another new variable that is useful in this regard is \v(filenumber),
which is the ordinal number of the current file in the file group, so
send *.txt \%a
is accepted, but all files are sent with the same name (the value of
- \%a, if it has one and it is constant). If the variable has no value
- at all, the files are sent under their own names.
+ \%a, if it has one and it is constant). If the variable has no value at
+ all, the files are sent under their own names.
Of course, the value of \%a in the previous example need not be
constant:
send *.txt \%a
The RECEIVE command, when given without an as-name, behaves as always,
- storing all incoming files under the names they arrive with, subject
- to SET FILE NAME and SET RECEIVE PATHNAMES modifications ([433]Section
+ storing all incoming files under the names they arrive with, subject to
+ SET FILE NAME and SET RECEIVE PATHNAMES modifications ([441]Section
4.10).
- However, when an as-name is given in the RECEIVE command, it is
- applied to all incoming files rather than to just the first. If it
- does not contain replacement variables, then the current FILE
- COLLISION setting governs the result. For example:
+ However, when an as-name is given in the RECEIVE command, it is applied
+ to all incoming files rather than to just the first. If it does not
+ contain replacement variables, then the current FILE COLLISION setting
+ governs the result. For example:
receive foo
with the default FILE COLLISION setting of BACKUP. If it does contain
replacement variables, of course they are used.
- When receiving files, the \v(filename) variable refers to the name
- that was received in the incoming file-header packet, BEFORE any
- processing by SET FILE NAMES or SET RECEIVE PATHNAMES. Since the
- filenames in file-header packets are usually in uppercase, you would
- need to convert them explicitly if you want them in lowercase, e.g.:
+ When receiving files, the \v(filename) variable refers to the name that
+ was received in the incoming file-header packet, BEFORE any processing
+ by SET FILE NAMES or SET RECEIVE PATHNAMES. Since the filenames in
+ file-header packets are usually in uppercase, you would need to convert
+ them explicitly if you want them in lowercase, e.g.:
receive \flower(\v(filename)).new
- _________________________________________________________________
- 4.1.2. Templates on the Command Line
+4.1.2. Templates on the Command Line
On the command-line, use templates as shown above as the -a option
argument, bearing in mind the propensity of UNIX and perhaps other
kermit -s oofa.txt -a \fliteral(c:\tmp\oofa.txt) ; Kermit only
kermit -s oofa.txt -a \\fliteral(c:\\tmp\\oofa.txt) ; Shell and Kermit
- _________________________________________________________________
- 4.1.3. Post-Transfer Renaming
+4.1.3. Post-Transfer Renaming
Filename templates are now also useful in SET { SEND, RECEIVE }
- RENAME-TO and in the /RENAME-TO: switch, that can be given to the
- SEND, GET, or RECEIVE commands; this is similar to an as-name, but is
+ RENAME-TO and in the /RENAME-TO: switch, that can be given to the SEND,
+ GET, or RECEIVE commands; this is similar to an as-name, but is
effective on a per-file basis if and only if the file was transferred
successfully.
file has been completely and successfully transferred before it starts
to process it. This can be accomplished easily using C-Kermit's SET {
SEND, RECEIVE } { MOVE-TO, RENAME-TO } command or /MOVE-TO: or
- /RENAME-TO: switches, described in [434]Sections 4.7.1 through
- [435]4.7.3.
+ /RENAME-TO: switches, described in [442]Sections 4.7.1 through
+ [443]4.7.3.
Here's an example for the client side, in which files to be sent are
placed in a certain directory (/usr/olga/tosend in this example) by
another process when they are ready to go. This might be in a hospital
- or big doctor's office, where medical insurance claims are entered at
- a number of workstations, and then deposited in the "tosend"
- directory, from which they are sent to a claims clearinghouse. We
- assume the connection is already made and a Kermit server is on the
- other end.
+ or big doctor's office, where medical insurance claims are entered at a
+ number of workstations, and then deposited in the "tosend" directory,
+ from which they are sent to a claims clearinghouse. We assume the
+ connection is already made and a Kermit server is on the other end.
local srcdir findir ; Declare local (automatic) variables
assign srcdir /usr/olga/tosend ; Local source directory (files to send)
example:
SET RECEIVE RENAME-TO \v(filename)_\v(ndate)_\v(ntime)_\v(userid)_\v(pid)
- _________________________________________________________________
- 4.2. FILE-TRANSFER PIPES AND FILTERS
+4.2. FILE-TRANSFER PIPES AND FILTERS
- 4.2.1. INTRODUCTION
+4.2.1. INTRODUCTION
Beginning in C-Kermit 6.1 and Kermit 95 1.1.12, it is possible to send
from a command, or "pipe", as well as from a file, and to receive to a
pipe or command. In a typical example, we might want to transfer an
entire directory tree from one UNIX system to another (but without
- using the methods described in [436]Sections 4.3 , [437]4.10,
- [438]4.11, and [439]4.15). We could do this in multiple steps as
+ using the methods described in [444]Sections 4.3 , [445]4.10,
+ [446]4.11, and [447]4.15). We could do this in multiple steps as
follows:
1. Create a tar archive of the desired directory tree
But this is inconvenient and it requires a temporary file, which might
be larger than we have room for.
- The new pipe-transfer feature lets you do such things in a single
- step, and without intermediate files.
+ The new pipe-transfer feature lets you do such things in a single step,
+ and without intermediate files.
Additional new features, also discussed here, let you specify pre- and
post- processing filters for outbound and incoming files, and give you
XYZMODEM protocols (because XYZMODEM recovers from transmission errors
by rewinding the source file, and you can't rewind a pipe).
- This section begins by discussing the simple and straightforward use
- of these features in UNIX, in which pipes and input/output redirection
- are a fundamental component and therefore "just work", and then goes
- on to discuss their operation in Windows and OS/2, where matters are
- much more complicated.
- _________________________________________________________________
+ This section begins by discussing the simple and straightforward use of
+ these features in UNIX, in which pipes and input/output redirection are
+ a fundamental component and therefore "just work", and then goes on to
+ discuss their operation in Windows and OS/2, where matters are much
+ more complicated.
- 4.2.1.1. TERMINOLOGY
+4.2.1.1. TERMINOLOGY
Standard Input
This is a precise technical term denoting the normal source of
Abbreviation for Input / Output.
Shell
- Text-based system command processor, such as the UNIX shell,
- DOS COMMAND.COM, etc.
+ Text-based system command processor, such as the UNIX shell, DOS
+ COMMAND.COM, etc.
Pipe
A mechanism by which the standard output of one program is sent
Pipeline
A series of programs connected by pipes.
- _________________________________________________________________
- 4.2.1.2. NOTATION
+4.2.1.2. NOTATION
In command descriptions, "command" is replaced by a shell or system
command or pipeline. The command names specified in these commands are
- interpreted by your shell, just as if you were typing them at the
- shell prompt, and so if they are in your PATH, they will be found in
- the expected manner. Therefore you don't have to specify complete
- pathnames for commands that are programs (but it shouldn't hurt if you
- do).
+ interpreted by your shell, just as if you were typing them at the shell
+ prompt, and so if they are in your PATH, they will be found in the
+ expected manner. Therefore you don't have to specify complete pathnames
+ for commands that are programs (but it shouldn't hurt if you do).
The normal notation for I/O redirection is as follows:
grep -c "some text" *.txt
Looks in all files whose names end with ".txt" for the string
- "some text" and writes to Stdout the names of each file
- followed by a colon and the number of occurrences in each.
+ "some text" and writes to Stdout the names of each file followed
+ by a colon and the number of occurrences in each.
grep -v ":0"
Prints to Stdout the lines from Stdin that do NOT contain the
- string ":0", in this case, it removes the names of files that
- do not contain "some text".
+ string ":0", in this case, it removes the names of files that do
+ not contain "some text".
sort
Sorts the lines from Stdin alphabetically to Stdout.
otherwise the shell is likely to replace them by all filenames that
match, which is probably not what you want. This is also true when
using your shell directly, and has nothing to do with Kermit.
- _________________________________________________________________
- 4.2.1.3. SECURITY
+4.2.1.3. SECURITY
Some sites might not wish to allow access to system commands or
external programs from within Kermit. Such access, including all the
1. When building from source code, include -DNOPUSH among the CFLAGS.
2. At runtime, give the NOPUSH command.
3. For server mode, give the DISABLE HOST command.
- 4. Implicit use of pipes can be disabled as described in [440]Section
+ 4. Implicit use of pipes can be disabled as described in [448]Section
4.2.4.
Note: 3 and 4 are not necessary if you have done 1 or 2.
- _________________________________________________________________
- 4.2.2. Commands for Transferring from and to Pipes
+4.2.2. Commands for Transferring from and to Pipes
SEND /COMMAND sends data from a command or command pipeline, and
- RECEIVE /COMMENT writes data to a command or pipeline. The GET
- /COMMAND command asks a server to send material, and then writes the
- incoming material to a command or pipeline. These features, along with
- switches (like "/COMMAND", described in [441]Section 4.7) are new to
- C-Kermit 6.1. The following synonyms are also provided:
+ RECEIVE /COMMENT writes data to a command or pipeline. The GET /COMMAND
+ command asks a server to send material, and then writes the incoming
+ material to a command or pipeline. These features, along with switches
+ (like "/COMMAND", described in [449]Section 4.7) are new to C-Kermit
+ 6.1. The following synonyms are also provided:
CSEND = SEND /COMMAND
CRECEIVE = RECEIVE /COMMAND
CGET = GET /COMMAND
None of these commands can be used if a SEND or RECEIVE FILTER
- (respectively, [442]Section 4.2.3) is in effect, or if a NOPUSH
- command ([443]Section 4.2.1.3) has been given, or if the current
- protocol is not Kermit.
- _________________________________________________________________
+ (respectively, [450]Section 4.2.3) is in effect, or if a NOPUSH command
+ ([451]Section 4.2.1.3) has been given, or if the current protocol is
+ not Kermit.
- 4.2.2.1. Sending from a Command
+4.2.2.1. Sending from a Command
SEND /COMMAND command [ as-name ]
SEND /AS-NAME:as-name /COMMAND command
CSEND command [ as-name ]
- These three forms are the same. They work like the SEND
- command, but instead of sending a file, it sends the standard
- output of the given command, either under the command's own
- name, or else with the given as-name. If the command contains
- spaces, it must be enclosed in braces. Braces should also be
- used for the as-name if it contains spaces. If braces are
- included around either the command or the as-name, they are
- removed after parsing but before use. As with SEND, the
- transfer is in text or binary mode according the current FILE
- TYPE setting, unless you override the global transfer mode by
- including a /TEXT or /BINARY switch. The command must require
- no input.
-
- When sending from a command or pipeline, C-Kermit has no way of
- knowing in advance how much data will be sent, and so it can not send
- the size to the other Kermit in the Attribute packet, and so the
- receiving Kermit has no way of displaying "percent done" or a progress
- bar (thermometer).
+ These three forms are the same. They work like the SEND command,
+ but instead of sending a file, it sends the standard output of
+ the given command, either under the command's own name, or else
+ with the given as-name. If the command contains spaces, it must
+ be enclosed in braces. Braces should also be used for the
+ as-name if it contains spaces. If braces are included around
+ either the command or the as-name, they are removed after
+ parsing but before use. As with SEND, the transfer is in text or
+ binary mode according the current FILE TYPE setting, unless you
+ override the global transfer mode by including a /TEXT or
+ /BINARY switch. The command must require no input.
+
+ When sending from a command or pipeline, C-Kermit has no way of knowing
+ in advance how much data will be sent, and so it can not send the size
+ to the other Kermit in the Attribute packet, and so the receiving
+ Kermit has no way of displaying "percent done" or a progress bar
+ (thermometer).
Examples that make sense in text mode (illustrated by common UNIX
commands):
CSEND finger
sends the current "finger" listing (who's logged in) under the
name "finger". The two forms "send /command" and "csend" are
- equivalent; we won't bother showing them both in the rest of
- the examples.
+ equivalent; we won't bother showing them both in the rest of the
+ examples.
SEND /COMMAND:{finger}
CSEND {finger}
SEND /COMMAND:{finger | sort -r} /AS-NAME:userlist
CSEND {finger | sort -r} userlist
- sends the current finger listing, sorted in reverse order,
- under the name "userlist". The braces are needed to distinguish
- the command from the as-name.
+ sends the current finger listing, sorted in reverse order, under
+ the name "userlist". The braces are needed to distinguish the
+ command from the as-name.
SEND /COMMAND:{finger | sort -r} /AS-NAME:{userlist}
CSEND {finger | sort -r} {userlist}
- Same as previous example (braces are removed from
- "{userlist}").
+ Same as previous example (braces are removed from "{userlist}").
SEND /COMMAND:{finger | sort -r}
/AS-NAME:{\freplace(\v(filename),\32,_)}
SEND /COMMAND /BINARY {tar cf - . | gzip -c} mydir.tar.gz
SEND /COMMAND /BINARY /AS-NAME:mydir.tar.gz {tar cf - . | gzip -c}
CSEND /BINARY {tar cf - . | gzip -c} mydir.tar.gz
- Makes a tar archive of the current directory, compresses it
- with the GNU gzip program, and sends it as "mydir.tar.gz". The
- other Kermit can, of course, just store it as a file, or it can
- use CRECEIVE to uncompress and dearchive it as part of the
- transfer process.
+ Makes a tar archive of the current directory, compresses it with
+ the GNU gzip program, and sends it as "mydir.tar.gz". The other
+ Kermit can, of course, just store it as a file, or it can use
+ CRECEIVE to uncompress and dearchive it as part of the transfer
+ process.
When using a "pipeline" of commands in the command field, obviously,
the first command must not require any input, and the last command
should produce some output, and all intermediate commands should get
some input and produce some output.
- _________________________________________________________________
- 4.2.2.2. Receiving to a Command
+4.2.2.2. Receiving to a Command
RECEIVE /COMMAND command
CRECEIVE command
- This is like RECEIVE, except incoming material is written to
- the standard input of the given command, in text or binary mode
+ This is like RECEIVE, except incoming material is written to the
+ standard input of the given command, in text or binary mode
according to the normal rules for file reception. Be sure to
include a redirector to a file (if the command normally writes
to standard output), or the output of the command won't go
- anywhere. The command may contain spaces; braces are not
- needed, but they are removed if used.
+ anywhere. The command may contain spaces; braces are not needed,
+ but they are removed if used.
WARNING: C-Kermit has no way of knowing anything about the command, or
even whether it is a command. Thus this command will always cause
RECEIVE /COMMAND sort
CRECEIVE sort
- Does nothing useful, since the output of sort has nowhere to
- go.
+ Does nothing useful, since the output of sort has nowhere to go.
RECEIVE /COMMAND sort -r | pr -3 | lpr -Plaserjet
CRECEIVE sort -r | pr -3 | lpr -Plaserjet
RECEIVE /COMMAND:{gunzip -c | tar xf -}
CRECEIVE {gunzip -c | tar xf -}
Assuming the data that is received is a compressed tar archive,
- uncompresses the archive and passes it to tar for extraction.
- In this case the braces are needed because otherwise the final
- "-" would be taken as a command continuation character (see
- [444]Using C-Kermit, 2nd Edition, p.33).
+ uncompresses the archive and passes it to tar for extraction. In
+ this case the braces are needed because otherwise the final "-"
+ would be taken as a command continuation character (see
+ [452]Using C-Kermit, 2nd Edition, p.33).
GET /COMMAND remote-file command
GET /COMMAND /AS-NAME:command remote-file
GET /COMMAND *.txt {echo \v(filename)>>new.txt;cat>>new.txt}
CGET *.txt {echo \v(filename)>>new.txt;cat>>new.txt}
As above, but inserts each file's name before its contents.
- _________________________________________________________________
- 4.2.3. Using File-Transfer Filters
+4.2.3. Using File-Transfer Filters
- The commands described in [445]Section 4.2.2 let you send the output
- of a command, or receive data into a command. But what if you want to
+ The commands described in [453]Section 4.2.2 let you send the output of
+ a command, or receive data into a command. But what if you want to
specify preprocessing for files that you send, or postprocessing of
- files that you receive, even when multiple files are involved? For
- this you need a way to specify send and receive filters. The commands
- are SET SEND FILTER and SET RECEIVE FILTER; SHOW PROTOCOL displays the
+ files that you receive, even when multiple files are involved? For this
+ you need a way to specify send and receive filters. The commands are
+ SET SEND FILTER and SET RECEIVE FILTER; SHOW PROTOCOL displays the
current settings.
- 4.2.3.1. The SEND Filter
+4.2.3.1. The SEND Filter
SET SEND FILTER [ command ]
This command specifies a command to be run on any file that you
results of REMOTE commands like REMOTE DIRECTORY, REMOTE TYPE,
REMOTE HOST, etc. The command may be, but need not be, enclosed
in braces; if it is, the braces are stripped before use. The
- output of this command is sent, rather than the file itself.
- The current FILE TYPE setting (TEXT or BINARY) applies to the
- output of the command. The command must contain at least one
- instance of \v(filename), for which the name of the actual file
- is substituted. If the command is omitted, the send filter is
+ output of this command is sent, rather than the file itself. The
+ current FILE TYPE setting (TEXT or BINARY) applies to the output
+ of the command. The command must contain at least one instance
+ of \v(filename), for which the name of the actual file is
+ substituted. If the command is omitted, the send filter is
removed and files are sent in the normal manner.
The SET SEND FILTER sets up a "global" filter -- that is, one that
applies to all subsequent file-sending commands until you change or
remove it. You can also specify a "local" filter to be used in a
specific file-sending command by using the /FILTER switch (see
- [446]Section 1.5); for example:
+ [454]Section 1.5); for example:
SEND /FILTER:command [ other-switches ] filename
Besides \v(filename), you can include any other script programming
- notation in the send filter: variable names, array references, calls
- to built-in string or other functions, and so on. These are evaluated
+ notation in the send filter: variable names, array references, calls to
+ built-in string or other functions, and so on. These are evaluated
during file transfer, NOT during parsing, and they are evaluated
separately for each file.
etc). So (for example) if the filter changes the file's size, the
progress thermometer might be wrong. (We can't send the size of the
output from the filter, because it is not known until the transfer is
- finished.) If you prefer that the size not be sent, use "set
- attributes size off".
+ finished.) If you prefer that the size not be sent, use "set attributes
+ size off".
- You can not use send filters with RESEND (SEND /RECOVER) or PSEND
- (SEND /START).
+ You can not use send filters with RESEND (SEND /RECOVER) or PSEND (SEND
+ /START).
Examples for text mode:
reverse order.
SEND /FILTER:{sort -r \v(filename)} *.txt
- Same as above, but the filter applies only to this SEND
- command. Braces are required in this case.
+ Same as above, but the filter applies only to this SEND command.
+ Braces are required in this case.
SET SEND FILTER {sort -r \v(filename)}
SEND oofa.txt reverse.txt
SEND /BINARY oofa.* \fupper(\replace(\v(filename),.,_)).GZ
Sends all the oofa.* files, compressed by gzip, each under its
own name, but with the name uppercased, all periods within the
- name converted to underscores, and ".GZ" appended to it. So,
- for example, "oofa.txt" is sent as "OOFA_TXT.GZ".
+ name converted to underscores, and ".GZ" appended to it. So, for
+ example, "oofa.txt" is sent as "OOFA_TXT.GZ".
In the gzip examples, note that the amount of data that is sent is
normally less than the original file size because gzip compresses the
tell Kermit to "set attribute length off". On the other hand, you can
use the final position of the thermometer as a measure of the
effectiveness of compression.
- _________________________________________________________________
- 4.2.3.2. The RECEIVE Filter
+4.2.3.2. The RECEIVE Filter
SET RECEIVE FILTER [ command ]
- This command specifies that the given command will be run on
- any file that is received before it is written to disk. The
- command may be, but need not be, enclosed in braces; if it is
- the braces are stripped before use. The following two commands
- are equivalent:
+ This command specifies that the given command will be run on any
+ file that is received before it is written to disk. The command
+ may be, but need not be, enclosed in braces; if it is the braces
+ are stripped before use. The following two commands are
+ equivalent:
SET RECEIVE FILTER sort -r > \v(filename)
SET RECEIVE FILTER {sort -r > \v(filename)}
Stores each incoming file with its lines sorted in reverse
order, under the name "reverse.txt". The actual result depends
on the FILE COLLISION setting. If it is OVERWRITE and multiple
- files arrive, then each incoming file destroys the previous
- one. If it is BACKUP (the default), filename conflicts are
- resolve by adding "version numbers" to the filenames:
- reverse.txt, reverse.txt.~1~, reverse.txt.~2~, etc.
+ files arrive, then each incoming file destroys the previous one.
+ If it is BACKUP (the default), filename conflicts are resolve by
+ adding "version numbers" to the filenames: reverse.txt,
+ reverse.txt.~1~, reverse.txt.~2~, etc.
SET RECEIVE FILTER sort -r > \v(filename)
RECEIVE \v(filename).reverse
lowercased. So if the incoming filename is OOFA.TXT.GZ, it is
stored as oofa.txt after decompression.
- Of course you don't want to type such long hideous commands, so we
- have also introduced several new functions:
+ Of course you don't want to type such long hideous commands, so we have
+ also introduced several new functions:
\fstripx(string[,character])
This function removes the rightmost segment of the string that
\fstripb(string[,c1[,c2]])
Strips enclosing matching braces, brackets, parentheses, or
- quotes from the string. The second argument, c1, specifies
- which kind of enclosure to look for; if not specified, any
- enclosing (), [], <>, {}, "", '', or `' are removed. If c1 is
- specified and c2 is not, then if c1 is an opening brace,
- bracket, or parenthesis, the matching closing one is supplied
- automatically as c2. If both c1 and c2 are specified, then to
- be stripped the string must begin with c1 and end with c2. If
- the string is not enclosed in the indicated manner, the result
- is the original string. Examples:
+ quotes from the string. The second argument, c1, specifies which
+ kind of enclosure to look for; if not specified, any enclosing
+ (), [], <>, {}, "", '', or `' are removed. If c1 is specified
+ and c2 is not, then if c1 is an opening brace, bracket, or
+ parenthesis, the matching closing one is supplied automatically
+ as c2. If both c1 and c2 are specified, then to be stripped the
+ string must begin with c1 and end with c2. If the string is not
+ enclosed in the indicated manner, the result is the original
+ string. Examples:
\fstripb("abc") => abc
\fstripb([abc]) => abc
Note that when a receive filter is in effect, this overrides your FILE
COLLISION setting, since Kermit has no way of knowing what the final
destination filename will be (because it does not know, and can not be
- expected to know, the syntax of every version of every command shell
- on every platform on the planet).
- _________________________________________________________________
+ expected to know, the syntax of every version of every command shell on
+ every platform on the planet).
- 4.2.4. Implicit Use of Pipes
+4.2.4. Implicit Use of Pipes
If you wish, C-Kermit can also examine incoming filenames to see if
they start with "!", and if so, the subsequent text is treated as a
the result in oofa.new.
This use of the exclamation mark should be familiar to UNIX users as
- the "bang" feature that lets you run an external application or
- command from within another application.
+ the "bang" feature that lets you run an external application or command
+ from within another application.
- Kermit's "bang" feature is disabled by default, since it is not
- unheard for filenames to actually begin with "!". So if you want to
- use this feature, you must enable it with the following command:
+ Kermit's "bang" feature is disabled by default, since it is not unheard
+ for filenames to actually begin with "!". So if you want to use this
+ feature, you must enable it with the following command:
SET TRANSFER PIPES { ON, OFF }
- ON enables the recognition of "!" notation in incoming
- filenames during file transfer as an indicator that the
- remaining text is the name of a command. OFF, the default,
- disables this feature and uses the text as a filename in the
- normal fashion. This command does NOT affect SEND /COMMAND, GET
- /COMMAND, CSEND, etc.
-
- So using a combination of CSEND (SEND /COMMAND) and the "bang"
- feature, you can transfer a directory tree all in one command
- (assuming the remote Kermit supports pipe transfers and has them
- enabled):
+ ON enables the recognition of "!" notation in incoming filenames
+ during file transfer as an indicator that the remaining text is
+ the name of a command. OFF, the default, disables this feature
+ and uses the text as a filename in the normal fashion. This
+ command does NOT affect SEND /COMMAND, GET /COMMAND, CSEND, etc.
+
+ So using a combination of CSEND (SEND /COMMAND) and the "bang" feature,
+ you can transfer a directory tree all in one command (assuming the
+ remote Kermit supports pipe transfers and has them enabled):
CSEND {tar cf - . | gzip -c} {!gunzip -c | tar xf -}
SEND /COMMAND:{tar cf - . | gzip -c} /as:{!gunzip -c | tar xf -}
- Pay close attention to the syntax. Braces are needed around the
- command because it contains spaces; braces are needed around the
- as-name because it ends with "-". The as-name must begin with "!" or
- receiving Kermit will not recognize it as a command. The CSEND command
- must NOT begin with "!" unless you are running a command whose name
- really does start that character.
+ Pay close attention to the syntax. Braces are needed around the command
+ because it contains spaces; braces are needed around the as-name
+ because it ends with "-". The as-name must begin with "!" or receiving
+ Kermit will not recognize it as a command. The CSEND command must NOT
+ begin with "!" unless you are running a command whose name really does
+ start that character.
Similarly, you have a Kermit server send a directory tree to be
unpacked on the client end:
then the incoming data will be sorted rather than gunzipped.
Finally, if SET TRANSFER PIPES is ON (and in this case, this must be
- done in your C-Kermit initialization file), you can send from a pipe
- on the C-Kermit command line:
+ done in your C-Kermit initialization file), you can send from a pipe on
+ the C-Kermit command line:
kermit -s "!finger | sort -r" -a userlist
In this case the "filename" contains spaces and so must be quoting
using your shell's quoting rules.
- _________________________________________________________________
- 4.2.5. Success and Failure of Piped Commands
+4.2.5. Success and Failure of Piped Commands
- Commands or programs started by Kermit as a result of CSEND or
- CRECEIVE commands, CGET, SEND /COMMAND, REDIRECT commands (see
- [447]Section 4.2.8.2), implicit use of pipes, RUN commands, and so
- forth, should return their exit status codes to the Kermit command
- that caused them to be run, and therefore IF SUCCESS and IF FAILURE
- tests after these commands should work as expected. For example:
+ Commands or programs started by Kermit as a result of CSEND or CRECEIVE
+ commands, CGET, SEND /COMMAND, REDIRECT commands (see [455]Section
+ 4.2.8.2), implicit use of pipes, RUN commands, and so forth, should
+ return their exit status codes to the Kermit command that caused them
+ to be run, and therefore IF SUCCESS and IF FAILURE tests after these
+ commands should work as expected. For example:
CSEND blah < filename
- should fail if there is no command called "blah" or if there is no
- file called "filename". However, this is not foolproof and sometimes
- C-Kermit might think a command succeeded when it failed, or vice
- versa. This is most likely to happen when the highly system-dependent
- methods that Kermit must use to determine a command's exit status code
- do not supply the right information.
+ should fail if there is no command called "blah" or if there is no file
+ called "filename". However, this is not foolproof and sometimes
+ C-Kermit might think a command succeeded when it failed, or vice versa.
+ This is most likely to happen when the highly system-dependent methods
+ that Kermit must use to determine a command's exit status code do not
+ supply the right information.
It can also happen because some commands might define success and
failure differently from what you expect, or because you are using a
pipeline composed of many commands, and one of them fails to pass
failing exit status codes up the chain. The most likely culprit is the
- shell itself, which in most cases must be interposed between Kermit
- and any external program to be run.
+ shell itself, which in most cases must be interposed between Kermit and
+ any external program to be run.
In any case, you can examine the following variable to find out the
- exit status code returned to Kermit by the process most recently run
- by any command that runs external commands or programs, including
- CSEND, CRECEIVE, REDIRECT, RUN, etc:
+ exit status code returned to Kermit by the process most recently run by
+ any command that runs external commands or programs, including CSEND,
+ CRECEIVE, REDIRECT, RUN, etc:
\v(pexitstat)
been run yet, 0 if the most recent command succeeded, -1, -3, or -4 if
there was an internal error, and a positive number returned by the
command itself if the command failed. If the number is in the range
- 1-127, this is the program's exit status code. If it is 128 or
- greater, this is supposed to indicate that the command or program was
+ 1-127, this is the program's exit status code. If it is 128 or greater,
+ this is supposed to indicate that the command or program was
interrupted or terminated from outside itself.
In Windows 95 and 98, the return values of the default shell are
which converts a system error code (number) to the corresponding
message.
- _________________________________________________________________
- 4.2.6. Cautions about Using Pipes to Transfer Directory Trees
+4.2.6. Cautions about Using Pipes to Transfer Directory Trees
Although utilities such as tar and zip/unzip might be available on
different platforms (such as UNIX and Windows), this does not
CSEND {tar cf - . | gzip -c} {!gunzip -c | tar xf -}
when used from UNIX to Windows will have satisfactory results for
- binary files, but not for text files. UNIX text files have lines
- ending with Linefeed (LF) only, whereas Windows text files have lines
- ending in Carriage Return and Linefeed (CRLF). Thus any text files
- that were in the archive formed by the first tar command will be
- unpacked by the second tar command in their original form, and will
- display and print incorrectly in Windows (except in applications that
- have been explicitly coded to handle UNIX-format text files). On the
- other hand if you told gzip to use "text mode" to do record format
- conversion (assuming there was a way to tell it, as there is with most
- "zip" programs), this would destroy any binary files in the archive.
+ binary files, but not for text files. UNIX text files have lines ending
+ with Linefeed (LF) only, whereas Windows text files have lines ending
+ in Carriage Return and Linefeed (CRLF). Thus any text files that were
+ in the archive formed by the first tar command will be unpacked by the
+ second tar command in their original form, and will display and print
+ incorrectly in Windows (except in applications that have been
+ explicitly coded to handle UNIX-format text files). On the other hand
+ if you told gzip to use "text mode" to do record format conversion
+ (assuming there was a way to tell it, as there is with most "zip"
+ programs), this would destroy any binary files in the archive.
Furthermore, if the archive contains text files that are written in
- languages other than English, the "special" (accented and/or
- non-Roman) characters are NOT translated, and are therefore likely
- show up as gibberish on the target system. For example, West European
- languages are usually encoded in ISO Latin Alphabet 1 in UNIX, but in
- PC code page 850 on the PC. Capital A with acute accent is code point
- 193 (decimal) Latin-1, but 181 in CP850. So A-acute in the UNIX file
+ languages other than English, the "special" (accented and/or non-Roman)
+ characters are NOT translated, and are therefore likely show up as
+ gibberish on the target system. For example, West European languages
+ are usually encoded in ISO Latin Alphabet 1 in UNIX, but in PC code
+ page 850 on the PC. Capital A with acute accent is code point 193
+ (decimal) Latin-1, but 181 in CP850. So A-acute in the UNIX file
becomes Middle Box Bottom on the PC, and similarly for all the other
special characters, and for all other languages -- Greek, Russian,
Hebrew, Japanese, etc.
or the two systems use the same record format and character set for
text files.
- Also see [448]Sections 4.3, [449]4.10, [450]4.11, and [451]4.15 for
- how to transfer directory trees between both like and unlike systems
+ Also see [456]Sections 4.3, [457]4.10, [458]4.11, and [459]4.15 for how
+ to transfer directory trees between both like and unlike systems
directly with Kermit.
- _________________________________________________________________
- 4.2.7. Pipes and Encryption
+4.2.7. Pipes and Encryption
Of course pipelines could be used for encrypted file transfers,
assuming proper precautions could be taken concerning the transmission
csend {tar cf - . | gzip -c | crypt key} {!crypt key | gunzip -c | tar xf -}
- transmits the key in the file header packet as part of the
- (clear-text) remote command, defeating the entire purpose of
- encrypting the file data.
+ transmits the key in the file header packet as part of the (clear-text)
+ remote command, defeating the entire purpose of encrypting the file
+ data.
But if you are connected in terminal mode to the remote computer and
type:
creceive {crypt key > filename}
- at the remote Kermit prompt, you have also transmitted the key in
- clear text over the communications link.
+ at the remote Kermit prompt, you have also transmitted the key in clear
+ text over the communications link.
At present, the only secure way to use CSEND and CRECEIVE with an
encryption filter is to have a human operator at both ends, so the key
has yet to be worked out.
HINT: See the PGP User's Guide, e.g. at:
- [452]http://www.telstra.com.au/docs/PGP/
+ [460]http://www.telstra.com.au/docs/PGP/
Especially the topic "Using PGP as a UNIX-Style Filter":
- [453]http://www.telstra.com.au/docs/PGP/pgpdoc2/pgpdoc2_17.html
+ [461]http://www.telstra.com.au/docs/PGP/pgpdoc2/pgpdoc2_17.html
In any case, better and more convenient security options are now
- available: Kerberos authentication and encryption ([454]CLICK HERE for
+ available: Kerberos authentication and encryption ([462]CLICK HERE for
details) and the new ability to run C-Kermit "though" other
- communication programs, described in [455]Section 2.7.
- _________________________________________________________________
+ communication programs, described in [463]Section 2.7.
- 4.2.8. Commands and Functions Related to Pipes
+4.2.8. Commands and Functions Related to Pipes
- 4.2.8.1. The OPEN !READ and OPEN !WRITE Commands
+4.2.8.1. The OPEN !READ and OPEN !WRITE Commands
- These are described in [456]Using C-Kermit, and are generally useful
+ These are described in [464]Using C-Kermit, and are generally useful
with reading output from commands that produce more than one line on
their standard output, or writing multiple lines into commands that
accept them on their standard input.
way, because your command can be a either an internal shell command
(which only your shell can execute) or an external command, which only
your shell knows how to find (it knows your PATH and interprets, etc).
- Therefore unless OPEN !READ can't start your shell, it always
- succeeds.
+ Therefore unless OPEN !READ can't start your shell, it always succeeds.
Continuing with the nonexistent-command example:
FAILURE
C-Kermit>
- In other words, the failure can not be detected on OPEN, since the
- OPEN command succeeds if it can start your shell. It can't be detected
- on READ, since all this does is read output from the shell, which in
- this case happens to be an error message. However, failure IS detected
- upon close, since this is the occasion upon which the shell gives
- Kermit its exit status code.
+ In other words, the failure can not be detected on OPEN, since the OPEN
+ command succeeds if it can start your shell. It can't be detected on
+ READ, since all this does is read output from the shell, which in this
+ case happens to be an error message. However, failure IS detected upon
+ close, since this is the occasion upon which the shell gives Kermit its
+ exit status code.
- For an illustration of this situation, see [457]Section 2.14.
- _________________________________________________________________
+ For an illustration of this situation, see [465]Section 2.14.
- 4.2.8.2. The REDIRECT Command
+4.2.8.2. The REDIRECT Command
A second method of I/O redirection is offered by the REDIRECT command.
This is a rather advanced and tricky feature that is presently
redirect finger
runs the local "finger" command and sends its output over the
- connection as plain text, where presumably there is a process set up
- to read it. Another example:
+ connection as plain text, where presumably there is a process set up to
+ read it. Another example:
redirect finger | sort -r
It is possible to use C-Kermit on UNIX as your PPP dialer and then to
REDIRECT the connection to the PPP software, but C-Kermit 7.0 offers a
- better approach to PPP dialing in its new EXEC command ([458]Section
+ better approach to PPP dialing in its new EXEC command ([466]Section
1.23).
In theory, you can also redirect an interactive process. For example,
practice, the K-shell's terminal modes are messed up because (a) it is
not going through the Unix terminal driver, and (b) it is "smart" and
knows it is being redirected, and so acts in a decidedly inhospitable
- manner (other applications like EMACS, vi, etc, simply refuse to run
- if their standard i/o has been redirected).
+ manner (other applications like EMACS, vi, etc, simply refuse to run if
+ their standard i/o has been redirected).
(*) The publicly-distributed sz/rz programs do not work as clients.
However, Omen Technology does offer an up-to-date redirectable
client XYZMODEM program called crzsz.
- _________________________________________________________________
- 4.2.8.3. Receiving Mail and Print Jobs
+4.2.8.3. Receiving Mail and Print Jobs
As of 7.0, and in UNIX only, files that are sent to C-Kermit as mail
(when the other Kermit uses a MAIL or SEND /MAIL command) or to be
- printed (via REMOTE PRINT or SEND /PRINT) are now piped directly to
- the mail or print program, rather than written to temporary files and
- then mailed or printed and then deleted. This has the advantages of
- (a) not requiring a temporary file, and (b) allowing mail to have a
- proper subject in place of the filename. Temporary files were bad not
- only because they required (a) space, and (b) writeability of the
- current directory, but also because using them could result in wiping
- out an existing file. See [459]Section 4.7 for more about SEND /MAIL
- and SEND /PRINT.
- _________________________________________________________________
-
- 4.2.8.4. Pipe-Related Functions
+ printed (via REMOTE PRINT or SEND /PRINT) are now piped directly to the
+ mail or print program, rather than written to temporary files and then
+ mailed or printed and then deleted. This has the advantages of (a) not
+ requiring a temporary file, and (b) allowing mail to have a proper
+ subject in place of the filename. Temporary files were bad not only
+ because they required (a) space, and (b) writability of the current
+ directory, but also because using them could result in wiping out an
+ existing file. See [467]Section 4.7 for more about SEND /MAIL and SEND
+ /PRINT.
+
+4.2.8.4. Pipe-Related Functions
The \fcommand(command) function runs the given shell or system command
and returns the command's standard output as its value (with any
newline characters stripped from the end), unless the result is too
- long, in which case it returns the empty string. The maximum length
- for the result is at least 1022 bytes, and it might be longer on some
+ long, in which case it returns the empty string. The maximum length for
+ the result is at least 1022 bytes, and it might be longer on some
platforms. Examples (UNIX):
C-Kermit> echo "\fcommand(date)"
"
C-Kermit>
- Use \frawcommand() if you want to retain the final line terminators,
- or if the command's output is "binary". But remember that if the
- result of this (or any other) function contains any NUL (ASCII code 0)
- characters, the first NUL will terminate the result string because
- this is how C strings work (it's "C-Kermit", remember?).
+ Use \frawcommand() if you want to retain the final line terminators, or
+ if the command's output is "binary". But remember that if the result of
+ this (or any other) function contains any NUL (ASCII code 0)
+ characters, the first NUL will terminate the result string because this
+ is how C strings work (it's "C-Kermit", remember?).
These functions are useful not only locally, but also in the
client/server arena. If you need to get the results from a system
[ remote ] query kermit command(date)
- The result is in the local \v(query) variable; see [460]Using
- C-Kermit, 2nd Ed., pp.359-360 for details.
- _________________________________________________________________
+ The result is in the local \v(query) variable; see [468]Using C-Kermit,
+ 2nd Ed., pp.359-360 for details.
- 4.3. Automatic Per-File Text/Binary Mode Switching
+4.3. Automatic Per-File Text/Binary Mode Switching
When transferring files between like systems (e.g. UNIX-to-UNIX),
binary mode can be used for all files unless character-set translation
- is needed, and in fact Kermit programs of recent vintage recognize
- each others' platforms and switch to binary mode automatically when it
- is appropriate (e.g. DOS to OS/2, or UNIX to UNIX). (Exception:
- LABELED mode is chosen for VMS-to-VMS and OS/2-to-OS/2 transfers so
- complex file formats can be preserved.)
+ is needed, and in fact Kermit programs of recent vintage recognize each
+ others' platforms and switch to binary mode automatically when it is
+ appropriate (e.g. DOS to OS/2, or UNIX to UNIX). (Exception: LABELED
+ mode is chosen for VMS-to-VMS and OS/2-to-OS/2 transfers so complex
+ file formats can be preserved.)
On a client/server connection between like systems, the transfer mode
is currently determined by the file sender, rather than always by the
client. If the client is sending, it controls the transfer mode. If a
- GET command is sent to the server, the server sends all files in
- binary mode if its TRANSFER CHARACTER-SET is TRANSPARENT; otherwise it
- uses text mode for text files (according to its text-pattern list) and
+ GET command is sent to the server, the server sends all files in binary
+ mode if its TRANSFER CHARACTER-SET is TRANSPARENT; otherwise it uses
+ text mode for text files (according to its text-pattern list) and
binary mode for binary files. Of course, the client can control the
server's transfer character-set with the REMOTE SET TRANSFER
CHARACTER-SET command.
UNIX-to-DOS), some files (such as executable program images) must be
transferred in binary mode but others (such as plain-text files) must
be transferred in text mode so their record format and character sets
- can be appropriately converted. If a binary file is transferred in
- text mode, it is ruined. If a text file is transferred in binary mode,
- then at the very least, its format can be incorrect; at worst it is
- also corrupted because its character set was not converted (in extreme
- cases the corruption is total, e.g. because one system is ASCII-based
- and the other EBCDIC).
- _________________________________________________________________
+ can be appropriately converted. If a binary file is transferred in text
+ mode, it is ruined. If a text file is transferred in binary mode, then
+ at the very least, its format can be incorrect; at worst it is also
+ corrupted because its character set was not converted (in extreme cases
+ the corruption is total, e.g. because one system is ASCII-based and the
+ other EBCDIC).
- 4.3.1. Exceptions
+4.3.1. Exceptions
VMS C-Kermit, when sending files to a non-VMS system, switches to text
or binary mode automatically for each file, based on the record format
in the file's directory entry; thus the mechanisms described in this
section do not apply to VMS C-Kermit, yet the effect is the same:
automatic text/binary mode switching when VMS C-Kermit is sending
- files. See the VMS Appendix of [461]Using C-Kermit for details.
+ files. See the VMS Appendix of [469]Using C-Kermit for details.
Kermit versions that support LABELED or IMAGE transfer mode are
likewise not affected by this feature when one of those modes is
Kermit versions that support file-transfer pipes and filters are not
affected by this feature when pipes or filters are used, since the
- output of a pipe or filter (such as gzip) is likely to require
- transfer in a different mode than the original file.
+ output of a pipe or filter (such as gzip) is likely to require transfer
+ in a different mode than the original file.
Finally, SEND /TEXT or SEND /BINARY will force files to be sent in the
indicated mode, overriding all automatic transfer-mode-choosing
mechanisms.
- _________________________________________________________________
- 4.3.2. Overview
+4.3.2. Overview
Suppose you give C-Kermit a command like:
However, we can use some fairly-well established file naming
conventions for this purpose. C-Kermit 7.0 lets you provide lists of
filename patterns that are used to separately determine the file type
- for each individual file being transfered. A pattern is a string,
- possibly containing the special characters "*" (asterisk, which
- matches any string of zero of more characters) and/or "?" (question
- mark, which matches any single character). For example "a*b" matches
- all files whose names start with "a" and end with "b", such as "ab",
- "arb", "ababababab", etc, but not "abba". And "a?b" matches any file
- whose name starts with "a", ends with "b", and is exactly 3 characters
- long.
+ for each individual file being transferred. A pattern is a string,
+ possibly containing the special characters "*" (asterisk, which matches
+ any string of zero of more characters) and/or "?" (question mark, which
+ matches any single character). For example "a*b" matches all files
+ whose names start with "a" and end with "b", such as "ab", "arb",
+ "ababababab", etc, but not "abba". And "a?b" matches any file whose
+ name starts with "a", ends with "b", and is exactly 3 characters long.
NOTE: When typing commands at the C-Kermit prompt, you must prefix
"?" with \ to override its normal function of giving help.
- (Also see [462]Section 4.9 for additional pattern-matching notations
+ (Also see [470]Section 4.9 for additional pattern-matching notations
that might be available in your version of C-Kermit.)
When you have specified filename recognition patterns, C-Kermit can
patterns in text mode, and those whose names match neither in the
prevailing mode you have chosen, or that was chosen automatically via
peer recognition.
- _________________________________________________________________
- 4.3.3. Commands
+4.3.3. Commands
SET FILE PATTERNS { ON, OFF, AUTO }
This tells Kermit whether to do per-file filename
pattern-matching to determine text or binary mode. The normal
- and default setting is AUTO, which means to use pattern lists
- to switch transfer mode only when it is certain that the other
+ and default setting is AUTO, which means to use pattern lists to
+ switch transfer mode only when it is certain that the other
Kermit program supports automatic notification of transfer mode
- (via Attribute packets) on a per-file basis (this information
- is obtained automatically during protocol startup negotiation).
- ON means to always determine the transfer mode from the
- filename and pattern list when sending files. Use OFF to
- disable this feature (without resetting your pattern lists).
- Also note that if you have selected LABELED file transfer (SET
- FILE TYPE LABELED), this takes precedence over
- filename-matching patterns and all files are sent in labeled
- mode.
+ (via Attribute packets) on a per-file basis (this information is
+ obtained automatically during protocol startup negotiation). ON
+ means to always determine the transfer mode from the filename
+ and pattern list when sending files. Use OFF to disable this
+ feature (without resetting your pattern lists). Also note that
+ if you have selected LABELED file transfer (SET FILE TYPE
+ LABELED), this takes precedence over filename-matching patterns
+ and all files are sent in labeled mode.
SET TRANSFER MODE MANUAL
Disables the use of filename patterns, no matter what the FILE
PATTERNS setting.
REMOTE SET TRANSFER MODE MANUAL
- Client command to disable automatic transfer mode, and
- therefore also filename patterns, in the server. Synonym:
- REMOTE SET XFER MODE MANUAL.
+ Client command to disable automatic transfer mode, and therefore
+ also filename patterns, in the server. Synonym: REMOTE SET XFER
+ MODE MANUAL.
{ GET, SEND, etc } { /BINARY, /TEXT }
Including a /BINARY or /TEXT (or, where supported, /IMAGE or
any) are applied first (but only if not RESENDing and not sending in
LABELED mode), then binary patterns, so if the same pattern appears in
both lists, binary mode is chosen.
- _________________________________________________________________
- 4.3.4. Examples
+4.3.4. Examples
Here's an example that might be used when sending files from UNIX:
Note that "wermit" and "wart" do not match any patterns so they are
sent in the prevailing mode, which is binary. Also note the use of
"makefile" as a pattern that does not contain any wildcard characters
- (there is no other convention to distinguish among "wermit" and
- "wart", which are binary executables, and "makefile", which is a text
- file, purely by their names).
+ (there is no other convention to distinguish among "wermit" and "wart",
+ which are binary executables, and "makefile", which is a text file,
+ purely by their names).
Most C-Kermit implementations have a default pattern list built in,
which includes patterns that are almost certain to succeed in picking
text types everywhere else.
NOTE: ".doc", used for decades to denote plain-text documentation
- files, now more often than not denotes a Microsoft Word Document,
- so ".doc" is now considered a binary type since it does less harm
- to transfer a plain-text document in binary mode than it does to
+ files, now more often than not denotes a Microsoft Word Document, so
+ ".doc" is now considered a binary type since it does less harm to
+ transfer a plain-text document in binary mode than it does to
transfer an MS Word file in text mode (except when IBM mainframes
are involved!)
- ANOTHER NOTE: ".com" files are binary in DOS-like operating
- systems, but they are text (DCL command procedures) in VMS. VMS
- C-Kermit sends .COM files in text mode; K95 sends them in binary
- mode. If you download a .COM file from VMS to DOS or Windows, and
- then upload it to another VMS system, be sure to use SEND /TEXT to
- preserve its textness.
+ ANOTHER NOTE: ".com" files are binary in DOS-like operating systems,
+ but they are text (DCL command procedures) in VMS. VMS C-Kermit
+ sends .COM files in text mode; K95 sends them in binary mode. If you
+ download a .COM file from VMS to DOS or Windows, and then upload it
+ to another VMS system, be sure to use SEND /TEXT to preserve its
+ textness.
You can see the default pattern list by starting C-Kermit without its
initialization file (e.g. "kermit -Y") and using the SHOW PATTERNS
Put your most commonly-used safe pattern declarations in your C-Kermit
customization file (ckermod.ini, .mykermrc, k95custom.ini, etc).
- As noted, SET FILE PATTERNS is ON by default. Sometimes, however, it
- is desirable, or necessary, to force files to be sent in a particular
+ As noted, SET FILE PATTERNS is ON by default. Sometimes, however, it is
+ desirable, or necessary, to force files to be sent in a particular
mode, and often this must be done from the command line (e.g. when
using Kermit as a download helper in a Web browser like Lynx). The -V
command-line options is equivalent to SET FILE PATTERNS OFF and SET
forces oofa.txt to be sent in binary mode, even though ".txt" might
match a text pattern.
- _________________________________________________________________
- 4.4. File Permissions
+4.4. File Permissions
"Permissions" refers to a code associated with a file that specifies
who is allowed to access it, and in what manner. For example, the
- owner, the members of one or more groups, the system administrator,
- and everybody else, might be allowed various combinations of Read,
- Write, Append, Execute, or Listing access.
+ owner, the members of one or more groups, the system administrator, and
+ everybody else, might be allowed various combinations of Read, Write,
+ Append, Execute, or Listing access.
The permission code goes by different names on different platforms. In
UNIX, it might be called the filemode. In VMS, it is called the file
For VMS-to-VMS transfers, the default LABELED mode simply copies the
protection code from source to destination.
- _________________________________________________________________
- 4.4.1. When ATTRIBUTES PROTECTION is OFF
+4.4.1. When ATTRIBUTES PROTECTION is OFF
If no file of the same name exists, system defaults determine the
- permissions of the new file. Otherwise, the actions taken depend on
- the current FILE COLLISION setting: BACKUP, OVERWRITE, RENAME, etc, as
- documented in [463]Using C-Kermit. But now the new file (if it is
+ permissions of the new file. Otherwise, the actions taken depend on the
+ current FILE COLLISION setting: BACKUP, OVERWRITE, RENAME, etc, as
+ documented in [471]Using C-Kermit. But now the new file (if it is
created at all) automatically inherits the permissions (mode bits) of
the existing file in a way that is appropriate for the platform.
- 4.4.1.1. Unix
+4.4.1.1. Unix
All mode bits are inherited except the directory bit, since the
incoming file can not possibly be a directory. (In any case, it is not
possible to receive a file that has the same name as an existing
directory unless FILE COLLISION is set to RENAME).
- 4.4.1.2. VMS
+4.4.1.2. VMS
Files with the same name as an existing file, transferred in modes
other than LABELED between VMS systems, inherit the protection of the
prior version.
- _________________________________________________________________
- 4.4.2 When ATTRIBUTES PROTECTION is ON
+4.4.2 When ATTRIBUTES PROTECTION is ON
File permissions can be conveyed as part of the file transfer process,
in accordance with the Kermit protocol definition. If the file sender
The main benefit of this feature is to not have to "chmod +x" an
executable file after transfer from UNIX to UNIX. Its cross-platform
- benefits are less evident, perhaps to retain the status of the Unix
- 'x' bit on a VMS system, for subsequent transfer back to a Unix
- system.
- _________________________________________________________________
+ benefits are less evident, perhaps to retain the status of the Unix 'x'
+ bit on a VMS system, for subsequent transfer back to a Unix system.
- 4.4.2.1. System-Specific Permissions
+4.4.2.1. System-Specific Permissions
System-specific file permissions are used when the two Kermit programs
recognize each other as running on the same type of system. For
one is on an Alpha and the other on a VAX, and/or one is old and the
other is new).
- 4.4.2.1.1. UNIX
+4.4.2.1.1. UNIX
UNIX supports three categories of users, File Owner, Group, and World,
and three types of file access permission: Read, Write, and Execute.
permissions, nor do we convey the setuid/setgid bits, lock bit, sticky
bit, etc.
- 4.4.2.1.2. VMS
+4.4.2.1.2. VMS
VMS supports four categories of users, System, File Owner, Group, and
World, and four types of file access permission: Read, Write, Execute,
and Delete. Thus, a VMS file's permissions are expressed in 16 bits.
- The system-dependent protection string for VMS is a 4-digit
- hexadecimal string, corresponding to the internal-format protection
- word of the file (RWED for each of World,Group,Owner,System). A new
- file normally gets all 16 protection bits from the original file of
- the same name.
+ The system-dependent protection string for VMS is a 4-digit hexadecimal
+ string, corresponding to the internal-format protection word of the
+ file (RWED for each of World,Group,Owner,System). A new file normally
+ gets all 16 protection bits from the original file of the same name.
Note: VMS-to-VMS transfers take place in LABELED mode when the two
C-Kermits recognize each other's platform as VMS (unless you have
this takes precedence over any information in the Attribute packets.
You can defeat the automatic switching into LABELED mode (if you want
to) with SET TRANSFER MODE MANUAL.
- _________________________________________________________________
- 4.4.2.2. System-Independent Permissions
+4.4.2.2. System-Independent Permissions
The system-independent ("generic") protection is used when the system
IDs of the two Kermit programs do not agree (e.g. one is UNIX, the
other is VMS). The generic protection attribute includes the following
- permissions (not all are applicable to every file system): Read,
- Write, Append, Execute, Delete, Search. The generic permissions are
- derived from the owner permissions of the source file, thus, a Unix
- 'w' permission becomes VMS Write,Delete.
+ permissions (not all are applicable to every file system): Read, Write,
+ Append, Execute, Delete, Search. The generic permissions are derived
+ from the owner permissions of the source file, thus, a Unix 'w'
+ permission becomes VMS Write,Delete.
The Owner field of the new file's permissions is set from the incoming
generic protection attribute.
In UNIX, the Group and World permissions are set according to your
umask, except that execute permission is NOT set in these fields if it
- was not also set in the generic protection (and consequently, is set
- in the Owner field).
+ was not also set in the generic protection (and consequently, is set in
+ the Owner field).
In VMS, the System, Group, and World permissions are set according to
the process default file permission (as shown in VMS by SHOW
files that are not intended for execution do not have Execute
permission. In VMS, Read permission implicitly supplies Execute
capability. Generally files that have Read permission also have
- explicit Execute permission, but files (binary executables, DCL
- command procedures) that have Read permission and not Execute
- permission can still be executed.
- _________________________________________________________________
+ explicit Execute permission, but files (binary executables, DCL command
+ procedures) that have Read permission and not Execute permission can
+ still be executed.
- 4.5. File Management Commands
+4.5. File Management Commands
- 4.5.1. The DIRECTORY Command
+4.5.1. The DIRECTORY Command
Prior to C-Kermit 7.0, the DIRECTORY command always ran an external
system command (such as "ls" on UNIX) or program to product the
directory listing. This had certain advantages, mostly that you could
- include system-dependent options for customized listings, e.g. on
- UNIX:
+ include system-dependent options for customized listings, e.g. on UNIX:
dir -lt c* | more
UNIX it prints all dates and times in a consistent way (unlike ls). In
VMS it prints precise file sizes, rather than "blocks". It offers
several formatting and other options, but it is not necessarily more
- flexible than the corresponding external commands or programs (the
- UNIX "ls" program, the VMS "directory" command). The syntax is:
+ flexible than the corresponding external commands or programs (the UNIX
+ "ls" program, the VMS "directory" command). The syntax is:
DIRECTORY [ switch [ switch [ ... ] ] ] [ filespec ]
- If no filespec is given, all files in the current directory are
- listed.
+ If no filespec is given, all files in the current directory are listed.
Optional switches include all the standard file-selection switches
- presented in [464]Section 1.5.4, plus:
+ presented in [472]Section 1.5.4, plus:
/ALL
Show both regular files and directories; this is the default.
/ARRAY:x
Instead of displaying a directory listing, put the files that
- would have been shown (based on the filespec and other
- selection switches) in the given array. The array need not (and
- should not) be predeclared; if the array already exists, it is
+ would have been shown (based on the filespec and other selection
+ switches) in the given array. The array need not (and should
+ not) be predeclared; if the array already exists, it is
destroyed and reused. The array name can be a single letter,
- like "a", or any fuller form, such as "&a", "\&a", "\&a[]",
- etc. If the /ARRAY switch is included, the following other
- switches are ignored: /BRIEF, /VERBOSE, /HEADING, /PAGE,
- /ENGLISHDATE, /ISODATE, /XFERMODE, /MESSAGE, /SORT, /REVERSE,
- /ASCENDING. In other words, only file selection switches are
- meaningful with /ARRAY: /FILES, /DIRECTORIES, /ALL, /DOTFILES,
- /NOBACKUP, /RECURSIVE, /SMALLER, /LARGER, /AFTER, /BEFORE,
- /EXCEPT, etc. The resulting array has the number of files (n)
- as its 0th element, and the filenames in elements 1 through n
- Example:
+ like "a", or any fuller form, such as "&a", "\&a", "\&a[]", etc.
+ If the /ARRAY switch is included, the following other switches
+ are ignored: /BRIEF, /VERBOSE, /HEADING, /PAGE, /ENGLISHDATE,
+ /ISODATE, /XFERMODE, /MESSAGE, /SORT, /REVERSE, /ASCENDING. In
+ other words, only file selection switches are meaningful with
+ /ARRAY: /FILES, /DIRECTORIES, /ALL, /DOTFILES, /NOBACKUP,
+ /RECURSIVE, /SMALLER, /LARGER, /AFTER, /BEFORE, /EXCEPT, etc.
+ The resulting array has the number of files (n) as its 0th
+ element, and the filenames in elements 1 through n Example:
dir /array:&a /files /nobackup /after:19990101 /larger:10000 [ab]*
show array &a
/NOPAGE
Don't pause at the end of each screenful and give a "more?"
prompt, even if SET COMMAND MORE-PROMPTING is ON. If neither
- /PAGE or /NOPAGE is given, paging is according to the
- prevailing COMMAND MORE-PROMPTING setting (which can be
- displayed with SHOW COMMAND).
+ /PAGE or /NOPAGE is given, paging is according to the prevailing
+ COMMAND MORE-PROMPTING setting (which can be displayed with SHOW
+ COMMAND).
/ENGLISHDATE
- Show dates in dd-mmm-yyyy format; mmm is the first three
- letters of the English month name.
+ Show dates in dd-mmm-yyyy format; mmm is the first three letters
+ of the English month name.
/ISODATE
Show dates in yyyy-mm-dd format; mm is the month number, 1-12.
/XFERMODE
Only in Kermit programs that support SET FILE PATTERNS. If this
switch is included, and the filename matches any FILE
- BINARY-PATTERN ([465]Section 4.3), "(B)" is printed after the
- filename; otherwise, if it matches a FILE TEXT-PATTERN, "(T)"
- is printed.
+ BINARY-PATTERN ([473]Section 4.3), "(B)" is printed after the
+ filename; otherwise, if it matches a FILE TEXT-PATTERN, "(T)" is
+ printed.
/NOXFERMODE
Don't display transfer-mode indicators. This is the opposite of
other (e.g. /HEADINGS).
If you always want to use certain options, you can set them with the
- SET OPTIONS DIRECTORY command ([466]Section 1.5.5). Use SHOW OPTIONS
- to list the options currently in effect. To make the desired options
- apply every time you run C-Kermit, put a SET OPTIONS DIRECTORY command
- in your C-Kermit customization file, specifying the desired options.
- Options set in this manner apply to every subsequent DIRECTORY
- command. Of course, if you include switches in a DIRECTORY command,
- these override any defaults, built-in or custom. Example:
+ SET OPTIONS DIRECTORY command ([474]Section 1.5.5). Use SHOW OPTIONS to
+ list the options currently in effect. To make the desired options apply
+ every time you run C-Kermit, put a SET OPTIONS DIRECTORY command in
+ your C-Kermit customization file, specifying the desired options.
+ Options set in this manner apply to every subsequent DIRECTORY command.
+ Of course, if you include switches in a DIRECTORY command, these
+ override any defaults, built-in or custom. Example:
DIRECTORY ; Use "factory defaults"
SET OPTIONS DIRECTORY /SORT:SIZE /REVERSE /HEADINGS ; Customize defaults
length field causes the date and name fields to be misaligned.
* /SORT:NAME is redundant in VMS since VMS returns filenames in
alphabetic order anyway.
- * /SORT:NAME ignores alphabetic case on platforms where case does
- not matter in filenames, but this works only for unaccented Roman
+ * /SORT:NAME ignores alphabetic case on platforms where case does not
+ matter in filenames, but this works only for unaccented Roman
letters A-Z.
- * /SORT:NAME is currently based on code values, and so works fine
- for ASCII, but will probably produce unexpected results for files
- with non-ASCII or 8-bit characters in their names. (Locale-based
- sorting raises rather significant issues of portability, size,
- performance, etc.)
- * /SORT:DATE works right only for ISO-format dates, not English
- ones.
+ * /SORT:NAME is currently based on code values, and so works fine for
+ ASCII, but will probably produce unexpected results for files with
+ non-ASCII or 8-bit characters in their names. (Locale-based sorting
+ raises rather significant issues of portability, size, performance,
+ etc.)
+ * /SORT:DATE works right only for ISO-format dates, not English ones.
* /SORT:SIZE sorts the size field lexically. On some platforms (e.g.
Windows), the size of a directory file is listed as "<DIR>" rather
than as a number; in this case, the "<DIR>" files are gathered at
- the end (or beginning, depending on the sort order) of the
- listing.
+ the end (or beginning, depending on the sort order) of the listing.
* /RECURSIVE is accepted but ignored in AOS/VS. Use the normal
system-specific filespec notation, e.g. "dir #.txt".
* /RECURSIVE has no affect when a full, absolute pathname is given;
- e.g. "dir /recursive /tmp/foo" (where "foo" is a regular file)
- only shows the "/tmp/foo" file. If you want to see all "foo" files
- in the /tmp tree, do "cd /tmp" and then "dir /recursive foo".
- * If a file size of -1 is shown, or date-time of 0000-00-00
- 00:00:00, this means the file was located, but access to
- information about the file was denied to C-Kermit.
+ e.g. "dir /recursive /tmp/foo" (where "foo" is a regular file) only
+ shows the "/tmp/foo" file. If you want to see all "foo" files in
+ the /tmp tree, do "cd /tmp" and then "dir /recursive foo".
+ * If a file size of -1 is shown, or date-time of 0000-00-00 00:00:00,
+ this means the file was located, but access to information about
+ the file was denied to C-Kermit.
* In VMS, if FOO.DIR;1 is a directory within your current directory,
- "directory foo" and "directory [.foo]" list the files in the
- [.FOO] subdirectory, but "directory foo.dir" lists the directory
- file itself; similarly for "*.dir" versus "[.*]", etc.
+ "directory foo" and "directory [.foo]" list the files in the [.FOO]
+ subdirectory, but "directory foo.dir" lists the directory file
+ itself; similarly for "*.dir" versus "[.*]", etc.
* In UNIX, if "foo" is a directory within your current directory,
"directory foo" lists the files in the foo directory. If you want
to list the foo directory file itself, put an asterisk at the end:
DEFINE DL DIR /DIR /SORT:NAME /ASCEND \%* ; Alphabetical directory list
Put these definitions in your C-Kermit customization file. Note that
- "\%*" ([467]Section 7.5) in these definitions lets you include other
+ "\%*" ([475]Section 7.5) in these definitions lets you include other
switches in your macro invocations, e.g.:
wd /headings *.txt
!dir /size/date/prot/exc=*.obj oofa.*;0
- In UNIX, use "!ls" or just "ls" (which is a special synonym for
- "!ls").
- _________________________________________________________________
+ In UNIX, use "!ls" or just "ls" (which is a special synonym for "!ls").
- 4.5.2. The CD and BACK Commands
+4.5.2. The CD and BACK Commands
In C-Kermit 7.0, the CD command has a new friend, the BACK command.
BACK means "CD to my previous current directory". A second BACK brings
you back to where you were before the first one; thus successive BACK
commands switch back and forth between two directories.
- 4.5.2.1. Parsing Improvements
+4.5.2.1. Parsing Improvements
The CD command, as well as other commands that parse a directory name,
were changed in 7.0 to provide all the expected functions: completion
In VMS, the situation is a bit complicated since a directory name can
look like "DEV:", "[FOO.BAR]", "DEV:[FOO.BAR]", "[FOO]BAR.DIR;1", etc.
- Completion and ?-help might not always work, but they do in many
- cases. Examples:
+ Completion and ?-help might not always work, but they do in many cases.
+ Examples:
cd ? Lists all subdirectories of the current directory
cd []? Ditto
cd bar.dir;
cd bar.dir;1
cd [foo.bar]
+ cd <foo.bar>
cd bar.baz This can go more than 1 level deep...
cd dir: (where logical name DIR is defined as [FOO.BAR])
"
cd {-}" have the desired effect (and so does "cd ..", which is easier
to type).
- _________________________________________________________________
- 4.5.2.2. The CDPATH
+4.5.2.2. The CDPATH
The CD command in the UNIX, Windows, OS/2, and VMS versions of
- C-Kermit, as of version 6.1 / 1.1.12, searches the CDPATH for the
- given directory, if it is not absolute and if a CDPATH environment
- variable is defined. Example (in UNIX ksh or bash):
+ C-Kermit, as of version 6.1 / 1.1.12, searches the CDPATH for the given
+ directory, if it is not absolute and if a CDPATH environment variable
+ is defined. Example (in UNIX ksh or bash):
$ export CDPATH=$HOME:$HOME/kermit:/tmp
Now if you give a "cd xxx" command, no matter what your current
directory is, if the "xxx" directory is not a subdirectory of your
current directory, then the xxx subdirectory of your home directory is
- used or if that does not exist, then the xxx subdirectory of the
- kermit subdirectory of your home directory is used or if that does not
- exist, then /tmp/xxx is used. This is how the ksh "cd" command works,
- and now the C-Kermit CD command works the same way.
+ used or if that does not exist, then the xxx subdirectory of the kermit
+ subdirectory of your home directory is used or if that does not exist,
+ then /tmp/xxx is used. This is how the ksh "cd" command works, and now
+ the C-Kermit CD command works the same way.
In VMS, you can define CDPATH to be a list of directories that contain
actual directory delimiters, and/or logical names representing
SHOW CD shows the CD path and all other information relevant to the CD
command.
- _________________________________________________________________
- 4.5.2.3. CD Messages
+4.5.2.3. CD Messages
Whenever you change directory, you can have C-Kermit display a "Read
Me" file from the new directory automatically. The commands are:
SET CD MESSAGE { ON, OFF, FILE list }
ON enables this feature; OFF (the default) disables it. File
- lets you specify the name of the "Read Me" file. A list of
- names to look for can be given in the following format:
+ lets you specify the name of the "Read Me" file. A list of names
+ to look for can be given in the following format:
{{name1}{name2}{name3}{...}}
SHOW CD shows your current directory, previous directory, CD path, and
CD message info.
- _________________________________________________________________
- 4.5.3. Creating and Removing Directories
+4.5.3. Creating and Removing Directories
The MKDIR command now allows you to create multiple directories at
once:
nor will it remove a directory that contains any files. (There is, as
yet, no RMDIR /RECURSIVE command, although one might be added later.)
- In VMS, these commands (like CD) are more forgiving of your syntax
- than is the DCL command shell; "mkdir oofa" is equivalent to "mkdir
- [.oofa]" and so on. Also in VMS, you'll find that C-Kermit's RMDIR
- command is easier than deleting a directory in DCL, since it
- automatically first gives it owner delete permission if you are the
- owner.
- _________________________________________________________________
+ In VMS, these commands (like CD) are more forgiving of your syntax than
+ is the DCL command shell; "mkdir oofa" is equivalent to "mkdir [.oofa]"
+ and so on. Also in VMS, you'll find that C-Kermit's RMDIR command is
+ easier than deleting a directory in DCL, since it automatically first
+ gives it owner delete permission if you are the owner.
- 4.5.4. The DELETE and PURGE Commands
+4.5.4. The DELETE and PURGE Commands
The DELETE command now offers a selection of switches, and has a new
companion, the PURGE command. First, DELETE:
DELETE [ switches... ] filespec
Deletes the file or files that match the filespec, which may
- contain wildcards ([468]Section 4.9).
+ contain wildcards ([476]Section 4.9).
Optional switches include the standard file-selection switches
- presented in [469]Section 1.5.4, plus:
+ presented in [477]Section 1.5.4, plus:
/ASK
- Before deleting each file, ask permission interactively.
- Answers are Yes or OK (delete the file), No (don't delete it),
- or Quit (stop executing the DELETE command).
+ Before deleting each file, ask permission interactively. Answers
+ are Yes or OK (delete the file), No (don't delete it), or Quit
+ (stop executing the DELETE command).
/NOASK
Don't ask permission to delete each file.
terminates.
/SIMULATE
- Do everything implied by the given switches and filespec,
- except do not actually delete any files. This lets you preview
- which files would be deleted; implies /LIST.
+ Do everything implied by the given switches and filespec, except
+ do not actually delete any files. This lets you preview which
+ files would be deleted; implies /LIST.
Now the PURGE command:
PURGE [ switches... ] [ filespec ]
- (VMS only) Runs the DCL PURGE command. Switches and filespec,
- if any, are passed directly to DCL without parsing or
- verification. Deletes excess versions of the given (or all)
- files. The rest of this section does not apply to VMS.
+ (VMS only) Runs the DCL PURGE command. Switches and filespec, if
+ any, are passed directly to DCL without parsing or verification.
+ Deletes excess versions of the given (or all) files. The rest of
+ this section does not apply to VMS.
PURGE [ switches... ] [ filespec ]
(UNIX only) Deletes "backup files" that match the filespec,
- which may contain wildcards ([470]Section 4.9). If no filespec
- is given, all backup files in the current directory are
- selected (subject to modification by any switches). Do not
- include backup notation in the filespec.
+ which may contain wildcards ([478]Section 4.9). If no filespec
+ is given, all backup files in the current directory are selected
+ (subject to modification by any switches). Do not include backup
+ notation in the filespec.
Explanation:
To avoid destroying preexisting files when a new file arrives that has
the same name, C-Kermit backs up the old file by appending a "backup
- number" to its name. In UNIX, the backup suffix consists of a period,
- a tilde, a number, and another tilde. For example, if a file called
+ number" to its name. In UNIX, the backup suffix consists of a period, a
+ tilde, a number, and another tilde. For example, if a file called
oofa.txt exists and a new oofa.txt file arrives, the original is
- renamed to oofa.txt.~1~. If another oofa.txt file arrives, the
- existing one is renamed to oofa.txt.~2~. And so on. This system is
- compatible with the one used by EMACS. Thus over time, if you receive
- a lot of files with C-Kermit or edit them with EMACS, backup files can
- build up. The new PURGE command lets you clean out accumulated backup
- files:
+ renamed to oofa.txt.~1~. If another oofa.txt file arrives, the existing
+ one is renamed to oofa.txt.~2~. And so on. This system is compatible
+ with the one used by EMACS. Thus over time, if you receive a lot of
+ files with C-Kermit or edit them with EMACS, backup files can build up.
+ The new PURGE command lets you clean out accumulated backup files:
Optional switches include the standard file-selection switches
- presented in [471]Section 1.5.4, plus all the switches listed above
- for the DELETE command, plus:
+ presented in [479]Section 1.5.4, plus all the switches listed above for
+ the DELETE command, plus:
/KEEP:n
Retains the n most recent (highest-numbered) backup files for
- each file. For example, if oofa.txt, oofa.txt.~1~,
- oofa.txt.~2~, oofa.txt.~10~, oofa.txt.~12~, and oofa.txt.~100~
- exist, "purge /keep:2 oofa.txt" deletes oofa.txt.~1~,
- oofa.txt.~2~, and oofa.txt.~10~, and keeps oofa.txt,
- oofa.txt.~12~, and oofa.txt.~100~. If /KEEP is given without a
- number, one (the highest numbered) backup file is kept.
+ each file. For example, if oofa.txt, oofa.txt.~1~, oofa.txt.~2~,
+ oofa.txt.~10~, oofa.txt.~12~, and oofa.txt.~100~ exist, "purge
+ /keep:2 oofa.txt" deletes oofa.txt.~1~, oofa.txt.~2~, and
+ oofa.txt.~10~, and keeps oofa.txt, oofa.txt.~12~, and
+ oofa.txt.~100~. If /KEEP is given without a number, one (the
+ highest numbered) backup file is kept.
CAUTION: The PURGE command should be used only when *.~*~ files truly
- are backup files. This is the case for EMACS, and it is the DEFAULT
- for C-Kermit. However, if C-Kermit's FILE COLLISION has been set to
- RENAME, newly received files will look like backup files. In that
- case, don't use the PURGE command or you'll be removing new files
- rather than old ones. (Use SHOW FILE to find the FILE COLLISION
- setting.)
+ are backup files. This is the case for EMACS, and it is the DEFAULT for
+ C-Kermit. However, if C-Kermit's FILE COLLISION has been set to RENAME,
+ newly received files will look like backup files. In that case, don't
+ use the PURGE command or you'll be removing new files rather than old
+ ones. (Use SHOW FILE to find the FILE COLLISION setting.)
The PURGE command is presently available only in UNIX. The command
succeeds if it deleted any files, or if it deleted no files but there
were no errors. It fails if it deleted no files and there were errors
(i.e. deletion was attempted but failed). In VMS, backup file versions
- are handled automatically by the OS, and a PURGE command can be used
- at the VMS prompt to clean them up.
+ are handled automatically by the OS, and a PURGE command can be used at
+ the VMS prompt to clean them up.
If you want certain switches to be supplied automatically with each
DELETE or PURGE command, you can set them with SET OPTIONS
- ([472]Section 1.5.5) and you can display any such settings with SHOW
+ ([480]Section 1.5.5) and you can display any such settings with SHOW
OPTIONS. Of course you can override them on a per-command basis by
including switches in your PURGE or DELETE command.
Also see SET FILE COLLISION, SHOW FILE, SEND /NOBACKUP, SET SEND
BACKUP, and DIRECTORY /[NO]BACKUP.
- _________________________________________________________________
- 4.6. Starting the Remote Kermit Server Automatically
+4.6. Starting the Remote Kermit Server Automatically
- As noted on pages 275-276 of [473]Using C-Kermit 2nd edition, you can
+ As noted on pages 275-276 of [481]Using C-Kermit 2nd edition, you can
have Kermit send "kermit receive" commands automatically when it is in
local mode and you give a SEND or similar command, to start the remote
- Kermit receiver in case it is not already started. The "kermit
- receive" commands are specified by:
+ Kermit receiver in case it is not already started. The "kermit receive"
+ commands are specified by:
SET PROTOCOL KERMIT binary-receive-command text-receive-command
string to the host in advance of any Kermit packets when you give a
GET-class or REMOTE command. This will switch the remote C-Kermit into
the appropriate mode or, if the remote system is at a system command
- (shell) prompt, execute the string on the remote system. The new
- syntax of the SET PROTOCOL KERMIT command is:
+ (shell) prompt, execute the string on the remote system. The new syntax
+ of the SET PROTOCOL KERMIT command is:
SET PROTOCOL KERMIT [ s1 [ s2 [ s3 ] ] ]
NOTE: If the remote Kermit is 6.0, the following are recommended for
fast startup and high-performance file transfer (see Appendix I in
- [474]Using C-Kermit, second Edition, for command-line options):
+ [482]Using C-Kermit, second Edition, for command-line options):
s1 kermit -YQir (Kermit receive binary, skip init file, fast.)
s2 kermit -YQTr (Kermit receive text, skip init file, fast.)
s3 kermit -YQx (Kermit server, skip init file, fast.)
If the remote is C-Kermit 7.0 or later, change the -x option (enter
- server mode) to -O (uppercase letter O), which means "enter server
- mode for One transaction only); this way, it is not stuck in server
- after the transfer. Also note that the Q is redundant in version 7.0,
- since fast Kermit protocol settings are now the default.
+ server mode) to -O (uppercase letter O), which means "enter server mode
+ for One transaction only); this way, it is not stuck in server after
+ the transfer. Also note that the Q is redundant in version 7.0, since
+ fast Kermit protocol settings are now the default.
Note that in case the C-Kermit executable is called "wermit" or
"ckermit" you can change "kermit" in the strings above to "wermit" or
"ckermit" and C-Kermit 7.0 or later will recognize these as synonyms
for "kermit", in case it is at its command prompt when one of these
strings is sent to it.
- _________________________________________________________________
- 4.7. File-Transfer Command Switches
+4.7. File-Transfer Command Switches
Over the years, various new methods of transferring a file have
accumulated, until we had, in addition to the SEND command, also MOVE
(send and then delete), MAIL (send as email), REMOTE PRINT (send to be
- printed), CSEND (send the output of a command), PSEND (send a part of
- a file), BSEND (send in binary mode), RESEND (resume an interrupted
+ printed), CSEND (send the output of a command), PSEND (send a part of a
+ file), BSEND (send in binary mode), RESEND (resume an interrupted
SEND), etc etc. Similarly: GET, REGET, CGET, RETRIEVE, and so on.
Not only is it confusing to have different names for these commands,
combinations, like "send a file as mail, then delete it".
In C-Kermit 7.0, the SEND, GET, and RECEIVE commands were restructured
- to accept modifier switches (switches are explained in [475]Section
+ to accept modifier switches (switches are explained in [483]Section
1.5).
- _________________________________________________________________
- 4.7.1. SEND Command Switches
+4.7.1. SEND Command Switches
Without switches, the SEND command still works exactly as before:
But now the following modifier switches may be included between "send"
and the filename. Zero, one, two, or more switches may be included in
- any combination that makes sense. Switch names (such as /BINARY) can
- be abbreviated, just like any other keywords. Most of these switches
- work only when using Kermit protocol (/TEXT and /BINARY are the
- exceptions).
+ any combination that makes sense. Switch names (such as /BINARY) can be
+ abbreviated, just like any other keywords. Most of these switches work
+ only when using Kermit protocol (/TEXT and /BINARY are the exceptions).
/AFTER:date-time
Specifies that only those files modified (or, in VMS, created)
- after the given date-time (see [476]Section 1.6) are to be
- sent. Examples:
+ after the given date-time (see [484]Section 1.6) are to be sent.
+ Examples:
send /text /after:{2-Feb-1997 10:28:30} *.txt
send /text /after:\fdate(oofa.txt) *.txt
filename, you should include an /AS-NAME switch to specify the
name under which the array is to be sent (if you do not, the
name "_array_x_" is used, where 'x' is replaced by the array
- designator). See [477]section 7.10 for array-name syntax. As
+ designator). See [485]section 7.10 for array-name syntax. As
noted in that section, you can also include a range to have a
segment of the array sent, rather than the whole thing; for
example: "send /array:&a[100:199]". It is strongly recommended
switch to force the desired transfer mode, since otherwise the
various automatic mechanisms might switch to binary mode when
you really wanted text, or vice versa. In text mode a line
- terminator is added to the end of each array element, but not
- in binary mode. For details and examples see [478]Section
- 7.10.11.
+ terminator is added to the end of each array element, but not in
+ binary mode. For details and examples see [486]Section 7.10.11.
/AS-NAME:text
Specifies "text" as the name to send the file under. You can
/BEFORE:date-time
Specifies that only those files modified (or, in VMS, created)
- before the given date-time ([479]Section 1.6) are to be sent.
+ before the given date-time ([487]Section 1.6) are to be sent.
/BINARY
Performs this transfer in binary mode without affecting the
send oofa.txt ; This one is sent in text mode
/COMMAND
- SEND /COMMAND is equivalent to CSEND ([480]Section 4.2.2) -- it
- says to send the output from a command, rather than the
- contents of a file. The first "filename" on the SEND command
- line is interpreted as the name of a command; the second (if
- any) is the as-name. Examples:
+ SEND /COMMAND is equivalent to CSEND ([488]Section 4.2.2) -- it
+ says to send the output from a command, rather than the contents
+ of a file. The first "filename" on the SEND command line is
+ interpreted as the name of a command; the second (if any) is the
+ as-name. Examples:
send /command {grep Sunday oofa.txt} sunday.txt
send /as-name:sunday.txt /command {grep Sunday oofa.txt}
/DELETE
Deletes the file (or each file in the group) after it has been
sent successfully (but does not delete it if it was not sent
- successfully). SEND /DELETE is equivalent to MOVE. Has no
- effect when used with /COMMAND. Example:
+ successfully). SEND /DELETE is equivalent to MOVE. Has no effect
+ when used with /COMMAND. Example:
send /delete *.log
/DOTFILES
(UNIX and OS-9 only) Normally files whose names begin with "."
- are skipped when matching wildcards that do not also beging
- with ".". Include /DOTFILES to force these files to be included
- too.
+ are skipped when matching wildcards that do not also begin with
+ ".". Include /DOTFILES to force these files to be included too.
/RECURSIVE
Descend the through the directory tree when locating files to
send. Automatically sets /PATHNAMES:RELATIVE. Explained in
- [481]Section 4.11 .
+ [489]Section 4.11 .
/EXCEPT:pattern
- See [482]Section 1.5.4.
+ See [490]Section 1.5.4.
/NOBACKUP
- This means to skip backup files when sending, even if they
- match the SEND file specification. This is equivalent to using
- SEND /EXCEPT and including *.~[0-9]*~ in the exception list (or
- *.~*~ if Kermit was built without pattern-matching support; see
- [483]Section 4.9.1). Including this switch is equivalent to
- giving SET SEND BACKUP OFF ([484]Section 4.0.6) prior to SEND,
- except its effect is local to the SEND command with which it
- was given.
+ This means to skip backup files when sending, even if they match
+ the SEND file specification. This is equivalent to using SEND
+ /EXCEPT and including *.~[0-9]*~ in the exception list (or *.~*~
+ if Kermit was built without pattern-matching support; see
+ [491]Section 4.9.1). Including this switch is equivalent to
+ giving SET SEND BACKUP OFF ([492]Section 4.0.6) prior to SEND,
+ except its effect is local to the SEND command with which it was
+ given.
/NODOTFILES
The opposite of /DOTFILES (q.v.)
/FILTER:command
This specifies a filter to pass the file through before sending
- it. See the [485]section on file-transfer pipes and filters.
- The /FILTER switch applies only to the file-transfer command it
- is given with; it does not affect the global SEND FILTER
- setting, if any.
+ it. See the [493]section on file-transfer pipes and filters. The
+ /FILTER switch applies only to the file-transfer command it is
+ given with; it does not affect the global SEND FILTER setting,
+ if any.
/IMAGE
VMS: Sends in image mode. Non-VMS: same as /BINARY.
x.x
(but without leading or trailing spaces), then the C-Kermit
- command "send /listfile:files.txt" will send the files
- blah.txt, x.x, and all files whose names start with "oofa",
- assuming the files exist and are readable. The /LISTFILE
- switch, can, of course, be used with other switches when it
- makes sense, for example, /EXCEPT, /BINARY, /AFTER, /SMALLER,
- /MOVE-TO, /DELETE, /AS-NAME with a template, etc.
+ command "send /listfile:files.txt" will send the files blah.txt,
+ x.x, and all files whose names start with "oofa", assuming the
+ files exist and are readable. The /LISTFILE switch, can, of
+ course, be used with other switches when it makes sense, for
+ example, /EXCEPT, /BINARY, /AFTER, /SMALLER, /MOVE-TO, /DELETE,
+ /AS-NAME with a template, etc.
/MAIL:address
Sends the file as e-mail to the given address or addresses.
/PATHNAMES:{OFF,ABSOLUTE,RELATIVE}
Use this switch to override the current global SET SEND
- PATHNAMES setting for this transfer only. /PATHNAMES:ABSOLUTE
- or RELATIVE also sets /FILENAMES:LITERAL (also for this
- transfer only) since pathnames are not sent otherwise.
+ PATHNAMES setting for this transfer only. /PATHNAMES:ABSOLUTE or
+ RELATIVE also sets /FILENAMES:LITERAL (also for this transfer
+ only) since pathnames are not sent otherwise.
/RENAME-TO:text
Specifies that after the (or each) source file is sent
renamed to the name given. If the name contains spaces, enclose
it in braces. If a file group is being sent, then the "text"
must contain a variable reference such as \v(filename) (see
- [486]Section 4.1). Example:
+ [494]Section 4.1). Example:
send /rename-to:ok_\v(filename) *.*
- This sends each file in the current directory and if it was
- sent successfully, changes its name to begin with "ok_".
+ This sends each file in the current directory and if it was sent
+ successfully, changes its name to begin with "ok_".
/SMALLER-THAN:number
Specifies that only those files that are smaller than the given
/SUBJECT:text
Subject for email. Actually, this is just a synonym for
/AS-NAME. If the text includes spaces, you must enclose it in
- braces. If you don't specify a subject (or as-name), the name
- of the file is used as the subject. Example:
+ braces. If you don't specify a subject (or as-name), the name of
+ the file is used as the subject. Example:
send /mail:kermit-support@columbia.edu /subj:{As requested} packet.log
mode; SEND /RECOVER and RESEND include an implied /BINARY
switch. Even then, recovery will successful only if (a) the
original (interrupted) transfer was also in binary mode, or (b)
- if it was in text mode, the two Kermit programs run on
- platforms where text-mode transfers are not length-changing.
+ if it was in text mode, the two Kermit programs run on platforms
+ where text-mode transfers are not length-changing.
/STARTING:number
Starts sending the file from the given byte position. SEND
/STARTING:n filename is equivalent to PSEND filename n.
/TEXT
- Performs this transfer in text mode without affecting the
- global transfer mode, overriding not only the FILE TYPE and
- TRANSFER MODE settings, but also the FILE PATTERN setting, for
- this SEND command only. In other words, SEND /TEXT really send
- the file in text mode, regardless of any other settings or
- negotiations.
+ Performs this transfer in text mode without affecting the global
+ transfer mode, overriding not only the FILE TYPE and TRANSFER
+ MODE settings, but also the FILE PATTERN setting, for this SEND
+ command only. In other words, SEND /TEXT really send the file in
+ text mode, regardless of any other settings or negotiations.
- About mail... Refer to [487]Section 4.7.1. The same rules apply as for
+ About mail... Refer to [495]Section 4.7.1. The same rules apply as for
file transfer. If you are mailing multiple files, you can't use an
as-name (in this case, a subject) unless it contains replacement
variables like \v(filenum). For example, if you:
send /mail:somebody@xyz.com *.txt
- Then each file will arrive as a separate email message with its name
- as the subject. But if you:
+ Then each file will arrive as a separate email message with its name as
+ the subject. But if you:
send /mail:somebody@xyz.com /subject:{Here is a file} *.txt
The MOVE, CSEND, MAIL, and RESEND commands now also accept the same
switches. And the switches are also operative when sending from a
- SEND-LIST (see [488]Using C-Kermit, 2nd Ed, pp.191-192), so, for
+ SEND-LIST (see [496]Using C-Kermit, 2nd Ed, pp.191-192), so, for
example, it is now possible to SEND /PRINT or SEND /MAIL from a
SEND-LIST.
The MSEND and MMOVE commands also take switches, but not all of them.
- With these commands, which take an arbitrary list of filespecs, you
- can use /BINARY, /DELETE, /MAIL, /PRINT, /PROTOCOL, /QUIET, /RECOVER,
- and /TEXT (and /IMAGE or /LABELED, depending on the platform). MMOVE
- is equivalent to MSEND /DELETE. (If you want to send a group of files,
- but in mixed transfer modes with per-file as-names, use ADD SEND-LIST
- and then SEND.)
+ With these commands, which take an arbitrary list of filespecs, you can
+ use /BINARY, /DELETE, /MAIL, /PRINT, /PROTOCOL, /QUIET, /RECOVER, and
+ /TEXT (and /IMAGE or /LABELED, depending on the platform). MMOVE is
+ equivalent to MSEND /DELETE. (If you want to send a group of files, but
+ in mixed transfer modes with per-file as-names, use ADD SEND-LIST and
+ then SEND.)
- The MSEND/MMOVE switches come before the filenames, and apply to all
- of them:
+ The MSEND/MMOVE switches come before the filenames, and apply to all of
+ them:
msend /print /text *.log oofa.txt /etc/motd
- If you type any of these commands (SEND, CSEND, MSEND, etc) followed
- by a question mark (?), you will see a list of the switches you can
- use. If you want to see a list of filenames, you'll need to type
- something like "send ./?" (UNIX, OS/2, Windows, etc), or "send []?"
- (VMS), etc. Of course, you can also type pieces of a filename
- (anything that does not start with "/") and then "?" to get a list of
- filenames that start that way; e.g. "send x.?" still works as before.
+ If you type any of these commands (SEND, CSEND, MSEND, etc) followed by
+ a question mark (?), you will see a list of the switches you can use.
+ If you want to see a list of filenames, you'll need to type something
+ like "send ./?" (UNIX, OS/2, Windows, etc), or "send []?" (VMS), etc.
+ Of course, you can also type pieces of a filename (anything that does
+ not start with "/") and then "?" to get a list of filenames that start
+ that way; e.g. "send x.?" still works as before.
- In UNIX, where "/" is also the directory separator, there is usually
- no ambiguity between a fully-specified pathname and a switch, except
- when a file in the root directory has the same name as a switch (as
- noted in [489]Section 1.5):
+ In UNIX, where "/" is also the directory separator, there is usually no
+ ambiguity between a fully-specified pathname and a switch, except when
+ a file in the root directory has the same name as a switch (as noted in
+ [497]Section 1.5):
send /etc/motd ; Works as expected
send /command ; ???
or other system-dependent forms such as //command, /./command,
c:/command, etc, or cd to / and then "send command".
- _________________________________________________________________
- 4.7.2. GET Command Switches
+4.7.2. GET Command Switches
- Without switches, the GET command still works about the same as
- before:
+ Without switches, the GET command still works about the same as before:
get oofa.txt ; GET a single file
get oofa.* ; GET multiple files
remote-filespec
local-name
- This was because the remote filespec might contain spaces, and so
- there would be no good way of telling where it ended and where the
- local name began, e.g:
+ This was because the remote filespec might contain spaces, and so there
+ would be no good way of telling where it ended and where the local name
+ began, e.g:
get profile exec a foo
But now since we can use {braces} for grouping, we don't need the
multiline GET form any more, and in fact, support for it has been
- removed. If you give a GET command by itself on a line, it fails and
- an error message is printed. The new form is:
+ removed. If you give a GET command by itself on a line, it fails and an
+ error message is printed. The new form is:
GET [ switches... ] remote-name [ local-name ]
Ask the server to send the file whose name is remote-name. If
or later or K95 1.1.19 or later.
/COMMAND
- GET /COMMAND is equivalent to CGET ([490]Section 4.2.2) -- it
+ GET /COMMAND is equivalent to CGET ([498]Section 4.2.2) -- it
says to receive the file into the standard input of a command,
rather than saving it on disk. The /AS-NAME or the second
- "filename" on the GET command line is interpreted as the name
- of a command. Examples:
+ "filename" on the GET command line is interpreted as the name of
+ a command. Examples:
get /command sunday.txt {grep Sunday oofa.txt}
get /command /as-name:{grep Sunday oofa.txt} sunday.txt
/EXCEPT:{{pattern1}{pattern2}...}
- See the description of SEND /EXCEPT in [491]Section 4.7.1 for
+ See the description of SEND /EXCEPT in [499]Section 4.7.1 for
examples, etc. Refusal is accomplished using the Attribute
Rejection mechanism (reason "name"), which works only when
Attribute packets have been successfully negotiated.
setting for this transfer only.
/FILTER:command
- This specifies a filter to pass the incoming file through
- before writing to disk. See the [492]section on file-transfer
- pipes and filters. The /FILTER switch applies only to the
- file-transfer command it is given with; it does not affect the
- global RECEIVE FILTER setting, if any.
+ This specifies a filter to pass the incoming file through before
+ writing to disk. See the [500]section on file-transfer pipes and
+ filters. The /FILTER switch applies only to the file-transfer
+ command it is given with; it does not affect the global RECEIVE
+ FILTER setting, if any.
/IMAGE
VMS: Transfer in image mode. Non-VMS: same as /BINARY.
/MOVE-TO:directory
This tells C-Kermit to move each file that is successfully
- received to the given directory. Files that are not
- successfully received are not moved. By default, files are not
- moved.
+ received to the given directory. Files that are not successfully
+ received are not moved. By default, files are not moved.
/PATHNAMES:{OFF,ABSOLUTE,RELATIVE,AUTO}
Use this switch to override the current global SET RECEIVE
- PATHNAMES setting for this transfer only. /PATHNAMES:ABSOLUTE
- or RELATIVE also sets /FILENAMES:LITERAL (also for this
- transfer only) since incoming pathnames would not be treated as
- pathnames otherwise. See [493]Section 4.10.
+ PATHNAMES setting for this transfer only. /PATHNAMES:ABSOLUTE or
+ RELATIVE also sets /FILENAMES:LITERAL (also for this transfer
+ only) since incoming pathnames would not be treated as pathnames
+ otherwise. See [501]Section 4.10.
/QUIET
When sending in local mode, this suppresses the file-transfer
mode; SEND /RECOVER and RESEND include an implied /BINARY
switch. Even then, recovery will successful only if (a) the
original (interrupted) transfer was also in binary mode, or (b)
- if it was in text mode, the two Kermit programs run on
- platforms where text-mode transfers are not length-changing.
+ if it was in text mode, the two Kermit programs run on platforms
+ where text-mode transfers are not length-changing.
/RECURSIVE
Tells the server that the GET file specification applies
recursively. This switch also automatically sets
- /PATHNAMES:RELATIVE in both the server AND the client. When
- used in conjunction with /DELETE, this "moves" a directory tree
- from the server's computer to the client's computer (except
- that only regular files are deleted from the server's computer,
- not directories; thus the original directories will be left,
- but will contain no files). Note that all servers that support
+ /PATHNAMES:RELATIVE in both the server AND the client. When used
+ in conjunction with /DELETE, this "moves" a directory tree from
+ the server's computer to the client's computer (except that only
+ regular files are deleted from the server's computer, not
+ directories; thus the original directories will be left, but
+ will contain no files). Note that all servers that support
/RECURSIVE do not necessarily do so in combination with other
switches, such as /RECOVER. (Servers that do include C-Kermit
7.0 and later, K95 1.1.19 and later.)
/RENAME-TO:string
This tells C-Kermit to rename each file that is successfully
received to the given string. Files that are not successfully
- received are not renamed. By default, files are not renamed.
- The string can be a literal string, which is appropriate when
- only one file is being received, or it can contain one or more
+ received are not renamed. By default, files are not renamed. The
+ string can be a literal string, which is appropriate when only
+ one file is being received, or it can contain one or more
variables that are to be evaluated at the time each file is
received, such as \v(filename), \v(filenumber), \v(ntime),
\v(pid), \v(user), etc. WARNING: if you give a literal string
- and more than one file arrives, each incoming file will be
- given the same name (but SET FILE COLLISION BACKUP or RENAME
- can be used to keep the incoming files from overwriting each
- other).
+ and more than one file arrives, each incoming file will be given
+ the same name (but SET FILE COLLISION BACKUP or RENAME can be
+ used to keep the incoming files from overwriting each other).
/TEXT
Tells the server to perform this transfer in text mode without
The CGET, REGET, RETRIEVE commands also accept the same switches as
GET. CGET automatically sets /COMMAND; REGET automatically sets
/RECOVER and /BINARY, and RETRIEVE automatically sets /DELETE.
- _________________________________________________________________
- 4.7.3. RECEIVE Command Switches
+4.7.3. RECEIVE Command Switches
Without switches, the RECEIVE command still works as before:
/BINARY
Performs this transfer in binary mode without affecting the
global transfer mode. NOTE: This does not override the incoming
- filetype (as it does with GET), so this switch is useful only
- if ATTRIBUTE TYPE is OFF, or if the other Kermit does not send
- a TYPE (text or binary) attribute. In any case, it has no
- affect whatsoever on the file sender.
+ filetype (as it does with GET), so this switch is useful only if
+ ATTRIBUTE TYPE is OFF, or if the other Kermit does not send a
+ TYPE (text or binary) attribute. In any case, it has no affect
+ whatsoever on the file sender.
/COMMAND
- RECEIVE /COMMAND is equivalent to CRECEIVE ([494]Section 4.2.2)
+ RECEIVE /COMMAND is equivalent to CRECEIVE ([502]Section 4.2.2)
-- it says to receive the file into the standard input of a
command, rather than saving it on disk. The /AS-NAME or the
"filename" on the RECEIVE command line is interpreted as the
/EXCEPT:{{pattern1}{pattern2}...}
- See the description of SEND /EXCEPT in [495]Section 4.7.1 for
+ See the description of SEND /EXCEPT in [503]Section 4.7.1 for
examples, etc. Refusal is accomplished using the Attribute
Rejection mechanism (reason "name"), which works only when
Attribute packets have been successfully negotiated.
setting for this transfer only.
/FILTER:command
- This specifies a filter to pass the incoming file through
- before writing to disk. See the [496]section on file-transfer
- pipes and filters. The /FILTER switch applies only to the
- file-transfer command it is given with; it does not affect the
- global RECEIVE FILTER setting, if any.
+ This specifies a filter to pass the incoming file through before
+ writing to disk. See the [504]section on file-transfer pipes and
+ filters. The /FILTER switch applies only to the file-transfer
+ command it is given with; it does not affect the global RECEIVE
+ FILTER setting, if any.
/IMAGE
VMS: Transfer in image mode. Non-VMS: same as /BINARY. See
comments under RECEIVE /BINARY.
/LABELED
- VMS and OS/2 only: Specifies labeled transfer mode. See
- comments under RECEIVE /BINARY.
+ VMS and OS/2 only: Specifies labeled transfer mode. See comments
+ under RECEIVE /BINARY.
/MOVE-TO:directory
This tells C-Kermit to move each file that is successfully
- received to the given directory. Files that are not
- successfully received are not moved. By default, files are not
- moved.
+ received to the given directory. Files that are not successfully
+ received are not moved. By default, files are not moved.
/PATHNAMES:{ABSOLUTE,RELATIVE,OFF,AUTO}
Use this switch to override the current global SET RECEIVE
- PATHNAMES setting for this transfer only. See [497]Section
- 4.10.
+ PATHNAMES setting for this transfer only. See [505]Section 4.10.
/RECURSIVE
When used with the RECEIVE command, /RECURSIVE is simply a
/RENAME-TO:string
This tells C-Kermit to rename each file that is successfully
received to the given string. Files that are not successfully
- received are not renamed. By default, files are not renamed.
- The string can be a literal string, which is appropriate when
- only one file is being received, or it can contain one or more
+ received are not renamed. By default, files are not renamed. The
+ string can be a literal string, which is appropriate when only
+ one file is being received, or it can contain one or more
variables that are to be evaluated at the time each file is
received, such as \v(filename), \v(filenumber), \v(ntime),
\v(pid), \v(user), etc. WARNING: if you give a literal string
- and more than one file arrives, each incoming file will be
- given the same name (but SET FILE COLLISION BACKUP or RENAME
- can be used to keep the incoming files from overwriting each
- other).
+ and more than one file arrives, each incoming file will be given
+ the same name (but SET FILE COLLISION BACKUP or RENAME can be
+ used to keep the incoming files from overwriting each other).
/QUIET
When receiving in local mode, this suppresses the file-transfer
receive prn
The CRECEIVE command now also accepts the same switches.
- _________________________________________________________________
- 4.8. Minor Kermit Protocol Improvements
+4.8. Minor Kermit Protocol Improvements
- 4.8.1. Multiple Attribute Packets
+4.8.1. Multiple Attribute Packets
C-Kermit 7.0 now sends more than one Attribute packet if a file's
- attributes do not fit into a single packet of the negotiated length.
- If a particular attribute (such as file creation date-time) does not
- fit within the negotiated length (which will only happen when the
+ attributes do not fit into a single packet of the negotiated length. If
+ a particular attribute (such as file creation date-time) does not fit
+ within the negotiated length (which will only happen when the
negotiated length is around 20 or less), that attribute is not sent at
all.
- 4.8.2. Very Short Packets
+4.8.2. Very Short Packets
There are certain situations where extremely short packets must be
used; 20 or 30 bytes at most. This can happen when one or more devices
along the communication path have very small buffers and lack an
- effective means of flow control. Examples are sometimes cited
- involving radio modems.
+ effective means of flow control. Examples are sometimes cited involving
+ radio modems.
When the maximum packet length is shorter than certain packets that
would be sent, those packets are either truncated or else broken up
to the negotiated length. Any parameters that do not fit are reset
to their default values. There is no provision in the Kermit
protocol for fragmentation and reassembly of parameter strings.
- 2. File header packets (containing the filename) are simply
- truncated. There is no provision in the Kermit protocol for
- fragmentation and reassembly of filenames.
+ 2. File header packets (containing the filename) are simply truncated.
+ There is no provision in the Kermit protocol for fragmentation and
+ reassembly of filenames.
3. Attribute packets are fragmented and reassembled as described in
4.8.1 without loss of data, except in case a field will not fit at
all in the negotiated length (the longest attribute is usually the
that attributes may not be broken across packets.
4. Data packets and other packets are unaffected -- they can be as
short as they need to be, within reason.
- _________________________________________________________________
- 4.9. Wildcard / File Group Expansion
+4.9. Wildcard / File Group Expansion
"Wildcard" refers to the notation used in filenames to specify a group
of files by pattern matching.
- 4.9.1. In UNIX C-Kermit
+4.9.1. In UNIX C-Kermit
Prior to C-Kermit 7.0, C-Kermit was capable of expanding wildcard
strings containing only the "metacharacters" '*' and '?':
filenames) they may not contain directory separators.
Thus, the metacharacters in filenames (and in any other field
- that can be a pattern, such as the IF MATCH pattern, SEND or
- GET exception lists, etc) are:
+ that can be a pattern, such as the IF MATCH pattern, SEND or GET
+ exception lists, etc) are:
* ? [ {
All of these features can be used anywhere you would type a filename
that is allowed to contain wildcards.
- When you are typing at the command prompt, an extra level of quoting
- is required for the '?' character to defeat its regular function of
+ When you are typing at the command prompt, an extra level of quoting is
+ required for the '?' character to defeat its regular function of
producing a list of files that match what you have typed so far, for
example:
platforms: ckufio.c, ckutio.c, ckvfio.c, ckvtio.c, etc.
If, however, a filename actually contains a question mark and you need
- to refer to it on the command line, you must use three (3)
- backslashes. For example, if the file is actually called ck?fio.c, you
- would use:
+ to refer to it on the command line, you must use three (3) backslashes.
+ For example, if the file is actually called ck?fio.c, you would use:
send ck\\\?fio.c
Further notes on quoting:
- * A single backslash is sufficient for quoting a special character
- at the command prompt or in a command file. However, when passing
+ * A single backslash is sufficient for quoting a special character at
+ the command prompt or in a command file. However, when passing
patterns to macros you'll need double backslashes, and when
referring to these patterns within the macro, you'll need to use
- \fcontents(\%1) (see [498]Section 1.11.5). You should enclose
- macro argument references in braces in case grouped arguments were
+ \fcontents(\%1) (see [506]Section 1.11.5). You should enclose macro
+ argument references in braces in case grouped arguments were
passed. Example:
define ismatch {
if match {\fcont(\%1)} {\fcont(\%2)} {
}
ismatch ab*yz a*\\**z ; Backslash must be doubled
ismatch {abc def xyz} *b*e*y* ; Braces must be used for grouping
+
* Watch out for possible conflicts between {} in filename patterns
and {} used for grouping multiple words into a single field, when
the pattern has outer braces. For example, in:
if match {abc xyz} {a* *z} echo THEY MATCH
- braces must be used to group "abc xyz" into a single string.
- Kermit strips off the braces before comparing the string with the
- pattern. Therefore:
+
+ braces must be used to group "abc xyz" into a single string. Kermit
+ strips off the braces before comparing the string with the pattern.
+ Therefore:
if match makefile {makefile,Makefile} echo THEY MATCH
+
does not work, but:
if match makefile {{makefile,Makefile}} echo THEY MATCH
+
does.
* If you use a pattern that has outer braces, like {*.txt,*.doc}, in
- a field that accepts a pattern list (like SEND /EXCEPT:xxx),
- you'll need to add two extra sets of outer braces:
+ a field that accepts a pattern list (like SEND /EXCEPT:xxx), you'll
+ need to add two extra sets of outer braces:
send /except:{{{*.txt,*.doc}}} *.*
C-Kermit's new pattern matching capabilities are also used when
get ck[cuw]*.[cwh]
- to a C-Kermit server without having to tell it to SET WILD SHELL
- first. Previously this would have required:
+ to a C-Kermit server without having to tell it to SET WILD SHELL first.
+ Previously this would have required:
mget ckc*.c ckc*.w ckc*.h cku*.c cku*.w cku*.h ckw*.c ckw*.w ckw*.h
The new pattern matching features make SET WILD SHELL redundant, and
- barring any objections, it will eventually be phased out. (One
- possible reason for retaining it would be as an escape mechanism when
- Kermit does not understand the underlying file system.)
+ barring any objections, it will eventually be phased out. (One possible
+ reason for retaining it would be as an escape mechanism when Kermit
+ does not understand the underlying file system.)
By the way, patterns such as these are sometimes referred to as
"regular expressions", but they are not quite the same. In a true
regular expression (for example), "*" means "zero or more repetitions
- of the previous item", so (for example), "([0-9]*)" would match zero
- or more digits in parentheses. In Kermit (and in most shells), this
+ of the previous item", so (for example), "([0-9]*)" would match zero or
+ more digits in parentheses. In Kermit (and in most shells), this
matches one digit followed by zero or more characters, within
parentheses. Here are some hints:
following pattern matches Kermit backup files (with backup numbers
from 1 to 999):
*.~{[1-9],[1-9][0-9],[1-9][0-9][0-9]}~
+
* There is presently no NOT operator, so no way to match any
character or string EXCEPT the one(s) shown.
In other wildcarding news...
* You may now "send xxx" where "xxx" is a directory name, and this
- will send all the files from the directory xxx, as if you had
- typed "send xxx/*". You can also use the special shorthand "send
- ." to send all the files from the current directory.
+ will send all the files from the directory xxx, as if you had typed
+ "send xxx/*". You can also use the special shorthand "send ." to
+ send all the files from the current directory.
* To easily skip over backup files (the ones whose names end like
- .~22~) when sending, you can use SEND /NOBACKUP (see [499]Section
+ .~22~) when sending, you can use SEND /NOBACKUP (see [507]Section
4.0.6 for details).
* When choosing Kermit to expand wildcards, rather than the shell,
you can choose whether "dot files" -- files whose names begin with
".", which are normally "invisible" -- should be matched:
SET WILD KERMIT /NO-MATCH-DOT-FILES (this is the default)
SET WILD KERMIT /MATCH-DOT-FILES (this allows matching of "." files)
+
or include the /DOTFILES or /NODOTFILES switch on the command you
are using, such as SEND or DIRECTORY.
* Commands such as DIRECTORY and SEND allow recursive directory
- traversal. There are also new functions for this to use in
- scripts. See [500]Section 4.11 for details.
+ traversal. There are also new functions for this to use in scripts.
+ See [508]Section 4.11 for details.
When building file lists in UNIX, C-Kermit follows symbolic links.
Because of this, you might encounter any or all of the following
link might not be responding, or the directory you are looking at
contains a link to a huge directory tree (example: "directory
/recursive /etc" when /etc/spool is a symlink to /var/spool, which
- is a large organization's incoming email directory, containing
- tens of thousands of subdirectories).
+ is a large organization's incoming email directory, containing tens
+ of thousands of subdirectories).
The size of the file list that Kermit can build is limited in most
C-Kermit implementations. The limit, if any, depends on the
implementation. Use the SHOW FEATURES command and look in the
alphabetized options list for MAXWLD to see the value.
- 4.9.2. In Kermit 95
+4.9.2. In Kermit 95
Kermit 95 1.1.19 and later uses the same pattern matching syntax as in
UNIX, but (as always) you will encounter numerous difficulties if you
use backslash (\) as the directory separator. In any command where K95
- parses filenames itself (that is, practically any file-oriented
- command except RUN), you can use forward slash (/) as the directory
- separator to avoid all the nasty conflicts.
+ parses filenames itself (that is, practically any file-oriented command
+ except RUN), you can use forward slash (/) as the directory separator
+ to avoid all the nasty conflicts.
- 4.9.3. In VMS, AOS/VS, OS-9, VOS, etc.
+4.9.3. In VMS, AOS/VS, OS-9, VOS, etc.
Platforms other than UNIX, Windows 95/98/NT, and OS/2 have their own
filename matching capabilities that are, in general, different from
example, [] encloses directory names in VMS.
Nevertheless you can still use all the pattern-matching capabilities
- described in [501]Section 4.9.1 by loading a file list into an array
- (e.g. with \ffiles(*,&a), see [502]Section 4.11.3) and then using IF
+ described in [509]Section 4.9.1 by loading a file list into an array
+ (e.g. with \ffiles(*,&a), see [510]Section 4.11.3) and then using IF
MATCH on the members.
- _________________________________________________________________
- 4.10. Additional Pathname Controls
+4.10. Additional Pathname Controls
In version 6.0 and earlier, C-Kermit's SET { SEND, RECEIVE } PATHNAMES
command had only ON and OFF as options. In version 7.0, there are more
SET SEND PATHNAMES OFF
When sending a file, strip all disk/directory information from
the name. Example: "send /usr/olga/letters/oofa.txt" sends the
- file as "oofa.txt". This applies to actual filenames, not to
- any as-name you might specify.
+ file as "oofa.txt". This applies to actual filenames, not to any
+ as-name you might specify.
SET SEND PATHNAMES RELATIVE
When sending a file, leave the pathname on as given. For
disk letter is stripped.
SET RECEIVE PATHNAMES OFF
- When receiving a file, strip all disk/directory information
- from the name before attempting to store it. This applies to
- incoming filename, not to any as-name you might specify.
- Example: If a file arrives under the name
- "/usr/olga/letters/oofa.txt" it is stored simply as "oofa.txt"
- in your download directory or, if no download directory has
- been specified, in your current directory.
+ When receiving a file, strip all disk/directory information from
+ the name before attempting to store it. This applies to incoming
+ filename, not to any as-name you might specify. Example: If a
+ file arrives under the name "/usr/olga/letters/oofa.txt" it is
+ stored simply as "oofa.txt" in your download directory or, if no
+ download directory has been specified, in your current
+ directory.
SET RECEIVE PATHNAMES RELATIVE
When receiving a file, leave the pathname on as it appears in
created if they do not exist.
SET RECEIVE PATHNAMES ABSOLUTE
- The incoming filename is used as given. Thus it cannot be
- stored unless the given path (if any) already exists or can be
- created. In this case, node, device, or disk designations are
- NOT stripped, since they most likely were given explicitly by
- the user as an as-name, meant to be used as given.
+ The incoming filename is used as given. Thus it cannot be stored
+ unless the given path (if any) already exists or can be created.
+ In this case, node, device, or disk designations are NOT
+ stripped, since they most likely were given explicitly by the
+ user as an as-name, meant to be used as given.
SET RECEIVE PATHNAMES AUTO
This is the default, and means RELATIVE if the sender tells me
it is a recursive transfer, OFF otherwise.
- Set FILE NAMES CONVERTED now also affects pathnames too. When
- PATHNAMES are RELATIVE or ABSOLUTE and FILE NAMES are CONVERTED, the
- file sender converts its native directory-name format to UNIX format,
- and the file receiver converts from UNIX format to its native one;
- thus UNIX format is the common intermediate representation for
- directory hierarchies, as it is in the ZIP/UNZIP programs (which is
- why ZIP archives are transportable among, UNIX, DOS, and VMS).
+ Set FILE NAMES CONVERTED now also affects pathnames too. When PATHNAMES
+ are RELATIVE or ABSOLUTE and FILE NAMES are CONVERTED, the file sender
+ converts its native directory-name format to UNIX format, and the file
+ receiver converts from UNIX format to its native one; thus UNIX format
+ is the common intermediate representation for directory hierarchies, as
+ it is in the ZIP/UNZIP programs (which is why ZIP archives are
+ transportable among, UNIX, DOS, and VMS).
Here's an example in which a file is sent from Windows to UNIX with
relative pathnames and FILE NAMES CONVERTED:
this approach keeps matters simple: on each platform, Kermit must know
only its own local format and the common intermediate one. In most
cases, the receiver can detect which format is used automatically.
- _________________________________________________________________
- 4.11. Recursive SEND and GET: Transferring Directory Trees
+4.11. Recursive SEND and GET: Transferring Directory Trees
- C-Kermit 7.0 in selected versions (UNIX, VMS, VOS, AOS/VS, Windows,
- and OS/2 at this writing) now permits the SEND command to traverse
- directories "recursively" if you ask it to; that is, to send files
- from the current or specified directory and all of its subdirectories
- too, and their subdirectories, etc. (Some other commands can do this
- too, including DIRECTORY.)
+ C-Kermit 7.0 in selected versions (UNIX, VMS, VOS, AOS/VS, Windows, and
+ OS/2 at this writing) now permits the SEND command to traverse
+ directories "recursively" if you ask it to; that is, to send files from
+ the current or specified directory and all of its subdirectories too,
+ and their subdirectories, etc. (Some other commands can do this too,
+ including DIRECTORY.)
This feature is new to UNIX, Windows, VOS, and OS/2. VMS and AOS/VS
have always included "wildcard" or "template" characters that allow
this, and in this case, recursive directory traversal could happen
behind Kermit's back, i.e. Kermit does not have to do it itself (in
- VMS, the notation is "[...]" or "[directory...]"; in AOS/VS is "#").
- In C-Kermit 7.0, however, SEND /RECURSIVE is supported by C-Kermit
- itself for VMS.
- _________________________________________________________________
+ VMS, the notation is "[...]" or "[directory...]"; in AOS/VS is "#"). In
+ C-Kermit 7.0, however, SEND /RECURSIVE is supported by C-Kermit itself
+ for VMS.
- 4.11.1. Command-Line Options
+4.11.1. Command-Line Options
- To descend a directory tree when sending files, use the -L
- command-line option to indicate that the send operation is to be
- recursive, and include a name or pattern to be sent. When giving a
- pattern, you should enclose it in quotes to prevent the shell from
- expanding it. Examples:
+ To descend a directory tree when sending files, use the -L command-line
+ option to indicate that the send operation is to be recursive, and
+ include a name or pattern to be sent. When giving a pattern, you should
+ enclose it in quotes to prevent the shell from expanding it. Examples:
$ kermit -Ls "/usr/olga/*" # send all of Olga's files in all her directories
$ kermit -Ls foo.txt # send all foo.txt files in this directory tree
replaces an unquoted wildcard expression with the list of matching
files -- and the shell does not build recursive lists. Note that the
"." notation for the tree rooted at the current directory is allowed
- only in UNIX, since in Windows and OS/2, it means "*.*"
- (nonrecursive).
- _________________________________________________________________
+ only in UNIX, since in Windows and OS/2, it means "*.*" (nonrecursive).
- 4.11.2. The SEND /RECURSIVE Command
+4.11.2. The SEND /RECURSIVE Command
If you include the /RECURSIVE switch in a SEND (or MOVE, or similar)
command, it means to descend the current or specified directory tree
searching for files whose names match the given name or pattern. Since
this is not terribly useful unless you also include pathnames with the
outbound files, the /RECURSIVE switch also includes an implicit
- /PATHNAMES:RELATIVE switch (which you can undo by including an
- explicit /PATHNAMES switch after the /RECURSIVE switch).
+ /PATHNAMES:RELATIVE switch (which you can undo by including an explicit
+ /PATHNAMES switch after the /RECURSIVE switch).
Examples:
SEND /RECURSIVE /usr/olga (or /usr/olga/)
Same as above. If the name is a directory name (with or without
a trailing slash), its files are sent, and those of its
- subdirectories, and their subdirectories, etc (see [503]Section
+ subdirectories, and their subdirectories, etc (see [511]Section
4.9).
SEND /RECURSIVE /TEXT /usr/olga/*.txt
SEND /RECURSIVE .
UNIX only: Sends all of the files in the current directory and
- all of its subdirectories, etc ([504]Section 4.9).
+ all of its subdirectories, etc ([512]Section 4.9).
- The /RECURSIVE switch is different from most other switches in that
- its effect is immediate (but still local to the command in which it is
+ The /RECURSIVE switch is different from most other switches in that its
+ effect is immediate (but still local to the command in which it is
given), because it determines how filenames are to be parsed. For
example, "send *.txt" fails with a parse error ("No files match") if
- there are no *.txt files in the current directory, but "send
- /recursive *.txt" succeeds if there are ".txt" files anywhere in the
- tree rooted at the current directory.
+ there are no *.txt files in the current directory, but "send /recursive
+ *.txt" succeeds if there are ".txt" files anywhere in the tree rooted
+ at the current directory.
- The /RECURSIVE switch also affects the file lists displayed if you
- type "?" in a filename field. "send ./?" lists the regular files in
- the current directory, but "send /recursive ./?" lists the entire
- directory tree rooted at the current directory.
- _________________________________________________________________
+ The /RECURSIVE switch also affects the file lists displayed if you type
+ "?" in a filename field. "send ./?" lists the regular files in the
+ current directory, but "send /recursive ./?" lists the entire directory
+ tree rooted at the current directory.
- 4.11.3. The GET /RECURSIVE Command
+4.11.3. The GET /RECURSIVE Command
In a client/server setting, the client can also request a recursive
transfer with:
GET /RECURSIVE [ other switches ] remote-filespec [ local-spec ]
- In which remote file specification can be a directory name, a
- filename, a wildcard, or any combination. If the local-spec is not
- given (and PATHNAMES are RELATIVE), incoming files and directories go
- into the current local directory. If local-spec is given and is a
- directory, it becomes the root of the tree into which the incoming
- files and directories are placed. If local-spec has the syntax of a
- directory name (e.g. in UNIX it ends with /), C-Kermit creates the
- directory and then places the incoming files into it. If local-spec is
- a filename (not recommended), then all incoming files are stored with
- that name with collisions handled according to the FILE COLLISION
- setting.
-
- Again, the normal method for transferring directory trees uses
- relative pathnames, and this is the default when the sender has been
- given the /RECURSIVE switch. The action at the receiver depends on its
- RECEIVE PATHNAMES setting. The default is AUTO, meaning that if the
- sender tells it to expect a recursive transfer, then it should
- automatically switch to relative pathnames for this transfer only;
- otherwise it obeys the RECEIVE PATHNAMES setting of OFF, ABSOLUTE, or
- RELATIVE.
+ In which remote file specification can be a directory name, a filename,
+ a wildcard, or any combination. If the local-spec is not given (and
+ PATHNAMES are RELATIVE), incoming files and directories go into the
+ current local directory. If local-spec is given and is a directory, it
+ becomes the root of the tree into which the incoming files and
+ directories are placed. If local-spec has the syntax of a directory
+ name (e.g. in UNIX it ends with /), C-Kermit creates the directory and
+ then places the incoming files into it. If local-spec is a filename
+ (not recommended), then all incoming files are stored with that name
+ with collisions handled according to the FILE COLLISION setting.
+
+ Again, the normal method for transferring directory trees uses relative
+ pathnames, and this is the default when the sender has been given the
+ /RECURSIVE switch. The action at the receiver depends on its RECEIVE
+ PATHNAMES setting. The default is AUTO, meaning that if the sender
+ tells it to expect a recursive transfer, then it should automatically
+ switch to relative pathnames for this transfer only; otherwise it obeys
+ the RECEIVE PATHNAMES setting of OFF, ABSOLUTE, or RELATIVE.
What happens if a file arrives that has an absolute pathname, when the
receiver has been told to use only relative pathnames? As a security
/usr/olga/oofa.txt
- The receiver creates a "usr" subdirectory in its current directory,
- and then an "olga" subdirectory under the "usr" subdirectory in which
- to store the incoming file.
+ The receiver creates a "usr" subdirectory in its current directory, and
+ then an "olga" subdirectory under the "usr" subdirectory in which to
+ store the incoming file.
Suppose, however there is a sequence of directories:
/usr/olga/a/b/c/d/
in which "a" contains nothing but a subdirectory "b", which in turn
- contains nothing but a subdirectory "c", which in turn contains
- nothing but a subdirectory "d", which contains nothing at all. Thus
- there are no files in the "/usr/olga/a/" tree, and so it is not sent,
- and therefore it is not reproduced on the target computer.
- _________________________________________________________________
+ contains nothing but a subdirectory "c", which in turn contains nothing
+ but a subdirectory "d", which contains nothing at all. Thus there are
+ no files in the "/usr/olga/a/" tree, and so it is not sent, and
+ therefore it is not reproduced on the target computer.
- 4.11.4. New and Changed File Functions
+4.11.4. New and Changed File Functions
C-Kermit 7.0 adds the following functions:
\frfiles(pattern[,&a])
Returns the number of files in the current or given directory
and all of its subdirectories, and their subdirectories, etc,
- that match the given pattern. Warning -- this one can take
- quite some time if performed at the root of a large directory
- tree.
+ that match the given pattern. Warning -- this one can take quite
+ some time if performed at the root of a large directory tree.
\frdirectories(pattern[,&a])
Returns the number of directories in the current or given
directory and all of its subdirectories, and their
subdirectories, etc, that match the given pattern.
- Each of these functions builds up a list of files to be returned by
- the \fnextfile() function, just as \ffiles() always has done. (This
- can also be done with the /ARRAY switch of the DIRECTORY command; see
- [505]Sections 4.5.1 and [506]7.10).
+ Each of these functions builds up a list of files to be returned by the
+ \fnextfile() function, just as \ffiles() always has done. (This can
+ also be done with the /ARRAY switch of the DIRECTORY command; see
+ [513]Sections 4.5.1 and [514]7.10).
Each of these functions can be given an array name as an optional
second argument. If an array name is supplied, the array will contain
- the number of files as its 0th element, and the filenames in elements
- 1 through last. If the array already existed, its previous contents
- are lost. For example, if the current directory contains two files,
+ the number of files as its 0th element, and the filenames in elements 1
+ through last. If the array already existed, its previous contents are
+ lost. For example, if the current directory contains two files,
oofa.txt and foo.bar, then "\ffiles(*,&a)" creates an array \&a[] with
a dimension of 2, containing the following elements:
array.
Note that the order in which the array is filled (and in which
- \fnextfile() returns filenames) is indeterminate (but see [507]Section
+ \fnextfile() returns filenames) is indeterminate (but see [515]Section
7.10.5).
Here's an example that builds and prints a list of all the file whose
}
Alternatively, using the array method, and then printing the filenames
- in alphabetic order (see [508]Section 7.10.3 and [509]7.10.5):
+ in alphabetic order (see [516]Section 7.10.3 and [517]7.10.5):
asg \%n \frfiles(*.txt,&a)
sort &a
sort &a
show array &a
- As noted elsewhere, the file lists built by \ffiles(), \frfiles(),
- etc, are now "safe" in the sense that SEND and other file-related
- commands can reference \fnextfile() without resetting the list:
+ As noted elsewhere, the file lists built by \ffiles(), \frfiles(), etc,
+ are now "safe" in the sense that SEND and other file-related commands
+ can reference \fnextfile() without resetting the list:
set send pathnames relative
for \%i 1 \frfiles(*.txt) 1 {
if fail break
}
- Copying to an array (as shown on p.398 of [510]Using C-Kermit 2nd Ed)
+ Copying to an array (as shown on p.398 of [518]Using C-Kermit 2nd Ed)
is no longer necessary.
- _________________________________________________________________
- 4.11.5. Moving Directory Trees Between Like Systems
+4.11.5. Moving Directory Trees Between Like Systems
- 4.11.5.1. UNIX to UNIX
+4.11.5.1. UNIX to UNIX
Transferring a directory tree from one computer to another replicates
the file sender's arrangement of files and directories on the file
C-Kermit> cd olgas-files ; CD to it.
C-Kermit> receive /recursive ; = /PATHNAMES:RELATIVE
- Each Kermit program recognizes that the other is running under UNIX
- and switches to binary mode and literal filenames automatically.
+ Each Kermit program recognizes that the other is running under UNIX and
+ switches to binary mode and literal filenames automatically.
Directories are automatically created on the receiving system as
needed. File dates and permissions are automatically reproduced from
source to destination.
- 4.11.5.2. VMS to VMS
+4.11.5.2. VMS to VMS
- To send recursively from VMS, simply include the /RECURSIVE switch,
- for example at the sender:
+ To send recursively from VMS, simply include the /RECURSIVE switch, for
+ example at the sender:
$ kermit
C-Kermit> cd [olga]
The notation "..." within directory brackets in VMS means "this
directory and all directories below it"; the /RECURSIVE switch, when
- given to the sender, implies the use of "..." in the file
- specification so you don't have to include "..."; but it makes no
- difference if you do:
+ given to the sender, implies the use of "..." in the file specification
+ so you don't have to include "..."; but it makes no difference if you
+ do:
$ kermit
C-Kermit> send /recursive [olga...]*.*;0
In either case, since both systems recognize each other as VMS, they
switch into LABELED transfer mode automatically.
- _________________________________________________________________
- 4.11.6. Moving Directory Trees Between Unlike Systems
+4.11.6. Moving Directory Trees Between Unlike Systems
There are several difficulties with recursive transfers between unlike
systems:
- * File formats can be different, especially text files character
- sets and record formats. This can now be handled by using SET FILE
+ * File formats can be different, especially text files character sets
+ and record formats. This can now be handled by using SET FILE
PATTERN, SET FILE TEXT-PATTERNS, and SET FILE BINARY-PATTERNS
- ([511]Section 4.3).
+ ([519]Section 4.3).
* File naming conventions are different. For example, one system
- might allow (and use) longer filenames than the other. You can
- tell Kermit how to handle file names with the normal "set file
- names" and "set file collision" mechanisms. Most modern Kermits
- are fairly tolerant of illegal filenames and should not fail
- simply because of an incoming filename; rather, it will do its
- best to convert it to a recognizable and unique legal filename.
+ might allow (and use) longer filenames than the other. You can tell
+ Kermit how to handle file names with the normal "set file names"
+ and "set file collision" mechanisms. Most modern Kermits are fairly
+ tolerant of illegal filenames and should not fail simply because of
+ an incoming filename; rather, it will do its best to convert it to
+ a recognizable and unique legal filename.
* Directory notations can be different, e.g. backslashes instead of
slashes, brackets, parentheses, spaces, etc. But this is now
handled by converting pathnames to a standard format during
- transfer ([512]Section 4.10).
+ transfer ([520]Section 4.10).
So now, for the first time, it is possible to send directory trees
among any combination of UNIX, DOS, Windows, OS/2, VMS, AOS/VS, etc.
* SEND /RECURSIVE also implies /PATHNAMES:RELATIVE.
* The file sender tells the file receiver the transfer mode of each
file.
- * The file sender tells the file receiver the transfer character
- set.
+ * The file sender tells the file receiver the transfer character set.
* By default, destination file dates will be the same as on the
source.
* Many of the settings shown might already be set by default.
- * See [513]Sections 4.3, [514]4.10, and [515]4.15 for additional
+ * See [521]Sections 4.3, [522]4.10, and [523]4.15 for additional
explanation.
If you are refreshing an existing directory on the destination
computer, use "set file collision update" or other appropriate file
collision option to handle filename collisions.
- _________________________________________________________________
- 4.12. Where Did My File Go?
+4.12. Where Did My File Go?
Now that Kermit can be started by clicking on desktop icons (thus
obscuring the concept of "current directory"), and can have a download
the location of the last files transferred, including the pathname
reported by the receiving Kermit, if any, when C-Kermit is the sender.
This information was also added to SHOW FILE in somewhat less detail.
- _________________________________________________________________
- 4.13. File Output Buffer Control
+4.13. File Output Buffer Control
(UNIX only). The new command SET FILE OUTPUT lets you control how
incoming files are written to disk:
SET FILE OUTPUT BUFFERED [ size ]
- Chooses buffered file output; this is the default. UNIX does
- its normal sort of disk buffering. The optional size specifies
+ Chooses buffered file output; this is the default. UNIX does its
+ normal sort of disk buffering. The optional size specifies
Kermit's own file output buffer size, and therefore the
frequency of disk accesses (write() system calls) -- the bigger
the size, the fewer the disk accesses.
SET FILE OUTPUT UNBUFFERED [ size ]
- This forces each file output write() call to actually commit
- the data to disk immediately. Choosing this option will usually
- slow file reception down.
+ This forces each file output write() call to actually commit the
+ data to disk immediately. Choosing this option will usually slow
+ file reception down.
SET FILE OUTPUT BLOCKING
- Write() calls should not return until they are complete. This
- is the normal setting, and it lets Kermit detect disk-write
- errors immediately.
+ Write() calls should not return until they are complete. This is
+ the normal setting, and it lets Kermit detect disk-write errors
+ immediately.
SET FILE OUTPUT NONBLOCKING
Write() calls should return immediately. This can speed up file
reception, but also delay the detection of disk-write errors.
- Experimentation with these parameters should be harmless, and might
- (or might not) have a perceptible, even dramatic, effect on
- performance.
- _________________________________________________________________
+ Experimentation with these parameters should be harmless, and might (or
+ might not) have a perceptible, even dramatic, effect on performance.
- 4.14. Improved Responsiveness
+4.14. Improved Responsiveness
- In version 7.0, C-Kermit's file-transfer protocol engine has been
- tuned for additional speed and responsiveness.
+ In version 7.0, C-Kermit's file-transfer protocol engine has been tuned
+ for additional speed and responsiveness.
* Binary-mode transfers over 8-bit connections, a very common case,
are now handled in a special way that minimizes overhead.
- * SET TRANSFER CRC-CALCULATION is now OFF by default, rather than
- ON. (This affects only the overall per-transfer CRC, \v(crc16),
- not the per-packet CRCs)
- * Connection loss during file transfer is now detected immediately
- in most cases on Internet connections and on serial connections
- when CARRIER-WATCH is not set to OFF.
- _________________________________________________________________
+ * SET TRANSFER CRC-CALCULATION is now OFF by default, rather than ON.
+ (This affects only the overall per-transfer CRC, \v(crc16), not the
+ per-packet CRCs)
+ * Connection loss during file transfer is now detected immediately in
+ most cases on Internet connections and on serial connections when
+ CARRIER-WATCH is not set to OFF.
- 4.15. Doubling and Ignoring Characters for Transparency
+4.15. Doubling and Ignoring Characters for Transparency
- The following commands were added in 7.0, primarily to allow
- successful file transfer through ARPAnet TACs and with Honeywell DPS6
- systems, but can be used in any setting where they might be needed:
+ The following commands were added in 7.0, primarily to allow successful
+ file transfer through ARPAnet TACs and with Honeywell DPS6 systems, but
+ can be used in any setting where they might be needed:
SET SEND DOUBLE-CHAR { [ char [ char [ ... ] ] ], NONE }
Tells C-Kermit to double the specified characters (use decimal
packets. Use this, for example, when something between the
sender and receiver is inserting linefeeds for wrapping, NULs
for padding, etc.
- _________________________________________________________________
- 4.16. New File-Transfer Display Formats
+4.16. New File-Transfer Display Formats
SET TRANSFER DISPLAY { BRIEF, CRT, FULLSCREEN, NONE, SERIAL }
Selects the file-transfer display format.
SEND makefile (text) (186636 bytes): OK (0.444 sec, 420471 cps)
SEND wermit (binary) (1064960 bytes): OK (2.207 sec, 482477 cps)
- Note that transfer times are now obtained in fractional seconds,
- rather than whole seconds, so the CPS figures are more accurate (the
- display shows 3 decimal places, but internally the figure is generally
- precise to the microsecond).
- _________________________________________________________________
+ Note that transfer times are now obtained in fractional seconds, rather
+ than whole seconds, so the CPS figures are more accurate (the display
+ shows 3 decimal places, but internally the figure is generally precise
+ to the microsecond).
- 4.17. New Transaction Log Formats
+4.17. New Transaction Log Formats
The new command:
and FTP are new. This command must be given prior to the LOG
TRANSACTION command if a non-VERBOSE type is desired.
- 4.17.1. The BRIEF Format
+4.17.1. The BRIEF Format
BRIEF chooses a one-line per file format suitable for direct
importation into databases like Informix, Oracle, or Sybase, in which:
20000208,12:09:31,SEND,/u/olga/oofa.exe,32768,binary,OK,"1.243sec 26362cps"
20000208,12:10:02,SEND,"/u/olga/a,b",10130,text,FAILED,"Refused: date"
- Note how the filename is enclosed in doublequotes in the final
- example, because it contains a comma.
+ Note how the filename is enclosed in doublequotes in the final example,
+ because it contains a comma.
To obtain BRIEF format, you must give the SET TRANSACTION-LOG BRIEF
command before the LOG TRANSACTIONS command. (If you give them in the
opposite order, a heading is written to the log by the LOG command.)
- _________________________________________________________________
- 4.17.2. The FTP Format
+4.17.2. The FTP Format
SET TRANSACTION-LOG FTP (available only in UNIX) chooses a format that
is compatible with the WU-FTPD (Washington University FTP daemon) log,
- and so can be processed by any software that processes the WU-FTPD
- log. It logs only transfers in and out, both successful and failed
- (but success or failure is not indicated, due to lack of a field in
- the WU-FTPD log format for this purpose). Non-transfer events are not
+ and so can be processed by any software that processes the WU-FTPD log.
+ It logs only transfers in and out, both successful and failed (but
+ success or failure is not indicated, due to lack of a field in the
+ WU-FTPD log format for this purpose). Non-transfer events are not
recorded.
Unlike other logs, the FTP-format transaction log is opened in append
mode.
Bytes transferred
- The number of bytes transferred, decimal digits, e.g.
- "1537904".
+ The number of bytes transferred, decimal digits, e.g. "1537904".
Filename
The name of the file that was transferred, e.g.
"/pub/ftp/kermit/a/README.TXT". If the filename contains any
- spaces or control characters, each such character is replaced
- by an underscore ('_') character.
+ spaces or control characters, each such character is replaced by
+ an underscore ('_') character.
Mode
The letter 'b' if the file was transferred in binary mode, or
otherwise '0'. Currently, always '0'.
Authenticated user
- If the authentication class is '1', this is the user's ID on
- the client system. Otherwise it is an asterisk ('*'). Currently
- it is always an asterisk.
+ If the authentication class is '1', this is the user's ID on the
+ client system. Otherwise it is an asterisk ('*'). Currently it
+ is always an asterisk.
Examples:
LOG TRANSACTIONS filespec APPEND
Conceivably it could be possible to have a system-wide shared Kermit
- log, except that UNIX lacks any notion of an append-only file; thus
- any user who could append to the log could also delete it (or alter
- it). This problem could be worked around using setuid/setgid tricks,
- but these would most likely interfere with the other setuid/setgid
- tricks C-Kermit must use for getting at dialout devices and UUCP
- logfiles.
- _________________________________________________________________
+ log, except that UNIX lacks any notion of an append-only file; thus any
+ user who could append to the log could also delete it (or alter it).
+ This problem could be worked around using setuid/setgid tricks, but
+ these would most likely interfere with the other setuid/setgid tricks
+ C-Kermit must use for getting at dialout devices and UUCP logfiles.
- 4.18. Unprefixing NUL
+4.18. Unprefixing NUL
As of 6.1.193 Alpha.10, C-Kermit can finally send and receive
file-transfer packets in which NUL (ASCII 0) is unprefixed (no more
Transfer rates go up accordingly, not only because of the reduced
amount of i/o, but also because less computation is required on each
end.
- _________________________________________________________________
- 4.19. Clear-Channel Protocol
+4.19. Clear-Channel Protocol
Now that C-Kermit itself is capable of sending and receiving any byte
- at all on a clear channel ([516]Section 4.18), it is, for the first
- time, in a position to negotiate a clear channel with the other
- Kermit, giving it permission (but not requiring it) to unprefix any
- and all characters that it knows are safe. In general this means all
- but the Kermit start-of-packet character (normally Ctrl-A), Carriage
- Return (not only Kermit's end-of-packet character, but also treated
- specially on Telnet NVT links), and IAC (255, also special to Telnet).
+ at all on a clear channel ([524]Section 4.18), it is, for the first
+ time, in a position to negotiate a clear channel with the other Kermit,
+ giving it permission (but not requiring it) to unprefix any and all
+ characters that it knows are safe. In general this means all but the
+ Kermit start-of-packet character (normally Ctrl-A), Carriage Return
+ (not only Kermit's end-of-packet character, but also treated specially
+ on Telnet NVT links), and IAC (255, also special to Telnet).
By default, C-Kermit will say it has a clear channel only if it has
opened a TCP socket. Since the Kermit program on the far end of a
AUTO is the default, meaning that the clear-channel status is
determined automatically from the type of connection. ON means to
announce a clear channel, OFF means not to announce it. Use SHOW
- STREAMING ([517]Section 4.20) to see the current CLEAR-CHANNEL status.
+ STREAMING ([525]Section 4.20) to see the current CLEAR-CHANNEL status.
Synonym: SET CLEARCHANNEL.
- CLEAR-CHANNEL is also set if you start C-Kermit with the -I switch
- (see [518]Section 4.20).
+ CLEAR-CHANNEL is also set if you start C-Kermit with the -I switch (see
+ [526]Section 4.20).
- Whenever a clear channel is negotiated, the resulting
- control-character unprefixing is "sticky"; that is, it remains in
- effect after the transfer so you can use SHOW CONTROL to see what was
- negotiated.
+ Whenever a clear channel is negotiated, the resulting control-character
+ unprefixing is "sticky"; that is, it remains in effect after the
+ transfer so you can use SHOW CONTROL to see what was negotiated.
You can also see whether a clear channel was negotiated in the
STATISTICS /VERBOSE Display.
transfers go faster automatically. The disadvantage would be
file-transfer failures if the channel is not truly clear, for example
if C-Kermit made a Telnet connection to a terminal server, and then
- dialed out from there; or if C-Kermit made an Rlogin connection to
- host and then made a Telnet connection from there to another host. If
- a file transfer fails on a TCP/IP connection, use SHOW CONTROL to
- check whether control characters became unprefixed as a result of
- protocol negotiations, and/or SHOW STREAMING ([519]Section 4.20) to
- see if "clear-channel" was negotiated. If this happened, use SET
- CLEAR-CHANNEL OFF and SET PREFIXING CAUTIOUS (or whatever) to prevent
- it from happening again.
- _________________________________________________________________
-
- 4.20. Streaming Protocol
+ dialed out from there; or if C-Kermit made an Rlogin connection to host
+ and then made a Telnet connection from there to another host. If a file
+ transfer fails on a TCP/IP connection, use SHOW CONTROL to check
+ whether control characters became unprefixed as a result of protocol
+ negotiations, and/or SHOW STREAMING ([527]Section 4.20) to see if
+ "clear-channel" was negotiated. If this happened, use SET CLEAR-CHANNEL
+ OFF and SET PREFIXING CAUTIOUS (or whatever) to prevent it from
+ happening again.
+
+4.20. Streaming Protocol
A new Kermit protocol option called "streaming" was added in C-Kermit
7.0. The idea is that if the two Kermit partners have a reliable
more efficiently (e.g. by defeating the Nagle algorithm and/or Delayed
ACK stratagem of the TCP layer). Furthermore, it allows transfers to
work smoothly on extremely slow network congestions that would
- otherwise cause timeouts and retransmissions, and even failure when
- the retry limit was exceeded.
+ otherwise cause timeouts and retransmissions, and even failure when the
+ retry limit was exceeded.
The trick is knowing when we can stream:
2. If C-Kermit has been started with the -I (uppercase) option, or if
it has been told to SET RELIABLE ON, it offers to stream.
3. If C-Kermit is in remote mode, and has been told to SET RELIABLE
- AUTO (or ON), it always offers to stream, and also always agrees
- to stream, if the other Kermit offers. Unless you take explicit
- actions to override the defaults, this allows the local Kermit
- (the one that made the connection, and so knows whether it's
- reliable) to control streaming.
+ AUTO (or ON), it always offers to stream, and also always agrees to
+ stream, if the other Kermit offers. Unless you take explicit
+ actions to override the defaults, this allows the local Kermit (the
+ one that made the connection, and so knows whether it's reliable)
+ to control streaming.
(Note that an offer to stream also results in a Clear-Channel
- announcement if CLEAR-CHANNEL is set to AUTO; see [520]Section 4.19.)
+ announcement if CLEAR-CHANNEL is set to AUTO; see [528]Section 4.19.)
When BOTH Kermits offer to stream, then they stream; otherwise they
don't. Thus streaming-capable Kermit programs interoperate
also find out afterwards with the STATISTICS or SHOW STREAMING
commands.
- WARNING: Automatic choice of streaming is based on the assumption
- of a "direct" end-to-end network connection; for example, a Telnet
- or Rlogin connection from host A to host B, and transferring files
+ WARNING: Automatic choice of streaming is based on the assumption of
+ a "direct" end-to-end network connection; for example, a Telnet or
+ Rlogin connection from host A to host B, and transferring files
between A and B. However, if your connection has additional
components -- something "in the middle" (B) that you have made a
network connection to, which makes a separate connection to the
destination host (C), then you don't really have a reliable
connection, but C-Kermit has no way of knowing this; transferring
- files between A and C will probably fail. In such cases, you'll
- need to tell the *local* C-Kermit to "set reliable off" before
+ files between A and C will probably fail. In such cases, you'll need
+ to tell the *local* C-Kermit to "set reliable off" before
transferring files (it does no good to give this command to the
remote Kermit since the local one controls the RELIABLE setting).
Streaming is like using an infinite window size, with no timeouts and
- no tolerance for transmission errors (since there shouldn't be any).
- It relies on the underlying transport for flow control, error
- correction, timeouts, and retransmission. Thus it is very suitable for
- use on TCP/IP connections, especially slow or bursty ones, since
- Kermit's packet timeouts won't interfere with the transfer -- each
- packet takes as long to reach its destination as it takes TCP to
- deliver it. If TCP can't deliver the packet within its own timeout
- period (over which Kermit has no control), it signals a fatal error.
- Just like FTP.
+ no tolerance for transmission errors (since there shouldn't be any). It
+ relies on the underlying transport for flow control, error correction,
+ timeouts, and retransmission. Thus it is very suitable for use on
+ TCP/IP connections, especially slow or bursty ones, since Kermit's
+ packet timeouts won't interfere with the transfer -- each packet takes
+ as long to reach its destination as it takes TCP to deliver it. If TCP
+ can't deliver the packet within its own timeout period (over which
+ Kermit has no control), it signals a fatal error. Just like FTP.
Streaming goes much faster than non-streaming when a relatively small
packet length is used, and it tends to go faster than non-streaming
with even the longest packet lengths. The Kermit window size is
- irrelevant to streaming protocol, but still might affect performance
- in small ways since it can result in different paths through the code.
+ irrelevant to streaming protocol, but still might affect performance in
+ small ways since it can result in different paths through the code.
The definition of "reliable transport" does not necessarily demand
8-bit and control-character transparency. Streaming can work with
Maximum performance -- comparable to and often exceeding FTP -- is
achieved on socket-to-socket connections (in which the considerable
overhead of the terminal driver and Telnet or Rlogin server is
- eliminated) with long packets and the new "brief" file-transfer
- display ([521]Section 4.16).
- _________________________________________________________________
+ eliminated) with long packets and the new "brief" file-transfer display
+ ([529]Section 4.16).
- 4.20.1. Commands for Streaming
+4.20.1. Commands for Streaming
SET RELIABLE { ON, OFF, AUTO }
SET RELIABLE ON tells Kermit that it has a reliable transport.
SET RELIABLE OFF tells Kermit the transport is not reliable.
SET RELIABLE AUTO tells Kermit that it should SET RELIABLE ON
- whenever it makes a reliable connection (e.g. TELNET or SET
- HOST on a TCP/IP or X.25 network), and when in remote mode it
- should believe the transport is reliable if the other Kermit
- says it is during Kermit protocol negotiation.
+ whenever it makes a reliable connection (e.g. TELNET or SET HOST
+ on a TCP/IP or X.25 network), and when in remote mode it should
+ believe the transport is reliable if the other Kermit says it is
+ during Kermit protocol negotiation.
- AUTO is the default; the Kermit program that makes the connection
- knows whether it is reliable, and tells the remote Kermit.
+ AUTO is the default; the Kermit program that makes the connection knows
+ whether it is reliable, and tells the remote Kermit.
The RELIABLE setting has several effects, including:
TCP/IP connection or if RELIABLE is ON (or it was started with the -I
command line option). OFF means don't stream; ON means offer to stream
no matter what.
- _________________________________________________________________
- 4.20.2. Examples of Streaming
+4.20.2. Examples of Streaming
Here we look at the use and behavior of streaming on several different
kinds of connections, and compare its performance with non-streaming
transfers.
- 4.20.2.1. Streaming on Socket-to-Socket Connections
+4.20.2.1. Streaming on Socket-to-Socket Connections
Here we get streaming automatically when both Kermit programs are
- capable of it, since they both make socket connections. For example,
- on the far end:
+ capable of it, since they both make socket connections. For example, on
+ the far end:
C-Kermit> set host * 3000
C-Kermit> server
CPS and window size: 0.164
CPS and packet length: 0.123
CPS and streaming: 0.346
- _________________________________________________________________
- 4.20.2.2. Streaming on Telnet Connections
+4.20.2.2. Streaming on Telnet Connections
In this case the local copy of Kermit is told to TELNET or SET HOST,
and so it knows it has a reliable connection and -- unless it has been
Since we have a reliable connection, we'll also get control-character
unprefixing automatically because of the new clear-channel protocol
- ([522]Section 4.19).
+ ([530]Section 4.19).
Any errors that occur during streaming are fatal to the transfer. The
message is "Transmission error on reliable link". Should this happen:
1. Check the remote Kermit's flow control setting (SHOW
COMMUNICATIONS). If it is NONE, change it to XON/XOFF, or vice
versa. If it is XON/XOFF (or you just changed it to XOFF/XOFF),
- make sure the file sender is prefixing the XON and XOFF
- characters. In the most drastic case, use "set prefix all" to
- force prefixing of all control characters.
+ make sure the file sender is prefixing the XON and XOFF characters.
+ In the most drastic case, use "set prefix all" to force prefixing
+ of all control characters.
2. The remote Telnet server might chop off the 8th bit. In that case,
- tell C-Kermit to "set parity space". Or, you might be able to
- force the Telnet to allow eight-bit data by telling C-Kermit to
- "set telopt binary request accept" -- that is, request the Telnet
- server to enter binary mode, and accept binary-mode bids from the
- server.
+ tell C-Kermit to "set parity space". Or, you might be able to force
+ the Telnet to allow eight-bit data by telling C-Kermit to "set
+ telopt binary request accept" -- that is, request the Telnet server
+ to enter binary mode, and accept binary-mode bids from the server.
3. The remote Telnet server might have a buffering limitation. If a
and b don't cure the problem, tell the file receiver to "set
- receive packet-length 1000" (or other number -- use the largest
- one that works). This too, is no different from the non-streaming
- case (more about this in [523]Section 4.20.2.3).
+ receive packet-length 1000" (or other number -- use the largest one
+ that works). This too, is no different from the non-streaming case
+ (more about this in [531]Section 4.20.2.3).
And remember you can continue interrupted binary-mode transfers where
they left off with the RESEND (= SEND /RECOVER) command.
CPS and packet length: 0.152
CPS and streaming: 0.128
- Here the effect is not as emphatic as in the socket-to-socket case,
- yet on the whole streaming tends to be beneficial.
+ Here the effect is not as emphatic as in the socket-to-socket case, yet
+ on the whole streaming tends to be beneficial.
Additional measurements on HP-UX using C-Kermit 7.0 Beta.06:
HP-UX 8->10 36Kcps 66Kcps
HP-UX 9->9 not tested 190Kcps
HP-UX 9->10 160Kcps 378Kcps
- _________________________________________________________________
- 4.20.2.3. Streaming with Limited Packet Length
+4.20.2.3. Streaming with Limited Packet Length
- The IRIX telnet server (at least the ones observed in IRIX 5.3 and
- 6.2) does not allow Kermit to send packets longer than 4096 bytes.
- Thus when sending from IRIX C-Kermit when it is on the remote end of a
- Telnet connection, the packet length must be 4K or less. Trials in
- this case (in which packet lengths range from 1450 to 4000) show a
- strong advantage for streaming, which would be evident in any other
- case where the packet length is restricted, and stronger the shorter
- the maximum packet length.
+ The IRIX telnet server (at least the ones observed in IRIX 5.3 and 6.2)
+ does not allow Kermit to send packets longer than 4096 bytes. Thus when
+ sending from IRIX C-Kermit when it is on the remote end of a Telnet
+ connection, the packet length must be 4K or less. Trials in this case
+ (in which packet lengths range from 1450 to 4000) show a strong
+ advantage for streaming, which would be evident in any other case where
+ the packet length is restricted, and stronger the shorter the maximum
+ packet length.
Streaming Nonstreaming
Max CPS 426187 366870
CPS and window size: 0.116
CPS and packet length: 0.241
CPS and streaming: 0.901
- _________________________________________________________________
- 4.20.2.4. Streaming on Dialup Connections
+4.20.2.4. Streaming on Dialup Connections
- Here "dialup" refers to a "direct" dialup connection, not a SLIP or
- PPP connection, which is only a particular kind of TCP/IP connection.
+ Here "dialup" refers to a "direct" dialup connection, not a SLIP or PPP
+ connection, which is only a particular kind of TCP/IP connection.
Attempt this at your own risk, and then only if (a) you have
- error-correcting modems, and (b) the connections between the modems
- and computers are also error-free, perfectly flow-controlled, and free
- of interrupt conflicts. Streaming can be used effectively and to
- fairly good advantage on such connections, but remember that the
- transfer is fatal if even one error is detected (also remember that
- should a binary-mode transfer fail, it can be recovered from the point
- of failure with RESEND).
+ error-correcting modems, and (b) the connections between the modems and
+ computers are also error-free, perfectly flow-controlled, and free of
+ interrupt conflicts. Streaming can be used effectively and to fairly
+ good advantage on such connections, but remember that the transfer is
+ fatal if even one error is detected (also remember that should a
+ binary-mode transfer fail, it can be recovered from the point of
+ failure with RESEND).
To use streaming on an unreliable connection, you must tell both
Kermits that the connection is reliable:
C-Kermit> set reliable on
In this case, it will probably be necessary to prefix some control
- characters, for example if your connection is through a terminal
- server that has an escape character. Most Cisco terminal servers, for
- example, require Ctrl-^ (30, as well as its high-bit equivalent, 158)
- to be prefixed. To unprefix these, you'll need to defeat the "clear
- channel" feature:
+ characters, for example if your connection is through a terminal server
+ that has an escape character. Most Cisco terminal servers, for example,
+ require Ctrl-^ (30, as well as its high-bit equivalent, 158) to be
+ prefixed. To unprefix these, you'll need to defeat the "clear channel"
+ feature:
C-Kermit> set reliable on
C-Kermit> set clear-channel off
C-Kermit> set prefixing none
C-Kermit> set control prefix 1 13 30 158 ; and whatever else is necessary
- Dialup trials were done using fixed large window and packet sizes.
- They compare uploading and downloading of two common types of files,
- with and without streaming. Configuration:
+ Dialup trials were done using fixed large window and packet sizes. They
+ compare uploading and downloading of two common types of files, with
+ and without streaming. Configuration:
HP-9000/715/33 -- 57600bps, RTS/CTS -- USR Courier V.34 --
V.34+V.42, 31200bps -- USR V.34+ Rackmount -- 57600bps, RTS/CTS --
Size = 30, Control Character Unprefixing Minimal (but including the
Cisco escape character).
- Since this is not a truly reliable connection, a few trials failed
- when a bad packet was received (most likely due to UART overruns); the
+ Since this is not a truly reliable connection, a few trials failed when
+ a bad packet was received (most likely due to UART overruns); the
failure was graceful and immediate, and the message was informative.
The results of ten successful trials uploading and downloading the two
files with and without streaming are:
the VAX at 1100cps without streaming and 1900cps with streaming, using
8000-byte packets, 30 window slots, and minimal prefixing in both
cases.
- _________________________________________________________________
- 4.20.2.5. Streaming on X.25 Connections
+4.20.2.5. Streaming on X.25 Connections
We have only limited access to X.25 networks. One trial was performed
in which the 1MB Solaris 2.4 Sparc executable was transferred over a
file transferred at 6400 cps (using a maximum of 6 window slots). With
the same packet length, but with streaming, it transferred without
mishap at 6710 cps, about 5% faster.
- _________________________________________________________________
- 4.20.3. Streaming - Preliminary Conclusions
+4.20.3. Streaming - Preliminary Conclusions
The results vary with the particular connection, but are good overall.
- Although numerous lower-level tricks can be used to improve
- performance on specific platforms or connection methods, streaming
- occurs at a high, system-independent level of the Kermit protocol and
- therefore can apply to all types of platforms and (reliable)
- connections transparently.
- _________________________________________________________________
+ Although numerous lower-level tricks can be used to improve performance
+ on specific platforms or connection methods, streaming occurs at a
+ high, system-independent level of the Kermit protocol and therefore can
+ apply to all types of platforms and (reliable) connections
+ transparently.
- 4.21. The TRANSMIT Command
+4.21. The TRANSMIT Command
Prior to C-Kermit 7.0, the TRANSMIT command transmitted in text or
binary mode according to SET FILE TYPE { TEXT, BINARY }. But now that
Therefore, TRANSMIT defaults to text mode always, regardless of the
FILE TYPE setting.
- C-Kermit 7.0 expands the capabilities of the TRANSMIT command by
- adding the following switches (see [524]Section 1.5). The new syntax
- is:
+ C-Kermit 7.0 expands the capabilities of the TRANSMIT command by adding
+ the following switches (see [532]Section 1.5). The new syntax is:
TRANSMIT [ switches... ] filename
/TEXT
Transmits the file (or pipe output) in line-oriented text mode.
- Current FILE CHARACTER-SET and TERMINAL CHARACTER-SET
- selections govern translation. Default.
+ Current FILE CHARACTER-SET and TERMINAL CHARACTER-SET selections
+ govern translation. Default.
/TRANSPARENT
- Specifies text mode without character-set translation, no
- matter what the FILE and TERMINAL CHARACTER-SET selections are.
+ Specifies text mode without character-set translation, no matter
+ what the FILE and TERMINAL CHARACTER-SET selections are.
/NOWAIT
This is equivalent to SET TRANSMIT PROMPT 0, but for this
waits for a linefeed.)
When TRANSMIT ECHO is ON, C-Kermit tries to read back the echo of each
- character that is sent. Prior to C-Kermit 7.0, 1 second was allowed
- for each echo to appear; if it didn't show up in a second, the
- TRANSMIT command would fail. Similarly for the TRANSMIT PROMPT
- character. However, with today's congested Internet connections, etc,
- more time is often needed:
+ character that is sent. Prior to C-Kermit 7.0, 1 second was allowed for
+ each echo to appear; if it didn't show up in a second, the TRANSMIT
+ command would fail. Similarly for the TRANSMIT PROMPT character.
+ However, with today's congested Internet connections, etc, more time is
+ often needed:
SET TRANSMIT TIMEOUT number
+
Specifies the number of seconds to wait for an echo or the prompt
character when TRANSMIT PROMPT is nonzero; the default wait is 1
second. If you specify 0, the wait is indefinite. When a timeout
more than usual for the TRANSMIT command!) on a clean connection with
effective flow control.
- For details on TRANSMIT and character sets, see [525]Section 6.6.5.4.
- _________________________________________________________________
+ For details on TRANSMIT and character sets, see [533]Section 6.6.5.4.
4.22. Coping with Faulty Kermit Implementations
Kermit protocol has been implemented in quite a few third-party
commercial, shareware, and freeware software packages, with varying
- degrees of success. In most cases operation is satisfactory but slow
- -- only the bare minimum subset of the protocol is available -- short
+ degrees of success. In most cases operation is satisfactory but slow --
+ only the bare minimum subset of the protocol is available -- short
packets, no sliding windows, no attributes, etc. In other cases, the
implementation is incorrect, resulting in failures at the initial
negotiation stage or corrupted files.
C-Kermit 7.0 and Kermit 95 1.1.19 include some new defense mechanisms
to help cope with the most common situations. However, bear in mind
- there is only so much we can do in such cases -- the responsibility
- for fixing the problem lies with the maker of the faulty software.
- _________________________________________________________________
+ there is only so much we can do in such cases -- the responsibility for
+ fixing the problem lies with the maker of the faulty software.
4.22.1. Failure to Accept Modern Negotiation Strings
be added to the parameter negotiation string. These are to be ignored
by any Kermit implementation that does not understand them; this is
what makes the Kermit protocol extensible. Unfortunately, some Kermit
- implementations become confused (or worse) when receiving a
- negotiation string longer than the one they expect. You can try
- working around such problems by telling Kermit to shorten its
- negotiation string (and thus disable the corresponding new features):
+ implementations become confused (or worse) when receiving a negotiation
+ string longer than the one they expect. You can try working around such
+ problems by telling Kermit to shorten its negotiation string (and thus
+ disable the corresponding new features):
SET SEND NEGOTIATION-STRING-MAX-LENGTH number
Try a number like 10. If that doesn't work, try 9, 8, 7, 6, and so on.
- _________________________________________________________________
4.22.2. Failure to Negotiate 8th-bit Prefixing
The published Kermit protocol specification states that 8th-bit
- prefixing (which allows transfer of 8-bit data over a 7-bit
- connection) occurs if the file sender puts a valid prefix character
- (normally "&") in the 8th-bit-prefix field of the negotiation string,
- and the receiver puts either a letter "Y" or the same prefix
- character. At least one faulty Kermit implementation exists that does
- not accept the letter "Y". To force C-Kermit / K-95 to reply with the
- other Kermit's prefix character rather than a "Y", give the following
- (invisible) command:
+ prefixing (which allows transfer of 8-bit data over a 7-bit connection)
+ occurs if the file sender puts a valid prefix character (normally "&")
+ in the 8th-bit-prefix field of the negotiation string, and the receiver
+ puts either a letter "Y" or the same prefix character. At least one
+ faulty Kermit implementation exists that does not accept the letter
+ "Y". To force C-Kermit / K-95 to reply with the other Kermit's prefix
+ character rather than a "Y", give the following (invisible) command:
SET Q8FLAG ON
Use SET Q8FLAG OFF to restore the normal behavior.
- _________________________________________________________________
4.22.3. Corrupt Files
- Refer to [526]Section 4.22.2. Some Kermit implementations mistakenly
+ Refer to [534]Section 4.22.2. Some Kermit implementations mistakenly
interpret the "Y" as a prefix character. Then, whenever a letter Y
appears in the data, the Y and the character that follows it are
replaced by a garbage character. At this writing, we are not sure if
C-Kermit 7.0 and K-95. Some Kermit implementations do not handle
incoming "bare" control characters. To work around, "set prefixing
all".
- _________________________________________________________________
4.22.4. Spurious Cancellations
packet contains X in its data field, the transfer of the current file
is canceled, and if it contains a Z, the entire transfer is canceled.
At least one overzealous Kermit implementation applies this rule to
- non-Data packets as well, the typical symptom being that any attempt
- to transfer a file whose name begins with X or Z results in
- cancellation. This is because the file receiver typically sends back
- the name under which it stored the file (which might not be the same
- as the name it was sent with) in the ACK to the File Header packet.
- This is information only and should not cause cancellation. To work
- around the problem, use:
+ non-Data packets as well, the typical symptom being that any attempt to
+ transfer a file whose name begins with X or Z results in cancellation.
+ This is because the file receiver typically sends back the name under
+ which it stored the file (which might not be the same as the name it
+ was sent with) in the ACK to the File Header packet. This is
+ information only and should not cause cancellation. To work around the
+ problem, use:
SET F-ACK-BUG { ON, OFF }
Normally it is ON (regardless of the SET SEND PATHNAMES setting). Use
SET F-ACK-PATH OFF to instruct Kermit to send back only the filename
without the path in the ACK to the F packet.
- _________________________________________________________________
4.22.5. Spurious Refusals
Some Kermit implementations, notably PDP-11 Kermit 3.60 and earlier,
have bugs in their handling of Attribute packets that can cause
- unwarranted refusal of incoming files, e.g. based on date or size.
- This can be worked around by telling one or both of the Kermit
- partners to:
+ unwarranted refusal of incoming files, e.g. based on date or size. This
+ can be worked around by telling one or both of the Kermit partners to:
SET ATTRIBUTES OFF
- _________________________________________________________________
4.22.6. Failures during the Data Transfer Phase
- This can be caused by control-character unprefixing ([527]Section
+ This can be caused by control-character unprefixing ([535]Section
4.22.3 ), and fixed by:
SET PREFIXING ALL
It can also have numerous other causes, explained in Chapter 10 of
- [528]Using C-Kermit: the connection is not 8-bit transparent (so use
+ [536]Using C-Kermit: the connection is not 8-bit transparent (so use
"set parity space" or somesuch), inadequate flow control, etc. Consult
the manual.
- _________________________________________________________________
4.22.7. Fractured Filenames
- At least one well-known PC-based communications package negotiates
- data compression, which (according to the protocol specification)
- applies to both the filename and the file data, but then fails to
- decompress the filename. Example: C-Kermit sends a file called
- R000101.DAT (where 000101 might be non-Y2K-wise YYMMDD notation), and
- the package in question stores the files as R~#0101.DAT. Workaround:
- Tell C-Kermit to SET REPEAT COUNTS OFF.
- _________________________________________________________________
+ At least one well-known PC-based communications package negotiates data
+ compression, which (according to the protocol specification) applies to
+ both the filename and the file data, but then fails to decompress the
+ filename. Example: C-Kermit sends a file called R000101.DAT (where
+ 000101 might be non-Y2K-wise YYMMDD notation), and the package in
+ question stores the files as R~#0101.DAT. Workaround: Tell C-Kermit to
+ SET REPEAT COUNTS OFF.
4.22.8. Bad File Dates
Workaround: tell C-Kermit to SET ATTRIBUTE DATE OFF. You don't get the
file's real date, but you also don't get 1 Feb 1970; instead the file
gets the current date and time.
- _________________________________________________________________
4.23. File Transfer Recovery
greater) so the recovery operation proceeds, just as you asked and
expected.
- BUT... Just as before, the results are correct only under the
- following conditions:
+ BUT... Just as before, the results are correct only under the following
+ conditions:
* If the prior interrupted transfer was also in binary mode; or:
- * If the prior transfer was in text mode and the other computer was
- a "like platform" (e.g. UNIX-to-UNIX, Windows-to-Windows,
+ * If the prior transfer was in text mode and the other computer was a
+ "like platform" (e.g. UNIX-to-UNIX, Windows-to-Windows,
DOS-to-Windows) AND there was no character-set translation (i.e.
TRANSFER CHARACTER-SET was TRANSPARENT).
* Transfer the whole file again in text mode, or:
* Use SEND /STARTING-AT: to recover the transfer at the correct
- point; but you have to find out what that point is, as described
- in the manual.
+ point; but you have to find out what that point is, as described in
+ the manual.
Kermit has no way of knowing whether the previous transfer was in text
or binary mode so it is your responsibility to choose the appropriate
connection slow enough) to require SEND /RECOVER to resume interrupted
transfers, you should remember that SEND /RECOVER (RESEND) overrides
all FILE COLLISION settings. Therefore you should use SEND /RECOVER
- (RESEND) only on the file that was interrupted, not the file group.
- For example, if the original transfer was initiated with:
+ (RESEND) only on the file that was interrupted, not the file group. For
+ example, if the original transfer was initiated with:
SEND *
(In C-Kermit 7.0 and later, \v(filename) contains the name of the file
most recently transferred, as long you have not EXITed from Kermit or
changed directory, etc.
- _________________________________________________________________
4.24. FILE COLLISION UPDATE Clarification
creation date is used. These two policies reflect the preferences of
the two user communities.
- Also, remember that the file date/time given in the attribute packet
- is the local time at the file sender. At present, no timezone
- conversions are defined in or performed by the Kermit protocol. This
- is primarily because this feature was designed at a time when many of
- the systems where Kermit runs had no concept of timezone, and
- therefore would be unable to convert (say, to/from GMT or UTC or Zulu
- time).
+ Also, remember that the file date/time given in the attribute packet is
+ the local time at the file sender. At present, no timezone conversions
+ are defined in or performed by the Kermit protocol. This is primarily
+ because this feature was designed at a time when many of the systems
+ where Kermit runs had no concept of timezone, and therefore would be
+ unable to convert (say, to/from GMT or UTC or Zulu time).
- As a consequence, some unexpected results might occur when
- transferring files across timezones; e.g. commands on the target
- system that are sensitive to file dates might work (UNIX "make",
- backups, etc).
+ As a consequence, some unexpected results might occur when transferring
+ files across timezones; e.g. commands on the target system that are
+ sensitive to file dates might not work (UNIX "make", backups, etc).
Timezone handling is deferred for a future release.
- _________________________________________________________________
4.25. Autodownload Improvements
- Refer to pages 164-165 of [529]Using C-Kermit about the hazards of
+ Refer to pages 164-165 of [537]Using C-Kermit about the hazards of
autodownload when C-Kermit is "in the middle". As of C-Kermit 7.0, no
- more hazards. If C-Kermit has TERMINAL AUTODOWNLOAD ON and it detects
- a packet of the current protocol type (Kermit or Zmodem), it "erases"
- the visual aspect of the packet that would be seen by the terminal
- (or, more to the point, the emulator, such as K95). This way, only
- C-Kermit goes into RECEIVE mode, and not also the terminal emulator
- through which C-Kermit is accessed. And therefore, it is no longer
- necessary to SET TERMINAL AUTODOWNLOAD OFF to prevent multiple Kermits
- from going into receive mode at once, but of course it is still
- necessary to ensure that, when you have multiple Kermits in a chain,
- that the desired one receives the autodownload.
-
- The defaults have not been changed; Kermit 95 still has autodownload
- ON by default, and C-Kermit has it OFF by default.
- _________________________________________________________________
+ more hazards. If C-Kermit has TERMINAL AUTODOWNLOAD ON and it detects a
+ packet of the current protocol type (Kermit or Zmodem), it "erases" the
+ visual aspect of the packet that would be seen by the terminal (or,
+ more to the point, the emulator, such as K95). This way, only C-Kermit
+ goes into RECEIVE mode, and not also the terminal emulator through
+ which C-Kermit is accessed. And therefore, it is no longer necessary to
+ SET TERMINAL AUTODOWNLOAD OFF to prevent multiple Kermits from going
+ into receive mode at once, but of course it is still necessary to
+ ensure that, when you have multiple Kermits in a chain, that the
+ desired one receives the autodownload.
+
+ The defaults have not been changed; Kermit 95 still has autodownload ON
+ by default, and C-Kermit has it OFF by default.
5. CLIENT/SERVER
does not include the server's current directory, clients can become
quite confused. For example, "remote dir oofa.txt" shows a file named
oofa.txt, but "get oofa.txt" fails. In this situation, you should
- either DISABLE DIR or make your GET-PATH include the current
- directory.
- _________________________________________________________________
+ either DISABLE DIR or make your GET-PATH include the current directory.
5.1. New Command-Line Options
is sent to standard output rather than written to disk.
The -I option ("Internet") is used to tell a remote C-Kermit program
- that you are coming in via Internet Telnet or Rlogin and therefore
- have a reliable connection. The -I option is equivalent to SET
- RELIABLE ON and SET FLOW NONE.
+ that you are coming in via Internet Telnet or Rlogin and therefore have
+ a reliable connection. The -I option is equivalent to SET RELIABLE ON
+ and SET FLOW NONE.
- The -O option ("Only One") tells C-Kermit to enter server mode but
- then exit after the first client operation.
+ The -O option ("Only One") tells C-Kermit to enter server mode but then
+ exit after the first client operation.
- See [530]Section 9.3 for details.
- _________________________________________________________________
+ See [538]Section 9.3 for details.
5.2. New Client Commands
REMOTE MKDIR directory-name
Tells the client to ask the server to create a directory with
- the given name, which can be absolute or relative. The syntax
- of the directory name depends on the Kermit server (see
- [531]next section); in all cases, it can be in the syntax of
- the system where the server is running (UNIX, VMS, DOS, etc)
- but newer servers also accept UNIX syntax, no matter what the
- underlying platform. The server will not execute this command
- if (a) it does not understand it, (b) a DISABLE MKDIR command
- has been given, or (c) a DISABLE CWD command has been given;
- otherwise, the command is executed, but will fail if the
- directory can not be created, in which cases most servers will
- attempt to return a message giving the reason for failure. The
- REMOTE MKDIR command succeeds if the remote directory is
- created, or if it already exists and therefore does not need to
- be created, and fails otherwise.
+ the given name, which can be absolute or relative. The syntax of
+ the directory name depends on the Kermit server (see [539]next
+ section); in all cases, it can be in the syntax of the system
+ where the server is running (UNIX, VMS, DOS, etc) but newer
+ servers also accept UNIX syntax, no matter what the underlying
+ platform. The server will not execute this command if (a) it
+ does not understand it, (b) a DISABLE MKDIR command has been
+ given, or (c) a DISABLE CWD command has been given; otherwise,
+ the command is executed, but will fail if the directory can not
+ be created, in which cases most servers will attempt to return a
+ message giving the reason for failure. The REMOTE MKDIR command
+ succeeds if the remote directory is created, or if it already
+ exists and therefore does not need to be created, and fails
+ otherwise.
REMOTE RMDIR directory-name
Tells the client to ask the server to remove (delete) a
REMOTE SET TRANSFER MODE { AUTOMATIC, MANUAL }
Tells the client to ask the server to set the given
- file-transfer mode. Automatic means (roughly): if the client
- and the server are running on the same kind of computer (e.g.
- both are on UNIX), then use binary mode automatically; if the
- system types are different, use some other method to
- automatically determine text or binary mode, such as filename
- pattern matching. MANUAL means, in this context, obey the
- client's FILE TYPE setting (TEXT or BINARY). Synonym: REMOTE
- SET XFER MODE.
+ file-transfer mode. Automatic means (roughly): if the client and
+ the server are running on the same kind of computer (e.g. both
+ are on UNIX), then use binary mode automatically; if the system
+ types are different, use some other method to automatically
+ determine text or binary mode, such as filename pattern
+ matching. MANUAL means, in this context, obey the client's FILE
+ TYPE setting (TEXT or BINARY). Synonym: REMOTE SET XFER MODE.
[ REMOTE ] QUERY KERMIT function(args...)
- Prior to C-Kermit 7.0, the arguments were not evaluated
- locally. Thus it was not possible to have the server run the
- function with client-side variables as arguments. Now:
+ Prior to C-Kermit 7.0, the arguments were not evaluated locally.
+ Thus it was not possible to have the server run the function
+ with client-side variables as arguments. Now:
define \%a oofa.*
remote query kermit files(\%a) ; Client's \%a
When given at the C-Kermit prompt when it has no connection, it
does nothing.
- Note that in C-Kermit 7.0, the REMOTE (or R) prefix is not required
- for QUERY, since there is no local QUERY command. The new top-level
- QUERY command does exactly what REMOTE QUERY (RQUERY) does.
+ Note that in C-Kermit 7.0, the REMOTE (or R) prefix is not required for
+ QUERY, since there is no local QUERY command. The new top-level QUERY
+ command does exactly what REMOTE QUERY (RQUERY) does.
All REMOTE commands now have single-word shortcuts:
RSET REMOTE SET
etc.
- The R prefix is not applied to LOGIN because there is already an
- RLOGIN command with a different meaning. It is not applied to LOGOUT
- either, since LOGOUT knows what to do in each case, and for symmetry
- with LOGIN.
- _________________________________________________________________
+ The R prefix is not applied to LOGIN because there is already an RLOGIN
+ command with a different meaning. It is not applied to LOGOUT either,
+ since LOGOUT knows what to do in each case, and for symmetry with
+ LOGIN.
5.2.1. Remote Procedure Definitions and Calls
returns the size of the remote file, foo.bar.
- Now note that C-Kermit includes an \fexecute() function, allowing it
- to execute any macro as if it were a built-in function. So suppose
- MYMACRO is the name of a macro defined in the server. You can execute
- it from the client as follows (the redundant "remote" prefix is
- omitted in the remaining examples):
+ Now note that C-Kermit includes an \fexecute() function, allowing it to
+ execute any macro as if it were a built-in function. So suppose MYMACRO
+ is the name of a macro defined in the server. You can execute it from
+ the client as follows (the redundant "remote" prefix is omitted in the
+ remaining examples):
query kermit execute(mymacro arg1 arg2...)
query kermit execute(macroname arg1 arg2...)
Quoting is required if the definition contains formal parameters.
- _________________________________________________________________
5.3. New Server Capabilities
5.3.1.2. Removing Directories
- When attempting to execute a REMOTE RMDIR, the server can remove only
- a single directory, not an entire sequence or tree. The system service
- that is called to remove the directory generally requires not only
- that the server process has write delete access, but also that the
- directory contain no files.
+ When attempting to execute a REMOTE RMDIR, the server can remove only a
+ single directory, not an entire sequence or tree. The system service
+ that is called to remove the directory generally requires not only that
+ the server process has write delete access, but also that the directory
+ contain no files.
In the future, a REMOTE RMDIR /RECURSIVE command (and the accompanying
protocol) might be added. For now, use the equivalent REMOTE HOST
command(s), if any.
- _________________________________________________________________
5.3.2. Directory Listings
Directory listings are generated by C-Kermit itself, rather than by
running the underlying system's directory command. Some control over
the listing format can be obtained with the SET OPTIONS DIRECTORY
- command ([532]Section 4.5.1). The following options affect listings
+ command ([540]Section 4.5.1). The following options affect listings
sent by the server: /[NO]HEADING, /[NO]DOTFILES, and /[NO]BACKUP. In
UNIX and VMS, the listing is always sorted by filename. There is, at
present, no protocol defined for the client to request listing options
In UNIX and OS-9, this is a 10-character field, left adjusted.
In VMS it is a 22-character field, left-adjusted. In each case,
the protection / permission codes are shown in the server
- platform's native format. In other operating systems, this
- field is not shown.
+ platform's native format. In other operating systems, this field
+ is not shown.
Size in bytes:
- This is always a 10-character field. The file's size is shown
- as a decimal number, right adjusted in the field. If the file
- is a directory and its size can not be obtained, the size is
- shown as "<DIR>". Two blanks follow this field.
+ This is always a 10-character field. The file's size is shown as
+ a decimal number, right adjusted in the field. If the file is a
+ directory and its size can not be obtained, the size is shown as
+ "<DIR>". Two blanks follow this field.
Date:
Always in yyyy-mm-dd hh:mm:ss numeric format, and therefore 19
-0.40r".
Since the UNIX client can pipe responses to REMOTE commands through
- filters, any desired sorting can be accomplished this way, for
- example:
+ filters, any desired sorting can be accomplished this way, for example:
C-Kermit> remote directory | sort +0.22 -0.40
C-Kermit> remote directory | sort +0.11 -0.19
You can use sort options to select reverse or ascending order. "man
- sort" (in UNIX) for more information. And of course, you can pipe
- these listings through any other filter of your choice, such as grep
- to skip unwanted lines.
- _________________________________________________________________
+ sort" (in UNIX) for more information. And of course, you can pipe these
+ listings through any other filter of your choice, such as grep to skip
+ unwanted lines.
5.4. Syntax for Remote Filenames with Embedded Spaces
mget oofa.txt oofa.bin
- the server tries to send the two files, oofa.txt and oofa.bin. But
- what if you want the server to send you a file named, say:
+ the server tries to send the two files, oofa.txt and oofa.bin. But what
+ if you want the server to send you a file named, say:
D:\HP OfficeJet 500\Images\My Pretty Picture Dot PCL
- How does the server know this is supposed to be one file and not
- seven? In this case, you need to the send file name to the server
- enclosed in either curly braces:
+ How does the server know this is supposed to be one file and not seven?
+ In this case, you need to the send file name to the server enclosed in
+ either curly braces:
{D:\HP OfficeJet 500\Images\My Pretty Picture Dot PCL}
The method for doing this depends on your client. If your client is
C-Kermit 7.0, any recent version of Kermit 95, or MS-DOS Kermit 3.16,
then you have to enclose the name in braces just so the client can
- parse it, so to send braces or doublequotes to the server, you must
- put them inside the first, outside pair of braces. And you also need
- to double the backslashes to prevent them from being interpreted:
+ parse it, so to send braces or doublequotes to the server, you must put
+ them inside the first, outside pair of braces. And you also need to
+ double the backslashes to prevent them from being interpreted:
get {{D:\\HP OfficeJet 500\\Images\\My Pretty Picture Dot PCL}}
get {"D:\\HP OfficeJet 500\\Images\\My Pretty Picture Dot PCL"}
Here, the quotes go on the outside so UNIX will pass the entire
filename, spaces, braces, and all, as a single argument to Kermit, and
- the backslashes are not doubled because (a) the UNIX shell ignores
- them since they are in a quoted string, and (b) Kermit ignores them
- since the interactive command parser is not activated in this case.
- _________________________________________________________________
+ the backslashes are not doubled because (a) the UNIX shell ignores them
+ since they are in a quoted string, and (b) Kermit ignores them since
+ the interactive command parser is not activated in this case.
5.5. Automatic Orientation Messages upon Directory Change
following commands govern this feature:
SET SERVER CD-MESSAGE FILE name
- Given to the servr, allows the message-file name to be
- specified at runtime. A list of names to look for can be given
- in the following format:
+ Given to the servr, allows the message-file name to be specified
+ at runtime. A list of names to look for can be given in the
+ following format:
{{name1}{name2}{name3}{...}}
Given to server, includes CD-Message status.
The default CD message file name is system dependent. SHOW CD or SHOW
- SERVER displays the list. Also see [533]Section 4.5.2.
- _________________________________________________________________
+ SERVER displays the list. Also see [541]Section 4.5.2.
5.6. New Server Controls
SET SERVER IDLE-TIMEOUT seconds
This was available previously in Kermit 95 only. Now it can be
- used in C-Kermit also to specify a maximum number of seconds
- the server is allowed to be idle before exiting server mode. 0
+ used in C-Kermit also to specify a maximum number of seconds the
+ server is allowed to be idle before exiting server mode. 0
seconds means no idle timeout. In C-Kermit (but not K-95), SET
SERVER TIMEOUT and SET SERVER IDLE-TIMEOUT are mutually
- exclusive -- you can have one or the other (or neither), but
- not both. (Server timeouts are for the benefit of primitive
- Kermit clients that are not capable of timing out on their own;
- to our knowledge, no such clients are still in circulation.)
+ exclusive -- you can have one or the other (or neither), but not
+ both. (Server timeouts are for the benefit of primitive Kermit
+ clients that are not capable of timing out on their own; to our
+ knowledge, no such clients are still in circulation.)
SET SERVER KEEPALIVE { ON, OFF }
(See next section).
- _________________________________________________________________
5.7. Timeouts during REMOTE HOST Command Execution
Prior to C-Kermit 7.0, the C-Kermit server would block waiting for
output from a system command invoked via REMOTE HOST from the client.
If the system command took a long time to execute, the client would
- time out and send NAK packets. If the command took too long, the
- client would reach its retry limit and give up. Even if it didn't, the
- NAKs would cause unnecessary retransmissions.
+ time out and send NAK packets. If the command took too long, the client
+ would reach its retry limit and give up. Even if it didn't, the NAKs
+ would cause unnecessary retransmissions.
In version 7.0, the C-Kermit server (VMS and select()-capable UNIX
- versions only), sends "keepalive packets" (empty data packets) once
- per second while waiting for the system command to complete. This
- procedure should be entirely transparent to the Kermit client, and
- should prevent the unwanted timeouts and NAKs. When C-Kermit 7.0
- itself (or K95 1.1.19) is the client, it prints dots to show the
- keepalive packets.
+ versions only), sends "keepalive packets" (empty data packets) once per
+ second while waiting for the system command to complete. This procedure
+ should be entirely transparent to the Kermit client, and should prevent
+ the unwanted timeouts and NAKs. When C-Kermit 7.0 itself (or K95
+ 1.1.19) is the client, it prints dots to show the keepalive packets.
The keepalive feature can be turned off and on with:
Normally it should be on. Turn it off it if causes trouble with the
client, or if it seems to slow down the server (as it might on some
platforms under certain circumstances).
- _________________________________________________________________
6. INTERNATIONAL CHARACTER SETS
To accommodate the Euro currency symbol, and to correct several other
longstanding problems with ISO Latin Alphabet 1, ISO 8859-15 Latin
- Alphabet 9 was issued in May 1998. It is supported by C-Kermit 7.0 as
- a transfer character set, a file character set, and a terminal
- character set. Translations that preserve the new characters are
- available between Latin-9 and several other sets including:
+ Alphabet 9 was issued in May 1998. It is supported by C-Kermit 7.0 as a
+ transfer character set, a file character set, and a terminal character
+ set. Translations that preserve the new characters are available
+ between Latin-9 and several other sets including:
PC Code Page 858 (Western European languages, similar to CP850)
Windows Code Page 1252 (Western European languages, similar to Latin-1)
involving the DEC MCS or NeXT character sets.
The Euro character is also present in the Universal Character Set,
- described in [534]Section 6.6.
+ described in [542]Section 6.6.
6.1. The HP-Roman8 Character Set
The HP-Roman8 character set is supported in C-Kermit 6.0 and later but
was omitted from Table VII-4 in the 2nd Edition of Using C-Kermit due
- to lack of space. It is listed in [535]Appendix III.
+ to lack of space. It is listed in [543]Appendix III.
6.2. Greek Character Sets
GREEK-ISO is ISO 8859-7, which the same as ELOT 928.
- The new Greek character sets are listed in [536]Appendix III.
+ The new Greek character sets are listed in [544]Appendix III.
6.3. Additional Latin-2 Character Sets
CP855
This PC Code Page contains all the Cyrillic letters that are
also in ISO 8859-5, and is therefore useful for non-Russian
- Cyrillic text (Ukrainian, Belorussian, etc), unlike CP866,
- which has a smaller repertoire of Cyrillic letters.
+ Cyrillic text (Ukrainian, Belarusian, etc), unlike CP866, which
+ has a smaller repertoire of Cyrillic letters.
CP1251
The Windows Cyrillic Code Page. Equivalent to CP855, but with
Cyrillic letter Io (looks like Roman E with diaeresis) plus a
selection of box-drawing characters to columns 8 through 11,
which are vacant in original Old KOI-8. KOI8-R is used for the
- Russian language. It is specified in [537]RFC 1489.
+ Russian language. It is specified in [545]RFC 1489.
KOI8U
A similar extension of Old KOI-8, but for Ukrainian. It is
- specified in [538]RFC 2319.
- _________________________________________________________________
+ specified in [546]RFC 2319.
6.5. Automatic Character-Set Switching
SET RECEIVE CHARACTER-SET-SELECTION { AUTOMATIC, MANUAL }
AUTOMATIC is the default, causing the behavior described above
when an incoming file arrives. Choose MANUAL to defeat this
- behavior and force your current FILE CHARACTER-SET setting to
- be used, no matter what it is. Note that SET RECEIVE
- CHARACTER-SET MANUAL does not disable recognition of the
- incoming transfer character-set announcer, and translation from
- the corresponding character-set to your current file
- character-set. To disable that, use SET ATTRIBUTE CHARACTER-SET
- OFF.
+ behavior and force your current FILE CHARACTER-SET setting to be
+ used, no matter what it is. Note that SET RECEIVE CHARACTER-SET
+ MANUAL does not disable recognition of the incoming transfer
+ character-set announcer, and translation from the corresponding
+ character-set to your current file character-set. To disable
+ that, use SET ATTRIBUTE CHARACTER-SET OFF.
SET SEND CHARACTER-SET-SELECTION { AUTOMATIC, MANUAL }
Again AUTOMATIC is the default, causing the behavior described
ASSOCIATE FILE-CHARACTER-SET name1 [ name2 ]
Changes the association for the file character-set name1 to be
- the transfer character-set name2. If name2 is omitted,
- automatic switching is disabled for this file character-set
- only.
- _________________________________________________________________
+ the transfer character-set name2. If name2 is omitted, automatic
+ switching is disabled for this file character-set only.
6.6. UNICODE
* Unguarded file transmission (TRANSMIT)
* Local file character-set conversion (TRANSLATE)
- C-Kermit is not, however, a "Unicode application" in the sense that
- its commands, messages, or user interface are Unicode. Rather, it is
+ C-Kermit is not, however, a "Unicode application" in the sense that its
+ commands, messages, or user interface are Unicode. Rather, it is
"Unicode aware" in its ability to handle and convert Unicode text in
the course of file transfer and terminal connection, and you can also
use Kermit to convert local files between Unicode and other character
The UCS already covers these scripts and many more, but it's an
evolving standard with efforts underway to accommodate even more
- languages and writing systems. Support is growing for native UCS use
- on many platforms and in many applications. The goal of the framers of
- the UCS is for it to replace ASCII, the ISO Latin Alphabets, ISCII,
- VISCII, the Chinese, Japanese, and Korean (CJK) multibyte sets, etc,
- as well as the many private character sets in use today, in other
- words to become *the* Universal Character Set.
-
- Until that time, however, conversions between existing sets and the
- UCS will be necessary when moving text between platforms and
- applications. Now Kermit can help.
- _________________________________________________________________
+ languages and writing systems. Support is growing for native UCS use on
+ many platforms and in many applications. The goal of the framers of the
+ UCS is for it to replace ASCII, the ISO Latin Alphabets, ISCII, VISCII,
+ the Chinese, Japanese, and Korean (CJK) multibyte sets, etc, as well as
+ the many private character sets in use today, in other words to become
+ *the* Universal Character Set.
+
+ Until that time, however, conversions between existing sets and the UCS
+ will be necessary when moving text between platforms and applications.
+ Now Kermit can help.
6.6.1. Overview of Unicode
For a more complete picture, please visit:
- [539]http://www.unicode.org/
+ [547]http://www.unicode.org/
and access the various online introductions, FAQs, technical reports,
and other information. For greater depth, order the latest version of
- the published Unicode Standard. The following overview contains a
- great many oversimplifications and perhaps an opinion or two.
+ the published Unicode Standard. The following overview contains a great
+ many oversimplifications and perhaps an opinion or two.
At present, the UCS is a 16-bit (2-byte) character set, but with
provisions to grow to a 4-byte set. UCS-2 refers to the two-byte set,
also called the Base Multilingual Plane (BMP), in which each character
has 16 bits, and therefore there are 2^16 = 65536 possible characters.
The first 128 characters are the same as US ASCII (C0 control
- characters and DEL included), the next 32 are the C1 control
- characters of ISO 6429, and the next 96 are the Right Half of ISO
- 8859-1 Latin Alphabet 1. The remaining tens of thousands of characters
- are arranged newly for the UCS, usually (but not always) in sections
- corresponding to existing standards, such as ISO Latin/Cyrillic, often
- plus additional characters not appearing in the existing standards due
- to lack of space (or other reasons).
-
- ISO 10646 allows for additional planes, e.g. for Egyptian
- hieroglyphics or ancient (or other esoteric) CJK characters, but these
- planes are not yet defined and so we will say nothing more about them
- here, except that their use will require the 4-byte form of UCS,
- called UCS-4, in some form (more about "forms" in [540]Section 6.6.2).
+ characters and DEL included), the next 32 are the C1 control characters
+ of ISO 6429, and the next 96 are the Right Half of ISO 8859-1 Latin
+ Alphabet 1. The remaining tens of thousands of characters are arranged
+ newly for the UCS, usually (but not always) in sections corresponding
+ to existing standards, such as ISO Latin/Cyrillic, often plus
+ additional characters not appearing in the existing standards due to
+ lack of space (or other reasons).
+
+ ISO 10646 allows for additional planes, e.g. for Egyptian hieroglyphics
+ or ancient (or other esoteric) CJK characters, but these planes are not
+ yet defined and so we will say nothing more about them here, except
+ that their use will require the 4-byte form of UCS, called UCS-4, in
+ some form (more about "forms" in [548]Section 6.6.2).
Unicode and ISO 10646 are constantly under revision, mainly to add new
characters. The Unicode revision is denoted by a version number, such
- as 1.0, 1.1, 2.0, 3.0. The ISO 10646 standard revision is identified
- by Edition (such as ISO 10646-1 1993), plus reference to any
- amendments. The first versions of these standards included encodings
- for Korean Hangul syllables (Jamos); these encodings were changed in
- version 1.1 of Unicode and by Amendment 5 to ISO 10646-1. The Unicode
- Technical Committee and the ISO acknowledge that this was a bad thing
- to do, and promise never change encodings or character names again,
- since this poses serious problems for conformance and data
- interchange.
+ as 1.0, 1.1, 2.0, 3.0. The ISO 10646 standard revision is identified by
+ Edition (such as ISO 10646-1 1993), plus reference to any amendments.
+ The first versions of these standards included encodings for Korean
+ Hangul syllables (Jamos); these encodings were changed in version 1.1
+ of Unicode and by Amendment 5 to ISO 10646-1. The Unicode Technical
+ Committee and the ISO acknowledge that this was a bad thing to do, and
+ promise never change encodings or character names again, since this
+ poses serious problems for conformance and data interchange.
A UCS-2 value is customarily written like this:
U+xxxx
where "xxxx" represents four hexadecimal digits, 0-9 and A-F. For
- example, U+0041 is "A", U+00C1 is A-acute, U+042F is uppercase
- Cyrillic "Ya", U+FB4F is Hebrew Ligature Alef Lamed, and U+FFFD is the
- special character that means "not a character".
+ example, U+0041 is "A", U+00C1 is A-acute, U+042F is uppercase Cyrillic
+ "Ya", U+FB4F is Hebrew Ligature Alef Lamed, and U+FFFD is the special
+ character that means "not a character".
- Most characters from widely-used alphabetic writing systems such as
- the West European ones, Cyrillic, Greek, Hebrew, Vietnamese, etc, are
+ Most characters from widely-used alphabetic writing systems such as the
+ West European ones, Cyrillic, Greek, Hebrew, Vietnamese, etc, are
available in "precomposed" form; for example Uppercase Latin Letter A
- with Acute Accent is a single character (as it is in Latin-1).
- However, the UCS also permits composition of a base character with one
- or more nonspacing diacritics. This means the same character can be
- represented in more than one way, which can present problems in many
- application areas, including transfer and character-set conversion of
- text.
+ with Acute Accent is a single character (as it is in Latin-1). However,
+ the UCS also permits composition of a base character with one or more
+ nonspacing diacritics. This means the same character can be represented
+ in more than one way, which can present problems in many application
+ areas, including transfer and character-set conversion of text.
Conversion from ASCII or Latin-1 to UCS-2 text is "trivial": simply
insert a NUL (0) byte before each ASCII or Latin-1 byte. Converting in
transmission methods. And to make matters worse, different hardware
platforms store UCS-2 characters in different byte order. Thus a UCS-2
file transferred by FTP (or accessed via NFS, etc) between two
- computers with different architecture might have its bytes in the
- wrong order (or worse; see [541]Section 6.6.5.1 ).
- _________________________________________________________________
+ computers with different architecture might have its bytes in the wrong
+ order (or worse; see [549]Section 6.6.5.1 ).
6.6.2. UCS Byte Order
| 0 0 0 0 0 0 0 1 | 0 0 0 0 0 0 0 0 |
+-----------------+-----------------+
- When a computer works this way, it is said to be Big Endian, meaning
- it puts the most significant (biggest) byte first (on the "left") in a
+ When a computer works this way, it is said to be Big Endian, meaning it
+ puts the most significant (biggest) byte first (on the "left") in a
16-bit word, and the least significant byte second (on the right).
However, some other computers have the opposite arrangement, called
include a BOM, and any application that reads one should test for a
BOM, and if one is found, infer the byte order from it. This is a
convention, however -- not a standard or a requirement -- and
- applications vary in their ability to handle BOMs and "backwards"
- UCS-2 files.
+ applications vary in their ability to handle BOMs and "backwards" UCS-2
+ files.
Note that a BOM is useful only at the beginning of a file. If you
append one UCS-2 file to another, and both have BOMs, the internal BOM
is no longer a BOM. And if the byte orders of the two files differ,
then either the first part or the second will be backwards. (Various
other undesirable effects might also occur, not discussed here.)
- _________________________________________________________________
6.6.2. UCS Transformation Formats
UCS textual data can be modified in various ways for transmission or
- storage. Any officially sanctioned method of doing this is called a
- UCS Transformation Format, or UTF. One such method, called UTF-16, is
- essentially identical with UCS-2 except that it designates certain
- code values as "escape sequences" (called surrogate pairs) to access
+ storage. Any officially sanctioned method of doing this is called a UCS
+ Transformation Format, or UTF. One such method, called UTF-16, is
+ essentially identical with UCS-2 except that it designates certain code
+ values as "escape sequences" (called surrogate pairs) to access
characters in other planes without having to use full UCS-4. We won't
discuss UTF-16 further here, since at the moment there are no other
planes. Several other UTF's (such as UTF-1, UTF-2, and UTF-7) have
set. Every non-ASCII UCS-2 character is represented by a sequence of 2
or 3 UTF-8 bytes. Thus UTF-8 is more compact than UCS-2 for text
containing a preponderance of ABC's (or other ASCII characters), about
- the same as UCS-2 for other alphabetic scripts (Cyrillic, Roman,
- Greek, etc), and larger than UCS-2 for Chinese, Japanese, and Korean.
+ the same as UCS-2 for other alphabetic scripts (Cyrillic, Roman, Greek,
+ etc), and larger than UCS-2 for Chinese, Japanese, and Korean.
The UTF-8 uncoding of the UCS has been adopted by the Internet as the
preferred character set for new applications, and is gradually being
- retrofitted into traditional applications like FTP ([542]RFC 2640).
- _________________________________________________________________
+ retrofitted into traditional applications like FTP ([550]RFC 2640).
6.6.3. Conformance Levels
Normalization Form C (described in Unicode Technical Report 15,
incorporated into Unicode 3.0).
- As noted in [543]Section 6.6.2, Kermit does not claim to support
- UTF-16 at the present time, hence the UCS-2 nomenclature. Kermit
- treats surrogates just as if they were any other UCS-2 characters,
- rather than as escapes to other planes, which means that (except when
- converting between UCS-2 and UTF-8) they are translated to "error"
- characters, since (a) no other planes are defined yet (and if they
- were, no other character sets supported by Kermit would encode their
- characters), and (b) no valid surrogate character corresponds to any
- other UCS-2 character.
+ As noted in [551]Section 6.6.2, Kermit does not claim to support UTF-16
+ at the present time, hence the UCS-2 nomenclature. Kermit treats
+ surrogates just as if they were any other UCS-2 characters, rather than
+ as escapes to other planes, which means that (except when converting
+ between UCS-2 and UTF-8) they are translated to "error" characters,
+ since (a) no other planes are defined yet (and if they were, no other
+ character sets supported by Kermit would encode their characters), and
+ (b) no valid surrogate character corresponds to any other UCS-2
+ character.
A minor yet significant aspect of Unicode 3.0 and some recent
perturbation of ISO 10646-1 (probably Amendment 18, "Symbols and Other
Characters") is the addition of the Euro Sign at U+20AC. As noted in
- [544]Section 6.0, Kermit's "Euro compliance" includes conversion
+ [552]Section 6.0, Kermit's "Euro compliance" includes conversion
between Latin Alphabet 9 and various PC code pages. Text can also be
- converted between UCS-2 or UTF-8 and any other Euro-compliant
- character set (Latin-9, CP858, CP1250, CP1252) without loss of the
- Euro Sign.
- _________________________________________________________________
+ converted between UCS-2 or UTF-8 and any other Euro-compliant character
+ set (Latin-9, CP858, CP1250, CP1252) without loss of the Euro Sign.
6.6.4. Relationship of Unicode with Kermit's Other Character Sets
character-sets both including the characters in the file. For example,
you can translate a Hungarian text file between Latin-2 and Unicode,
but not between (say) Unicode and Latin/Greek. By the same token you
- can convert Japanese text from Shift-JIS or EUC or JIS-7 to Unicode
- and back, but you can't convert the same file to (say) Latin-1 if it
+ can convert Japanese text from Shift-JIS or EUC or JIS-7 to Unicode and
+ back, but you can't convert the same file to (say) Latin-1 if it
contains Japanese characters.
JIS-7 is equivalent to DEC Kanji and ISO-2022-JP except that the
latter two do not support halfwidth Katakana. Kermit treats all
three of these sets the same way, i.e. as JIS-7.
- As noted, Kermit presently does not handle combining diacritics, and
- so will not correctly convert UCS files that use them into a
- single-byte character set. For example, if a UCS file contains Latin
- Capital Letter A (U+0041) followed by Combining Acute Accent (U+0301),
- the result will be a two-character sequence, A followed by another
- character. This is what is meant by Conformance Level 1. (The
- situation grows worse with multiple diacritics, since they can occur
- in any order.)
+ As noted, Kermit presently does not handle combining diacritics, and so
+ will not correctly convert UCS files that use them into a single-byte
+ character set. For example, if a UCS file contains Latin Capital Letter
+ A (U+0041) followed by Combining Acute Accent (U+0301), the result will
+ be a two-character sequence, A followed by another character. This is
+ what is meant by Conformance Level 1. (The situation grows worse with
+ multiple diacritics, since they can occur in any order.)
A higher level of conformance is possible, in which "canonical
equivalences" are handled via algorithms and databases, at some
(perhaps considerable) cost in performance, since a fair amount of
additional code must be executed for every character during data
transfer (database lookup, sorting of combining sequences into
- canonical order, etc). This can be added in future releases if there
- is a need (but in many cases, pre- and postpostprocessing might be a
+ canonical order, etc). This can be added in future releases if there is
+ a need (but in many cases, pre- and postpostprocessing might be a
better option).
- Within these constraints, Kermit converts between the UCS and its
- other character sets. For example, a mixture of Russian and English
- (and/or Dutch, or Latin) text can bet converted between the UCS and
- ISO Latin/Cyrillic or KOI-8. But since Kermit does not presently
- support Arabic character-set conversion, the new availability of UCS
- conversion does not mean that Kermit can convert from Arabic UCS text
- to some other character set, because Kermit does not support any other
- character set that includes Arabic. Ditto for Thai, Armenian,
- Georgian, Tibetan, Chinese, Korean, etc. However, Kermit CAN convert
- Arabic (or any other script) between UCS-2 and UTF-8.
+ Within these constraints, Kermit converts between the UCS and its other
+ character sets. For example, a mixture of Russian and English (and/or
+ Dutch, or Latin) text can bet converted between the UCS and ISO
+ Latin/Cyrillic or KOI-8. But since Kermit does not presently support
+ Arabic character-set conversion, the new availability of UCS conversion
+ does not mean that Kermit can convert from Arabic UCS text to some
+ other character set, because Kermit does not support any other
+ character set that includes Arabic. Ditto for Thai, Armenian, Georgian,
+ Tibetan, Chinese, Korean, etc. However, Kermit CAN convert Arabic (or
+ any other script) between UCS-2 and UTF-8.
Considering Cyrillic more carefully, note that the UCS also contains
- numerous Cyrillic characters not found in any of the Cyrillic sets
- (ISO Latin/Cyrillic, KOI8, CP866, etc) that Kermit supports;
- characters needed for Abkhasian, Yakut, Tatar, Bashkir, Altaic, Old
- Church Slavonic, etc; UCS text containing any of these historic or
- "extended" Cyrillic characters can not be converted to any of Kermit's
- current single-byte Cyrillic sets without loss. The situation is
- similar for Greek, Hebrew, etc, and even worse for Japanese since
- Unicode contains thousands of Kanjis that are lacking from the
- Japanese character sets based on JIS X 0208, such as EUC-JP, JIS-7,
- and Shift-JIS.
+ numerous Cyrillic characters not found in any of the Cyrillic sets (ISO
+ Latin/Cyrillic, KOI8, CP866, etc) that Kermit supports; characters
+ needed for Abkhasian, Yakut, Tatar, Bashkir, Altaic, Old Church
+ Slavonic, etc; UCS text containing any of these historic or "extended"
+ Cyrillic characters can not be converted to any of Kermit's current
+ single-byte Cyrillic sets without loss. The situation is similar for
+ Greek, Hebrew, etc, and even worse for Japanese since Unicode contains
+ thousands of Kanjis that are lacking from the Japanese character sets
+ based on JIS X 0208, such as EUC-JP, JIS-7, and Shift-JIS.
In general, when converting from UCS to a single-byte set, there is
always the possibility of data loss, just as there is when converting
converting to (say) Latin-1, just as Roman vowels with acute accents
are lost when converting from Latin-1 (an 8-bit set) to German ISO 646
(a 7-bit set).
- _________________________________________________________________
6.6.5. Kermit's Unicode Features
between UCS-2 or UTF-8 and a non-Unicode character set (such as
Latin-1), the UCS Line Separator (LS, U+2028) and Paragraph Separator
(PS, U+2029) characters are converted to the appropriate line
- terminator (CR, LF, or CRLF). When converting from a non-Unicode set
- to UCS-2 or UTF-8, however, line terminators are not converted to LS
- or PS. This is in accordance with the recommendations of Unicode
- Technical Report #13.
+ terminator (CR, LF, or CRLF). When converting from a non-Unicode set to
+ UCS-2 or UTF-8, however, line terminators are not converted to LS or
+ PS. This is in accordance with the recommendations of Unicode Technical
+ Report #13.
When C-Kermit starts, it tests the native byte order of the computer.
You can see the result in the SHOW FEATURES or SHOW FILE display. It's
illustrate that neither Unicode nor any other character-set beyond
ASCII is supported at the user-interface, command, or scripting level
in this version of C-Kermit.
- _________________________________________________________________
6.6.5.1. File Transfer
SET FILE CHARACTER-SET UCS2
- and if you want to send a UTF-8 text file (or store an incoming file
- in UTF-8 format), tell Kermit to:
+ and if you want to send a UTF-8 text file (or store an incoming file in
+ UTF-8 format), tell Kermit to:
SET FILE CHARACTER-SET UTF8
BOM, if there is one (and if there is a BOM, it is stripped, i.e. not
sent). If there is no BOM, the byte order is the one specified in the
most recent SET FILE UCS BYTE-ORDER command, if any, otherwise the
- computer's native byte order is assumed. When storing incoming files
- as UCS-2, the byte order is according SET FILE UCS BYTE-ORDER, if
- given, otherwise the native one; a BOM is written according to SET
- FILE UCS BOM.
+ computer's native byte order is assumed. When storing incoming files as
+ UCS-2, the byte order is according SET FILE UCS BYTE-ORDER, if given,
+ otherwise the native one; a BOM is written according to SET FILE UCS
+ BOM.
A transfer character-set should be chosen that includes all of the
characters in the source file. So, for example, if you are sending a
UCS-2 file containing only German-language text, your transfer
- character-set can be Latin-1, Latin-2, Latin-9, UCS-2, or UTF-8. But
- if you are sending a file that contains a combination of Hebrew and
- Greek, your transfer character-set must be UCS-2 or UTF-8 if you don't
- want to lose one script or the other. Furthermore, the transfer
- character-set must be one that is supported by the receiving Kermit
- program. Since UCS support is new, it is possible that the other
- Kermit program (if it supports character sets at all) does not support
- it, but does support single-byte sets such as Latin-1, Latin/Cyrillic,
- etc.
+ character-set can be Latin-1, Latin-2, Latin-9, UCS-2, or UTF-8. But if
+ you are sending a file that contains a combination of Hebrew and Greek,
+ your transfer character-set must be UCS-2 or UTF-8 if you don't want to
+ lose one script or the other. Furthermore, the transfer character-set
+ must be one that is supported by the receiving Kermit program. Since
+ UCS support is new, it is possible that the other Kermit program (if it
+ supports character sets at all) does not support it, but does support
+ single-byte sets such as Latin-1, Latin/Cyrillic, etc.
To select UCS-2 or UTF-8 as a transfer character-set, use:
SET TRANSFER CHARACTER-SET { UCS2, UTF8 }
- It is up to the receiving Kermit program to convert the transfer
- format to its own local format, if necessary. If it does not
- understand the UTF-8 or UCS-2 transfer character-set, and your file
- can not be adequately represented by any single-byte transfer
- character-set (such as Latin-1 or Latin/Cyrillic) then, if UTF-8
- format is acceptable on the receiving computer, use UTF-8 as the
- transfer character-set, with the receiver told to "set unknown-char
- keep", or with the sender told to "set attribute char off". If you
- want the file to be stored in UCS-2 format at the receiver, send it it
- binary mode if the source file is also UCS-2, or else use the
- TRANSLATE command (next section) to convert it to UCS-2 first, then
- send it in binary mode. You should not use UCS-2 as a transfer
- character-set in text-mode transfers to Kermit programs that don't
- support it, because they are likely to corrupt the result the same way
- FTP would (see the final paragraph of this section).
+ It is up to the receiving Kermit program to convert the transfer format
+ to its own local format, if necessary. If it does not understand the
+ UTF-8 or UCS-2 transfer character-set, and your file can not be
+ adequately represented by any single-byte transfer character-set (such
+ as Latin-1 or Latin/Cyrillic) then, if UTF-8 format is acceptable on
+ the receiving computer, use UTF-8 as the transfer character-set, with
+ the receiver told to "set unknown-char keep", or with the sender told
+ to "set attribute char off". If you want the file to be stored in UCS-2
+ format at the receiver, send it it binary mode if the source file is
+ also UCS-2, or else use the TRANSLATE command (next section) to convert
+ it to UCS-2 first, then send it in binary mode. You should not use
+ UCS-2 as a transfer character-set in text-mode transfers to Kermit
+ programs that don't support it, because they are likely to corrupt the
+ result the same way FTP would (see the final paragraph of this
+ section).
When UCS-2 is the transfer character set, it always goes into Kermit
packets in Big Endian format, with no BOM. As always, the transfer
character-set is announced by the sender to the receiver. The
- announcement for UCS-2 is "I162" (ISO Registration 162 = UCS-2 Level
- 1) and by definition it is Big Endian (the standards say that when
- UCS-2 is serialized into bytes, the order must be Big Endian). The
+ announcement for UCS-2 is "I162" (ISO Registration 162 = UCS-2 Level 1)
+ and by definition it is Big Endian (the standards say that when UCS-2
+ is serialized into bytes, the order must be Big Endian). The
announcement for UTF-8 is "I190" (UTF-8 Level 1).
When receiving a file whose transfer character-set is UCS-2 or UTF-8,
There is no way Kermit can do this for you automatically, since UCS
data can be in any script at all, or any combination.
- In general, UTF-8 or UCS-2 should be chosen as a transfer
- character-set if the source file is also encoded in some form of UCS
- and it contains more than one script. But there are other situations
- where where UTF-8 or UCS-2 offer advantages. For example, suppose the
- source file is on a NeXTstation and the destination file is on VMS.
- Both the NeXT and the DEC Multinational character sets include the
- French OE digraph, but Latin-1 does not. Therefore French words
- containing this character might not arrive intact when Latin-1 is the
- transfer character-set, but will with UTF-8 or UCS-2, since the UCS
- includes the OE digraph (but so does Latin-9).
+ In general, UTF-8 or UCS-2 should be chosen as a transfer character-set
+ if the source file is also encoded in some form of UCS and it contains
+ more than one script. But there are other situations where where UTF-8
+ or UCS-2 offer advantages. For example, suppose the source file is on a
+ NeXTstation and the destination file is on VMS. Both the NeXT and the
+ DEC Multinational character sets include the French OE digraph, but
+ Latin-1 does not. Therefore French words containing this character
+ might not arrive intact when Latin-1 is the transfer character-set, but
+ will with UTF-8 or UCS-2, since the UCS includes the OE digraph (but so
+ does Latin-9).
UCS-2 should be chosen as a transfer character-set only for Japanese
text files that contain a large preponderance of Kanji, since in this
- case (and only this case) UCS-2 (two bytes per Kanji) is more
- efficient than UTF-8 (three bytes per Kanji). The same will be true
- for Chinese and Korean when they are supported by Kermit. UCS-2 should
- never be used as a transfer character-set with a transfer partner that
- does not support UCS-2 since this can cause file corruption (see last
- paragraph in this section).
+ case (and only this case) UCS-2 (two bytes per Kanji) is more efficient
+ than UTF-8 (three bytes per Kanji). The same will be true for Chinese
+ and Korean when they are supported by Kermit. UCS-2 should never be
+ used as a transfer character-set with a transfer partner that does not
+ support UCS-2 since this can cause file corruption (see last paragraph
+ in this section).
Note that Kermit's repeat-count compression is 100% ineffective for
UCS-2, and is also ineffective for multibyte characters in UTF-8 and
EUC-JP; this is because repeat-compression is a transport-level
- mechanism that operates on a per-byte basis; it has no knowledge of
- the distinction between a byte and a character.
+ mechanism that operates on a per-byte basis; it has no knowledge of the
+ distinction between a byte and a character.
- When C-Kermit starts, it sets up associations ([545]Section 6.5) for
+ When C-Kermit starts, it sets up associations ([553]Section 6.5) for
incoming files whose transfer character sets are UCS-2 or UTF-8
appropriately for the platform so that the file character-set for the
incoming file is UCS-2 in Windows and UTF-8 elsewhere. Otherwise,
- C-Kermit does not make any default associations for UCS-2 or UTF-8,
- but of course you may add or change associations to suit your needs
- and preferences by including the appropriate ASSOCIATE commands in
- your Kermit startup file. For example, if you are a PC user and deal
- only with text written in Greek and English, you can:
+ C-Kermit does not make any default associations for UCS-2 or UTF-8, but
+ of course you may add or change associations to suit your needs and
+ preferences by including the appropriate ASSOCIATE commands in your
+ Kermit startup file. For example, if you are a PC user and deal only
+ with text written in Greek and English, you can:
ASSOCIATE TRANSFER-CHARACTER-SET UTF8 CP869
ASSOCIATE TRANSFER-CHARACTER-SET UCS2 CP869
issue and does not effect the final result. (And is not, strictly
speaking, a bug; Kermit protocol presently includes no method for the
sender to furnish an "estimated transfer size" to the receiver, and in
- any case any such guess could be as far off as the file size, given
- the many other factors that come into play, such as compression and
+ any case any such guess could be as far off as the file size, given the
+ many other factors that come into play, such as compression and
prefixing).
A caution about FTP and UCS-2. As noted previously, if you transfer a
UCS-2 file with FTP in binary mode between two computers with opposite
- Endianness, the result will have its bytes in the wrong order.
- However, if you use FTP to transfer a UCS-2 file in "ascii" (text)
- mode to ANY computer, even if it is identical to yours, the result
- will be corrupted because FTP's line-terminator conversions do not
- account for UCS-2. The same holds when sending from a UCS-aware Kermit
- program to an older Kermit program in text mode with a transfer
- character-set of UCS-2. So use UCS-2 as a transfer character-set ONLY
- with a UCS-2-aware Kermit partner.
- _________________________________________________________________
+ Endianness, the result will have its bytes in the wrong order. However,
+ if you use FTP to transfer a UCS-2 file in "ascii" (text) mode to ANY
+ computer, even if it is identical to yours, the result will be
+ corrupted because FTP's line-terminator conversions do not account for
+ UCS-2. The same holds when sending from a UCS-aware Kermit program to
+ an older Kermit program in text mode with a transfer character-set of
+ UCS-2. So use UCS-2 as a transfer character-set ONLY with a UCS-2-aware
+ Kermit partner.
6.6.5.2. The TRANSLATE Command
In Kermit versions that have Unicode support included, TRANSLATE now
always goes through Unicode; that is, the source set is converted to
UCS-2 and thence to the target set. This is a major improvement, since
- in prior releases, C-Kermit had to pick the "most appropriate"
- transfer character-set as the intermediate set, and this would result
- in the loss of any characters that the source and target sets had in
- common but were lacking from the intermediate set (for example the OE
- digraph when translating from NeXT to DEC MCS through Latin-1). This
- never happens when Unicode is the intermediate set because Unicode is
- a superset of all other character sets supported by Kermit. A more
- dramatic example would be translation between Cyrillic PC code page
- 866 and KOI8-R ([546]Section 6.4); formerly all the line- and
- box-drawing characters would be lost (since ISO 8859-5 does not have
- any); now the ones that these two sets have in common are preserved.
+ in prior releases, C-Kermit had to pick the "most appropriate" transfer
+ character-set as the intermediate set, and this would result in the
+ loss of any characters that the source and target sets had in common
+ but were lacking from the intermediate set (for example the OE digraph
+ when translating from NeXT to DEC MCS through Latin-1). This never
+ happens when Unicode is the intermediate set because Unicode is a
+ superset of all other character sets supported by Kermit. A more
+ dramatic example would be translation between Cyrillic PC code page 866
+ and KOI8-R ([554]Section 6.4); formerly all the line- and box-drawing
+ characters would be lost (since ISO 8859-5 does not have any); now the
+ ones that these two sets have in common are preserved.
UCS-2 and UTF-8 are now both supported as source-file and
destination-file character sets by C-Kermit's TRANSLATE command, for
translate oofa.txt utf8 ucs2 oofa-ucs2.txt
Treatment of the UCS-2 BOM is exactly the same as for file transfer.
- Note that if a UCS-2 source file is in the "wrong" byte order and
- lacks a BOM, and you don't tell Kermit about it with SET FILE UCS
- BYTE-ORDER, the result of the translation is total gibberish. Recall
- that you can use COPY /SWAP-BYTES to switch the byte order of an
- errant UCS-2 file (or any other file for that matter, if you can think
- of a reason to). Also note that:
+ Note that if a UCS-2 source file is in the "wrong" byte order and lacks
+ a BOM, and you don't tell Kermit about it with SET FILE UCS BYTE-ORDER,
+ the result of the translation is total gibberish. Recall that you can
+ use COPY /SWAP-BYTES to switch the byte order of an errant UCS-2 file
+ (or any other file for that matter, if you can think of a reason to).
+ Also note that:
translate oofa.txt ucs2 ucs2 new.txt
- Produces a result in the native (or SET FILE UCS) byte-order as long
- as oofa.txt has a BOM.
+ Produces a result in the native (or SET FILE UCS) byte-order as long as
+ oofa.txt has a BOM.
As a side benefit of the Unicode work, the TRANSLATE command now works
for the first time also for all Japanese character sets that Kermit
UCS-2
UTF-8
- You can use the TRANSLATE command to convert to any other encoding
- from the same list.
- _________________________________________________________________
+ You can use the TRANSLATE command to convert to any other encoding from
+ the same list.
6.6.5.3. Terminal Connection
(a) it is not used that way anywhere to our knowledge, and (b) the
problems of Endianness and the high likelihood of loss of
synchronization make it impractical. (Telecommunications is
- byte-oriented; if one byte, or any odd number of bytes, is lost
- because of buffer overruns, circuit resets, etc (or likewise if a
- burst of noise appears that takes the guise of an odd number of
- bytes), the byte order of the subsequent data stream will be
- backwards; unlike UTF-8 and traditional byte-based character sets,
- UCS-2 is not "self synchronizing".)
+ byte-oriented; if one byte, or any odd number of bytes, is lost because
+ of buffer overruns, circuit resets, etc (or likewise if a burst of
+ noise appears that takes the guise of an odd number of bytes), the byte
+ order of the subsequent data stream will be backwards; unlike UTF-8 and
+ traditional byte-based character sets, UCS-2 is not "self
+ synchronizing".)
UTF-8 does not have byte-order or synchronization problems and is
growing in popularity as a terminal character set as well as in other
(or use the shortcut command, EIGHTBIT, which does all three at once).
- In a setup where your local Kermit program uses a single-byte
- character set such as PC Code Page 850 and the remote host uses UTF-8:
+ In a setup where your local Kermit program uses a single-byte character
+ set such as PC Code Page 850 and the remote host uses UTF-8:
SET TERM CHAR UTF8 CP850
SET TERM LOCAL CHAR CP850
all works as expected. UTF-8 text on the remote displays correctly on
- your screen, and when you type CP850 characters, they are translated
- to UTF-8 sequences for transmission, and the echo from the host is
+ your screen, and when you type CP850 characters, they are translated to
+ UTF-8 sequences for transmission, and the echo from the host is
translated from UTF-8 back to CP850. Telnet negotiations and
autodownload take place before any character-set translation and work
as before. The session log (if text mode was selected for it) contains
By the way, C-Kermit also allows UTF-8 to be the local end of the
terminal character-set, but so far this code is not tested, since we
- don't have a UTF-8 console or terminal to work with. However, it can
- be stated without doubt that C-Kermit's key mapping will not work for
- UTF-8 values, since (a) the key map is indexed by 8-bit byte values
- and (b) C-Kermit reads keystrokes a byte at a time (these comments do
- not apply to K95, which has direct access to the keyboard and can read
+ don't have a UTF-8 console or terminal to work with. However, it can be
+ stated without doubt that C-Kermit's key mapping will not work for
+ UTF-8 values, since (a) the key map is indexed by 8-bit byte values and
+ (b) C-Kermit reads keystrokes a byte at a time (these comments do not
+ apply to K95, which has direct access to the keyboard and can read
"wide" keycodes and uses them to index a "wide" keymap).
- Restrictions: As noted, the CONNECT command does not support UCS-2 as
- a REMOTE TERMINAL character-set. Neither does it support the Japanese
+ Restrictions: As noted, the CONNECT command does not support UCS-2 as a
+ REMOTE TERMINAL character-set. Neither does it support the Japanese
sets EUC-JP, JIS-7, and Shift-JIS. Support for the Japanese sets (and
possibly Chinese and Korean too) might be added in a future release.
- Since the TRANSMIT command (next section) uses the same REMOTE
- TERMINAL character-sets as the CONNECT command, it has the same
- restrictions.
- _________________________________________________________________
+ Since the TRANSMIT command (next section) uses the same REMOTE TERMINAL
+ character-sets as the CONNECT command, it has the same restrictions.
6.6.5.4. The TRANSMIT Command
- As described in Chapter 15 of [547]Using C-Kermit and [548]Section
- 4.21 of this document, the TRANSMIT command can be used to upload a
- file without protocol, more or less as if you were typing it on your
+ As described in Chapter 15 of [555]Using C-Kermit and [556]Section 4.21
+ of this document, the TRANSMIT command can be used to upload a file
+ without protocol, more or less as if you were typing it on your
keyboard while connected to the host. When TRANSMITting in text mode,
- the file's character set is converted to the host's unless you have
- SET TERMINAL CHARACTER-SET TRANSPARENT, or you include the new
- TRANSMIT switch, /TRANSPARENT.
+ the file's character set is converted to the host's unless you have SET
+ TERMINAL CHARACTER-SET TRANSPARENT, or you include the new TRANSMIT
+ switch, /TRANSPARENT.
Before C-Kermit 7.0, the file character-set was assumed to be the same
as the local end of the terminal character-set, and the TRANSMIT
- command used the same translations as the CONNECT command, ignoring
- the file character-set.
+ command used the same translations as the CONNECT command, ignoring the
+ file character-set.
In C-Kermit 7.0, that assumption (a poor one to begin with) can no
longer be made, since UCS-2 can be a file character-set but not a
[ A picture would help... ]
- Confused? Let's work through an example. Suppose your local computer
- is a NeXTstation, on which text files are encoded in the NeXT
- character set, and that the remote computer is a Data General AViiON,
- which uses the Data General International character set. Further
- suppose that you are logged in to the NeXT from a VT220 terminal which
- uses the DEC Multinational character set.
+ Confused? Let's work through an example. Suppose your local computer is
+ a NeXTstation, on which text files are encoded in the NeXT character
+ set, and that the remote computer is a Data General AViiON, which uses
+ the Data General International character set. Further suppose that you
+ are logged in to the NeXT from a VT220 terminal which uses the DEC
+ Multinational character set.
You need to convert the file from NeXT encoding to DG encoding and
convert the echoes from DG encoding to DEC encoding. So on the NeXT,
To further complicate matters, suppose your local terminal character
set is the same as the remote one, so you don't need terminal
- character-set translation, but you need to TRANSMIT a file that is in
- a different character set and you want it translated to the host set.
- In this case, use SET TERM CHARACTER-SET to actually specify the
- character set used on each end, rather than specifying TRANSPARENT:
+ character-set translation, but you need to TRANSMIT a file that is in a
+ different character set and you want it translated to the host set. In
+ this case, use SET TERM CHARACTER-SET to actually specify the character
+ set used on each end, rather than specifying TRANSPARENT:
eightbit
set file character-set ucs2
is new to C-Kermit 7.0, but affects only the TRANSMIT command.
The TRANSMIT command currently does nothing special with UCS-2/UTF-8
- Line and Paragraph Separator characters; more experience is required
- to find out how these behave in a genuine Unicode terminal-host
- setting.
+ Line and Paragraph Separator characters; more experience is required to
+ find out how these behave in a genuine Unicode terminal-host setting.
Restrictions: As noted, the TRANSMIT command translates from the FILE
character-set to the REMOTE TERMINAL character-set. This rules out
translations to any character set that is not supported as a REMOTE
TERMINAL character-set, such as UCS-2, EUC-JP, JIS-7, and Shift-JIS.
- _________________________________________________________________
6.6.5.5. Summary of Kermit Unicode Commands
TRANSLATE infile { ..., UCS-2, UTF-8 } { ..., UCS-2, UTF-8 }
outfile
COPY /SWAP-BYTES infile outfile
- _________________________________________________________________
6.7. Client/Server Character-Set Switching
REMOTE SET FILE CHARACTER-SET name
The client asks the server to change its file character-set to
the one given. The name must match one of the server's file
- character-set names. For convenience, C-Kermit uses its own
- file character-set keyword list for parsing this command so you
- can use ? for help and Tab or Esc for completion. However,
- since the server might have a different repertoire (or even use
- different names for the same sets), C-Kermit accepts any string
- you supply and sends it to the server. The server, if it
- supports this command (C-Kermit 7.0 and K95 1.1.19 do), sets
- its file character-set as requested, and also disables
- automatic character-set switching ([549]Section 6.5). If the
- server does not support this command or if it does not support
- the given character set, the REMOTE SET FILE CHARACTER-SET
- command fails.
+ character-set names. For convenience, C-Kermit uses its own file
+ character-set keyword list for parsing this command so you can
+ use ? for help and Tab or Esc for completion. However, since the
+ server might have a different repertoire (or even use different
+ names for the same sets), C-Kermit accepts any string you supply
+ and sends it to the server. The server, if it supports this
+ command (C-Kermit 7.0 and K95 1.1.19 do), sets its file
+ character-set as requested, and also disables automatic
+ character-set switching ([557]Section 6.5). If the server does
+ not support this command or if it does not support the given
+ character set, the REMOTE SET FILE CHARACTER-SET command fails.
Here's an example that sends a Japanese text file encoded in Shift-JIS
to a server using every combination of Kermit's Japanese-capable file
for \%j 1 \fdim(&f) 1 { ; for each remote file character-set...
remote set file char \&f[\%j] ; set it
if fail exit 1 SERVER REJECTED CHARSET
- send /text meibo-sj.html meibo-sj-\&y[\%i]-\&g[\%j].txt ; send the fi
-le
+ send /text meibo-sj.html meibo-sj-\&y[\%i]-\&g[\%j].txt ; send the fil
+e
if fail exit 1 TRANSFER FAILED
}
}
The Kermit-370 server does not support REMOTE SET FILE CHARACTER-SET,
but since it supports REMOTE KERMIT commands, you can get the same
effect with REMOTE KERMIT SET FILE CHARACTER-SET name.
- _________________________________________________________________
7. SCRIPT PROGRAMMING
- (Also see [550]Section 2.8, Scripting Local Programs.)
+ (Also see [558]Section 2.8, Scripting Local Programs.)
7.0. Bug Fixes
doubled.
* The READ command did not fail if the READ file wasn't open; now it
does.
- * The READ command refused to read the last or only line of a file
- if it did not end with a proper line terminator; now it does.
- * The END command, when given from within a SWITCH statement, did
- not exit from the current macro or command file; instead it just
+ * The READ command refused to read the last or only line of a file if
+ it did not end with a proper line terminator; now it does.
+ * The END command, when given from within a SWITCH statement, did not
+ exit from the current macro or command file; instead it just
terminated the SWITCH.
- _________________________________________________________________
7.1. The INPUT Command
7.1.1. INPUT Timeouts
The description of the INPUT command on page 422 fails to mention the
- following two points about the timeout (which apply to C-Kermit 6.0
- and later):
+ following two points about the timeout (which apply to C-Kermit 6.0 and
+ later):
1. "INPUT -1 text" (or "INPUT \%x text", where \%x is any variable
whose value is -1 or less) means "wait forever". This form of the
arrived but has not yet been read, and succeeds immediately if the
target string is found, or fails immediately if it is not found.
- The same points apply to MINPUT. REINPUT ignores its timeout
- parameter.
- _________________________________________________________________
+ The same points apply to MINPUT. REINPUT ignores its timeout parameter.
7.1.2. New INPUT Controls
The following new INPUT controls were added in version 7.0:
SET INPUT AUTODOWNLOAD { ON, OFF }
- Explained in [551]Section 7.7.
+ Explained in [559]Section 7.7.
SET INPUT CANCELLATION { ON, OFF }
This governs whether an INPUT command can be canceled by
- "pressing any key" on the keyboard. Normally it can be, in
- which case the INPUT command fails immediately and \v(instatus)
- is set to 2, indicating interruption. SET INPUT CANCELLATION
- OFF disables keyboard cancellations; thus if the search text is
- not encountered, the INPUT command will run for its entire
- timeout interval. SET INPUT CANCELLATION OFF does not disable
+ "pressing any key" on the keyboard. Normally it can be, in which
+ case the INPUT command fails immediately and \v(instatus) is set
+ to 2, indicating interruption. SET INPUT CANCELLATION OFF
+ disables keyboard cancellations; thus if the search text is not
+ encountered, the INPUT command will run for its entire timeout
+ interval. SET INPUT CANCELLATION OFF does not disable
interruption by Ctrl-C, however; every command needs an
emergency exit. (If you really want to disable interruption by
Ctrl-C, use SET COMMAND INTERRUPTION OFF.)
- Also see [552]Section 7.2 for any new variables related to INPUT.
- _________________________________________________________________
+ Also see [560]Section 7.2 for any new variables related to INPUT.
7.1.3. INPUT with Pattern Matching
C-Kermit 7.0 allows INPUT, MINPUT, and REINPUT targets to be a pattern
- (explained in [553]Sections 1.19 and [554]4.9). This solves a
+ (explained in [561]Sections 1.19 and [562]4.9). This solves a
long-standing problem illustrated by the following scenario: a certain
company has a bank of TCP/IP modem servers, with hostnames server1,
- server2, server3, and so on. Each server's prompt is its name,
- followed by a colon (:), for example "Server72:". Without INPUT
- patterns, it would be rather difficult to wait for the prompt. The
- brute force approach:
+ server2, server3, and so on. Each server's prompt is its name, followed
+ by a colon (:), for example "Server72:". Without INPUT patterns, it
+ would be rather difficult to wait for the prompt. The brute force
+ approach:
minput 20 Server1: Server2: Server3: ... (enumerating each one)
Server. Please read the following message:"...
With patterns, you can match the prompt with "Server*:" (which doesn't
- solve the "false positives" problem, but certainly is more compact
- than the brute force method), or with more specific patterns such as
+ solve the "false positives" problem, but certainly is more compact than
+ the brute force method), or with more specific patterns such as
"Server[1-9]:" and "Server[1-9][0-9]:", or equivalently:
Server{[1-9],[1-9][0-9]}:
digits representing a number from 1 to 99, followed by a colon.
INPUT pattern matching has been added in a way that does not interfere
- with existing scripts. No new commands or switches are used. The
- simple rule is: if an INPUT search target is the argument of the (new)
- \fpattern() function, it is a pattern. Otherwise it is taken
- literally, as before. For example:
+ with existing scripts. No new commands or switches are used. The simple
+ rule is: if an INPUT search target is the argument of the (new)
+ \fpattern() function, it is a pattern. Otherwise it is taken literally,
+ as before. For example:
input 5 a*b
input 5 \fpattern(a*b)
- searches for an 'a' followed by anything at all up to and including
- the first 'b'. This means that any search target to INPUT, MINPUT, or
+ searches for an 'a' followed by anything at all up to and including the
+ first 'b'. This means that any search target to INPUT, MINPUT, or
REINPUT can be a pattern or a literal string, and in particular that
MINPUT can accommodate any mixture of patterns and literal strings.
In selecting patterns, note that:
- * A leading '*' is always implied so there is no need to include
- one.
+ * A leading '*' is always implied so there is no need to include one.
* A trailing '*' is meaningless and ignored.
* A '*' by itself matches the first character that arrives.
A syntax note: If your pattern is a selection list, meaning a list of
- alternatives separated by commas and enclosed in braces, then the
- outer braces will be stripped by various levels of parsers, so you
- must include three of each:
+ alternatives separated by commas and enclosed in braces, then the outer
+ braces will be stripped by various levels of parsers, so you must
+ include three of each:
input 10 \fpattern({{{abc,mno,xyz}}})
is a limit on the size of the match. For example, if the pattern is
"a*b", the match will succeed if the 'a' and 'b' are not separated by
more than (say) 8K bytes, but will fail if they are farther apart than
- that. In such cases, it better to use two INPUTs (e.g. "input 10 a"
- and then "input 100 b").
- _________________________________________________________________
+ that. In such cases, it better to use two INPUTs (e.g. "input 10 a" and
+ then "input 100 b").
7.1.4. The INPUT Match Result
The result of any INPUT, MINPUT, or REINPUT command, no matter whether
- the search targets are patterns or literal strings, is available in
- the new \v(inmatch) variable. For example:
+ the search targets are patterns or literal strings, is available in the
+ new \v(inmatch) variable. For example:
minput 10 cat \fpattern([dh]og)
if success echo MINPUT matched "\v(inmatch)"
This is especially useful when a pattern was matched, since it makes
- the string that matched the pattern available to Kermit; there would
- be no way to get it otherwise.
+ the string that matched the pattern available to Kermit; there would be
+ no way to get it otherwise.
- After an INPUT command, you can view all the INPUT-related variables
- by typing "show variables in" (abbreviate as "sho var in"), which
- shows the values of all built-in variables whose names start with
- "in".
- _________________________________________________________________
+ After an INPUT command, you can view all the INPUT-related variables by
+ typing "show variables in" (abbreviate as "sho var in"), which shows
+ the values of all built-in variables whose names start with "in".
7.2. New or Improved Built-In Variables
The device name of C-Kermit's controlling (login) terminal.
\v(filename)
- Described in [555]Sections 4.1 and [556]4.2.
+ Described in [563]Sections 4.1 and [564]4.2.
\v(filenumber)
- Described in [557]Sections 4.1 and [558]4.2.
+ Described in [565]Sections 4.1 and [566]4.2.
\v(filespec)
As of C-Kermit 7.0, contains fully qualified filenames rather
URL most recently given to Web browser
\v(dialtype)
- Type of call most recently placed (see [559]Section 2.1.11).
+ Type of call most recently placed (see [567]Section 2.1.11).
\v(kbchar)
The character, if any, that was typed at the keyboard to to
otherwise "(unknown)".
\v(lockpid)
- UNIX only - PID of process that owns the communication port
- that you tried to open with a SET LINE command that failed
- because the port was in use, otherwise empty. This variable is
- set with every SET LINE command.
+ UNIX only - PID of process that owns the communication port that
+ you tried to open with a SET LINE command that failed because
+ the port was in use, otherwise empty. This variable is set with
+ every SET LINE command.
\v(cx_time)
If no connection (SET HOST, SET LINE, DIAL, TELNET, etc) is
- active, this is 0. If a connection is active, this is the
- number of seconds since the connection was made.
+ active, this is 0. If a connection is active, this is the number
+ of seconds since the connection was made.
\v(hwparity)
If hardware parity is in effect, this variable gives its value,
will be "none"). Otherwise this variable is empty.
\v(serial)
- Current serial port settings in 8N1 format ([560]Section 2.10).
+ Current serial port settings in 8N1 format ([568]Section 2.10).
\v(errno)
In UNIX, the current value of the C runtime errno variable,
which is quite volatile (meaning that often an "interesting"
error code can be overwritten by some other library call or
system service that sets errno before you have a chance to look
- at it). In VMS, the error code returned by the system or
- library call that most recently failed (success codes are not
- saved). Not available in other operating systems.
+ at it). In VMS, the error code returned by the system or library
+ call that most recently failed (success codes are not saved).
+ Not available in other operating systems.
\v(errstring)
The UNIX or VMS system error message that corresponds to
\v(errno). Not available in all OS's. Also see
- [561]\ferrstring().
+ [569]\ferrstring().
\v(setlinemsg)
The error message, if any, from the most recent SET LINE, SET
- PORT, SET HOST, TELNET, or other connection-making command.
- This is not necessarily the same as \v(errstring) since these
+ PORT, SET HOST, TELNET, or other connection-making command. This
+ is not necessarily the same as \v(errstring) since these
commands might fail without generating a system error code, for
example (in UNIX) because a lockfile existed indicating the
device was assigned by another user.
The exit status C-Kermit would return if it exited now.
\v(pexitstat)
- The exit status of the inferior process most recently invoked
- by C-Kermit (by RUN, !, REDIRECT, SEND /COMMAND, etc). In VMS,
- this code can be given to \ferrstring() to get the
- corresponding error message (in UNIX, program/command return
- codes are not the same as system error codes). Not available in
- operating systems other than UNIX and VMS. See [562]Section
- 4.2.5 for details.
+ The exit status of the inferior process most recently invoked by
+ C-Kermit (by RUN, !, REDIRECT, SEND /COMMAND, etc). In VMS, this
+ code can be given to \ferrstring() to get the corresponding
+ error message (in UNIX, program/command return codes are not the
+ same as system error codes). Not available in operating systems
+ other than UNIX and VMS. See [570]Section 4.2.5 for details.
\v(inmatch)
- The incoming string of characters, if any, that matched the
- most recent INPUT, REINPUT, or MINPUT command.
+ The incoming string of characters, if any, that matched the most
+ recent INPUT, REINPUT, or MINPUT command.
\v(intime)
The number of milliseconds (thousandths of seconds) it took for
recent INPUT command.
\v(dialsuffix)
- Dialing suffix for use during PDIAL sequence; see [563]Section
+ Dialing suffix for use during PDIAL sequence; see [571]Section
2.1.10.
\v(pid)
- UNIX, VMS, and K95 only. C-Kermit's primary process ID,
- numeric, decimal. If you want to show it in hex, use
- \fn2hex(\v(pid)) If you want to show it in octal, use
- \fn2octal(\v(pid)).
+ UNIX, VMS, and K95 only. C-Kermit's primary process ID, numeric,
+ decimal. If you want to show it in hex, use \fn2hex(\v(pid)) If
+ you want to show it in octal, use \fn2octal(\v(pid)).
\v(printer)
Current printer name or SET PRINTER value.
"Beta.14".
\v(sendlist)
- The number of entries in the SEND-LIST, 0 if none. Note:
- entries do not necessarily correspond to files, since an entry
- might contain wildcards. Also note that the value does not go
- back to 0 after the files in the list are sent. To reset this
- variable, use CLEAR SEND-LIST. The purpose of this variable is
- to determine if a SEND command, when given without any
- filenames, will be legal. Example:
+ The number of entries in the SEND-LIST, 0 if none. Note: entries
+ do not necessarily correspond to files, since an entry might
+ contain wildcards. Also note that the value does not go back to
+ 0 after the files in the list are sent. To reset this variable,
+ use CLEAR SEND-LIST. The purpose of this variable is to
+ determine if a SEND command, when given without any filenames,
+ will be legal. Example:
xif \v(sendlist) { send } else { send oofa.txt }
\v(name)
The name with which the Kermit program was invoked, e.g.
- "kermit", "wermit", "k95", "k2", etc (see [564]Section 9.1).
+ "kermit", "wermit", "k95", "k2", etc (see [572]Section 9.1).
\v(osname)
Name of operating system on computer where C-Kermit is running,
running, if known.
\v(math_pi)
- The value of Pi (see [565]Section 7.23)
+ The value of Pi (see [573]Section 7.23)
\v(math_e)
- The value of e (see [566]Section 7.23)
+ The value of e (see [574]Section 7.23)
\v(math_precision)
How many significant digits in a floating-point number.
Note the distinction between \v(osname), \v(osversion), and
\v(platform); the latter refers to the platform for which and/or upon
- which C-Kermit was built, as opposed to the one on which it is
- actually running. Also note that each operating system can, and
- probably will, interpret and fill in the os* variables differently, or
- not at all.
+ which C-Kermit was built, as opposed to the one on which it is actually
+ running. Also note that each operating system can, and probably will,
+ interpret and fill in the os* variables differently, or not at all.
The SHOW VARIABLES command now accepts a variable name, prefix, or
pattern:
show variables t Shows all variables that start with "t".
show variables *ver* Shows all variables whose names contain "ver".
show variables *ver Ditto (an implied "*" is appended).
- _________________________________________________________________
7.3. New or Improved Built-In Functions
- The following new file-i/o functions are explained in [567]Section
+ The following new file-i/o functions are explained in [575]Section
1.22.
\f_status(channel) Status of file open on channel
\f_putblock(channel,string) Write a block to given file
The following new date-time-related functions are explained in
- [568]Section 1.6:
+ [576]Section 1.6:
\fday() Returns day of week of given date
\fnday() Returns numeric day of week of given date
\fmjd2date(mjd) Converts modified Julian date to yyyymmdd
The new floating-point arithmetic functions are explained in
- [569]Section 7.23. f1 and f2 are floating-point (real) numbers; d is
+ [577]Section 7.23. f1 and f2 are floating-point (real) numbers; d is
the number of decimal places to show:
\ffpabsolute(f1,d) Absolute value of f1
If the string s is an integer in radix n1, the result is the
same number expressed in radix n2, where n1 and n2 may be any
number from 2 through 36, expressed as decimal numbers, or
- variables (etc) that evaluate to decimal numbers. For the
- source and result, the digits of any radix, r, are the first r
+ variables (etc) that evaluate to decimal numbers. For the source
+ and result, the digits of any radix, r, are the first r
characters in the sequence 0-9,a-z (case doesn't matter for the
letters). The string s may have a sign, + or -; if it starts
with a minus (-) sign, the result also has a minus sign.
does not reveal the internal storage format of a number; for example,
\fradix(-1,10,16) is -1, not something like FFFFFFFFFF. If all three
arguments are not given, or if n1 or n2 are not numbers between 2 and
- 36 inclusive, or s is not a number in radix n1, an error occurs and
- the empty string is returned. \fradix() also does not offer
+ 36 inclusive, or s is not a number in radix n1, an error occurs and the
+ empty string is returned. \fradix() also does not offer
extended-precision arithmetic; number values are limited to those
expressed as a long integer in the architecture of the underlying
computer, usually 32 or 64 bits. If you give it an argument whose
\fn2hex(n)
Returns the hexadecimal (base 16) representation of the integer
- n. This is different from \fhexify(s), which treats its
- argument as a string rather than a number. The result is always
+ n. This is different from \fhexify(s), which treats its argument
+ as a string rather than a number. The result is always
left-padded with 0's to make its length even. Examples:
\n2hex(0) = "00" \fhexify(0) = "30"
Equivalent to \fradix(n,10,8).
\foct2n(n)
- Returns the decimal representation of the given octal number,
- n. The inverse of \fn2octal(). Equivalent to \fradix(n,8,10).
+ Returns the decimal representation of the given octal number, n.
+ The inverse of \fn2octal(). Equivalent to \fradix(n,8,10).
String functions:
\s(name[n:m])
- Equivalent to \fsubstring(\m(name),n,m) ([570]Section 7.24).
+ Equivalent to \fsubstring(\m(name),n,m) ([578]Section 7.24).
\:(name[n:m])
Equivalent to \fsubstring(name,n,m) (where "name" is any
- \-quantity) ([571]Section 7.24).
+ \-quantity) ([579]Section 7.24).
\fleft(s,n)
The leftmost ncharacters of string s; equivalent to
\fstripn(12345678,3) = "12345"
(For more discussion of \fstripx(), \fstripn(), and \flop() see
- [572]Section 4.2.3).
+ [580]Section 4.2.3).
\fb64encode(s)
Returns the Base-64 encoding of the string s.
\fword(s1,n,s2,s3)
Extracts word number nfrom string s1. By default, a "word" is
- any sequence of ASCII letters or digits; nis 1-based. If nis
+ any sequence of ASCII letters or digits; nis 1-based. If n is
omitted, "1" is used. Examples:
\fword(one two three) = "one"
in other words, use the default separator list, but remove "$"
and "." from it so they will be considered part of a word.
+ Note that since 8-bit characters are not ASCII, they act as
+ break characters unless you put them in the include list.
+ Suppose, for example, you have a file in which each line is a
+ Tab-separated list of words, numbers, or phrases that might
+ contain punctuation, special characters like $ and @, 8-bit bit
+ characters, etc (like something that might have been exported
+ from a spreadsheet or database), and you want to split only on
+ Tab; here is a way (\m(line) is a line read from the file):
+
+undef keep
+for \%i 1 255 1 {
+ if == \%i 9 continue
+ .keep := \m(keep)\fchar(\%i)
+}
+while true {
+ fread /line \%c line
+ if fail break
+ .\%n := \fsplit(\m(line),&a,\9,\m(keep))
+ ...
+}
+
+ This problem is addressed in [581]C-Kermit 9.0.
+
\fsplit(s1,&a,s2,s3)
This is like \fword(), except instead of extracting and
returning a particular word from string s1, it counts the words
and optionally assigns them to the array whose identifying
- letter, a-z, is given after the "&" in the second argument,
- with the first word going into element 1, the second into
- element 2, and so on. The rules regarding break and include
- lists (s2 and s3) are exactly the same as for \fword().
- \fsplit() returns the number of words that were assigned, which
- is either the number of words in the string, or the dimension
- of the array, whichever is less. If the array is not declared,
- \fsplit() creates it and returns a number which is both the
- number of words in s1 and the dimension of the new array.
- Examples:
+ letter, a-z, is given after the "&" in the second argument, with
+ the first word going into element 1, the second into element 2,
+ and so on. The rules regarding break and include lists (s2 and
+ s3) are exactly the same as for \fword(). \fsplit() returns the
+ number of words that were assigned, which is either the number
+ of words in the string, or the dimension of the array, whichever
+ is less. If the array is not declared, \fsplit() creates it and
+ returns a number which is both the number of words in s1 and the
+ dimension of the new array. Examples:
declare \&w[20] ; (Optional.)
...
echo "\&w[7]" ; This would print "words".
If the line contained fields that were delimited by colon (:),
- you would use \fsplit(\%s,&w,:). If the fields were delimited
- by comma, then you would use \fsplit(\%s,&w,{,}); in this case
- the literal comma must be enclosed in braces to distinguish it
- from the comma that separates function arguments. To get a word
- count without loading an array, but still specify break and/or
- include lists, leave the array argument empty:
+ you would use \fsplit(\%s,&w,:). If the fields were delimited by
+ comma, then you would use \fsplit(\%s,&w,{,}); in this case the
+ literal comma must be enclosed in braces to distinguish it from
+ the comma that separates function arguments. To get a word count
+ without loading an array, but still specify break and/or include
+ lists, leave the array argument empty:
echo "\fsplit(\%s,,:)" ; Use colon as the separator.
dcl \&w[10]
\fsplit(1 2 3 4 5,&w) ; Sets \&w[1] thru \&w[5].
\fsplit(a b c,&w) ; Sets \&w[1]-[3] leaving [4]-[5] as they were.
+
2. If you allow \fsplit to create the array (by not declaring it
first), it is dimensioned to the number of elements it was
created with:
\fsplit(a b c d e,&x) ; This overflows the array.
Thus if you want to use \fsplit() repeatedly on the same array,
- either dimension it in advance to the maximum expected size
- (and then some -- more efficient), or else destroy it after
- each use (to allow for unexpectedly large arguments). Example
- using a dynamic array:
+ either dimension it in advance to the maximum expected size (and
+ then some -- more efficient), or else destroy it after each use
+ (to allow for unexpectedly large arguments). Example using a
+ dynamic array:
fopen /read \%c some-file
if fail ...
- set function error on ; See [573]Section 7.12
+ set function error on ; See [582]Section 7.12
while true {
dcl \&w[] ; Destroy \&[w] each time thru the loop
fread /line \%c \%a
fclose \%c
\frindex(s1,s2,n)
- The "n" argument to \frindex() now works consistently (in
- mirror image) with the corresponding \findex() argument. In
- each case, the (n-1)-most characters of s2 are ignored in the
- search; for findex, this means the starting position of the
- search is n (the default nis 1, and 0 is treated like 1). For
- \frindex() it means the default starting point is:
+ The "n" argument to \frindex() now works consistently (in mirror
+ image) with the corresponding \findex() argument. In each case,
+ the (n-1)-most characters of s2 are ignored in the search; for
+ findex, this means the starting position of the search is n (the
+ default n is 1, and 0 is treated like 1). For \frindex() it
+ means the default starting point is:
length(s2) - length(s1) - n (with the same defaults for n).
\fsearch(pattern,string[,position])
- Exactly like \findex(), except with a pattern (see [574]Section
+ Exactly like \findex(), except with a pattern (see [583]Section
7.9) rather than a literal string.
\frsearch(pattern,string[,position])
\ffiles(), \fnextfile()
It is no longer necessary to copy the file list to an array
- before use, as shown on p.398 of [575]Using C-Kermit 2nd
- Edition. \ffiles() and friends now make their own safe copies
- of the file list. Thus constructions like the following are now
+ before use, as shown on p.398 of [584]Using C-Kermit 2nd
+ Edition. \ffiles() and friends now make their own safe copies of
+ the file list. Thus constructions like the following are now
possible:
for \%i 1 \ffiles(*.txt) 1 { send \fnextfile() }
The same is true for the new function \frfiles(),
- \fdirectories(), and \frdirectories(), described in
- [576]Section 4.11.3.
+ \fdirectories(), and \frdirectories(), described in [585]Section
+ 4.11.3.
But note that each reference to \fnextfile() still gets you the
next file. So "if newer \fnextfile() foo.txt send \fnextfile()"
Also note that \ffiles(), \frfiles(), \fdirectories(), and
\frdirectories() all now accept on optional 2nd argument: the
name of an array to load with the resulting file or directory
- list, explained in [577]Section 4.11.3. So you can also load an
+ list, explained in [586]Section 4.11.3. So you can also load an
array with the filelist when you need to refer to the same file
more than once:
such as "-rw-rw-r--" in UNIX or "(RWE,RWE,RE,E)" in VMS.
\fdirname(f)
- Given a file specification f, this function returns the
- complete pathname of directory the file is in.
+ Given a file specification f, this function returns the complete
+ pathname of directory the file is in.
Array Functions:
\fdimension(&a)
Returns the dimension declared for the array whose identifying
- letter, a-z, or special character "_" or "@", is given after
- the "&" in the argument. If the array is not declared, 0 is
+ letter, a-z, or special character "_" or "@", is given after the
+ "&" in the argument. If the array is not declared, 0 is
returned. Note that when used with the macro argument vector
- array, \&_[] (see [578]Section 7.5), the value of this function
+ array, \&_[] (see [587]Section 7.5), the value of this function
is one less than \v(argc), and when used with the C-Kermit
command-line argument vector array, \&@[], it is equal to the
\v(args) variable. Examples:
The arrayname can include a range specifier to restrict to
search to a segment of the array, e.g.
\farraylook(*xyz*,&a[32:63]). For greater detail see
- [579]Section 7.10.7.
+ [588]Section 7.10.7.
\ftablelook(keyword,arrayname[,delimiter])
Looks in the given "table", which must be sorted, for the given
keyword. Returns the index of the table element that uniquely
matches the given keyword, or -1 if none match, or -2 if more
- than 1 match. For greater detail see [580]Section 7.10.7.
+ than 1 match. For greater detail see [589]Section 7.10.7.
Other new functions:
\fcommand()
\frawcommand()
These run an external command and return its output; see
- [581]Section 4.2.8.4.
+ [590]Section 4.2.8.4.
\fdialconvert(s)
s is a phone number in either literal or portable format (not a
dialing directory entry name). The function returns the dial
- string that would actually be used when dialing from the
- current location (after processing country code, area code, and
- other SET DIAL values).
+ string that would actually be used when dialing from the current
+ location (after processing country code, area code, and other
+ SET DIAL values).
\ferrstring(n)
Returns the system error message associated with the (numeric)
error code n. UNIX and VMS only. Use in conjunction with
- \v(errno) or \v(pexitstat). See [582]Section 4.2.5 for a usage
+ \v(errno) or \v(pexitstat). See [591]Section 4.2.5 for a usage
example. Note: This function doesn't work in Windows because
there is not a consistent error-code-to-message mapping; error
code "x" means something completely different depending on
strings that are to be treated as patterns rather than
literally.
- Also see [583]Section 7.8 on built-in help for functions.
- _________________________________________________________________
+ Also see [592]Section 7.8 on built-in help for functions.
7.4. New IF Conditions
IF != n1 n2 command
Executes the command if n1 and n2 are both numbers or variables
- containing numbers and the value of n1 is not equal to the
- value of n2. This is equivalent to "if not = n1 n2".
+ containing numbers and the value of n1 is not equal to the value
+ of n2. This is equivalent to "if not = n1 n2".
IF <= n1 n2 command
Executes the command if n1 and n2 are both numbers or variables
IF MATCH string pattern command
Executes the command if the string matches the pattern. For a
- description of the syntax for the pattern, see [584]Section
+ description of the syntax for the pattern, see [593]Section
4.9.1. If you want to test if the string contains pattern, use
IF \fsearch(pattern,string).
LOG commands).
IF QUIET command
- Executes the command if SET QUIET is ON, and does not execute
- it if SET QUIET is OFF. Example: IF NOT QUIET ECHO { This is a
+ Executes the command if SET QUIET is ON, and does not execute it
+ if SET QUIET is OFF. Example: IF NOT QUIET ECHO { This is a
message.}.
IF READABLE name
IF WRITEABLE name
Succeeds if name is the name of an existing file or directory
- that is writeable, e.g.:
+ that is writable, e.g.:
if not writeable \v(lockdir) echo Please read installation instructions!
IF MS-KERMIT command
MS-DOS Kermit, but not C-Kermit or Kermit 95, executes the
command.
- _________________________________________________________________
7.5. Using More than Ten Macro Arguments
- The \v(argc) variable now gives the actual number of arguments, even
- if the number is greater than 9:
+ The \v(argc) variable now gives the actual number of arguments, even if
+ the number is greater than 9:
C-Kermit> define xx echo \v(argc)
C-Kermit> xx a b c d e f g h i j k l m n o p q r s t u v w x y z
Remember that \v(argc) includes the name of the macro itself, so it is
always at least 1, and is always 1 greater than the actual number of
- arguments. As in versions 6.0 and earlier, if more than 9 arguments
- are given, only the first nine are assigned to the variables \%1..\%9.
+ arguments. As in versions 6.0 and earlier, if more than 9 arguments are
+ given, only the first nine are assigned to the variables \%1..\%9.
- The \&_[] array, discussed on page 353 of [585]Using C-Kermit, 2nd ed,
+ The \&_[] array, discussed on page 353 of [594]Using C-Kermit, 2nd ed,
now holds all the arguments, up to some implementation-dependent limit
(64 or greater), rather than only the first 9. To illustrate: the
following macro tells the number of arguments it was called with and
At top level, the \&_[] array is filled as follows:
* If the first argument on the C-Kermit command line was a filename,
- or C-Kermit was invoked from a "Kerbang" script ([586]Section
+ or C-Kermit was invoked from a "Kerbang" script ([595]Section
7.19), element 0 contains the filename, and elements 1 through
\v(argc)-1 hold the remaining command-line arguments.
* Otherwise the program name goes in element 0, and elements 1
- through \v(argc)-1 hold any arguments that were included after
- "--" or "="
+ through \v(argc)-1 hold any arguments that were included after "--"
+ or "="
- The new \%* variable, when used within a macro, is replaced by the
- text that followed the macro name in the macro invocation. If no
- arguments were given, \%* is replaced by the empty string. Examples:
+ The new \%* variable, when used within a macro, is replaced by the text
+ that followed the macro name in the macro invocation. If no arguments
+ were given, \%* is replaced by the empty string. Examples:
C-Kermit> define xx echo [\%*]
C-Kermit> define \%a oofa
xxx arg1 arg2 arg3
- Then inside XXX, \%1 is "arg1", \%2 is "arg2", and \%3 is "arg3".
- After a SHIFT command is given inside XXX, then \%1 is "arg2", \%2 is
- "arg3", and \%3 is empty. \%0 (the name of the macro) remains
- unchanged.
+ Then inside XXX, \%1 is "arg1", \%2 is "arg2", and \%3 is "arg3". After
+ a SHIFT command is given inside XXX, then \%1 is "arg2", \%2 is "arg3",
+ and \%3 is empty. \%0 (the name of the macro) remains unchanged.
If more than 9 arguments were given, then arguments are shifted into
the \%1..9 variables from the argument vector array.
At top level, the SHIFT command operates on the \&_[] array and \%1..9
- variables; the \&@[] array is not affected. See [587]Section 7.16 for
+ variables; the \&@[] array is not affected. See [596]Section 7.16 for
details.
The \%* variable is not affected by the SHIFT command.
- _________________________________________________________________
7.6. Clarification of Function Call Syntax
\fsubstring(ab,cd,2,2)
This would cause an error, since "cd" appears to be the second
- argument, when really you want the first "2" to be the second
- argument. Braces to the rescue:
+ argument, when really you want the first "2" to be the second argument.
+ Braces to the rescue:
\fsubstring({ab,cd},2,2) = "b,"
- Similarly, leading and trailing spaces are stripped from each
- argument, so:
+ Similarly, leading and trailing spaces are stripped from each argument,
+ so:
\fsubstring( abcd ,2,2) = "bc"
define \%a {{ab{cd}}
echo \fsubstring(\%a) = "ab{cd"
- _________________________________________________________________
7.7. Autodownload during INPUT Command Execution
The INPUT AUTODOWNLOAD setting is displayed by SHOW SCRIPTS or SHOW
INPUT.
- _________________________________________________________________
7.8. Built-in Help for Functions.
\fsubstring(), with the new HELP FUNCTION command; give the function's
name without the leading "\f", e.g. "help func substring". You can use
?, completion, and abbreviation in the normal manner.
- _________________________________________________________________
7.9. Variable Assignments
echo "\%a"
""
- Extra credit: Can you guess what happens below when the file "abc"
- does not exist?
+ Extra credit: Can you guess what happens below when the file "abc" does
+ not exist?
fopen /read \%c abc
if fail ...
- _________________________________________________________________
7.9.2. New Assignment Commands
ASSIGN \%a \%x ; Sets the value of the variable \%a to the "foo".
_ASSIGN x_\%a \%x ; Sets the value of the variable x_foo to "foo".
- This concept has been carried over to the remaining
- variable-assignment commands: EVALUATE, INCREMENT, and DECREMENT:
+ This concept has been carried over to the remaining variable-assignment
+ commands: EVALUATE, INCREMENT, and DECREMENT:
EVALUATE variablename expression
- Evaluates the arithmetic expression and assigns its value to
- the variable whose name is given. Example: "eval \%a 1+1"
- assigns "2" to \%a.
+ Evaluates the arithmetic expression and assigns its value to the
+ variable whose name is given. Example: "eval \%a 1+1" assigns
+ "2" to \%a.
_EVALUATE metaname expression
- Evaluates the arithmetic expression and assigns its value to
- the variable whose name is computed from the given metaname.
+ Evaluates the arithmetic expression and assigns its value to the
+ variable whose name is computed from the given metaname.
Example: "eval foo<\%a>::\%1 \%2 * (\%3 + \%4)" assigns the
value of "\%2 * (\%3 + \%4)" to the variable whose name is
computed from "foo<\%a>::\%1".
metaname. Example: "_increment Words::\%1.count[\%2]".
DECREMENT variablename [ expression ]
- Evaluates the arithmetic expression and subtracts its value
- from the value of the variable whose name is given.
+ Evaluates the arithmetic expression and subtracts its value from
+ the value of the variable whose name is given.
_DECREMENT metaname [ expression ]
- Evaluates the arithmetic expression and subtracts its value
- from the value of the variable whose name is computed from the
- given metaname.
+ Evaluates the arithmetic expression and subtracts its value from
+ the value of the variable whose name is computed from the given
+ metaname.
WARNING: The syntax of the EVALUATE command has changed since C-Kermit
6.0 and K95 1.1.17. Previously, it did not include a variable name,
only an expression. To restore the old behavior, use SET EVALUATE OLD.
- To return to the new behavior after restoring the old behavior, use
- SET EVALUATE NEW.
+ To return to the new behavior after restoring the old behavior, use SET
+ EVALUATE NEW.
NOTE: There are no analogs to the "_" commands for the operators
- described in [588]Section 7.9.1; those operators can not be used to
+ described in [597]Section 7.9.1; those operators can not be used to
assign values to variables whose names must be computed.
- _________________________________________________________________
7.10. Arrays
array clear &a[16:32] ; Ditto
array clear a[16:32] ; Ditto
- When using array names as function arguments, you must omit the "\"
- and you must include the "&". You may optionally include empty
- brackets. Examples:
+ When using array names as function arguments, you must omit the "\" and
+ you must include the "&". You may optionally include empty brackets.
+ Examples:
\fsplit(\%a,a) ; Bad
\fsplit(\%a,\&a) ; Bad
\fsplit(\%a,&a) ; Good
\fsplit(\%a,&a[]) ; Good
- _________________________________________________________________
7.10.1. Array Initializers
Initializers are (a) optional, (b) start with element 1, (c) must be
enclosed in braces if they contain spaces, and (d) are evaluated
according to normal rules by the DECLARE command prior to assignment.
- Thus the assignments made here are the same as those made by the
- ASSIGN command. This allows you to initialize array elements from the
- values of other variables. If you actually want to initialize an array
- element to variable's name, as opposed to its value, use double
- backslashes (as in "\\&a", "\\v(time)", etc).
+ Thus the assignments made here are the same as those made by the ASSIGN
+ command. This allows you to initialize array elements from the values
+ of other variables. If you actually want to initialize an array element
+ to variable's name, as opposed to its value, use double backslashes (as
+ in "\\&a", "\\v(time)", etc).
The size (dimension) of the array is optional. If the size is omitted,
as in "\&a[]", then the array sizes itself to the number of
initializers; if there are no initializers the array is not declared
- or, if it was declared previously, it is destroyed. If a size is
- given, any extra elements in the initialization list are discarded and
+ or, if it was declared previously, it is destroyed. If a size is given,
+ any extra elements in the initialization list are discarded and
ignored.
NOTE: Unlike in C, the list of initializers is NOT enclosed in braces.
Examples:
ARRAY DECLARE \&a[16]
- Declares the array \&a with 17 elements (0 through 16), in
- which all elements are initially empty. If the array \&a[]
- existed before, the earlier copy is destroyed.
+ Declares the array \&a with 17 elements (0 through 16), in which
+ all elements are initially empty. If the array \&a[] existed
+ before, the earlier copy is destroyed.
ARRAY DECLARE &a[16]
ARRAY DECLARE a[16]
ARRAY DECLARE \&a[] = \%1 \%2 \%3
Declares the array \&a with 3 elements (0 through 3),
initializing \&a[1] to the value of \%1, \&a[2] to the value of
- \%2, and \&a[3] to the value of \%3. In this case, any
- reference to one of these array elements is replaced by the
- value of the corresponding \%n variable at the time the
- declaration was executed (immediate evaluation; the array
- element's value does not change if the initializer variable's
- value changes).
+ \%2, and \&a[3] to the value of \%3. In this case, any reference
+ to one of these array elements is replaced by the value of the
+ corresponding \%n variable at the time the declaration was
+ executed (immediate evaluation; the array element's value does
+ not change if the initializer variable's value changes).
ARRAY DECLARE \&a[] = \\%1 \\%2 \\%3
Declares the array \&a with 3 elements (0 through 3),
Finally, remember that every command level has its own local array,
\&_[], containing all the macro arguments (\%0, \%1, ...) for that
- level. See [589]Section 7.5 for details.
- _________________________________________________________________
+ level. See [598]Section 7.5 for details.
7.10.2. Turning a String into an Array of Words
The \fsplit(s1,&a,s2,s3) function assigns the words of string s1 to
successive elements of the array (beginning with element 1) whose
- identifying letter, a-z, is given after the "&" in the second
- argument, using break and include characters given in s2 and s3. See
- [590]Section 7.3 for details.
- _________________________________________________________________
+ identifying letter, a-z, is given after the "&" in the second argument,
+ using break and include characters given in s2 and s3. See [599]Section
+ 7.3 for details.
7.10.3. Arrays of Filenames
- See [591]Section 4.11.3 for news about how \ffiles() and related
+ See [600]Section 4.11.3 for news about how \ffiles() and related
functions can assign a list of filenames to an array. To recapitulate
briefly here:
\ffiles(*,&a)
- assigns all files that match the first argument to the array denoted
- by the second argument. If the array has not been declared, it is
- declared automatically, with exactly the number of elements needed to
- hold the file list; if it was previously declared, it is destroyed and
- reused. The filenames are assigned starting at array element 1.
- Element 0 holds the number of files in the list.
+ assigns all files that match the first argument to the array denoted by
+ the second argument. If the array has not been declared, it is declared
+ automatically, with exactly the number of elements needed to hold the
+ file list; if it was previously declared, it is destroyed and reused.
+ The filenames are assigned starting at array element 1. Element 0 holds
+ the number of files in the list.
- The DIRECTORY command ([592]Section 4.5.1) can also create filename
+ The DIRECTORY command ([601]Section 4.5.1) can also create filename
arrays if you give it the /ARRAY: switch; this allows selection
criteria beyond whether the filename matches the given pattern.
- All functions and commands that create filename arrays store the
- number of filenames, n, as element 0 of the array, and the filenames
- as elements 1 through n.
- _________________________________________________________________
+ All functions and commands that create filename arrays store the number
+ of filenames, n, as element 0 of the array, and the filenames as
+ elements 1 through n.
7.10.4. Automatic Arrays
On the other hand, if you DECLARE an array at a lower command level
without also making it LOCAL, this replaces the copy that was declared
at the lowest command level above this one.
- _________________________________________________________________
7.10.5. Sorting Arrays
ARRAY SORT [ switches ] array [ array2 ]
Sorts the given array in place. Sorting is strictly lexical
- (string based). The array name can be given fully, e.g.
- "\&a[]", or the "\" and/or "&" and/or brackets can be omitted,
- e.g. "array sort \&a[]", "sort &a", "sort a". Also, a range can
- be indicated in the brackets as noted in [593]Section 7.10, to
+ (string based). The array name can be given fully, e.g. "\&a[]",
+ or the "\" and/or "&" and/or brackets can be omitted, e.g.
+ "array sort \&a[]", "sort &a", "sort a". Also, a range can be
+ indicated in the brackets as noted in [602]Section 7.10, to
restrict the sort to a range of elements (equivalent to the
/RANGE switch, described just below), e.g. "array sort
&a[20:30]".
- A second array may be specified. If it is, and if it is at least as
- big as the first array, it is sorted according to the first array. For
- a sample application, see [594]Section 7.10.10.
+ A second array may be specified. If it is, and if it is at least as big
+ as the first array, it is sorted according to the first array. For a
+ sample application, see [603]Section 7.10.10.
- See [595]Section 1.5 for an explanation of switches. The optional
+ See [604]Section 1.5 for an explanation of switches. The optional
switches are:
/CASE:{ON,OFF}
/CASE:ON means that alphabetic case is significant in
- comparisons; uppercase letters are sorted before lowercase
- ones. /CASE:OFF means case is ignored, e.g. "A" is the same as
- "a". If this switch is not given, sorting is according the
- current SET CASE setting.
+ comparisons; uppercase letters are sorted before lowercase ones.
+ /CASE:OFF means case is ignored, e.g. "A" is the same as "a". If
+ this switch is not given, sorting is according the current SET
+ CASE setting.
/KEY:n
Comparison begins at position n(1-based) in each string. If no
key position, skipping any leading blanks or tabs, and then as
much of the string from that point on that fits the definition
of "numeric", terminating at the first character that does not
- qualify. A numeric string has an optional sign (+ or -)
- followed by one or more digits, and (if your version of Kermit
- was built with floating-point support; see [596]Section 7.23 )
- zero or one decimal point (period). If both /CASE and /NUMERIC
- are given, /NUMERIC takes precedence.
+ qualify. A numeric string has an optional sign (+ or -) followed
+ by one or more digits, and (if your version of Kermit was built
+ with floating-point support; see [605]Section 7.23 ) zero or one
+ decimal point (period). If both /CASE and /NUMERIC are given,
+ /NUMERIC takes precedence.
/RANGE:n[:m]
Sort elements nthrough m of the array. By default, the entire
array from element 1 to its dimensioned size is sorted, which
might produce surprising results if the array is not full; see
- example in [597]Section 7.10.7. If ":m" is omitted from the
+ example in [606]Section 7.10.7. If ":m" is omitted from the
range, the dimensioned size is used. Thus, to sort an entire
- array, \&a[], including its 0th element, use "sort /range:0
- &a". You can also sort any desired section of an array, e.g.
- "sort /range:10:20 &a" or "sort /range:\%i:\%j-1 &b". As noted
- above, you can also specify a range in the array-name brackets.
- If you specify a range in the array-name brackets AND with a
- /RANGE switch, the ones in the brackets take precedence.
+ array, \&a[], including its 0th element, use "sort /range:0 &a".
+ You can also sort any desired section of an array, e.g. "sort
+ /range:10:20 &a" or "sort /range:\%i:\%j-1 &b". As noted above,
+ you can also specify a range in the array-name brackets. If you
+ specify a range in the array-name brackets AND with a /RANGE
+ switch, the ones in the brackets take precedence.
/REVERSE
- Sort in reverse order. If this switch is not given, the array
- is sorted in ascending order.
+ Sort in reverse order. If this switch is not given, the array is
+ sorted in ascending order.
Remember that numeric switch arguments can be numbers, arithmetic
expressions, or variables whose values are numbers or expressions, as
illustrated in the /RANGE examples above.
- A typical sorting application might be to list students' test scores
- in descending order. Suppose you had the following records:
+ A typical sorting application might be to list students' test scores in
+ descending order. Suppose you had the following records:
olaf 65
olga 98
xena 100
(and so on) stored in array \&s[] (e.g. by reading them from a file as
- illustrated in [598]section 7.10.7). In these records, the student's
- name is in columns 1-9 and the score in 10-12. So to rearrange the
- list in descending order of score:
+ illustrated in [607]section 7.10.7). In these records, the student's
+ name is in columns 1-9 and the score in 10-12. So to rearrange the list
+ in descending order of score:
sort /key:10 /reverse &s
ARRAY SORT /KEY:10 &a[] would order them 3,1,2, but ARRAY SORT /KEY:10
/NUMERIC &a[] would order them 2,1,3.
- _________________________________________________________________
7.10.6. Displaying Arrays
Example:
- assign \%n \ffiles(*,&a) ; Fill an array with filenames ([599]Section 4.11.3
-)
+ assign \%n \ffiles(*,&a) ; Fill an array with filenames ([608]Section 4.11.3)
show array \&a[] ; Show the array we just read
array show \&a[] ; Same as previous
array sort \&a[] ; Sort the array
If you SHOW ARRAY without giving an array name, all defined arrays are
listed by name and dimension, but their contents are not shown.
- You can also show a piece of an array by including a subscript or
- range within the array brackets:
+ You can also show a piece of an array by including a subscript or range
+ within the array brackets:
array show \&a[5] ; Shows \&a[5]
array show &a[3:8] ; Shows \&a[3] through \&a[8]
array show a[:\%n-1] ; Shows \&a[0] through \&a[\%n-1]
- _________________________________________________________________
7.10.7. Other Array Operations
ARRAY COPY array1 array2
Copies the first array to the second array. If the target array
- has not been declared, it is created automatically with the
- same size as the first. If it has been declared, it will be
- used as declared; if the source array is larger, only as much
- of it as will fit is copied to the target array. Syntax for
- array1 and array2 is as in ARRAY SHOW (SHOW ARRAY). Example:
+ has not been declared, it is created automatically with the same
+ size as the first. If it has been declared, it will be used as
+ declared; if the source array is larger, only as much of it as
+ will fit is copied to the target array. Syntax for array1 and
+ array2 is as in ARRAY SHOW (SHOW ARRAY). Example:
.\%n := \ffiles(*,&a) ; Create and load array A with a file list.
array copy &a &b ; Copy array A to array B.
creating \&b[] if necessary or, if \&b[] is already
declared, stopping early if its size is less than 14.
- ARRAY COPY \&a[17] \&b
+ ARRAY COPY \&a[17:] \&b
This copies all the elements of \&a[] starting with 17
until the last to \&b[], creating \&b[] if necessary or,
if \&b[] is already declared, stopping early if \&b[] is
- not big enough.
+ not big enough. Suppose, for example, you have a script
+ whose arguments are string1, string2, and a list of files,
+ whose job is to change all occurrences of string1 to
+ string2 in each of the files. But if the list of files is
+ omitted, then "*" (all files in the current directory) is
+ assumed:
+
+if < \v(argc) 3 exit 1 "Usage: \%0 string1 string2 [ files ]"
+if not def \%3 {
+ .n := \ffiles(*,&a)
+} else {
+ array copy &_[3:] &a
+ .n := \fdim(&a)
+}
+for i 1 n 1 {
+ ! cat \&a[i] | sed -e "s|\%1|\%2|g" > /tmp/_x
+ rename /tmp/_x \&a[i]
+}
+
+ ARRAY COPY \&a[17] \&b
+ Same as previous example.
ARRAY CLEAR arrayname
Sets all the elements of the array to the empty value. You may
ARRAY SET arrayname [ value ]
Sets all the elements of the array to the given value. If no
value is given, the array is cleared. You may also include a
- range specifier to set only a selected portion of the array;
- for example "array set \&a[1:9] -1". If the range is out of
- bounds, only the part of the array that is in bounds is set.
+ range specifier to set only a selected portion of the array; for
+ example "array set \&a[1:9] -1". If the range is out of bounds,
+ only the part of the array that is in bounds is set.
ARRAY RESIZE arrayname size
- Resizes the given array. If the size is greater than the
- array's current dimension, new empty elements are added to the
- end. If the size is less than the current dimension, the extra
- elements are discarded. Note: If you have stored the array size
- in element 0, ARRAY RESIZE does not change this value.
- Alternative notation: ARRAY RESIZE arrayname[size]. For a
- practical example, see [600]Section 7.10.11.
+ Resizes the given array. If the size is greater than the array's
+ current dimension, new empty elements are added to the end. If
+ the size is less than the current dimension, the extra elements
+ are discarded. Note: If you have stored the array size in
+ element 0, ARRAY RESIZE does not change this value. Alternative
+ notation: ARRAY RESIZE arrayname[size]. For a practical example,
+ see [609]Section 7.10.11.
\farraylook(pattern,arrayname)
This function returns the index of the first element of the
given array that matches the given pattern (for details about
- pattern syntax, see [601]section 4.9). The array name can
+ pattern syntax, see [610]section 4.9). The array name can
include a range specification to restrict the search to a given
segment of the array. If no elements match the pattern, -1 is
returned.
Looks in the given "table", which must be sorted, for the given
keyword. The keyword need not be spelled out in full.
Pattern-matching characters should not be included as part of
- the keyword. The function returns the index of the table
- element that uniquely matches the given keyword, or -1 if none
- match, or -2 if more than 1 match.
+ the keyword. The function returns the index of the table element
+ that uniquely matches the given keyword, or -1 if none match, or
+ -2 if more than 1 match.
A "table" is an array that is sorted in lexical order; each of its
elements may contain multiple fields, delimited by the given delimiter
performed; if there is a match, the matching element's index and the
element itself are printed, and the search begins again at the next
element. Thus each matching element is printed. If none match, the
- "Pattern not found" message is printed. The process repeats for as
- many patterns as the user wants to type, and terminates when the user
- types an empty pattern.
+ "Pattern not found" message is printed. The process repeats for as many
+ patterns as the user wants to type, and terminates when the user types
+ an empty pattern.
- Now let's build a little command parser, consisting of a keyword
- table, and a loop to look up the user's commands in it with
- \ftablelook(). In this case the array elements have "fields" separated
- by colon (:) -- a keyword and a value. Keyword tables must be sorted
- if \tablelook() is to work right, so after declaring and initializing
- the table array, we sort it.
+ Now let's build a little command parser, consisting of a keyword table,
+ and a loop to look up the user's commands in it with \ftablelook(). In
+ this case the array elements have "fields" separated by colon (:) -- a
+ keyword and a value. Keyword tables must be sorted if \tablelook() is
+ to work right, so after declaring and initializing the table array, we
+ sort it.
local \&k[] \%a \%i \%n
not be only one value -- there can be 0, 1, 2, or more of them). The
user types a command, which can be the whole word (like "help") or any
abbreviation (like "hel", "he", or just "h"). If this does not match
- any keywords, \ftablelook() returns -1; if it matches more than one
- (as would "d"), it returns -2. Otherwise the array index is returned,
- 1 or higher.
+ any keywords, \ftablelook() returns -1; if it matches more than one (as
+ would "d"), it returns -2. Otherwise the array index is returned, 1 or
+ higher.
Given the array index \%n, we can get the table values as follows:
fields separated by colon (:) (or other character that you specify,
e.g. \ftablelook(\%a,&a,^)) and when matching the keyword, ignores the
first delimiter and everything after it.
- _________________________________________________________________
7.10.8. Hints for Using Arrays
* An attempt to set the value of an array element that is out of
bounds or that has not been declared simply fails.
- C programmers expect an array of size nto have elements 0 through n-1.
- Fortran programmers expect the same array to have elements 1 through
- n. C-Kermit accommodates both styles; when you declare an array of
- size n, it has n=1 elements, 0 through n, and you can use the array in
- your accustomed manner, 0-based or 1-based.
+ C programmers expect an array of size n to have elements 0 through n-1.
+ Fortran programmers expect the same array to have elements 1 through n.
+ C-Kermit accommodates both styles; when you declare an array of size n,
+ it has n+1 elements, 0 through n, and you can use the array in your
+ accustomed manner, 0-based or 1-based.
However, note that C-Kermit has certain biases towards 1-based arrays:
- * Assignment of file lists starts with element 1 ([602]Section
+ * Assignment of file lists starts with element 1 ([611]Section
7.10.3).
- * Assignment by \fsplit() starts with element 1 ([603]Section 7.3).
- * Array initialization skips the 0th element. To initialize a
- 0-based array, use something like this:
+ * Assignment by \fsplit() starts with element 1 ([612]Section 7.3).
+ * Array initialization skips the 0th element. To initialize a 0-based
+ array, use something like this:
declare \&a[3] = one two three
.\&a[0] = zero
+
* The ARRAY SORT command skips the 0th element unless you include
/RANGE:0
* The SHIFT command ignores element 0 of the \&_[] array.
and since your write loop only had 95 iterations, the final 5 lines of
the sorted file are lost.
- Therefore, when dealing with partially filled arrays -- especially
- when sorting them -- remember to specify the number of elements. A
- handy way of recording an array's "true" size is to put it in the 0th
- element. That way, it "travels with the array". To illustrate
- (continuing the previous example at the "close read" statement):
+ Therefore, when dealing with partially filled arrays -- especially when
+ sorting them -- remember to specify the number of elements. A handy way
+ of recording an array's "true" size is to put it in the 0th element.
+ That way, it "travels with the array". To illustrate (continuing the
+ previous example at the "close read" statement):
close read
if > \%i \fdim(&a) end 1 File has too many lines for array.
}
close write
- Note the SORT switch, /RANGE:1:\&a[0]. This keeps the sort 1-based,
- and uses element 0 of the array as its size indicator.
+ Note the SORT switch, /RANGE:1:\&a[0]. This keeps the sort 1-based, and
+ uses element 0 of the array as its size indicator.
Finally, note that even though some commands or functions might put a
size in array element 0, no built-in functions or commands depend on a
size actually being there. Thus you are perfectly free to replace the
size with something else and treat the array as 0-based.
- _________________________________________________________________
7.10.9. Do-It-Yourself Arrays
higher-dimensioned arrays are not available.
But none of this is to say you can't invent any kind of data structure
- you like. In [604]Section 7.9.2 you can see some examples. Here's
+ you like. In [613]Section 7.9.2 you can see some examples. Here's
another (courtesy of Dat Thuc Nguyen), in which a pair of matrices is
created and then added: no dimensioning necessary.
pmatrix B ; Print Matrix B
pmatrix C ; Print Matrix C
- In the example, we use matrix-like notation to create macros with
- names like "A[1][1]", "B[3][7]", and so on.
- _________________________________________________________________
+ In the example, we use matrix-like notation to create macros with names
+ like "A[1][1]", "B[3][7]", and so on.
7.10.10. Associative Arrays
An associative array is a special kind of Do-It-Yourself array. It
- differs from a regular array in that its indices need not be numbers
- -- they can be anything at all -- words, filenames, names of months,
- any character string at all, and that it doesn't have to be (and in
- fact can't be) declared. An associative array element is simply a
- macro whose name ends with an index enclosed in angle brackets, for
- example:
+ differs from a regular array in that its indices need not be numbers --
+ they can be anything at all -- words, filenames, names of months, any
+ character string at all, and that it doesn't have to be (and in fact
+ can't be) declared. An associative array element is simply a macro
+ whose name ends with an index enclosed in angle brackets, for example:
file<oofa.txt>
that have the same basename. Any number of associative arrays, each
with any number of elements, can exist at the same time.
- An associative array element can be assigned a value, such as "1",
- just like any other macro:
+ An associative array element can be assigned a value, such as "1", just
+ like any other macro:
define file<oofa.txt> 1 ; Give "file<oofa.txt>" the value "1".
assign file<oofa.txt> \%a ; Give it the value of the variable \%a.
- However, since an associative array element is a macro, it may not
- have an empty (null) value, since assigning an empty value to a macro
+ However, since an associative array element is a macro, it may not have
+ an empty (null) value, since assigning an empty value to a macro
undefines the macro.
You can refer to the value of an associative array element using the
Associative arrays are most useful, however, when the value of the
index is a variable. In that case, you must use the "hidden" forms of
the DEFINE or ASSIGN commands that evaluate the macro name before
- making the assignment (see [605]Using C-Kermit, page 457). Example:
+ making the assignment (see [614]Using C-Kermit, page 457). Example:
define \%f oofa.txt
_define file<\%f> 1
file-transfer log in which each line is composed of a number of
blank-separated fields, and the 9th field is a filename (which happens
to be the format of certain FTP server logs, as well as of C-Kermit's
- new FTP-format transaction log, described in [606]Section 4.17.2), for
+ new FTP-format transaction log, described in [615]Section 4.17.2), for
example:
Wed Jul 14 09:35:31 1999 22 xx.mit.edu 13412 /pub/ftp/mm/intro.txt ....
counts for each file:
local name line max \%c \%n ; Declare local variables
- fopen /read \%c /var/log/ftpd.log ; Open the log file ([607]Section 1.22)
+ fopen /read \%c /var/log/ftpd.log ; Open the log file ([616]Section 1.22)
if fail exit 1 Can't open log ; Check
while true { ; Loop for each record
fread /line \%c line ; Read a line
how can you use it in a script program?
The idea of creating macro names that include character-string indices
- enclosed in angle brackets is perfectly arbitrary and doesn't depend
- on any Kermit features that weren't already there -- we could just as
+ enclosed in angle brackets is perfectly arbitrary and doesn't depend on
+ any Kermit features that weren't already there -- we could just as
easily have used some other notation, such as "file[index]",
"file:index", or "file.index", and the code above would have worked
just as well (with the corresponding syntax adjustments). But to be
- able to use an associative array in a program after the array is
- built, we need a method of accessing all its elements without knowing
- in advance what they are. That's where the chosen notation comes in.
+ able to use an associative array in a program after the array is built,
+ we need a method of accessing all its elements without knowing in
+ advance what they are. That's where the chosen notation comes in.
- First of all, any macro name that ends with "<xxx>" (where "xxx" is
- any string) is case sensitive, unlike all other macro names, which are
- case independent. To illustrate, "file<oofa.txt>" and "file<OOFA.TXT>"
- are two distinct macros, whereas "OOFA", "Oofa", and "oofa", when used
- as macro names, are all the same.
+ First of all, any macro name that ends with "<xxx>" (where "xxx" is any
+ string) is case sensitive, unlike all other macro names, which are case
+ independent. To illustrate, "file<oofa.txt>" and "file<OOFA.TXT>" are
+ two distinct macros, whereas "OOFA", "Oofa", and "oofa", when used as
+ macro names, are all the same.
Second, the new \faaconvert() function converts an associative array
- (that is, all macros with names of the form "base<index>" that have
- the same "base" part) into a pair of regular arrays and returns the
- number of elements:
+ (that is, all macros with names of the form "base<index>" that have the
+ same "base" part) into a pair of regular arrays and returns the number
+ of elements:
\faaconvert(name,&a[,&b])
- "name" is the name of the associative array, without the angle
- brackets or index ("file" in our example).
+ "name" is the name of the associative array, without the angle brackets
+ or index ("file" in our example).
The second argument is the name of a regular array in which to store
the indices of the associative array (filenames in our example); if an
array of this name already exists, it is destroyed unless the array is
- LOCAL. The third argument is the name of another regular array in
- which to store the values (the counts in our example), with the same
- rules about array name collisions. If you care only about the indices
- and not the values, you can omit the third argument to \faaconvert().
- In any case, the associative array is converted, not copied: its
- elements are moved to the specified regular arrays, so after
- conversion the original associative array is gone.
+ LOCAL. The third argument is the name of another regular array in which
+ to store the values (the counts in our example), with the same rules
+ about array name collisions. If you care only about the indices and not
+ the values, you can omit the third argument to \faaconvert(). In any
+ case, the associative array is converted, not copied: its elements are
+ moved to the specified regular arrays, so after conversion the original
+ associative array is gone.
As with other array-loading functions, \faaconvert() sets element 0 of
each array to the number of elements in the array.
This lists the files and counts and then announces which file has the
highest count.
- Now suppose you want to sort the array pair created from an
- associative array. In our example, \&a[] contains filenames, and \&b[]
- contains the associated counts. Here we take advantage of the ARRAY
- SORT command's ability to sort a second array according to the first
- one:
+ Now suppose you want to sort the array pair created from an associative
+ array. In our example, \&a[] contains filenames, and \&b[] contains the
+ associated counts. Here we take advantage of the ARRAY SORT command's
+ ability to sort a second array according to the first one:
array sort /reverse /numeric &b &a ; Descending sort by count
for \%i 1 5 1 { ; Loop through top 5 values
echo \flpad(\%i,3). \&a[\%i]: \&b[\%i] ; Echo this pair
}
- _________________________________________________________________
7.10.11. Transferring Array Contents to Other Computers
- The SEND /ARRAY:arrayname command ([608]Section 4.7.1) allows you to
+ The SEND /ARRAY:arrayname command ([617]Section 4.7.1) allows you to
send the contents of any array, or any contiguous segment of it, in
either text or binary mode to another computer, using Kermit protocol.
When used in conjunction with C-Kermit's other features (the array
features described in this section; the file i/o package from
- [609]Section 1.22; its decision-making, pattern-matching, and string
+ [618]Section 1.22; its decision-making, pattern-matching, and string
manipulation capabilities, and so on) the possibilities are endless:
extracts of large files, remote database queries, ..., all without
recourse to system-dependent mechanisms such UNIX pipes and filters,
thus ensuring cross-platform portability of scripts that use these
features.
- When sending an array in text mode, Kermit appends a line terminator
- to each array element, even empty ones, and it also converts the
- character set from your current FILE character-set to your current
- TRANSFER character-set, if any. No conversions are made or line
- terminations added in binary mode. For example, the following array:
+ When sending an array in text mode, Kermit appends a line terminator to
+ each array element, even empty ones, and it also converts the character
+ set from your current FILE character-set to your current TRANSFER
+ character-set, if any. No conversions are made or line terminations
+ added in binary mode. For example, the following array:
dcl \&a[] = One Two Three Four Five Six
You should always include a /TEXT or /BINARY switch in any SEND /ARRAY
command to force the desired transfer mode, otherwise you're likely to
- be surprised by the effects described in [610]Section 4.3.
+ be surprised by the effects described in [619]Section 4.3.
Here are some examples:
send /text /array:\&a[]
- Sends the entire contents of the array \&a[] in text mode.
- Since an as-name is not included, the receiver is told the
- filename is _array_a_.
+ Sends the entire contents of the array \&a[] in text mode. Since
+ an as-name is not included, the receiver is told the filename is
+ _array_a_.
send /text /array:&a[]
send /text /array:a[]
send /text /array:&a[100:199] /as:foo.bar
As above, but only the elements from 100 through 199 are sent.
- In text-mode transfers, character sets are translated according to
- your current settings, just as for text files. In binary mode, of
- course, there is no character-set translation or other conversion of
- any kind. But remember that array elements can not contain the NUL
- (ASCII 0) character, since they are implemented as NUL-terminated
- strings.
+ In text-mode transfers, character sets are translated according to your
+ current settings, just as for text files. In binary mode, of course,
+ there is no character-set translation or other conversion of any kind.
+ But remember that array elements can not contain the NUL (ASCII 0)
+ character, since they are implemented as NUL-terminated strings.
Here's an example that shows how to send all the lines (up to 1000 of
them) from a file animals.txt that contain the words "cat", "dog", or
- "hog" (see [611]Section 4.9 about pattern matching):
+ "hog" (see [620]Section 4.9 about pattern matching):
declare \&a[1000]
fopen /read \%c animals.txt
Kermit's (and the computer's) memory. If there are a thousand trillion
matching lines, they most likely will not fit in memory, and in this
case the only solution is to write them first to a temporary file on
- mass storage and then send the temporary file and delete it
- afterwards.
+ mass storage and then send the temporary file and delete it afterwards.
However, when the selection is likely to fit in memory, the
- once-familiar technique of initial allocation with extents can be
- used:
+ once-familiar technique of initial allocation with extents can be used:
if match {\m(line)} {*{cat,[dh]og}*} {
increment \%i
}
This grows the array in chunks of 100 as needed.
- _________________________________________________________________
7.11. OUTPUT Command Improvements
; Add filtering or processing commands here...
output \m(line)\13
}
- _________________________________________________________________
7.12. Function and Variable Diagnostics
In C-Kermit 6.0 and earlier, the only diagnostic returned by a failing
function call was an empty value, which (a) could not be distinguished
- from an empty value returned by a successful function call; (b) did
- not give any indication of the cause of failure; and (c) did not cause
- the enclosing statement to fail. C-Kermit 7.0 corrects these
- deficiencies.
+ from an empty value returned by a successful function call; (b) did not
+ give any indication of the cause of failure; and (c) did not cause the
+ enclosing statement to fail. C-Kermit 7.0 corrects these deficiencies.
SET FUNCTION DIAGNOSTICS { ON, OFF }
- when ON, allows built-in functions to return diagnostic
- messages when improperly referenced, instead of an empty
- string. FUNCTION DIAGNOSTICS are ON by default. When OFF,
- improperly referenced functions continue to return an empty
- string. This command also affects built-in variables; in this
- case, an error message is returned only if the variable does
- not exist. When FUNCTION DIAGNOSTICS are ON, the error message
- is also printed.
+ when ON, allows built-in functions to return diagnostic messages
+ when improperly referenced, instead of an empty string. FUNCTION
+ DIAGNOSTICS are ON by default. When OFF, improperly referenced
+ functions continue to return an empty string. This command also
+ affects built-in variables; in this case, an error message is
+ returned only if the variable does not exist. When FUNCTION
+ DIAGNOSTICS are ON, the error message is also printed.
For variables, the only message is:
<ERROR:message:\fname()>
- where "message" is replaced by a message, and "name" is replaced by
- the function name, e.g. <ERROR:ARG_NOT_NUMERIC:\fmod()>. Messages
- include:
+ where "message" is replaced by a message, and "name" is replaced by the
+ function name, e.g. <ERROR:ARG_NOT_NUMERIC:\fmod()>. Messages include:
ARG_BAD_ARRAY An argument contains a malformed array reference.
ARG_BAD_DATE An argument contains a malformed date and/or time.
FILE_NOT_ACCESSIBLE Filename argument names a file that is read-protected.
FILE_ERROR Other error with filename argument.
FILE_NOT_OPEN A file function was given a channel that is not open.
- FILE_ERROR_-n A file function got error -n ([612]Section 1.22).
+ FILE_ERROR_-n A file function got error -n ([621]Section 1.22).
LOOKUP_FAILURE Error looking up function (shouldn't happen).
MALLOC_FAILURE Failure to allocate needed memory (shouldn't happen).
NAME_AMBIGUOUS The function is not uniquely identified.
SHOW SCRIPTS displays the current FUNCTION DIAGNOSTICS and ERROR
settings.
- _________________________________________________________________
7.13. Return Value of Macros
In C-Kermit 7.0, the END number is available in the \v(return)
variable.
- _________________________________________________________________
7.14. The ASSERT, FAIL, and SUCCEED Commands.
The FAIL command does nothing, but always fails. The SUCCEED command
does nothing, but always succeeds.
- These commands are handy in debugging scripts when you want to induce
- a failure (or success) that normally would not occur, e.g. for testing
+ These commands are handy in debugging scripts when you want to induce a
+ failure (or success) that normally would not occur, e.g. for testing
blocks of code that normally are not executed.
- _________________________________________________________________
7.15. Using Alarms
SET ALARM number
Sets an alarm for the given number of seconds "from now", i.e.
- in the future, relative to when the SET ALARM command was
- given. Examples:
+ in the future, relative to when the SET ALARM command was given.
+ Examples:
set alarm 60 ; 60 seconds from now
set alarm +60 ; The same as "60"
set alarm 3pm ; 3:00:00pm
SHOW ALARM
- Displays the current alarm, if any, in standard date-time
- format (see [613]Section 1.6): yyyymmdd hh:mm:ss.
+ Displays the current alarm, if any, in standard date-time format
+ (see [622]Section 1.6): yyyymmdd hh:mm:ss.
IF ALARM command
- Executes the command if an alarm has been set and the alarm
- time has passed.
+ Executes the command if an alarm has been set and the alarm time
+ has passed.
IF ALARM { command-list } [ ELSE { command-list } ]
- Executes the command-list if an alarm has been set and the
- alarm time has passed. Otherwise, if an ELSE part is given, its
+ Executes the command-list if an alarm has been set and the alarm
+ time has passed. Otherwise, if an ELSE part is given, its
command-list is executed.
CLEAR ALARM
Only one alarm may be set at a time.
Example: Suppose you have a script that is always running, and that
- transfers files periodically, and that keeps a transaction log.
- Suppose you want to start a new transaction log each day:
+ transfers files periodically, and that keeps a transaction log. Suppose
+ you want to start a new transaction log each day:
log transactions \v(date).log
set alarm 00:00:00 ; Set an alarm for midnight
NOT clear an expired alarm. Thus, once an alarm has expired, every IF
ALARM will succeed until the alarm is cleared (with the CLEAR ALARM
command) or reset with a new SET ALARM command.
- _________________________________________________________________
7.16. Passing Arguments to Command Files
C-Kermit> take oofa.ksc one two {this is three} four
- This automatically sets the variables \%1 through \%9 to the
- arguments, and \%0 to the name of the file, in this case:
+ This automatically sets the variables \%1 through \%9 to the arguments,
+ and \%0 to the name of the file, in this case:
\%0 = /usr/olga/oofa.ksc
\%1 = one
\%4 = four
and \%5..\%9 are undefined (empty). Arguments past the ninth are
- available in the \&_[] argument-vector array ( [614]Section 7.5).
+ available in the \&_[] argument-vector array ( [623]Section 7.5).
The variables are those at the current macro level. Thus, if the TAKE
command is executed from within a macro, the macro's arguments are
invocations.
It would have been possible to change C-Kermit to use the overall
- command stack, rather than the macro stack, for arguments -- this
- would have made TAKE work exactly like DO, which is "nicer", but it
- would also have broken countless existing scripts. However, the new
- SHIFT command ([615]Section 7.5) makes it possible to create an
- alternative TAKE command that does indeed save and restore the
- argument variables at its own level around execution of a command
- file:
+ command stack, rather than the macro stack, for arguments -- this would
+ have made TAKE work exactly like DO, which is "nicer", but it would
+ also have broken countless existing scripts. However, the new SHIFT
+ command ([624]Section 7.5) makes it possible to create an alternative
+ TAKE command that does indeed save and restore the argument variables
+ at its own level around execution of a command file:
define mtake {
local \%f
kermit filename arg1 arg2 arg3 ...
in which arg1, arg2, arg3 (etc) are arguments for the script (whose
- filename is given), and are assigned to \%1, \%2, ... \%9. The
- filename is assigned to \%0. This applies equally to "Kerbang" scripts
- in UNIX ([616]Section 7.19). For example, suppose you have a file
- called "showargs" containing the following lines:
+ filename is given), and are assigned to \%1, \%2, ... \%9. The filename
+ is assigned to \%0. This applies equally to "Kerbang" scripts in UNIX
+ ([625]Section 7.19). For example, suppose you have a file called
+ "showargs" containing the following lines:
#!/usr/local/bin/kermit +
echo Hello from \%0
chmod +x showargs
- then you can run it exactly as you would run a UNIX shell script,
- e.g.:
+ then you can run it exactly as you would run a UNIX shell script, e.g.:
$ showargs one two three
Hello from /usr/olga/showargs
(allowing you to access arguments programmatically, and to have more
than 9 of them).
- At top level, notice the difference between the \&@[] and \&_[]
- arrays. The former includes C-Kermit options; the latter omits them.
- _________________________________________________________________
+ At top level, notice the difference between the \&@[] and \&_[] arrays.
+ The former includes C-Kermit options; the latter omits them.
7.17. Dialogs with Timed Responses
- The ASK, ASKQ, GETOK, and GETC commands (let's call them the
- "ASK-class commands") let you write scripts that carry on dialogs with
- the user, asking them for text, a Yes/No answer, or a character,
- respectively. Prior to C-Kermit 7.0, these questions would always wait
- forever for an answer. In C-Kermit 7.0, you may specify a time limit
- for them with the new command:
+ The ASK, ASKQ, GETOK, and GETC commands (let's call them the "ASK-class
+ commands") let you write scripts that carry on dialogs with the user,
+ asking them for text, a Yes/No answer, or a character, respectively.
+ Prior to C-Kermit 7.0, these questions would always wait forever for an
+ answer. In C-Kermit 7.0, you may specify a time limit for them with the
+ new command:
SET ASK-TIMER number
Sets a time-limit on ASK-CLASS commands to the given number of
IF ASKTIMEOUT command
An ASK-class command that times out returns a failure status.
You can test explicitly for a timeout with:
- _________________________________________________________________
7.18. Increased Flexibility of SWITCH Case Labels
Furthermore, after the case label is evaluated, it is treated not as a
string constant, but as a pattern against which the SWITCH variable is
- matched ([617]Section 4.9.1).
+ matched ([626]Section 4.9.1).
This introduces a possible incompatibility with previous releases,
since the following characters in case labels are no longer taken
Any scripts that previously included any of these characters in case
labels must now quote them with backslash (\).
- _________________________________________________________________
7.19. "Kerbang" Scripts
- In UNIX only, Kermit scripts can be stored in files and run
- "directly", without starting Kermit first (as noted on page 467 of the
- manual), just as a shell script can be "run" as if it were a program.
- This section amplifies on that idea a bit, and presents some new
- aspects of version 7.0 that make it easier to write and run Kermit
- scripts directly.
+ In UNIX only, Kermit scripts can be stored in files and run "directly",
+ without starting Kermit first (as noted on page 467 of the manual),
+ just as a shell script can be "run" as if it were a program. This
+ section amplifies on that idea a bit, and presents some new aspects of
+ version 7.0 that make it easier to write and run Kermit scripts
+ directly.
- NOTE: On non-UNIX platforms, such as VMS or Windows, Kerbang
- scripts can be run as "kermit + scriptfilename arg1 arg2 arg3 ...".
- Windows 95/98/NT file associations do not allow for the passing of
+ NOTE: On non-UNIX platforms, such as VMS or Windows, Kerbang scripts
+ can be run as "kermit + scriptfilename arg1 arg2 arg3 ...". Windows
+ 95/98/NT file associations do not allow for the passing of
parameters. In VMS, however, you can achieve the Kerbang effect by
defining a symbol, as in this example:
$ autotelnet xyzcorp.com myuserid
- See [618]Section 9.3 for an explanation of the "+" symbol.
+ See [627]Section 9.3 for an explanation of the "+" symbol.
- UNIX shell scripts can specify which shell should run them by
- including a "shebang" line at the top, e.g.:
+ UNIX shell scripts can specify which shell should run them by including
+ a "shebang" line at the top, e.g.:
#!/bin/sh
American slang word used in in the phrase "the whole shebang".
We can run Kermit scripts directly too, by including a "shebang" line
- that names Kermit as the "shell"; thus we call these "Kerbang"
- scripts. This mechanism has been considerably simplified in C-Kermit
- 7.0 to facilitate C-Kermit's use a scripting tool just like any of the
- UNIX shells or scripting languages. The rules are the same as for
- shell scripts:
+ that names Kermit as the "shell"; thus we call these "Kerbang" scripts.
+ This mechanism has been considerably simplified in C-Kermit 7.0 to
+ facilitate C-Kermit's use a scripting tool just like any of the UNIX
+ shells or scripting languages. The rules are the same as for shell
+ scripts:
1. The first line of the Kermit script must begin with "#!"
immediately followed by the full pathname of the program that will
line arguments available to the script, the final option should be
"+":
#!/usr/local/bin/kermit +
+
Some users have reported that in some circumstances a space might
be necessary after the plus sign; this depends on your shell -- it
has nothing to do with Kermit. In most cases, no space is needed.
you want it to be executed, include a TAKE command for it in the
script, e.g. "take \v(home).kermrc". (In previous releases, the
initialization file was always executed, with no way to prevent it
- except for the user to include Kermit-specific command line
- options which had nothing to do with the script). Many scripts
- have no need for the standard Kermit initialization file, which is
- quite lengthy and not only delays startup of the script, but also
- spews forth numerous messages that are most likely unrelated to
- the script.
+ except for the user to include Kermit-specific command line options
+ which had nothing to do with the script). Many scripts have no need
+ for the standard Kermit initialization file, which is quite lengthy
+ and not only delays startup of the script, but also spews forth
+ numerous messages that are most likely unrelated to the script.
2. If the initialization file is not executed, neither is your
customization file, since the initialization file is the command
file from which the customization file is TAKEn. Again, you can
include a TAKE command for the initialization file if desired, or
for the customization file by itself, or for any other file.
3. C-Kermit does not process command-line arguments at all. Instead,
- it passes all words on the command line after the "+" to the
- script as \%0 (the script name), \%1..\%9 (the first nine
- arguments), as well as in the argument vector array \&_[]. The
- variable \v(argc) is set to the total number of "words" (as passed
- by the shell to Kermit) including the script name. Quoting and
- grouping rules are those of the shell.
+ it passes all words on the command line after the "+" to the script
+ as \%0 (the script name), \%1..\%9 (the first nine arguments), as
+ well as in the argument vector array \&_[]. The variable \v(argc)
+ is set to the total number of "words" (as passed by the shell to
+ Kermit) including the script name. Quoting and grouping rules are
+ those of the shell.
4. At any point where the script terminates, it must include an EXIT
command if you want it to exit back to the shell; otherwise
C-Kermit enters interactive prompting mode when the script
}
exit 0
- Save this file as (say) "showargs", then give it execute permission
- and run it (the \&_[] array is the same as \%0..\%9, but allows you to
- refer to argument variables programmatically; see [619]Section 7.5).
+ Save this file as (say) "showargs", then give it execute permission and
+ run it (the \&_[] array is the same as \%0..\%9, but allows you to
+ refer to argument variables programmatically; see [628]Section 7.5).
(Yes, you could substitute SHOW ARGUMENTS for the loop.)
$ chmod +x showargs
since the command line is parsed by the shell before Kermit ever sees
it.
- Of course you can put any commands at all into a Kerbang script. It
- can read and write files, make connections, transfer files, anything
- that Kermit can do -- because it *is* Kermit. And of course, Kerbang
- scripts can also be executed from the Kermit prompt (or from another
- script) with a TAKE command; the Kerbang line is ignored since it
- starts with "#", which is a comment introducer to Kermit just as it is
- to the UNIX shell. In VMS and other non-UNIX platforms, the Kerbang
- line has no effect and can be omitted.
+ Of course you can put any commands at all into a Kerbang script. It can
+ read and write files, make connections, transfer files, anything that
+ Kermit can do -- because it *is* Kermit. And of course, Kerbang scripts
+ can also be executed from the Kermit prompt (or from another script)
+ with a TAKE command; the Kerbang line is ignored since it starts with
+ "#", which is a comment introducer to Kermit just as it is to the UNIX
+ shell. In VMS and other non-UNIX platforms, the Kerbang line has no
+ effect and can be omitted.
- It might be desireable for a script to know whether it has been
- invoked directly from the shell (as a Kerbang script) or by a TAKE
- command given to the Kermit prompt or in a Kermit command file or
- macro. This can be done as in this example:
+ It might be desirable for a script to know whether it has been invoked
+ directly from the shell (as a Kerbang script) or by a TAKE command
+ given to the Kermit prompt or in a Kermit command file or macro. This
+ can be done as in this example:
#!/usr/local/bin/kermit +
assign \%m \fbasename(\%0)
define usage { exit 1 {usage: \%m phonenumber message} }
- define apage { (definition of APAGE...) } ; (See [620]book pp.454-456)
+ define apage { (definition of APAGE...) } ; (See [629]book pp.454-456)
xif equal "\%0" "\v(cmdfil)" {
if not def \%1 usage
if not def \%2 usage
exit \v(status)
}
- In a Kerbang script, \%0 and \v(cmdfile) are the same; both of them
- are the name of the script. When a script is invoked by a Kermit TAKE
+ In a Kerbang script, \%0 and \v(cmdfile) are the same; both of them are
+ the name of the script. When a script is invoked by a Kermit TAKE
command, \%0 is the name of the Kermit program, but \v(cmdfile) is the
name of the script. In the example above, a macro called APAGE is
defined. If the script was invoked directly, the APAGE macro is also
An especially handy use for Kerbang scripts is to have the
initialization file itself be one. Since the standard initialization
- file is rather long and time-consuming to execute, it is often
- overkill if you want to start Kermit just to transfer a file. Of
- course there are command-line switches to suppress initialization-file
- execution, etc, but another approach is to "run" the initialization
- file when you want its features (notably the services directory), and
- run C-Kermit directly when you don't. A setup like this requires that
- (a) the C-Kermit initialization file is configured as a Kerbang script
- (has #!/path.../kermit as first line), has execute permission, and is
- in your PATH; and (b) that you don't have a .kermrc file in your login
+ file is rather long and time-consuming to execute, it is often overkill
+ if you want to start Kermit just to transfer a file. Of course there
+ are command-line switches to suppress initialization-file execution,
+ etc, but another approach is to "run" the initialization file when you
+ want its features (notably the services directory), and run C-Kermit
+ directly when you don't. A setup like this requires that (a) the
+ C-Kermit initialization file is configured as a Kerbang script (has
+ #!/path.../kermit as first line), has execute permission, and is in
+ your PATH; and (b) that you don't have a .kermrc file in your login
directory.
- _________________________________________________________________
7.20. IF and XIF Statement Syntax
7.20.1. The IF/XIF Distinction
The distinction between IF and XIF is no longer important as of
- C-Kermit 7.0. You should be able to use IF in all cases (and of
- course, also XIF for backwards compatibility). In the past, IF was
- used for single-command THEN parts, followed optionally by a separate
- ELSE command:
+ C-Kermit 7.0. You should be able to use IF in all cases (and of course,
+ also XIF for backwards compatibility). In the past, IF was used for
+ single-command THEN parts, followed optionally by a separate ELSE
+ command:
IF condition command1 ; THEN part
ELSE command2 ; ELSE part
ELSE command-list
in which the ELSE part is optional, and where command-list can be a
- single command (with or without braces around it) or a list of
- commands enclosed in braces. Examples:
+ single command (with or without braces around it) or a list of commands
+ enclosed in braces. Examples:
Example 1:
Example 5 (ELSE can be followed by another command):
- IF condition {
+ IF condition1 {
command1
command2
- } ELSE IF condition {
+ } ELSE IF condition2 {
command3
command4
} ELSE {
(The loop variable must be quoted in this context to prevent premature
evaluation.)
- _________________________________________________________________
+
+ Many C programmers prefer to code IF-ELSE, WHILE, FOR, and SWITCH with
+ the block-open bracket on its own line. This does not work in Kermit:
+
+ IF condition ; THIS FORMAT DOES NOT NOT WORK
+ {
+ command1
+ command2
+ }
+ ELSE
+ {
+ command3
+ command4
+ }
+
+ Explanation: the Kermit command language is line oriented; each line is
+ a command, each command is a line. The first line above, having no hint
+ of continuation, is an incomplete command, yet syntactically correct --
+ an IF statement with an empty THEN part. Interestingly enough, since
+ the next line begins with "{" it is a block that (in [630]C-Kermit 8.0
+ and later) is a block that is executed unconditionally. Thus the
+ commands in the THEN part are executed regardless of whether the
+ condition is true -- not what you wanted!
+
+ The new block syntax used in the IF, WHILE, FOR, and SWITCH commands
+ employs certain tricks to allow multiple lines to be treated as a
+ single line:
+
+ * Any line ending with "{" (ignoring whitespace and comments) marks
+ the beginning of a block;
+ * Any line beginning with "}" (ignoring whitespace) marks the end of
+ a block;
+ * Line breaks within a block separate commands; the comma is implied
+ by the line end.
+
+ Thus:
+
+ IF condition {
+ command1
+ command2
+ } ELSE {
+ command3
+ command4
+ }
+
+ is "assembled" into:
+
+ IF condition { command1, command2 } ELSE { command3, command4 }
+
+ Note the addition of commas to separate commands within blocks. As
+ always, if you need continue a command onto additional lines, you can
+ end the continued lines with the continuation character, "-". You can
+ also do this if you want to put opening brackets on their own line:
+
+ IF condition -
+ {
+ command1
+ command2
+ }
+ ELSE -
+ {
+ command3
+ command4
+ }
7.20.2. Boolean Expressions (The IF/WHILE Condition)
- Prior to C-Kermit 7.0, the IF and WHILE commands accepted only a
- single Boolean ("true or false") assertion, e.g. "if > \%m 0 command"
- or "if exist filename command". There was no way to form Boolean
- expressions and, in particular, nothing that approached a Boolean OR
- function (AND could be simulated by concatenating IF statements: "if
- condition1 if condition2..").
+ Prior to C-Kermit 7.0, the IF and WHILE commands accepted only a single
+ Boolean ("true or false") assertion, e.g. "if > \%m 0 command" or "if
+ exist filename command". There was no way to form Boolean expressions
+ and, in particular, nothing that approached a Boolean OR function (AND
+ could be simulated by concatenating IF statements: "if condition1 if
+ condition2..").
C-Kermit 7.0 (and K95 1.1.19) allow grouping of Boolean assertions
using parentheses and combining them using AND (or &&) and OR (or ||).
resulting Boolean expression is evaluated afterwards according to
the rules of precedence. All Boolean assertions are always
evaluated; there is no "early stopping" property and therefore no
- question about when or if side effects will occur -- if any
- Boolean assertion has side effects, they will always occur.
+ question about when or if side effects will occur -- if any Boolean
+ assertion has side effects, they will always occur. (Early stopping
+ is, however, possible with the [631]S-Expression IF introduced in
+ C-Kermit 8.0.)
Constructions of arbitrary complexity are possible, within reason.
- Also see [621]Section 7.4 for new IF / WHILE conditions.
- _________________________________________________________________
+ Also see [632]Section 7.4 for new IF / WHILE conditions.
7.21. Screen Formatting and Cursor Control
SCREEN { CLEAR, CLEOL, MOVE-TO row [ column ] }
Performs screen-formatting actions. Correct operation of these
commands depends on proper terminal setup on both ends of the
- connection -- mainly that the host terminal type is set to
- agree with the kind of terminal or the emulation you are
- viewing C-Kermit through. The UNIX version uses terminfo or
- termcap (not curses); the VMS version uses SMG; K-95 uses its
- built in screen manager.
+ connection -- mainly that the host terminal type is set to agree
+ with the kind of terminal or the emulation you are viewing
+ C-Kermit through. The UNIX version uses terminfo or termcap (not
+ curses); the VMS version uses SMG; K-95 uses its built in screen
+ manager.
SCREEN CLEAR
Moves the cursor to home position and clears the entire screen.
SCREEN MOVE-TO row column
Moves the cursor to the indicated row and column. The row and
column numbers are 1-based, so on a 24x80 screen the home
- position is 1 1 and the lower right corner is 24 80. If a row
- or column number is given that too large for what Kermit or the
+ position is 1 1 and the lower right corner is 24 80. If a row or
+ column number is given that too large for what Kermit or the
operating system thinks is your screen size, the appropriate
number is substituted.
These escape sequences used by these commands depends on the platform.
In UNIX, your TERM environment variable is used to query the
- terminfo/termcap database; if the query fails, ANSI/VT100 sequences
- are used. In VMS, the SMG library is used, which sends sequences based
- on your VMS terminal type. K95 does its own screen control. On other
+ terminfo/termcap database; if the query fails, ANSI/VT100 sequences are
+ used. In VMS, the SMG library is used, which sends sequences based on
+ your VMS terminal type. K95 does its own screen control. On other
platforms (such as AOS/VS, VOS, etc), screen formatting is not
supported, and the SCREEN command does nothing.
Similar scripts can work over the communication connection; substitute
INPUT and OUTPUT for GETC and ECHO/XECHO.
- _________________________________________________________________
7.22. Evaluating Arithmetic Expressions
Prefix "!"
This operator inverts the "truth value" of the number or
arithmetic expression that follows. If the value of the operand
- is 0, the result is 1. If the value is nonzero, the result is
- 0.
+ is 0, the result is 1. If the value is nonzero, the result is 0.
Examples:
evaluate !(!(\%a&\%b))
0
- Note the distinction between Prefix ! (invert truth value) and Suffix
- ! (factorial). Also the distinction between Prefix ! and Prefix ~
- (which inverts all the bits in its operand). Also note that prefix
- operators (!, -, and ~) can not be adjacent unless you use parentheses
- to separate them, as shown in the final example above.
- _________________________________________________________________
+ Note the distinction between Prefix ! (invert truth value) and Suffix !
+ (factorial). Also the distinction between Prefix ! and Prefix ~ (which
+ inverts all the bits in its operand). Also note that prefix operators
+ (!, -, and ~) can not be adjacent unless you use parentheses to
+ separate them, as shown in the final example above.
7.23. Floating-Point Arithmetic
+ For a more convenient way of dealing with floating-point numbers
+ than the one described here, see the [633]C-Kermit 8.0 update notes,
+ the section on [634]S-Expressions.
+
C-Kermit 7.0 adds limited support for floating-point numbers (numbers
- that have fractional parts, like 3.141592653). This support is
- provided through a small repertoire of functions and in Boolean
- expressions that compare numbers, but does not apply to number parsing
- in general, or to expression evaluation, array subscripts, the
- INCREMENT and DECREMENT commands, or in any context other than those
- listed in this section.
+ that have fractional parts, like 3.141592653). This support is provided
+ through a small repertoire of functions and in Boolean expressions that
+ compare numbers, but does not apply to number parsing in general, or to
+ expression evaluation, array subscripts, the INCREMENT and DECREMENT
+ commands, or in any context other than those listed in this section.
A floating point number has an optional sign (+ or -), followed by a
series of decimal digits containing either zero or one period (.)
if not float \%f stop 1 Invalid floating-point number: "\%f"
C-Kermit's floating-point support, like its support for whole numbers
- (integers), relies on the capabilities of the underlying computer.
- Your computer has only a limited amount of precision for numbers,
- depending on its architecture. Thus floating-point numbers that have
- too many digits will not be accurate; adding a very small number to a
- very large one might have no effect at all; and so on. For details,
- read a text on numerical analysis. Example:
+ (integers), relies on the capabilities of the underlying computer. Your
+ computer has only a limited amount of precision for numbers, depending
+ on its architecture. Thus floating-point numbers that have too many
+ digits will not be accurate; adding a very small number to a very large
+ one might have no effect at all; and so on. For details, read a text on
+ numerical analysis. Example:
.\%a = 11111111111111111111 ; A long number
.\%b = 22222222222222222222 ; Another one
\ffpdiv(10,3,-1) returns "3".
- If the decimal-places argument is 0, or is omitted, C-Kermit returns
- as many decimal places as are meaningful in the computer's
- floating-point precision, truncating any extraneous trailing 0's:
+ If the decimal-places argument is 0, or is omitted, C-Kermit returns as
+ many decimal places as are meaningful in the computer's floating-point
+ precision, truncating any extraneous trailing 0's:
\ffpdiv(10,8) returns "1.25".
\ffpdiv(10,4) returns "2.5".
f1 power.
\ffplogn(f1,d)
- The natural logarithm of f1 (the power to which e must be
- raised to obtain f1).
+ The natural logarithm of f1 (the power to which e must be raised
+ to obtain f1).
\ffplog10(f1,d)
The base-10 logarithm of f1 (the power to which 10 must be
\ffptangent(f1,d)
Returns the tangent of f1 radians.
- Note that all of these functions can be used with integer arguments.
- If you want an integer result, specify d = -1 (to truncate) or feed
- the result to \ffpround(xxx,0) (to round).
+ Note that all of these functions can be used with integer arguments. If
+ you want an integer result, specify d = -1 (to truncate) or feed the
+ result to \ffpround(xxx,0) (to round).
- Floating-point numbers (or variables or functions that return them)
- can be used in Boolean expressions (see [622]Section 7.20.2) that
- compare numbers:
+ Floating-point numbers (or variables or functions that return them) can
+ be used in Boolean expressions (see [635]Section 7.20.2) that compare
+ numbers:
= x y
!= x y
In these examples, x and y can be either integers or floating-point
numbers in any combination. In an arithmetic comparison of an integer
- and a floating-point number, the integer is converted to
- floating-point before the comparison is made. Examples:
+ and a floating-point number, the integer is converted to floating-point
+ before the comparison is made. Examples:
.\%t = 3.000000000
.\%f = 3.141592653
and is executed otherwise.
Floating-point numbers can be sorted using ARRAY SORT /NUMERIC (see
- [623]Section 7.10.5 ).
+ [636]Section 7.10.5 ).
Two floating-point constants are provided:
\v(math_precision)
How many significant digits in a floating-point number.
- _________________________________________________________________
7.24. Tracing Script Execution
Selects tracing of the given object.
Optional switches are /ON and /OFF. If no switch is given, /ON is
- implied. The trace objects are ASSIGNMENTS, COMMAND-LEVEL, and ALL.
- The default object is ALL, meaning to select all trace objects
- (besides ALL). Thus TRACE by itself selects tracing of everything, as
- does TRACE /ON, and TRACE /OFF turns off all tracing.
+ implied. The trace objects are ASSIGNMENTS, COMMAND-LEVEL, and ALL. The
+ default object is ALL, meaning to select all trace objects (besides
+ ALL). Thus TRACE by itself selects tracing of everything, as does TRACE
+ /ON, and TRACE /OFF turns off all tracing.
When tracing of ASSIGNMENTS is on, every time the value of any
user-defined variable or macro changes, C-Kermit prints one of the
of the macro is shown in quotes.
[n] -F: "name"
- Whenever a command file is reentered from below, when a macro
- or command file that it has invoked has returned.
+ Whenever a command file is reentered from below, when a macro or
+ command file that it has invoked has returned.
[n] -M: "name"
Whenever a macro is reentered from below.
For other debugging tools, see SHOW ARGS, SHOW STACK, SET TAKE, SET
MACRO, and of course, ECHO.
- _________________________________________________________________
7.25. Compact Substring Notation
it is omitted, or less than 1, it is treated as 1. If it is greater
than the length of the string, an empty string is returned.
- The second number is the length of the desired substring. If the
- second number is omitted, is less than 0, or would be past the end of
- the string, then "through the end of the string" is assumed. If it is
- 0, the empty string is returned.
+ The second number is the length of the desired substring. If the second
+ number is omitted, is less than 0, or would be past the end of the
+ string, then "through the end of the string" is assumed. If it is 0,
+ the empty string is returned.
If the brackets are empty or omitted, the original string is returned.
Syntactically, \m(name) and \s(name) differ only in that the sequence
[*] at the end of the name (where * is any sequence of 0 or more
characters) is treated as substring notation in \s(name), but is
- considered part of the name in \m(name) (to see why, see [624]Section
+ considered part of the name in \m(name) (to see why, see [637]Section
7.10.9).
- _________________________________________________________________
7.26. New WAIT Command Options
- The WAIT command has been extended to allow waiting for different
- kinds of things (formerly it only waited for modem signals). Now it
- also can wait for file events.
+ The WAIT command has been extended to allow waiting for different kinds
+ of things (formerly it only waited for modem signals). Now it also can
+ wait for file events.
7.26.1. Waiting for Modem Signals
However, the previous syntax is still accepted. The behavior is the
same in either case.
- _________________________________________________________________
7.26.2. Waiting for File Events
lets you tell Kermit to wait the given amount of time (or until the
given time of day) for a file whose name is filename to be created,
deleted, or modified, respectively. The filename may not contain
- wildcards. If the specified event does not occur within the time
- limit, or if WAIT CANCELLATION is ON and you interrupt from the
- keyboard before the time is up, the WAIT command fails. If the event
- is MODIFICATION and the file does not exist, the command fails.
- Otherwise, if the given event occurs within the time limit, the
- command succeeds. Examples:
+ wildcards. If the specified event does not occur within the time limit,
+ or if WAIT CANCELLATION is ON and you interrupt from the keyboard
+ before the time is up, the WAIT command fails. If the event is
+ MODIFICATION and the file does not exist, the command fails. Otherwise,
+ if the given event occurs within the time limit, the command succeeds.
+ Examples:
WAIT 600 FILE DELETION oofa.tmp
Wait up to 10 minutes for file oofa.tmp to disappear.
Wait until just before midnight for the orders.db file to be
changed.
- Example: Suppose you want to have the current copy of /etc/motd on
- your screen at all times, and you want to hear a bell whenever it
- changes:
+ Example: Suppose you want to have the current copy of /etc/motd on your
+ screen at all times, and you want to hear a bell whenever it changes:
def \%f /etc/motd ; The file of interest.
while 1 { ; Loop forever...
heading is the time of the most recent event (including when the
program started).
- See [625]Section 1.10, where the \v(kbchar) variable is explained.
- This lets you modify a loop like the one above to also accept
+ See [638]Section 1.10, where the \v(kbchar) variable is explained. This
+ lets you modify a loop like the one above to also accept
single-character commands, which interrupt the WAIT, and dispatch
accordingly. For example:
}
}
- This lets you write event-driven applications that wait for up to
- three events at once: a file or modem event, a timeout, and a
- keystroke.
- _________________________________________________________________
+ This lets you write event-driven applications that wait for up to three
+ events at once: a file or modem event, a timeout, and a keystroke.
7.27. Relaxed FOR and SWITCH Syntax
appropriately to 1 or -1, depending on the values of the first two
variables.
- As with IF, the parentheses around the FOR-command control list must
- be set off by spaces (in the SWITCH command, the spaces are not
- required since the SWITCH expression is a single arithmetic
- expression).
+ As with IF, the parentheses around the FOR-command control list must be
+ set off by spaces (in the SWITCH command, the spaces are not required
+ since the SWITCH expression is a single arithmetic expression).
Also, outer braces around the command list are supplied automatically
if you omit them, e.g.:
FOR ( \%i 1 %n 1 ) echo \%i
- _________________________________________________________________
8. USING OTHER FILE TRANSFER PROTOCOLS
In C-Kermit 7.0, alternative protocols can be selected using switches.
- Switches are described in [626]Section 1.5; the use of
- protocol-selection switches is described in [627]Section 4.7.1.
+ Switches are described in [639]Section 1.5; the use of
+ protocol-selection switches is described in [640]Section 4.7.1.
Example:
send /binary /protocol:zmodem x.tar.gz
"Crz and Csz are Copyrighted shareware programs. Use of these
programs beyond a brief evaluation period requires registration.
- Please print the "mailer.rz" file, fill out the form and return
- same with your registration."
+ Please print the "mailer.rz" file, fill out the form and return same
+ with your registration."
To use the crzsz programs as your external XYZMODEM programs in
C-Kermit, follow the instructions in the book, but put a "c" before
connections, you might need to add the -e (Escape) option:
set protocol zmodem {csz -e %s} {csz -e -a %s} crz crz crz crz
- _________________________________________________________________
9. COMMAND-LINE OPTIONS
where a keyword (rather than a single letter) specifies the function,
and if an argument is to be included, it is separated by a colon (or
equal sign). Most of the new extended-format command-line options are
- only for use with the Internet Kermit Service Daemon; see the
- [628]IKSD Administration Guide for details. However, several of them
- are also general in nature:
+ only for use with the Internet Kermit Service Daemon; see the [641]IKSD
+ Administration Guide for details. However, several of them are also
+ general in nature:
--nointerrupts
Disables keyboard interrupts that are normally enabled, which
You can also give a list of up to 8 filenames by (a) enclosing
each filename in braces, and (b) enclosing the entire list in
braces. Example:
- --cdfile:{{./.readme}{READ.ME}{aaareadme.txt}{README}{read-this
- -first}} When a list is given, it is searched from left to
- right and the first file found is displayed. The default list
- for UNIX is:
+ --cdfile:{{./.readme}{READ.ME}{aaareadme.txt}{README}{read-this-
+ first}} When a list is given, it is searched from left to right
+ and the first file found is displayed. The default list for UNIX
+ is:
{{./.readme}{README.TXT}{READ.ME}}
- _________________________________________________________________
9.1. Command Line Personalities
- Beginning in version 7.0, if the C-Kermit binary is renamed to
- "telnet" (or TELNET.EXE, telnet.pr, etc, depending on the platform),
- it accepts the Telnet command line:
+ Beginning in version 7.0, if the C-Kermit binary is renamed to "telnet"
+ (or TELNET.EXE, telnet.pr, etc, depending on the platform), it accepts
+ the Telnet command line:
telnet [ host [ port ] ]
mv telnet oldtelnet
ln -ls /usr/local/bin/kermit telnet
- When installed in this manner, C-Kermit always reads its
- initialization file. If no host (and therefore no port) is given,
- C-Kermit starts in interactive prompting mode. If a host is given as
- the first command-line argument, C-Kermit makes a connection to it.
- The host argument can be an IP host name or address, or the name of a
- TCP/IP entry in your C-Kermit network directory.
+ When installed in this manner, C-Kermit always reads its initialization
+ file. If no host (and therefore no port) is given, C-Kermit starts in
+ interactive prompting mode. If a host is given as the first
+ command-line argument, C-Kermit makes a connection to it. The host
+ argument can be an IP host name or address, or the name of a TCP/IP
+ entry in your C-Kermit network directory.
If a port is given, it is used. If a port is not given, then if the
hostname was found in your network directory and port was also listed
used.
When C-Kermit is called "telnet" and it is invoked with a hostname on
- the command line, it exits automatically when the connection is
- closed. While the connection is open, however, you may escape back and
- forth as many times as you like, transfer files, etc.
+ the command line, it exits automatically when the connection is closed.
+ While the connection is open, however, you may escape back and forth as
+ many times as you like, transfer files, etc.
An rlogin personality is also available, but it is less useful, at
least in UNIX and VMS, where the Rlogin TCP port is privileged.
The new variable \v(name) indicates the name with which C-Kermit was
invoked ("kermit", "wermit", "k95", "telnet", etc).
- _________________________________________________________________
9.2. Built-in Help for Command Line Options
HELP EXTENDED-OPTION xxx
Gives help for the specified extended option.
- _________________________________________________________________
9.3. New Command-Line Options
Command-line options added since C-Kermit 6.0 are:
+
- (plus sign by itself): The next argument is the name of a
- script to execute; all subsequent arguments are ignored by
- C-Kermit itself, but passed to the script as top-level copies
- of \%1, \%2, etc; the \&_[] is also set accordingly. \%0 and
- \&_[0] become the name of the script file, rather than the
- pathname of the C-Kermit program, which is its normal value.
- Primarily for use in the top line of "Kerbang" scripts in UNIX
- (see [629]Section 7.19). Example from UNIX command line:
+ (plus sign by itself): The next argument is the name of a script
+ to execute; all subsequent arguments are ignored by C-Kermit
+ itself, but passed to the script as top-level copies of \%1,
+ \%2, etc; the \&_[] is also set accordingly. \%0 and \&_[0]
+ become the name of the script file, rather than the pathname of
+ the C-Kermit program, which is its normal value. Primarily for
+ use in the top line of "Kerbang" scripts in UNIX (see
+ [642]Section 7.19). Example from UNIX command line:
$ kermit [ regular kermit args ] + filename
GET (like -g), but send the incoming file to standard output.
Example: "kermit -G oofa.txt | lpr" retrieves a file from your
local computer (providing it is running a Kermit program that
- supports the autodownload feature and has it enabled) and
- prints it.
+ supports the autodownload feature and has it enabled) and prints
+ it.
-O
equivalent to -x (start up in server mode), but exits after the
- first client command has been executed (mnemonic: O = Only
- One). This one is handy replacing "kermit -x" in the
- "automatically start Kermit on the other end" string:
+ first client command has been executed (mnemonic: O = Only One).
+ This one is handy replacing "kermit -x" in the "automatically
+ start Kermit on the other end" string:
set protocol kermit {kermit -ir} {kermit -r} {kermit -x}
kermit -L -s "*.c"
In UNIX only, "kermit -L -s ." means to send the current
- directory tree. See [630]Sections 4.10 and [631]4.11 about
+ directory tree. See [643]Sections 4.10 and [644]4.11 about
recursive file transfer.
-V
- Equivalent to SET FILE PATTERNS OFF ([632]Section 4.3) and SET
- TRANSFER MODE MANUAL. In other words, take the FILE TYPE
- setting literally. For example, "kermit -VT oofa.bin" means
- send the file in Text mode, no matter what its name is and no
- matter whether a kindred spirit is recognized at the other end
- of the connection.
+ Equivalent to SET FILE PATTERNS OFF ([645]Section 4.3) and SET
+ TRANSFER MODE MANUAL. In other words, take the FILE TYPE setting
+ literally. For example, "kermit -VT oofa.bin" means send the
+ file in Text mode, no matter what its name is and no matter
+ whether a kindred spirit is recognized at the other end of the
+ connection.
-0
(digit zero) means "be 100% transparent in CONNECT mode". This
NONE, SET TERM ESCAPE DISABLED, SET TERM CHAR TRANSPARENT, SET
TERM AUTODOWNLOAD OFF, SET TERM APC OFF, SET TELOPT KERMIT
REFUSE REFUSE.
- _________________________________________________________________
10. C-KERMIT AND G-KERMIT
complexity and size over time to meet the needs and requests of its
users and the demands of the underlying technology as it changes.
- Eventually users begin to notice how big the application has grown,
- how much disk space it occupies, how long it takes to load, and they
- start to long for the good old days when it was lean and mean. Not
- long after that they begin asking for a "light" version that only does
- the basics with no frills.
+ Eventually users begin to notice how big the application has grown, how
+ much disk space it occupies, how long it takes to load, and they start
+ to long for the good old days when it was lean and mean. Not long after
+ that they begin asking for a "light" version that only does the basics
+ with no frills.
And so it is with C-Kermit. A "light" version of Kermit was released
(for UNIX only) in December 1999 under the GNU General Public License;
thus it is called G-Kermit (for GNU Kermit). All it does is send and
receive files, period. You can find it at:
- [633]http://www.columbia.edu/kermit/gkermit.html
+ [646]http://www.columbia.edu/kermit/gkermit.html
Where the C-Kermit 7.0 binary might be anywhere from 1 to 3 million
bytes in size, the G-Kermit binary ranges from 30K to 100K, depending
on the underlying architecture (RISC vs CISC, etc).
G-Kermit and C-Kermit may reside side-by-side on the same computer.
- G-Kermit does not make connections; it does not have a script
- language; it does not translate character sets. G-Kermit may be used
- instead of C-Kermit when:
+ G-Kermit does not make connections; it does not have a script language;
+ it does not translate character sets. G-Kermit may be used instead of
+ C-Kermit when:
* It is on the remote end.
* Files are to be transferred in binary mode or in text mode without
In such cases G-Kermit might be preferred since it generally starts up
faster, and yet transfers files just as fast on most (but not
necessarily all) kinds of connections; for example, it supports
- streaming ([634]Section 4.20).
+ streaming ([647]Section 4.20).
- G-Kermit is also handy for bootstrapping. It is easier to load on a
- new computer than C-Kermit -- it fits on a floppy diskette with plenty
- of room to spare. Thus if you have (say) an old PC running (say) SCO
- Xenix and no network connection, you can download the Xenix version of
+ G-Kermit is also handy for bootstrapping. It is easier to load on a new
+ computer than C-Kermit -- it fits on a floppy diskette with plenty of
+ room to spare. Thus if you have (say) an old PC running (say) SCO Xenix
+ and no network connection, you can download the Xenix version of
G-Kermit to (say) a DOS or Windows PC, copy it to diskette, read the
diskette on Xenix with "dosread", and then use G-Kermit to receive
C-Kermit (which does not fit on a diskette). If diskettes aren't an
option, other bootstrapping methods are possible too -- see the
- [635]G-Kermit web page for details.
- _________________________________________________________________
+ [648]G-Kermit web page for details.
III. APPENDICES
253 15/13 375 FD Right guillemot
254 15/14 376 FE Plus or minus sign
255 15/15 377 FF (Undefined)
- _________________________________________________________________
III.1.2. Greek Character Sets
253 15/13 375 FD upsilon with accent
254 15/14 376 FE omega with accent
255 15/15 377 FF (UNUSED)
- _________________________________________________________________
III.1.2.2. The ELOT 927 Character Set
125 07/13 175 7D RIGHT CURLY BRACKET, RIGHT BRACE
126 07/14 176 7E TILDE
127 07/15 177 7F RUBOUT, DELETE
- _________________________________________________________________
III.1.2.3. PC Code Page 869
(to be filled in...)
- _________________________________________________________________
III.2. Updated Country Codes
Ex-USSR Country Codes Profile
4 April 1997
- Below is a summary of the country codes that have formed in the wake
- of the USSR dissolution, along with some updated findings and reports.
+ Below is a summary of the country codes that have formed in the wake of
+ the USSR dissolution, along with some updated findings and reports.
Additional or corrected information on any of these nations would be
welcome (c/o dleibold@else.net).
* Kyrgyz Republic country code 996 will take effect, at least in
* Uzbekistan has its own country code assignment, but I have no
information if this is in service yet or what implementation dates
have been set.
- * Kazakstan does not have a known separate country code assignment
- at present. It remains in country code 7 for the time being.
+ * Kazakstan does not have a known separate country code assignment at
+ present. It remains in country code 7 for the time being.
* Russia seems destined to keep country code 7.
- * Recent news reports speak of some agreements forming between
- Russia and Belarus. While there is no outright reunification yet,
- there is expected to be much closer ties between the two nations.
- Whether this will lead to a reunification of telephone codes
- remains to be seen.
+ * Recent news reports speak of some agreements forming between Russia
+ and Belarus. While there is no outright reunification yet, there is
+ expected to be much closer ties between the two nations. Whether
+ this will lead to a reunification of telephone codes remains to be
+ seen.
In the table, "Effective" means the date at which the country code
began service (which could vary according to the nation). "Mandatory"
- means the date at which the country code 7 is invalid for calls to
- that nation. There are a number of question marks since exact dates
- have not been collected in all cases.
+ means the date at which the country code 7 is invalid for calls to that
+ nation. There are a number of question marks since exact dates have not
+ been collected in all cases.
CC Nation Effective Mandatory Notes
Details courtesy Toby Nixon, ITU, Stentor (Canada), CRTC (Canada),
TELECOM Digest (including information collected for the country code
listings).
- _________________________________________________________________
IV. ERRATA & CORRIGENDA
- The following errors in [636]Using C-Kermit, Second Edition, first
+ The following errors in [649]Using C-Kermit, Second Edition, first
printing, have been noted.
First, some missing acknowledgements for C-Kermit 6.0: JE Jones of
Lucas Hart for help with VMS and Digital UNIX, Igor Kovalenko for his
help with QNX. And later, to Susan Kleinmann for her help with Debian
Linux packaging; Patrick Volkerding for his help with Slackware Linux
- packaging; Jim Knoble for his help with Red Hat Linux packaging; and
- to dozens of others for sending individual C-Kermit binaries for
- varied and diverse platforms.
+ packaging; Jim Knoble for his help with Red Hat Linux packaging; and to
+ dozens of others for sending individual C-Kermit binaries for varied
+ and diverse platforms.
- Thanks to James Spath for both binaries and reporting many of the
- typos noted below. Also to Dat Thuc Nguyen for spotting several typos.
+ Thanks to James Spath for both binaries and reporting many of the typos
+ noted below. Also to Dat Thuc Nguyen for spotting several typos.
PAGE REMARKS
COVER "COS" is a misprint. There is no COS. Pretend it says "SCO" or "VOS".
393 \Fverify() description. The 3rd sentence could be stated more clearly
as "If all characters in string2 are also in string1, 0 is returned."
398 Copying \ffiles() results to an array before is not required as of
- C-Kermit 7.0 (see [637]Section 7.3).
+ C-Kermit 7.0 (see [650]Section 7.3).
403 In "(\%a + 3) * (\%b 5)", a minus sign is missing between b and 5.
407 C-Kermit 7.0 no longer supports multiline GET. Change
"get, \%1, \%2" to "get {\%1} {\%2}" or "get /as:{\%2} {\%1}".
8. RxD+
Note the "balanced pairs" for Receive Data (RxD) and Transmit Data
- (TxD), and the utter lack of modem signals. These connectors follow
- the RS-423 standard, rather than RS-232. In some arrangements, Pin 1
- is used for DTR and Pin 2 for CD; in others Pin 1 is RTS and Pin 2 is
- CTS.
+ (TxD), and the utter lack of modem signals. These connectors follow the
+ RS-423 standard, rather than RS-232. In some arrangements, Pin 1 is
+ used for DTR and Pin 2 for CD; in others Pin 1 is RTS and Pin 2 is CTS.
Please send reports of other errors to the authors, as well as
suggestions for improvements, additional index entries, and any other
comments:
- [638]kermit@columbia.edu
- _________________________________________________________________
+ [651]kermit@columbia.edu
APPENDIX V. ADDITIONAL COPYRIGHT NOTICES
/* */
/* Copyright (c) 1995 by Oy Online Solutions Ltd. */
/* */
-/* Distribution of this source code is strictly forbbidden. Use of this */
+/* Distribution of this source code is strictly forbidden. Use of this */
/* source code is granted to the University of Columbia C-Kermit project */
/* to be distributed in binary format only. Please familiarize yourself */
/* with the accompanying LICENSE.P file. */
used for Xmodem, Ymodem, and Zmodem protocol in Kermit 95 (p95.dll,
p2.dll)
- _________________________________________________________________
Copyright (c) 1997 Stanford University
The use of this software for revenue-generating purposes may require a
license from the owners of the underlying intellectual property.
- Specifically, the SRP-3 protocol may not be used for
- revenue-generating purposes without a license.
+ Specifically, the SRP-3 protocol may not be used for revenue-generating
+ purposes without a license.
- Within that constraint, permission to use, copy, modify, and
- distribute this software and its documentation for any purpose is
- hereby granted without fee, provided that the above copyright notices
- and this permission notice appear in all copies of the software and
- related documentation.
+ Within that constraint, permission to use, copy, modify, and distribute
+ this software and its documentation for any purpose is hereby granted
+ without fee, provided that the above copyright notices and this
+ permission notice appear in all copies of the software and related
+ documentation.
THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
SOFTWARE.
- Used for Secure Remote Password (TM) protocol (SRP) in C-Kermit,
- Kermit 95 (k95.exe, k2.exe, k95crypt.dll, k2crypt.dll)
- _________________________________________________________________
+ Used for Secure Remote Password (TM) protocol (SRP) in C-Kermit, Kermit
+ 95 (k95.exe, k2.exe, k95crypt.dll, k2crypt.dll)
- Copyright 1990 by the Massachusetts Institute of Technology. All
- Rights Reserved.
+ Copyright 1990 by the Massachusetts Institute of Technology. All Rights
+ Reserved.
- Export of this software from the United States of America may require
- a specific license from the United States Government. It is the
+ Export of this software from the United States of America may require a
+ specific license from the United States Government. It is the
responsibility of any person or organization contemplating export to
obtain such a license before exporting.
- WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
- distribute this software and its documentation for any purpose and
- without fee is hereby granted, provided that the above copyright
- notice appear in all copies and that both that copyright notice and
- this permission notice appear in supporting documentation, and that
- the name of M.I.T. not be used in advertising or publicity pertaining
- to distribution of the software without specific, written prior
- permission. M.I.T. makes no representations about the suitability of
- this software for any purpose. It is provided "as is" without express
- or implied warranty.
+ WITHIN THAT CONSTRAINT, permission to use, copy, modify, and distribute
+ this software and its documentation for any purpose and without fee is
+ hereby granted, provided that the above copyright notice appear in all
+ copies and that both that copyright notice and this permission notice
+ appear in supporting documentation, and that the name of M.I.T. not be
+ used in advertising or publicity pertaining to distribution of the
+ software without specific, written prior permission. M.I.T. makes no
+ representations about the suitability of this software for any purpose.
+ It is provided "as is" without express or implied warranty.
Used for Telnet Authentication Option, Telnet Encryption Option, and
Kerberos (TM) authentication in C-Kermit, Kermit 95 (k95.exe, k2.exe,
k95crypt.dll, k2crypt.dll)
- _________________________________________________________________
Copyright (c) 1991, 1993 The Regents of the University of California.
All rights reserved.
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the
distribution.
3. All advertising materials mentioning features or use of this
software must display the following acknowledgement:
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
- THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS''
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Used for Telnet Authentication Option, Telnet Encryption Option, and
Kerberos (TM) authentication in C-Kermit, Kermit 95 (k95.exe, k2.exe,
k95crypt.dll, k2crypt.dll)
- _________________________________________________________________
Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) All rights
reserved.
with MIT's libdes.
This library is free for commercial and non-commercial use as long as
- the following conditions are aheared to. The following conditions
- apply to all code found in this distribution.
+ the following conditions are aheared to. The following conditions apply
+ to all code found in this distribution.
Copyright remains Eric Young's, and as such any Copyright notices in
the code are not to be removed. If this package is used in a product,
1. Redistributions of source code must retain the copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the
distribution.
3. All advertising materials mentioning features or use of this
software must display the following acknowledgement: This product
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
- IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- The license and distribution terms for any publically available
- version or derivative of this code cannot be changed. i.e. this code
- cannot simply be copied and put under another distrubution license
- [including the GNU Public License.]
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+
+ The license and distribution terms for any publically available version
+ or derivative of this code cannot be changed. i.e. this code cannot
+ simply be copied and put under another distribution license [including
+ the GNU Public License.]
The reason behind this being stated in this direct manner is past
- experience in code simply being copied and the attribution removed
- from it and then being distributed as part of other packages. This
+ experience in code simply being copied and the attribution removed from
+ it and then being distributed as part of other packages. This
implementation was a non-trivial and unpaid effort.
Used DES encryption in Kermit 95 (k95crypt.dll, k2crypt.dll)
- _________________________________________________________________
+ __________________________________________________________________
* This is version 1.1 of CryptoLib
*
Used for Big Number library in Kermit 95 (k95crypt.dll, k2crypt.dll).
- [ [639]Top ] [ [640]C-Kermit ] [ [641]Kermit Home ]
- _________________________________________________________________
+ [ [652]Top ] [ [653]C-Kermit ] [ [654]Kermit Home ]
+ __________________________________________________________________
- CKERMIT70.HTM / The Kermit Project / Columbia University / 8 Feb 2000
+ CKERMIT70.HTM / The Kermit Project / Columbia University / 8 Feb 2000 /
+ Last update: 8 Aug 2011
References
- 1. http://www.columbia.edu/kermit/ckermit70.html#contents
- 2. http://www.columbia.edu/kermit/ckermit.html
- 3. http://www.columbia.edu/kermit/index.htm
- 4. mailto:kermit-support@columbia.edu
- 5. http://www.columbia.edu/kermit/
- 6. http://www.kermit-project.org/
- 7. http://www.columbia.nyc.ny.us/kermit/
- 8. ftp://kermit.columbia.edu/kermit/f/COPYING.TXT
- 9. ftp://kermit.columbia.edu/kermit/f/ckcmai.c
- 10. http://www.columbia.edu/kermit/ckermit70.html#xv
- 11. http://www.columbia.edu/kermit/ckb2.htm
- 12. ftp://kermit.columbia.edu/kermit/f/ckcbwr.txt
- 13. ftp://kermit.columbia.edu/kermit/f/ckubwr.txt
- 14. ftp://kermit.columbia.edu/kermit/f/ckvbwr.txt
- 15. ftp://kermit.columbia.edu/kermit/f/ckubwr.txt
- 16. ftp://kermit.columbia.edu/kermit/f/ckermit70.txt
- 17. ftp://kermit.columbia.edu/kermit/f/security.txt
- 18. http://www.columbia.edu/kermit/security.htm
- 19. ftp://kermit.columbia.edu/kermit/f/iksd.txt
- 20. http://www.columbia.edu/kermit/iksd.htm
- 21. http://www.columbia.edu/kermit/cuiksd.htm
- 22. ftp://kermit.columbia.edu/kermit/f/telnet.txt
- 23. http://www.columbia.edu/kermit/telnet.htm
- 24. ftp://kermit.columbia.edu/kermit/f/COPYING.TXT
- 25. http://www.columbia.edu/kermit/k95.html
- 26. http://www.opensource.org/
- 27. http://www.columbia.edu/kermit/ckb2.htm
- 28. http://www.columbia.edu/kermit/ckermit70.html#xi
- 29. http://www.columbia.edu/kermit/ckermit70.html#xii
- 30. http://www.columbia.edu/kermit/ckermit70.html#x0
- 31. http://www.columbia.edu/kermit/ckermit70.html#x1
- 32. http://www.columbia.edu/kermit/ckermit70.html#x1.0
- 33. http://www.columbia.edu/kermit/ckermit70.html#x1.1
- 34. http://www.columbia.edu/kermit/ckermit70.html#x1.2
- 35. http://www.columbia.edu/kermit/ckermit70.html#x1.3
- 36. http://www.columbia.edu/kermit/ckermit70.html#x1.4
- 37. http://www.columbia.edu/kermit/ckermit70.html#x1.5
- 38. http://www.columbia.edu/kermit/ckermit70.html#x1.5.1
- 39. http://www.columbia.edu/kermit/ckermit70.html#x1.5.2
- 40. http://www.columbia.edu/kermit/ckermit70.html#x1.5.3
- 41. http://www.columbia.edu/kermit/ckermit70.html#x1.5.4
- 42. http://www.columbia.edu/kermit/ckermit70.html#x1.5.5
- 43. http://www.columbia.edu/kermit/ckermit70.html#x1.6
- 44. http://www.columbia.edu/kermit/ckermit70.html#x1.7
- 45. http://www.columbia.edu/kermit/ckermit70.html#x1.8
- 46. http://www.columbia.edu/kermit/ckermit70.html#x1.9
- 47. http://www.columbia.edu/kermit/ckermit70.html#x1.10
- 48. http://www.columbia.edu/kermit/ckermit70.html#x1.11
- 49. http://www.columbia.edu/kermit/ckermit70.html#x1.11.1
- 50. http://www.columbia.edu/kermit/ckermit70.html#x1.11.2
- 51. http://www.columbia.edu/kermit/ckermit70.html#x1.11.3
- 52. http://www.columbia.edu/kermit/ckermit70.html#x1.11.4
- 53. http://www.columbia.edu/kermit/ckermit70.html#x1.11.5
- 54. http://www.columbia.edu/kermit/ckermit70.html#x1.11.6
- 55. http://www.columbia.edu/kermit/ckermit70.html#x1.11.7
- 56. http://www.columbia.edu/kermit/ckermit70.html#x1.12
- 57. http://www.columbia.edu/kermit/ckermit70.html#x1.13
- 58. http://www.columbia.edu/kermit/ckermit70.html#x1.14
- 59. http://www.columbia.edu/kermit/ckermit70.html#x1.15
- 60. http://www.columbia.edu/kermit/ckermit70.html#x1.16
- 61. http://www.columbia.edu/kermit/ckermit70.html#x1.17
- 62. http://www.columbia.edu/kermit/ckermit70.html#x1.18
- 63. http://www.columbia.edu/kermit/ckermit70.html#x1.19
- 64. http://www.columbia.edu/kermit/ckermit70.html#x1.20
- 65. http://www.columbia.edu/kermit/ckermit70.html#x1.21
- 66. http://www.columbia.edu/kermit/ckermit70.html#x1.22
- 67. http://www.columbia.edu/kermit/ckermit70.html#x1.22.1
- 68. http://www.columbia.edu/kermit/ckermit70.html#x1.22.2
- 69. http://www.columbia.edu/kermit/ckermit70.html#x1.22.3
- 70. http://www.columbia.edu/kermit/ckermit70.html#x1.22.4
- 71. http://www.columbia.edu/kermit/ckermit70.html#x1.22.5
- 72. http://www.columbia.edu/kermit/ckermit70.html#x1.22.6
- 73. http://www.columbia.edu/kermit/ckermit70.html#x1.22.7
- 74. http://www.columbia.edu/kermit/ckermit70.html#x1.22.8
- 75. http://www.columbia.edu/kermit/ckermit70.html#x1.23
- 76. http://www.columbia.edu/kermit/ckermit70.html#x1.24
- 77. http://www.columbia.edu/kermit/ckermit70.html#x2
- 78. http://www.columbia.edu/kermit/ckermit70.html#x2.0
- 79. http://www.columbia.edu/kermit/ckermit70.html#x2.1
- 80. http://www.columbia.edu/kermit/ckermit70.html#x2.1.1
- 81. http://www.columbia.edu/kermit/ckermit70.html#x2.1.2
- 82. http://www.columbia.edu/kermit/ckermit70.html#x2.1.3
- 83. http://www.columbia.edu/kermit/ckermit70.html#x2.1.4
- 84. http://www.columbia.edu/kermit/ckermit70.html#x2.1.5
- 85. http://www.columbia.edu/kermit/ckermit70.html#x2.1.6
- 86. http://www.columbia.edu/kermit/ckermit70.html#x2.1.7
- 87. http://www.columbia.edu/kermit/ckermit70.html#x2.1.8
- 88. http://www.columbia.edu/kermit/ckermit70.html#x2.1.9
- 89. http://www.columbia.edu/kermit/ckermit70.html#x2.1.10
- 90. http://www.columbia.edu/kermit/ckermit70.html#x2.1.11
- 91. http://www.columbia.edu/kermit/ckermit70.html#x2.1.12
- 92. http://www.columbia.edu/kermit/ckermit70.html#x2.1.13
- 93. http://www.columbia.edu/kermit/ckermit70.html#x2.1.14
- 94. http://www.columbia.edu/kermit/ckermit70.html#x2.1.15
- 95. http://www.columbia.edu/kermit/ckermit70.html#x2.1.16
- 96. http://www.columbia.edu/kermit/ckermit70.html#x2.2
- 97. http://www.columbia.edu/kermit/ckermit70.html#x2.2.1
- 98. http://www.columbia.edu/kermit/ckermit70.html#x2.2.2
- 99. http://www.columbia.edu/kermit/ckermit70.html#x2.3
- 100. http://www.columbia.edu/kermit/ckermit70.html#x2.3.0
- 101. http://www.columbia.edu/kermit/ckermit70.html#x2.3.1
- 102. http://www.columbia.edu/kermit/ckermit70.html#x2.3.2
- 103. http://www.columbia.edu/kermit/ckermit70.html#x2.3.3
- 104. http://www.columbia.edu/kermit/ckermit70.html#x2.3.4
- 105. http://www.columbia.edu/kermit/ckermit70.html#x2.3.5
- 106. http://www.columbia.edu/kermit/ckermit70.html#x2.3.6
- 107. http://www.columbia.edu/kermit/ckermit70.html#x2.4
- 108. http://www.columbia.edu/kermit/ckermit70.html#x2.5
- 109. http://www.columbia.edu/kermit/ckermit70.html#x2.6
- 110. http://www.columbia.edu/kermit/ckermit70.html#x2.7
- 111. http://www.columbia.edu/kermit/ckermit70.html#x2.7.0
- 112. http://www.columbia.edu/kermit/ckermit70.html#x2.7.1
- 113. http://www.columbia.edu/kermit/ckermit70.html#x2.7.2
- 114. http://www.columbia.edu/kermit/ckermit70.html#x2.7.3
- 115. http://www.columbia.edu/kermit/ckermit70.html#x2.7.4
- 116. http://www.columbia.edu/kermit/ckermit70.html#x2.7.4.1
- 117. http://www.columbia.edu/kermit/ckermit70.html#x2.7.4.2
- 118. http://www.columbia.edu/kermit/ckermit70.html#x2.7.4.3
- 119. http://www.columbia.edu/kermit/ckermit70.html#x2.7.4.4
- 120. http://www.columbia.edu/kermit/ckermit70.html#x2.7.4.5
- 121. http://www.columbia.edu/kermit/ckermit70.html#x2.8
- 122. http://www.columbia.edu/kermit/ckermit70.html#x2.9
- 123. http://www.columbia.edu/kermit/ckermit70.html#x2.9.1
- 124. http://www.columbia.edu/kermit/ckermit70.html#x2.9.2
- 125. http://www.columbia.edu/kermit/ckermit70.html#x2.10
- 126. http://www.columbia.edu/kermit/ckermit70.html#x2.11
- 127. http://www.columbia.edu/kermit/ckermit70.html#x2.12
- 128. http://www.columbia.edu/kermit/ckermit70.html#x2.13
- 129. http://www.columbia.edu/kermit/ckermit70.html#x2.14
- 130. http://www.columbia.edu/kermit/ckermit70.html#x2.15
- 131. http://www.columbia.edu/kermit/ckermit70.html#x3
- 132. http://www.columbia.edu/kermit/ckermit70.html#x3.1
- 133. http://www.columbia.edu/kermit/ckermit70.html#x3.2
- 134. http://www.columbia.edu/kermit/ckermit70.html#x3.3
- 135. http://www.columbia.edu/kermit/ckermit70.html#x3.4
- 136. http://www.columbia.edu/kermit/ckermit70.html#x4
- 137. http://www.columbia.edu/kermit/ckermit70.html#x4.0
- 138. http://www.columbia.edu/kermit/ckermit70.html#x4.1
- 139. http://www.columbia.edu/kermit/ckermit70.html#x4.1.1
- 140. http://www.columbia.edu/kermit/ckermit70.html#x4.1.2
- 141. http://www.columbia.edu/kermit/ckermit70.html#x4.1.3
- 142. http://www.columbia.edu/kermit/ckermit70.html#x4.2
- 143. http://www.columbia.edu/kermit/ckermit70.html#x4.2.1
- 144. http://www.columbia.edu/kermit/ckermit70.html#x4.2.1.1
- 145. http://www.columbia.edu/kermit/ckermit70.html#x4.2.1.2
- 146. http://www.columbia.edu/kermit/ckermit70.html#x4.2.1.3
- 147. http://www.columbia.edu/kermit/ckermit70.html#x4.2.2
- 148. http://www.columbia.edu/kermit/ckermit70.html#x4.2.2.1
- 149. http://www.columbia.edu/kermit/ckermit70.html#x4.2.2.2
- 150. http://www.columbia.edu/kermit/ckermit70.html#x4.2.3
- 151. http://www.columbia.edu/kermit/ckermit70.html#x4.2.3.1
- 152. http://www.columbia.edu/kermit/ckermit70.html#x4.2.3.2
- 153. http://www.columbia.edu/kermit/ckermit70.html#x4.2.4
- 154. http://www.columbia.edu/kermit/ckermit70.html#x4.2.5
- 155. http://www.columbia.edu/kermit/ckermit70.html#x4.2.6
- 156. http://www.columbia.edu/kermit/ckermit70.html#x4.2.7
- 157. http://www.columbia.edu/kermit/ckermit70.html#x4.2.8
- 158. http://www.columbia.edu/kermit/ckermit70.html#x4.2.8.1
- 159. http://www.columbia.edu/kermit/ckermit70.html#x4.2.8.2
- 160. http://www.columbia.edu/kermit/ckermit70.html#x4.2.8.3
- 161. http://www.columbia.edu/kermit/ckermit70.html#x4.2.8.4
- 162. http://www.columbia.edu/kermit/ckermit70.html#x4.3
- 163. http://www.columbia.edu/kermit/ckermit70.html#x4.3.1
- 164. http://www.columbia.edu/kermit/ckermit70.html#x4.3.2
- 165. http://www.columbia.edu/kermit/ckermit70.html#x4.3.3
- 166. http://www.columbia.edu/kermit/ckermit70.html#x4.3.4
- 167. http://www.columbia.edu/kermit/ckermit70.html#x4.4
- 168. http://www.columbia.edu/kermit/ckermit70.html#x4.4.1
- 169. http://www.columbia.edu/kermit/ckermit70.html#x4.4.1.1
- 170. http://www.columbia.edu/kermit/ckermit70.html#x4.4.1.2
- 171. http://www.columbia.edu/kermit/ckermit70.html#x4.4.2
- 172. http://www.columbia.edu/kermit/ckermit70.html#x4.4.2.1
- 173. http://www.columbia.edu/kermit/ckermit70.html#x4.4.2.1.1
- 174. http://www.columbia.edu/kermit/ckermit70.html#x4.4.2.1.2
- 175. http://www.columbia.edu/kermit/ckermit70.html#x4.4.2.2
- 176. http://www.columbia.edu/kermit/ckermit70.html#x4.5
- 177. http://www.columbia.edu/kermit/ckermit70.html#x4.5.1
- 178. http://www.columbia.edu/kermit/ckermit70.html#x4.5.2
- 179. http://www.columbia.edu/kermit/ckermit70.html#x4.5.2.1
- 180. http://www.columbia.edu/kermit/ckermit70.html#x4.5.2.2
- 181. http://www.columbia.edu/kermit/ckermit70.html#x4.5.3
- 182. http://www.columbia.edu/kermit/ckermit70.html#x4.5.4
- 183. http://www.columbia.edu/kermit/ckermit70.html#x4.6
- 184. http://www.columbia.edu/kermit/ckermit70.html#x4.7
- 185. http://www.columbia.edu/kermit/ckermit70.html#x4.7.1
- 186. http://www.columbia.edu/kermit/ckermit70.html#x4.7.2
- 187. http://www.columbia.edu/kermit/ckermit70.html#x4.7.3
- 188. http://www.columbia.edu/kermit/ckermit70.html#x4.8
- 189. http://www.columbia.edu/kermit/ckermit70.html#x4.8.1
- 190. http://www.columbia.edu/kermit/ckermit70.html#x4.8.2
- 191. http://www.columbia.edu/kermit/ckermit70.html#x4.9
- 192. http://www.columbia.edu/kermit/ckermit70.html#x4.9.1
- 193. http://www.columbia.edu/kermit/ckermit70.html#x4.9.2
- 194. http://www.columbia.edu/kermit/ckermit70.html#x4.9.3
- 195. http://www.columbia.edu/kermit/ckermit70.html#x4.10
- 196. http://www.columbia.edu/kermit/ckermit70.html#x4.11
- 197. http://www.columbia.edu/kermit/ckermit70.html#x4.11.1
- 198. http://www.columbia.edu/kermit/ckermit70.html#x4.11.2
- 199. http://www.columbia.edu/kermit/ckermit70.html#x4.11.3
- 200. http://www.columbia.edu/kermit/ckermit70.html#x4.11.4
- 201. http://www.columbia.edu/kermit/ckermit70.html#x4.11.5
- 202. http://www.columbia.edu/kermit/ckermit70.html#x4.11.6
- 203. http://www.columbia.edu/kermit/ckermit70.html#x4.12
- 204. http://www.columbia.edu/kermit/ckermit70.html#x4.13
- 205. http://www.columbia.edu/kermit/ckermit70.html#x4.14
- 206. http://www.columbia.edu/kermit/ckermit70.html#x4.15
- 207. http://www.columbia.edu/kermit/ckermit70.html#x4.16
- 208. http://www.columbia.edu/kermit/ckermit70.html#x4.17
- 209. http://www.columbia.edu/kermit/ckermit70.html#x4.17.1
- 210. http://www.columbia.edu/kermit/ckermit70.html#x4.17.2
- 211. http://www.columbia.edu/kermit/ckermit70.html#x4.18
- 212. http://www.columbia.edu/kermit/ckermit70.html#x4.19
- 213. http://www.columbia.edu/kermit/ckermit70.html#x4.20
- 214. http://www.columbia.edu/kermit/ckermit70.html#x4.20.1
- 215. http://www.columbia.edu/kermit/ckermit70.html#x4.20.2
- 216. http://www.columbia.edu/kermit/ckermit70.html#x4.20.2.1
- 217. http://www.columbia.edu/kermit/ckermit70.html#x4.20.2.2
- 218. http://www.columbia.edu/kermit/ckermit70.html#x4.20.2.3
- 219. http://www.columbia.edu/kermit/ckermit70.html#x4.20.2.4
- 220. http://www.columbia.edu/kermit/ckermit70.html#x4.20.2.5
- 221. http://www.columbia.edu/kermit/ckermit70.html#x4.20.3
- 222. http://www.columbia.edu/kermit/ckermit70.html#x4.21
- 223. http://www.columbia.edu/kermit/ckermit70.html#x4.22
- 224. http://www.columbia.edu/kermit/ckermit70.html#x4.22.1
- 225. http://www.columbia.edu/kermit/ckermit70.html#x4.22.2
- 226. http://www.columbia.edu/kermit/ckermit70.html#x4.22.3
- 227. http://www.columbia.edu/kermit/ckermit70.html#x4.22.4
- 228. http://www.columbia.edu/kermit/ckermit70.html#x4.22.5
- 229. http://www.columbia.edu/kermit/ckermit70.html#x4.22.6
- 230. http://www.columbia.edu/kermit/ckermit70.html#x4.22.7
- 231. http://www.columbia.edu/kermit/ckermit70.html#x4.22.8
- 232. http://www.columbia.edu/kermit/ckermit70.html#x4.23
- 233. http://www.columbia.edu/kermit/ckermit70.html#x4.24
- 234. http://www.columbia.edu/kermit/ckermit70.html#x4.25
- 235. http://www.columbia.edu/kermit/ckermit70.html#x5
- 236. http://www.columbia.edu/kermit/ckermit70.html#x5.0
- 237. http://www.columbia.edu/kermit/ckermit70.html#x5.1
- 238. http://www.columbia.edu/kermit/ckermit70.html#x5.2
- 239. http://www.columbia.edu/kermit/ckermit70.html#x5.3
- 240. http://www.columbia.edu/kermit/ckermit70.html#x5.3.1
- 241. http://www.columbia.edu/kermit/ckermit70.html#x5.3.2
- 242. http://www.columbia.edu/kermit/ckermit70.html#x5.4
- 243. http://www.columbia.edu/kermit/ckermit70.html#x5.5
- 244. http://www.columbia.edu/kermit/ckermit70.html#x5.6
- 245. http://www.columbia.edu/kermit/ckermit70.html#x5.7
- 246. http://www.columbia.edu/kermit/ckermit70.html#x6
- 247. http://www.columbia.edu/kermit/ckermit70.html#x6.0
- 248. http://www.columbia.edu/kermit/ckermit70.html#x6.1
- 249. http://www.columbia.edu/kermit/ckermit70.html#x6.2
- 250. http://www.columbia.edu/kermit/ckermit70.html#x6.3
- 251. http://www.columbia.edu/kermit/ckermit70.html#x6.4
- 252. http://www.columbia.edu/kermit/ckermit70.html#x6.5
- 253. http://www.columbia.edu/kermit/ckermit70.html#x6.6
- 254. http://www.columbia.edu/kermit/ckermit70.html#x6.6.1
- 255. http://www.columbia.edu/kermit/ckermit70.html#x6.6.2
- 256. http://www.columbia.edu/kermit/ckermit70.html#x6.6.2
- 257. http://www.columbia.edu/kermit/ckermit70.html#x6.6.3
- 258. http://www.columbia.edu/kermit/ckermit70.html#x6.6.4
- 259. http://www.columbia.edu/kermit/ckermit70.html#x6.6.5
- 260. http://www.columbia.edu/kermit/ckermit70.html#x6.6.5.1
- 261. http://www.columbia.edu/kermit/ckermit70.html#x6.6.5.2
- 262. http://www.columbia.edu/kermit/ckermit70.html#x6.6.5.3
- 263. http://www.columbia.edu/kermit/ckermit70.html#x6.6.5.4
- 264. http://www.columbia.edu/kermit/ckermit70.html#x6.6.5.5
- 265. http://www.columbia.edu/kermit/ckermit70.html#x6.7
- 266. http://www.columbia.edu/kermit/ckermit70.html#x7
- 267. http://www.columbia.edu/kermit/ckermit70.html#x7.0
- 268. http://www.columbia.edu/kermit/ckermit70.html#x7.1
- 269. http://www.columbia.edu/kermit/ckermit70.html#x7.1.1
- 270. http://www.columbia.edu/kermit/ckermit70.html#x7.1.2
- 271. http://www.columbia.edu/kermit/ckermit70.html#x7.1.3
- 272. http://www.columbia.edu/kermit/ckermit70.html#x7.1.4
- 273. http://www.columbia.edu/kermit/ckermit70.html#x7.2
- 274. http://www.columbia.edu/kermit/ckermit70.html#x7.3
- 275. http://www.columbia.edu/kermit/ckermit70.html#x7.4
- 276. http://www.columbia.edu/kermit/ckermit70.html#x7.5
- 277. http://www.columbia.edu/kermit/ckermit70.html#x7.6
- 278. http://www.columbia.edu/kermit/ckermit70.html#x7.7
- 279. http://www.columbia.edu/kermit/ckermit70.html#x7.8
- 280. http://www.columbia.edu/kermit/ckermit70.html#x7.9
- 281. http://www.columbia.edu/kermit/ckermit70.html#x7.9.1
- 282. http://www.columbia.edu/kermit/ckermit70.html#x7.9.2
- 283. http://www.columbia.edu/kermit/ckermit70.html#x7.10
- 284. http://www.columbia.edu/kermit/ckermit70.html#x7.10.1
- 285. http://www.columbia.edu/kermit/ckermit70.html#x7.10.2
- 286. http://www.columbia.edu/kermit/ckermit70.html#x7.10.3
- 287. http://www.columbia.edu/kermit/ckermit70.html#x7.10.4
- 288. http://www.columbia.edu/kermit/ckermit70.html#x7.10.5
- 289. http://www.columbia.edu/kermit/ckermit70.html#x7.10.6
- 290. http://www.columbia.edu/kermit/ckermit70.html#x7.10.7
- 291. http://www.columbia.edu/kermit/ckermit70.html#x7.10.8
- 292. http://www.columbia.edu/kermit/ckermit70.html#x7.10.9
- 293. http://www.columbia.edu/kermit/ckermit70.html#x7.10.10
- 294. http://www.columbia.edu/kermit/ckermit70.html#x7.11
- 295. http://www.columbia.edu/kermit/ckermit70.html#x7.12
- 296. http://www.columbia.edu/kermit/ckermit70.html#x7.13
- 297. http://www.columbia.edu/kermit/ckermit70.html#x7.14
- 298. http://www.columbia.edu/kermit/ckermit70.html#x7.15
- 299. http://www.columbia.edu/kermit/ckermit70.html#x7.16
- 300. http://www.columbia.edu/kermit/ckermit70.html#x7.17
- 301. http://www.columbia.edu/kermit/ckermit70.html#x7.18
- 302. http://www.columbia.edu/kermit/ckermit70.html#x7.19
- 303. http://www.columbia.edu/kermit/ckermit70.html#x7.20
- 304. http://www.columbia.edu/kermit/ckermit70.html#x7.20.1
- 305. http://www.columbia.edu/kermit/ckermit70.html#x7.20.2
- 306. http://www.columbia.edu/kermit/ckermit70.html#x7.21
- 307. http://www.columbia.edu/kermit/ckermit70.html#x7.22
- 308. http://www.columbia.edu/kermit/ckermit70.html#x7.23
- 309. http://www.columbia.edu/kermit/ckermit70.html#x7.24
- 310. http://www.columbia.edu/kermit/ckermit70.html#x7.25
- 311. http://www.columbia.edu/kermit/ckermit70.html#x7.26
- 312. http://www.columbia.edu/kermit/ckermit70.html#x7.26.1
- 313. http://www.columbia.edu/kermit/ckermit70.html#x7.26.2
- 314. http://www.columbia.edu/kermit/ckermit70.html#x7.27
- 315. http://www.columbia.edu/kermit/ckermit70.html#x8
- 316. http://www.columbia.edu/kermit/ckermit70.html#x9
- 317. http://www.columbia.edu/kermit/ckermit70.html#x9.0
- 318. http://www.columbia.edu/kermit/ckermit70.html#x9.1
- 319. http://www.columbia.edu/kermit/ckermit70.html#x9.2
- 320. http://www.columbia.edu/kermit/ckermit70.html#x9.3
- 321. http://www.columbia.edu/kermit/ckermit70.html#x10
- 322. http://www.columbia.edu/kermit/ckermit70.html#xiii
- 323. http://www.columbia.edu/kermit/ckermit70.html#xiii.1
- 324. http://www.columbia.edu/kermit/ckermit70.html#xiii.1.1
- 325. http://www.columbia.edu/kermit/ckermit70.html#xiii.1.2
- 326. http://www.columbia.edu/kermit/ckermit70.html#xiii.1.2.1
- 327. http://www.columbia.edu/kermit/ckermit70.html#xiii.1.2.2
- 328. http://www.columbia.edu/kermit/ckermit70.html#xiii.1.2.3
- 329. http://www.columbia.edu/kermit/ckermit70.html#xiii.2
- 330. http://www.columbia.edu/kermit/ckermit70.html#xiv
- 331. http://www.columbia.edu/kermit/ckermit70.html#xv
- 332. http://www.columbia.edu/kermit/ckb2.htm
- 333. http://www.columbia.edu/kermit/ckbreviews.html
- 334. http://www.bhusa.com/
- 335. http://www.columbia.edu/kermit/manuals.html#ckde
- 336. http://www.columbia.edu/kermit/manuals.html#ktb
- 337. http://www.columbia.edu/kermit/news.html
- 338. news:comp.protocols.kermit.announce
- 339. news:comp.protocols.kermit.misc
+ 1. http://www.columbia.edu/
+ 2. mailto:kermit@columbia.edu
+ 3. http://www.columbia.edu/kermit/index.html
+ 4. http://www.columbia.edu/kermit/k95.html
+ 5. http://www.columbia.edu/kermit/ckermit.html
+ 6. http://www.columbia.edu/kermit/ckscripts.html
+ 7. http://www.columbia.edu/kermit/current.html
+ 8. http://www.columbia.edu/kermit/whatsnew.html
+ 9. http://www.columbia.edu/kermit/faq.html
+ 10. http://www.columbia.edu/kermit/support.html
+ 11. http://www.amazon.com/gp/product/1555581641?ie=UTF8&tag=aleidmoreldom-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=1555581641
+ 12. mailto:kermit-support@columbia.edu
+ 13. http://www.columbia.edu/kermit/
+ 14. http://www.kermit-project.org/
+ 15. http://www.columbia.nyc.ny.us/kermit/
+ 16. ftp://kermit.columbia.edu/kermit/f/COPYING.TXT
+ 17. ftp://kermit.columbia.edu/kermit/f/ckcmai.c
+ 18. http://www.columbia.edu/kermit/ckermit70.html#xv
+ 19. http://www.columbia.edu/kermit/ckb2.htm
+ 20. ftp://kermit.columbia.edu/kermit/f/ckcbwr.txt
+ 21. ftp://kermit.columbia.edu/kermit/f/ckubwr.txt
+ 22. ftp://kermit.columbia.edu/kermit/f/ckvbwr.txt
+ 23. ftp://kermit.columbia.edu/kermit/f/ckubwr.txt
+ 24. ftp://kermit.columbia.edu/kermit/f/ckermit70.txt
+ 25. ftp://kermit.columbia.edu/kermit/f/security.txt
+ 26. http://www.columbia.edu/kermit/security.htm
+ 27. ftp://kermit.columbia.edu/kermit/f/iksd.txt
+ 28. http://www.columbia.edu/kermit/iksd.htm
+ 29. http://www.columbia.edu/kermit/cuiksd.htm
+ 30. ftp://kermit.columbia.edu/kermit/f/telnet.txt
+ 31. http://www.columbia.edu/kermit/telnet.htm
+ 32. ftp://kermit.columbia.edu/kermit/f/COPYING.TXT
+ 33. http://www.columbia.edu/kermit/k95.html
+ 34. http://www.opensource.org/
+ 35. http://www.columbia.edu/kermit/ckb2.htm
+ 36. http://www.columbia.edu/kermit/ckermit70.html#xi
+ 37. http://www.columbia.edu/kermit/ckermit70.html#xii
+ 38. http://www.columbia.edu/kermit/ckermit70.html#x0
+ 39. http://www.columbia.edu/kermit/ckermit70.html#x1
+ 40. http://www.columbia.edu/kermit/ckermit70.html#x1.0
+ 41. http://www.columbia.edu/kermit/ckermit70.html#x1.1
+ 42. http://www.columbia.edu/kermit/ckermit70.html#x1.2
+ 43. http://www.columbia.edu/kermit/ckermit70.html#x1.3
+ 44. http://www.columbia.edu/kermit/ckermit70.html#x1.4
+ 45. http://www.columbia.edu/kermit/ckermit70.html#x1.5
+ 46. http://www.columbia.edu/kermit/ckermit70.html#x1.5.1
+ 47. http://www.columbia.edu/kermit/ckermit70.html#x1.5.2
+ 48. http://www.columbia.edu/kermit/ckermit70.html#x1.5.3
+ 49. http://www.columbia.edu/kermit/ckermit70.html#x1.5.4
+ 50. http://www.columbia.edu/kermit/ckermit70.html#x1.5.5
+ 51. http://www.columbia.edu/kermit/ckermit70.html#x1.6
+ 52. http://www.columbia.edu/kermit/ckermit70.html#x1.7
+ 53. http://www.columbia.edu/kermit/ckermit70.html#x1.8
+ 54. http://www.columbia.edu/kermit/ckermit70.html#x1.9
+ 55. http://www.columbia.edu/kermit/ckermit70.html#x1.10
+ 56. http://www.columbia.edu/kermit/ckermit70.html#x1.11
+ 57. http://www.columbia.edu/kermit/ckermit70.html#x1.11.1
+ 58. http://www.columbia.edu/kermit/ckermit70.html#x1.11.2
+ 59. http://www.columbia.edu/kermit/ckermit70.html#x1.11.3
+ 60. http://www.columbia.edu/kermit/ckermit70.html#x1.11.4
+ 61. http://www.columbia.edu/kermit/ckermit70.html#x1.11.5
+ 62. http://www.columbia.edu/kermit/ckermit70.html#x1.11.6
+ 63. http://www.columbia.edu/kermit/ckermit70.html#x1.11.7
+ 64. http://www.columbia.edu/kermit/ckermit70.html#x1.12
+ 65. http://www.columbia.edu/kermit/ckermit70.html#x1.13
+ 66. http://www.columbia.edu/kermit/ckermit70.html#x1.14
+ 67. http://www.columbia.edu/kermit/ckermit70.html#x1.15
+ 68. http://www.columbia.edu/kermit/ckermit70.html#x1.16
+ 69. http://www.columbia.edu/kermit/ckermit70.html#x1.17
+ 70. http://www.columbia.edu/kermit/ckermit70.html#x1.18
+ 71. http://www.columbia.edu/kermit/ckermit70.html#x1.19
+ 72. http://www.columbia.edu/kermit/ckermit70.html#x1.20
+ 73. http://www.columbia.edu/kermit/ckermit70.html#x1.21
+ 74. http://www.columbia.edu/kermit/ckermit70.html#x1.22
+ 75. http://www.columbia.edu/kermit/ckermit70.html#x1.22.1
+ 76. http://www.columbia.edu/kermit/ckermit70.html#x1.22.2
+ 77. http://www.columbia.edu/kermit/ckermit70.html#x1.22.3
+ 78. http://www.columbia.edu/kermit/ckermit70.html#x1.22.4
+ 79. http://www.columbia.edu/kermit/ckermit70.html#x1.22.5
+ 80. http://www.columbia.edu/kermit/ckermit70.html#x1.22.6
+ 81. http://www.columbia.edu/kermit/ckermit70.html#x1.22.7
+ 82. http://www.columbia.edu/kermit/ckermit70.html#x1.22.8
+ 83. http://www.columbia.edu/kermit/ckermit70.html#x1.23
+ 84. http://www.columbia.edu/kermit/ckermit70.html#x1.24
+ 85. http://www.columbia.edu/kermit/ckermit70.html#x2
+ 86. http://www.columbia.edu/kermit/ckermit70.html#x2.0
+ 87. http://www.columbia.edu/kermit/ckermit70.html#x2.1
+ 88. http://www.columbia.edu/kermit/ckermit70.html#x2.1.1
+ 89. http://www.columbia.edu/kermit/ckermit70.html#x2.1.2
+ 90. http://www.columbia.edu/kermit/ckermit70.html#x2.1.3
+ 91. http://www.columbia.edu/kermit/ckermit70.html#x2.1.4
+ 92. http://www.columbia.edu/kermit/ckermit70.html#x2.1.5
+ 93. http://www.columbia.edu/kermit/ckermit70.html#x2.1.6
+ 94. http://www.columbia.edu/kermit/ckermit70.html#x2.1.7
+ 95. http://www.columbia.edu/kermit/ckermit70.html#x2.1.8
+ 96. http://www.columbia.edu/kermit/ckermit70.html#x2.1.9
+ 97. http://www.columbia.edu/kermit/ckermit70.html#x2.1.10
+ 98. http://www.columbia.edu/kermit/ckermit70.html#x2.1.11
+ 99. http://www.columbia.edu/kermit/ckermit70.html#x2.1.12
+ 100. http://www.columbia.edu/kermit/ckermit70.html#x2.1.13
+ 101. http://www.columbia.edu/kermit/ckermit70.html#x2.1.14
+ 102. http://www.columbia.edu/kermit/ckermit70.html#x2.1.15
+ 103. http://www.columbia.edu/kermit/ckermit70.html#x2.1.16
+ 104. http://www.columbia.edu/kermit/ckermit70.html#x2.2
+ 105. http://www.columbia.edu/kermit/ckermit70.html#x2.2.1
+ 106. http://www.columbia.edu/kermit/ckermit70.html#x2.2.2
+ 107. http://www.columbia.edu/kermit/ckermit70.html#x2.3
+ 108. http://www.columbia.edu/kermit/ckermit70.html#x2.3.0
+ 109. http://www.columbia.edu/kermit/ckermit70.html#x2.3.1
+ 110. http://www.columbia.edu/kermit/ckermit70.html#x2.3.2
+ 111. http://www.columbia.edu/kermit/ckermit70.html#x2.3.3
+ 112. http://www.columbia.edu/kermit/ckermit70.html#x2.3.4
+ 113. http://www.columbia.edu/kermit/ckermit70.html#x2.3.5
+ 114. http://www.columbia.edu/kermit/ckermit70.html#x2.3.6
+ 115. http://www.columbia.edu/kermit/ckermit70.html#x2.4
+ 116. http://www.columbia.edu/kermit/ckermit70.html#x2.5
+ 117. http://www.columbia.edu/kermit/ckermit70.html#x2.6
+ 118. http://www.columbia.edu/kermit/ckermit70.html#x2.7
+ 119. http://www.columbia.edu/kermit/ckermit70.html#x2.7.0
+ 120. http://www.columbia.edu/kermit/ckermit70.html#x2.7.1
+ 121. http://www.columbia.edu/kermit/ckermit70.html#x2.7.2
+ 122. http://www.columbia.edu/kermit/ckermit70.html#x2.7.3
+ 123. http://www.columbia.edu/kermit/ckermit70.html#x2.7.4
+ 124. http://www.columbia.edu/kermit/ckermit70.html#x2.7.4.1
+ 125. http://www.columbia.edu/kermit/ckermit70.html#x2.7.4.2
+ 126. http://www.columbia.edu/kermit/ckermit70.html#x2.7.4.3
+ 127. http://www.columbia.edu/kermit/ckermit70.html#x2.7.4.4
+ 128. http://www.columbia.edu/kermit/ckermit70.html#x2.7.4.5
+ 129. http://www.columbia.edu/kermit/ckermit70.html#x2.8
+ 130. http://www.columbia.edu/kermit/ckermit70.html#x2.9
+ 131. http://www.columbia.edu/kermit/ckermit70.html#x2.9.1
+ 132. http://www.columbia.edu/kermit/ckermit70.html#x2.9.2
+ 133. http://www.columbia.edu/kermit/ckermit70.html#x2.10
+ 134. http://www.columbia.edu/kermit/ckermit70.html#x2.11
+ 135. http://www.columbia.edu/kermit/ckermit70.html#x2.12
+ 136. http://www.columbia.edu/kermit/ckermit70.html#x2.13
+ 137. http://www.columbia.edu/kermit/ckermit70.html#x2.14
+ 138. http://www.columbia.edu/kermit/ckermit70.html#x2.15
+ 139. http://www.columbia.edu/kermit/ckermit70.html#x3
+ 140. http://www.columbia.edu/kermit/ckermit70.html#x3.1
+ 141. http://www.columbia.edu/kermit/ckermit70.html#x3.2
+ 142. http://www.columbia.edu/kermit/ckermit70.html#x3.3
+ 143. http://www.columbia.edu/kermit/ckermit70.html#x3.4
+ 144. http://www.columbia.edu/kermit/ckermit70.html#x4
+ 145. http://www.columbia.edu/kermit/ckermit70.html#x4.0
+ 146. http://www.columbia.edu/kermit/ckermit70.html#x4.1
+ 147. http://www.columbia.edu/kermit/ckermit70.html#x4.1.1
+ 148. http://www.columbia.edu/kermit/ckermit70.html#x4.1.2
+ 149. http://www.columbia.edu/kermit/ckermit70.html#x4.1.3
+ 150. http://www.columbia.edu/kermit/ckermit70.html#x4.2
+ 151. http://www.columbia.edu/kermit/ckermit70.html#x4.2.1
+ 152. http://www.columbia.edu/kermit/ckermit70.html#x4.2.1.1
+ 153. http://www.columbia.edu/kermit/ckermit70.html#x4.2.1.2
+ 154. http://www.columbia.edu/kermit/ckermit70.html#x4.2.1.3
+ 155. http://www.columbia.edu/kermit/ckermit70.html#x4.2.2
+ 156. http://www.columbia.edu/kermit/ckermit70.html#x4.2.2.1
+ 157. http://www.columbia.edu/kermit/ckermit70.html#x4.2.2.2
+ 158. http://www.columbia.edu/kermit/ckermit70.html#x4.2.3
+ 159. http://www.columbia.edu/kermit/ckermit70.html#x4.2.3.1
+ 160. http://www.columbia.edu/kermit/ckermit70.html#x4.2.3.2
+ 161. http://www.columbia.edu/kermit/ckermit70.html#x4.2.4
+ 162. http://www.columbia.edu/kermit/ckermit70.html#x4.2.5
+ 163. http://www.columbia.edu/kermit/ckermit70.html#x4.2.6
+ 164. http://www.columbia.edu/kermit/ckermit70.html#x4.2.7
+ 165. http://www.columbia.edu/kermit/ckermit70.html#x4.2.8
+ 166. http://www.columbia.edu/kermit/ckermit70.html#x4.2.8.1
+ 167. http://www.columbia.edu/kermit/ckermit70.html#x4.2.8.2
+ 168. http://www.columbia.edu/kermit/ckermit70.html#x4.2.8.3
+ 169. http://www.columbia.edu/kermit/ckermit70.html#x4.2.8.4
+ 170. http://www.columbia.edu/kermit/ckermit70.html#x4.3
+ 171. http://www.columbia.edu/kermit/ckermit70.html#x4.3.1
+ 172. http://www.columbia.edu/kermit/ckermit70.html#x4.3.2
+ 173. http://www.columbia.edu/kermit/ckermit70.html#x4.3.3
+ 174. http://www.columbia.edu/kermit/ckermit70.html#x4.3.4
+ 175. http://www.columbia.edu/kermit/ckermit70.html#x4.4
+ 176. http://www.columbia.edu/kermit/ckermit70.html#x4.4.1
+ 177. http://www.columbia.edu/kermit/ckermit70.html#x4.4.1.1
+ 178. http://www.columbia.edu/kermit/ckermit70.html#x4.4.1.2
+ 179. http://www.columbia.edu/kermit/ckermit70.html#x4.4.2
+ 180. http://www.columbia.edu/kermit/ckermit70.html#x4.4.2.1
+ 181. http://www.columbia.edu/kermit/ckermit70.html#x4.4.2.1.1
+ 182. http://www.columbia.edu/kermit/ckermit70.html#x4.4.2.1.2
+ 183. http://www.columbia.edu/kermit/ckermit70.html#x4.4.2.2
+ 184. http://www.columbia.edu/kermit/ckermit70.html#x4.5
+ 185. http://www.columbia.edu/kermit/ckermit70.html#x4.5.1
+ 186. http://www.columbia.edu/kermit/ckermit70.html#x4.5.2
+ 187. http://www.columbia.edu/kermit/ckermit70.html#x4.5.2.1
+ 188. http://www.columbia.edu/kermit/ckermit70.html#x4.5.2.2
+ 189. http://www.columbia.edu/kermit/ckermit70.html#x4.5.3
+ 190. http://www.columbia.edu/kermit/ckermit70.html#x4.5.4
+ 191. http://www.columbia.edu/kermit/ckermit70.html#x4.6
+ 192. http://www.columbia.edu/kermit/ckermit70.html#x4.7
+ 193. http://www.columbia.edu/kermit/ckermit70.html#x4.7.1
+ 194. http://www.columbia.edu/kermit/ckermit70.html#x4.7.2
+ 195. http://www.columbia.edu/kermit/ckermit70.html#x4.7.3
+ 196. http://www.columbia.edu/kermit/ckermit70.html#x4.8
+ 197. http://www.columbia.edu/kermit/ckermit70.html#x4.8.1
+ 198. http://www.columbia.edu/kermit/ckermit70.html#x4.8.2
+ 199. http://www.columbia.edu/kermit/ckermit70.html#x4.9
+ 200. http://www.columbia.edu/kermit/ckermit70.html#x4.9.1
+ 201. http://www.columbia.edu/kermit/ckermit70.html#x4.9.2
+ 202. http://www.columbia.edu/kermit/ckermit70.html#x4.9.3
+ 203. http://www.columbia.edu/kermit/ckermit70.html#x4.10
+ 204. http://www.columbia.edu/kermit/ckermit70.html#x4.11
+ 205. http://www.columbia.edu/kermit/ckermit70.html#x4.11.1
+ 206. http://www.columbia.edu/kermit/ckermit70.html#x4.11.2
+ 207. http://www.columbia.edu/kermit/ckermit70.html#x4.11.3
+ 208. http://www.columbia.edu/kermit/ckermit70.html#x4.11.4
+ 209. http://www.columbia.edu/kermit/ckermit70.html#x4.11.5
+ 210. http://www.columbia.edu/kermit/ckermit70.html#x4.11.6
+ 211. http://www.columbia.edu/kermit/ckermit70.html#x4.12
+ 212. http://www.columbia.edu/kermit/ckermit70.html#x4.13
+ 213. http://www.columbia.edu/kermit/ckermit70.html#x4.14
+ 214. http://www.columbia.edu/kermit/ckermit70.html#x4.15
+ 215. http://www.columbia.edu/kermit/ckermit70.html#x4.16
+ 216. http://www.columbia.edu/kermit/ckermit70.html#x4.17
+ 217. http://www.columbia.edu/kermit/ckermit70.html#x4.17.1
+ 218. http://www.columbia.edu/kermit/ckermit70.html#x4.17.2
+ 219. http://www.columbia.edu/kermit/ckermit70.html#x4.18
+ 220. http://www.columbia.edu/kermit/ckermit70.html#x4.19
+ 221. http://www.columbia.edu/kermit/ckermit70.html#x4.20
+ 222. http://www.columbia.edu/kermit/ckermit70.html#x4.20.1
+ 223. http://www.columbia.edu/kermit/ckermit70.html#x4.20.2
+ 224. http://www.columbia.edu/kermit/ckermit70.html#x4.20.2.1
+ 225. http://www.columbia.edu/kermit/ckermit70.html#x4.20.2.2
+ 226. http://www.columbia.edu/kermit/ckermit70.html#x4.20.2.3
+ 227. http://www.columbia.edu/kermit/ckermit70.html#x4.20.2.4
+ 228. http://www.columbia.edu/kermit/ckermit70.html#x4.20.2.5
+ 229. http://www.columbia.edu/kermit/ckermit70.html#x4.20.3
+ 230. http://www.columbia.edu/kermit/ckermit70.html#x4.21
+ 231. http://www.columbia.edu/kermit/ckermit70.html#x4.22
+ 232. http://www.columbia.edu/kermit/ckermit70.html#x4.22.1
+ 233. http://www.columbia.edu/kermit/ckermit70.html#x4.22.2
+ 234. http://www.columbia.edu/kermit/ckermit70.html#x4.22.3
+ 235. http://www.columbia.edu/kermit/ckermit70.html#x4.22.4
+ 236. http://www.columbia.edu/kermit/ckermit70.html#x4.22.5
+ 237. http://www.columbia.edu/kermit/ckermit70.html#x4.22.6
+ 238. http://www.columbia.edu/kermit/ckermit70.html#x4.22.7
+ 239. http://www.columbia.edu/kermit/ckermit70.html#x4.22.8
+ 240. http://www.columbia.edu/kermit/ckermit70.html#x4.23
+ 241. http://www.columbia.edu/kermit/ckermit70.html#x4.24
+ 242. http://www.columbia.edu/kermit/ckermit70.html#x4.25
+ 243. http://www.columbia.edu/kermit/ckermit70.html#x5
+ 244. http://www.columbia.edu/kermit/ckermit70.html#x5.0
+ 245. http://www.columbia.edu/kermit/ckermit70.html#x5.1
+ 246. http://www.columbia.edu/kermit/ckermit70.html#x5.2
+ 247. http://www.columbia.edu/kermit/ckermit70.html#x5.3
+ 248. http://www.columbia.edu/kermit/ckermit70.html#x5.3.1
+ 249. http://www.columbia.edu/kermit/ckermit70.html#x5.3.2
+ 250. http://www.columbia.edu/kermit/ckermit70.html#x5.4
+ 251. http://www.columbia.edu/kermit/ckermit70.html#x5.5
+ 252. http://www.columbia.edu/kermit/ckermit70.html#x5.6
+ 253. http://www.columbia.edu/kermit/ckermit70.html#x5.7
+ 254. http://www.columbia.edu/kermit/ckermit70.html#x6
+ 255. http://www.columbia.edu/kermit/ckermit70.html#x6.0
+ 256. http://www.columbia.edu/kermit/ckermit70.html#x6.1
+ 257. http://www.columbia.edu/kermit/ckermit70.html#x6.2
+ 258. http://www.columbia.edu/kermit/ckermit70.html#x6.3
+ 259. http://www.columbia.edu/kermit/ckermit70.html#x6.4
+ 260. http://www.columbia.edu/kermit/ckermit70.html#x6.5
+ 261. http://www.columbia.edu/kermit/ckermit70.html#x6.6
+ 262. http://www.columbia.edu/kermit/ckermit70.html#x6.6.1
+ 263. http://www.columbia.edu/kermit/ckermit70.html#x6.6.2
+ 264. http://www.columbia.edu/kermit/ckermit70.html#x6.6.2
+ 265. http://www.columbia.edu/kermit/ckermit70.html#x6.6.3
+ 266. http://www.columbia.edu/kermit/ckermit70.html#x6.6.4
+ 267. http://www.columbia.edu/kermit/ckermit70.html#x6.6.5
+ 268. http://www.columbia.edu/kermit/ckermit70.html#x6.6.5.1
+ 269. http://www.columbia.edu/kermit/ckermit70.html#x6.6.5.2
+ 270. http://www.columbia.edu/kermit/ckermit70.html#x6.6.5.3
+ 271. http://www.columbia.edu/kermit/ckermit70.html#x6.6.5.4
+ 272. http://www.columbia.edu/kermit/ckermit70.html#x6.6.5.5
+ 273. http://www.columbia.edu/kermit/ckermit70.html#x6.7
+ 274. http://www.columbia.edu/kermit/ckermit70.html#x7
+ 275. http://www.columbia.edu/kermit/ckermit70.html#x7.0
+ 276. http://www.columbia.edu/kermit/ckermit70.html#x7.1
+ 277. http://www.columbia.edu/kermit/ckermit70.html#x7.1.1
+ 278. http://www.columbia.edu/kermit/ckermit70.html#x7.1.2
+ 279. http://www.columbia.edu/kermit/ckermit70.html#x7.1.3
+ 280. http://www.columbia.edu/kermit/ckermit70.html#x7.1.4
+ 281. http://www.columbia.edu/kermit/ckermit70.html#x7.2
+ 282. http://www.columbia.edu/kermit/ckermit70.html#x7.3
+ 283. http://www.columbia.edu/kermit/ckermit70.html#x7.4
+ 284. http://www.columbia.edu/kermit/ckermit70.html#x7.5
+ 285. http://www.columbia.edu/kermit/ckermit70.html#x7.6
+ 286. http://www.columbia.edu/kermit/ckermit70.html#x7.7
+ 287. http://www.columbia.edu/kermit/ckermit70.html#x7.8
+ 288. http://www.columbia.edu/kermit/ckermit70.html#x7.9
+ 289. http://www.columbia.edu/kermit/ckermit70.html#x7.9.1
+ 290. http://www.columbia.edu/kermit/ckermit70.html#x7.9.2
+ 291. http://www.columbia.edu/kermit/ckermit70.html#x7.10
+ 292. http://www.columbia.edu/kermit/ckermit70.html#x7.10.1
+ 293. http://www.columbia.edu/kermit/ckermit70.html#x7.10.2
+ 294. http://www.columbia.edu/kermit/ckermit70.html#x7.10.3
+ 295. http://www.columbia.edu/kermit/ckermit70.html#x7.10.4
+ 296. http://www.columbia.edu/kermit/ckermit70.html#x7.10.5
+ 297. http://www.columbia.edu/kermit/ckermit70.html#x7.10.6
+ 298. http://www.columbia.edu/kermit/ckermit70.html#x7.10.7
+ 299. http://www.columbia.edu/kermit/ckermit70.html#x7.10.8
+ 300. http://www.columbia.edu/kermit/ckermit70.html#x7.10.9
+ 301. http://www.columbia.edu/kermit/ckermit70.html#x7.10.10
+ 302. http://www.columbia.edu/kermit/ckermit70.html#x7.11
+ 303. http://www.columbia.edu/kermit/ckermit70.html#x7.12
+ 304. http://www.columbia.edu/kermit/ckermit70.html#x7.13
+ 305. http://www.columbia.edu/kermit/ckermit70.html#x7.14
+ 306. http://www.columbia.edu/kermit/ckermit70.html#x7.15
+ 307. http://www.columbia.edu/kermit/ckermit70.html#x7.16
+ 308. http://www.columbia.edu/kermit/ckermit70.html#x7.17
+ 309. http://www.columbia.edu/kermit/ckermit70.html#x7.18
+ 310. http://www.columbia.edu/kermit/ckermit70.html#x7.19
+ 311. http://www.columbia.edu/kermit/ckermit70.html#x7.20
+ 312. http://www.columbia.edu/kermit/ckermit70.html#x7.20.1
+ 313. http://www.columbia.edu/kermit/ckermit70.html#x7.20.2
+ 314. http://www.columbia.edu/kermit/ckermit70.html#x7.21
+ 315. http://www.columbia.edu/kermit/ckermit70.html#x7.22
+ 316. http://www.columbia.edu/kermit/ckermit70.html#x7.23
+ 317. http://www.columbia.edu/kermit/ckermit70.html#x7.24
+ 318. http://www.columbia.edu/kermit/ckermit70.html#x7.25
+ 319. http://www.columbia.edu/kermit/ckermit70.html#x7.26
+ 320. http://www.columbia.edu/kermit/ckermit70.html#x7.26.1
+ 321. http://www.columbia.edu/kermit/ckermit70.html#x7.26.2
+ 322. http://www.columbia.edu/kermit/ckermit70.html#x7.27
+ 323. http://www.columbia.edu/kermit/ckermit70.html#x8
+ 324. http://www.columbia.edu/kermit/ckermit70.html#x9
+ 325. http://www.columbia.edu/kermit/ckermit70.html#x9.0
+ 326. http://www.columbia.edu/kermit/ckermit70.html#x9.1
+ 327. http://www.columbia.edu/kermit/ckermit70.html#x9.2
+ 328. http://www.columbia.edu/kermit/ckermit70.html#x9.3
+ 329. http://www.columbia.edu/kermit/ckermit70.html#x10
+ 330. http://www.columbia.edu/kermit/ckermit70.html#xiii
+ 331. http://www.columbia.edu/kermit/ckermit70.html#xiii.1
+ 332. http://www.columbia.edu/kermit/ckermit70.html#xiii.1.1
+ 333. http://www.columbia.edu/kermit/ckermit70.html#xiii.1.2
+ 334. http://www.columbia.edu/kermit/ckermit70.html#xiii.1.2.1
+ 335. http://www.columbia.edu/kermit/ckermit70.html#xiii.1.2.2
+ 336. http://www.columbia.edu/kermit/ckermit70.html#xiii.1.2.3
+ 337. http://www.columbia.edu/kermit/ckermit70.html#xiii.2
+ 338. http://www.columbia.edu/kermit/ckermit70.html#xiv
+ 339. http://www.columbia.edu/kermit/ckermit70.html#xv
340. http://www.columbia.edu/kermit/ckb2.htm
- 341. http://www.columbia.edu/kermit/ckermit70.html#x4
- 342. http://www.columbia.edu/kermit/ckermit70.html#x4.3
- 343. http://www.columbia.edu/kermit/ckermit70.html#x4.23
- 344. http://www.columbia.edu/kermit/ckermit70.html#x4.5.1
- 345. http://www.columbia.edu/kermit/ckermit70.html#x1.5
- 346. http://www.columbia.edu/kermit/ckermit70.html#x4.7.1
- 347. http://www.columbia.edu/kermit/ckermit70.html#x4.9.
+ 341. http://www.columbia.edu/kermit/ckbreviews.html
+ 342. http://www.bhusa.com/
+ 343. http://www.columbia.edu/kermit/manuals.html#ckde
+ 344. http://www.columbia.edu/kermit/manuals.html#ktb
+ 345. http://www.columbia.edu/kermit/news.html
+ 346. news:comp.protocols.kermit.announce
+ 347. news:comp.protocols.kermit.misc
348. http://www.columbia.edu/kermit/ckb2.htm
- 349. http://www.columbia.edu/kermit/ckermit70.html#x7.9.2
- 350. http://www.columbia.edu/kermit/ckermit70.html#x2.15
- 351. http://www.columbia.edu/kermit/ckermit70.html#x9.1
- 352. http://www.columbia.edu/kermit/ckermit70.html#x1.6
- 353. http://www.columbia.edu/kermit/ckermit70.html#x7.4
- 354. http://www.columbia.edu/kermit/ckermit70.html#x4.9.1
- 355. http://www.columbia.edu/kermit/ckermit70.html#mjd
- 356. http://www.columbia.edu/kermit/ckermit70.html#mjd
- 357. http://www.columbia.edu/kermit/ckermit70.html#x4.9
- 358. http://www.columbia.edu/kermit/ckb2.htm
- 359. http://www.columbia.edu/kermit/ckb2.htm
- 360. http://www.columbia.edu/kermit/ckermit70.html#x7.5
- 361. http://www.columbia.edu/kermit/ckermit70.html#x2.12
- 362. http://www.columbia.edu/kermit/ckermit70.html#x1.5
- 363. http://www.columbia.edu/kermit/ckermit70.html#x4.9.1
- 364. http://www.columbia.edu/kermit/ckermit70.html#x6.6.5
+ 349. http://www.columbia.edu/kermit/ckermit70.html#x4
+ 350. http://www.columbia.edu/kermit/ckermit70.html#x4.3
+ 351. http://www.columbia.edu/kermit/ckermit70.html#x4.23
+ 352. http://www.columbia.edu/kermit/ckermit70.html#x4.5.1
+ 353. http://www.columbia.edu/kermit/ckermit70.html#x1.5
+ 354. http://www.columbia.edu/kermit/ckermit70.html#x4.7.1
+ 355. http://www.columbia.edu/kermit/ckermit70.html#x4.9.
+ 356. http://www.columbia.edu/kermit/ckb2.htm
+ 357. http://www.columbia.edu/kermit/ckermit70.html#x7.9.2
+ 358. http://www.columbia.edu/kermit/ckermit70.html#x2.15
+ 359. http://www.columbia.edu/kermit/ckermit70.html#x9.1
+ 360. http://www.columbia.edu/kermit/ckermit70.html#x1.6
+ 361. http://www.columbia.edu/kermit/ckermit70.html#x7.4
+ 362. http://www.columbia.edu/kermit/ckermit70.html#x4.9.1
+ 363. http://www.columbia.edu/kermit/ckermit70.html#mjd
+ 364. http://www.columbia.edu/kermit/ckermit70.html#mjd
365. http://www.columbia.edu/kermit/ckermit70.html#x4.9
- 366. http://www.columbia.edu/kermit/ckermit70.html#x7.18
- 367. http://www.columbia.edu/kermit/ckermit70.html#x7.4
- 368. http://www.columbia.edu/kermit/ckermit70.html#x1.15
- 369. http://www.columbia.edu/kermit/ckermit70.html#x4.3
- 370. http://www.columbia.edu/kermit/ckermit70.html#x7.3
- 371. http://www.columbia.edu/kermit/ckermit70.html#x7.10.7
- 372. http://www.columbia.edu/kermit/ckermit70.html#x7.1
- 373. http://www.columbia.edu/kermit/ckermit70.html#x4.9.1
- 374. ftp://kermit.columbia.edu/kermit/f/ckccfg.txt
- 375. ftp://kermit.columbia.edu/kermit/f/ckccfg.txt
- 376. http://www.columbia.edu/kermit/ckermit70.html#x1.22.4
- 377. http://www.columbia.edu/kermit/ckermit70.html#x1.22.5
- 378. http://www.columbia.edu/kermit/ckb2.htm
- 379. http://www.columbia.edu/kermit/ckermit70.html#x1.22.5
- 380. http://www.columbia.edu/kermit/ckermit70.html#x7.12
- 381. http://www.columbia.edu/kermit/ckermit70.html#x2.1.16
- 382. http://www.columbia.edu/kermit/ckermit70.html#x2.7
- 383. http://www.columbia.edu/kermit/ckermit70.html#x2.3.5
- 384. http://www.columbia.edu/kermit/ckermit70.html#x7.5
- 385. http://www.telefonica.es/cambiodenumeracion/
- 386. http://www.columbia.edu/kermit/ckermit70.html#x7.5
- 387. http://www.columbia.edu/kermit/ckb2.htm
- 388. http://www.columbia.edu/kermit/ckermit70.html#x2.2.2
- 389. http://www.columbia.edu/kermit/ckermit70.html#x2.1.11
- 390. http://www.columbia.edu/kermit/ckermit70.html#x2.1.13
- 391. http://www.columbia.edu/kermit/ckermit70.html#x2.1.12
- 392. http://www.columbia.edu/kermit/ckb2.htm
- 393. http://www.columbia.edu/kermit/ckermit70.html#x2.1.1
- 394. http://www.columbia.edu/kermit/ckb2.htm
+ 366. http://www.columbia.edu/kermit/ckb2.htm
+ 367. http://www.columbia.edu/kermit/ckb2.htm
+ 368. http://www.columbia.edu/kermit/ckermit70.html#x7.5
+ 369. http://www.columbia.edu/kermit/ckermit70.html#x2.12
+ 370. http://www.columbia.edu/kermit/ckermit70.html#x1.5
+ 371. http://www.columbia.edu/kermit/ckermit70.html#x4.9.1
+ 372. http://www.columbia.edu/kermit/ckermit70.html#x6.6.5
+ 373. http://www.columbia.edu/kermit/ckermit70.html#x4.9
+ 374. http://www.columbia.edu/kermit/ckermit70.html#x7.18
+ 375. http://www.columbia.edu/kermit/ckermit70.html#x7.4
+ 376. http://www.columbia.edu/kermit/ckermit70.html#x1.15
+ 377. http://www.columbia.edu/kermit/ckermit70.html#x4.3
+ 378. http://www.columbia.edu/kermit/ckermit70.html#x7.3
+ 379. http://www.columbia.edu/kermit/ckermit70.html#x7.10.7
+ 380. http://www.columbia.edu/kermit/ckermit70.html#x7.1
+ 381. http://www.columbia.edu/kermit/ckermit70.html#x4.9.1
+ 382. ftp://kermit.columbia.edu/kermit/f/ckccfg.txt
+ 383. ftp://kermit.columbia.edu/kermit/f/ckccfg.txt
+ 384. http://www.columbia.edu/kermit/ckermit70.html#x1.22.4
+ 385. http://www.columbia.edu/kermit/ckermit70.html#x1.22.5
+ 386. http://www.columbia.edu/kermit/ckb2.htm
+ 387. http://www.columbia.edu/kermit/ckermit70.html#x1.22.5
+ 388. http://www.columbia.edu/kermit/ckermit70.html#x7.12
+ 389. http://www.columbia.edu/kermit/ckermit70.html#x2.1.16
+ 390. http://www.columbia.edu/kermit/ckermit70.html#x2.7
+ 391. http://www.columbia.edu/kermit/ckermit70.html#x2.3.5
+ 392. http://www.columbia.edu/kermit/ckermit70.html#x7.5
+ 393. http://www.telefonica.es/cambiodenumeracion/
+ 394. http://www.columbia.edu/kermit/ckermit70.html#x7.5
395. http://www.columbia.edu/kermit/ckb2.htm
- 396. http://www.columbia.edu/kermit/ckermit70.html#x2.1.7
- 397. http://www.columbia.edu/kermit/ckermit70.html#x2.1.6
- 398. http://www.columbia.edu/kermit/ckb2.htm
- 399. ftp://kermit.columbia.edu/kermit/f/telnet.txt
- 400. http://www.columbia.edu/kermit/telnet.htm
- 401. ftp://kermit.columbia.edu/kermit/f/telnet.txt
- 402. http://www.columbia.edu/kermit/telnet.htm
- 403. ftp://ftp.isi.edu/in-notes/rfc1572.txt
- 404. ftp://ftp.isi.edu/in-notes/rfc779.txt
- 405. http://www.columbia.edu/kermit/ckb2.htm
- 406. http://www.columbia.edu/kermit/ckermit70.html#x2.10
- 407. http://www.columbia.edu/kermit/ckermit70.html#x2.8
- 408. http://www.columbia.edu/kermit/ckermit70.html#x1.5
- 409. http://www.columbia.edu/kermit/ckermit70.html#x4.20
- 410. http://www.psy.uq.oz.au/~ftp/Crypto/
- 411. http://www.columbia.edu/kermit/security.htm
- 412. http://srp.stanford.edu/srp/
- 413. http://www.columbia.edu/kermit/ckermit70.html#x2.7.1,
- 414. ftp://kermit.columbia.edu/kermit/f/ckccfg.txt
- 415. http://www.columbia.edu/kermit/security.htm
- 416. http://www.columbia.edu/kermit/ckb2.htm
- 417. http://www.columbia.edu/kermit/ckermit70.html#x2.7
- 418. http://www.columbia.edu/kermit/ckermit70.html#x2.0
- 419. ftp://kermit.columbia.edu/kermit/f/ckuins.txt
- 420. ftp://kermit.columbia.edu/kermit/f/ckubwr.txt
- 421. ftp://kermit.columbia.edu/kermit/f/ckuins.txt
- 422. http://www.columbia.edu/kermit/iksd.html#x4.2
- 423. http://www.columbia.edu/kermit/iksd.html
- 424. http://www.columbia.edu/kermit/ckermit70.html#x4.2.8.1
- 425. ftp://ftp.isi.edu/in-notes/rfc1945.txt
- 426. http://www.columbia.edu/kermit/ckermit70.html#x1.5
- 427. http://www.columbia.edu/kermit/ckermit70.html#x3.2
- 428. http://www.columbia.edu/kermit/ckermit70.html#x3.2
- 429. http://www.columbia.edu/kermit/ckb2.htm
- 430. http://www.columbia.edu/kermit/ckb2.htm
- 431. http://www.columbia.edu/kermit/ckermit70.html#x5.4
- 432. ftp://kermit.columbia.edu/kermit/f/ckubwr.txt
- 433. http://www.columbia.edu/kermit/ckermit70.html#x4.10
- 434. http://www.columbia.edu/kermit/ckermit70.html#x4.7.1
- 435. http://www.columbia.edu/kermit/ckermit70.html#x4.7.3
- 436. http://www.columbia.edu/kermit/ckermit70.html#x4.3
- 437. http://www.columbia.edu/kermit/ckermit70.html#x4.10
- 438. http://www.columbia.edu/kermit/ckermit70.html#x4.11
- 439. http://www.columbia.edu/kermit/ckermit70.html#x4.15
- 440. http://www.columbia.edu/kermit/ckermit70.html#x4.2.4
- 441. http://www.columbia.edu/kermit/ckermit70.html#x4.7
- 442. http://www.columbia.edu/kermit/ckermit70.html#x4.2.3
- 443. http://www.columbia.edu/kermit/ckermit70.html#x4.2.1.3
- 444. http://www.columbia.edu/kermit/ckb2.htm
- 445. http://www.columbia.edu/kermit/ckermit70.html#x4.2.2
- 446. http://www.columbia.edu/kermit/ckermit70.html#x1.5
- 447. http://www.columbia.edu/kermit/ckermit70.html#x4.2.8.2
- 448. http://www.columbia.edu/kermit/ckermit70.html#x4.3
- 449. http://www.columbia.edu/kermit/ckermit70.html#x4.10
- 450. http://www.columbia.edu/kermit/ckermit70.html#x4.11
- 451. http://www.columbia.edu/kermit/ckermit70.html#x4.15
- 452. http://www.telstra.com.au/docs/PGP/
- 453. http://www.telstra.com.au/docs/PGP/pgpdoc2/pgpdoc2_17.html
- 454. http://www.columbia.edu/kermit/security.htm
- 455. http://www.columbia.edu/kermit/ckermit70.html#x2.7
- 456. http://www.columbia.edu/kermit/ckb2.htm
- 457. http://www.columbia.edu/kermit/ckermit70.html#x2.14
- 458. http://www.columbia.edu/kermit/ckermit70.html#x1.23
- 459. http://www.columbia.edu/kermit/ckermit70.html#x4.7
- 460. http://www.columbia.edu/kermit/ckb2.htm
- 461. http://www.columbia.edu/kermit/ckb2.htm
- 462. http://www.columbia.edu/kermit/ckermit70.html#x4.9
- 463. http://www.columbia.edu/kermit/ckb2.htm
- 464. http://www.columbia.edu/kermit/ckermit70.html#x1.5.4
- 465. http://www.columbia.edu/kermit/ckermit70.html#x4.3
- 466. http://www.columbia.edu/kermit/ckermit70.html#x1.5.5
- 467. http://www.columbia.edu/kermit/ckermit70.html#x7.5
- 468. http://www.columbia.edu/kermit/ckermit70.html#x4.9
- 469. http://www.columbia.edu/kermit/ckermit70.html#x1.5.4
+ 396. http://www.columbia.edu/kermit/ckermit70.html#x2.2.2
+ 397. http://www.columbia.edu/kermit/ckermit70.html#x2.1.11
+ 398. http://www.columbia.edu/kermit/ckermit70.html#x2.1.13
+ 399. http://www.columbia.edu/kermit/ckermit70.html#x2.1.12
+ 400. http://www.columbia.edu/kermit/ckb2.htm
+ 401. http://www.columbia.edu/kermit/ckermit70.html#x2.1.1
+ 402. http://www.columbia.edu/kermit/ckb2.htm
+ 403. http://www.columbia.edu/kermit/ckb2.htm
+ 404. http://www.columbia.edu/kermit/ckermit70.html#x2.1.7
+ 405. http://www.columbia.edu/kermit/ckermit70.html#x2.1.6
+ 406. http://www.columbia.edu/kermit/ckb2.htm
+ 407. ftp://kermit.columbia.edu/kermit/f/telnet.txt
+ 408. http://www.columbia.edu/kermit/telnet.htm
+ 409. ftp://kermit.columbia.edu/kermit/f/telnet.txt
+ 410. http://www.columbia.edu/kermit/telnet.htm
+ 411. ftp://ftp.isi.edu/in-notes/rfc1572.txt
+ 412. ftp://ftp.isi.edu/in-notes/rfc779.txt
+ 413. http://www.columbia.edu/kermit/ckb2.htm
+ 414. http://www.columbia.edu/kermit/ckermit70.html#x2.10
+ 415. http://www.columbia.edu/kermit/ckermit70.html#x2.8
+ 416. http://www.columbia.edu/kermit/ckermit70.html#x1.5
+ 417. http://www.columbia.edu/kermit/ckermit70.html#x4.20
+ 418. http://www.psy.uq.oz.au/~ftp/Crypto/
+ 419. http://www.columbia.edu/kermit/security.htm
+ 420. http://srp.stanford.edu/srp/
+ 421. http://www.columbia.edu/kermit/ckermit70.html#x2.7.1,
+ 422. ftp://kermit.columbia.edu/kermit/f/ckccfg.txt
+ 423. http://www.columbia.edu/kermit/security.htm
+ 424. http://www.columbia.edu/kermit/ckb2.htm
+ 425. http://www.columbia.edu/kermit/ckermit70.html#x2.7
+ 426. http://www.columbia.edu/kermit/ckermit70.html#x2.0
+ 427. ftp://kermit.columbia.edu/kermit/f/ckuins.txt
+ 428. ftp://kermit.columbia.edu/kermit/f/ckubwr.txt
+ 429. ftp://kermit.columbia.edu/kermit/f/ckuins.txt
+ 430. http://www.columbia.edu/kermit/iksd.html#x4.2
+ 431. http://www.columbia.edu/kermit/iksd.html
+ 432. http://www.columbia.edu/kermit/ckermit70.html#x4.2.8.1
+ 433. ftp://ftp.isi.edu/in-notes/rfc1945.txt
+ 434. http://www.columbia.edu/kermit/ckermit70.html#x1.5
+ 435. http://www.columbia.edu/kermit/ckermit70.html#x3.2
+ 436. http://www.columbia.edu/kermit/ckermit70.html#x3.2
+ 437. http://www.columbia.edu/kermit/ckb2.htm
+ 438. http://www.columbia.edu/kermit/ckb2.htm
+ 439. http://www.columbia.edu/kermit/ckermit70.html#x5.4
+ 440. ftp://kermit.columbia.edu/kermit/f/ckubwr.txt
+ 441. http://www.columbia.edu/kermit/ckermit70.html#x4.10
+ 442. http://www.columbia.edu/kermit/ckermit70.html#x4.7.1
+ 443. http://www.columbia.edu/kermit/ckermit70.html#x4.7.3
+ 444. http://www.columbia.edu/kermit/ckermit70.html#x4.3
+ 445. http://www.columbia.edu/kermit/ckermit70.html#x4.10
+ 446. http://www.columbia.edu/kermit/ckermit70.html#x4.11
+ 447. http://www.columbia.edu/kermit/ckermit70.html#x4.15
+ 448. http://www.columbia.edu/kermit/ckermit70.html#x4.2.4
+ 449. http://www.columbia.edu/kermit/ckermit70.html#x4.7
+ 450. http://www.columbia.edu/kermit/ckermit70.html#x4.2.3
+ 451. http://www.columbia.edu/kermit/ckermit70.html#x4.2.1.3
+ 452. http://www.columbia.edu/kermit/ckb2.htm
+ 453. http://www.columbia.edu/kermit/ckermit70.html#x4.2.2
+ 454. http://www.columbia.edu/kermit/ckermit70.html#x1.5
+ 455. http://www.columbia.edu/kermit/ckermit70.html#x4.2.8.2
+ 456. http://www.columbia.edu/kermit/ckermit70.html#x4.3
+ 457. http://www.columbia.edu/kermit/ckermit70.html#x4.10
+ 458. http://www.columbia.edu/kermit/ckermit70.html#x4.11
+ 459. http://www.columbia.edu/kermit/ckermit70.html#x4.15
+ 460. http://www.telstra.com.au/docs/PGP/
+ 461. http://www.telstra.com.au/docs/PGP/pgpdoc2/pgpdoc2_17.html
+ 462. http://www.columbia.edu/kermit/security.htm
+ 463. http://www.columbia.edu/kermit/ckermit70.html#x2.7
+ 464. http://www.columbia.edu/kermit/ckb2.htm
+ 465. http://www.columbia.edu/kermit/ckermit70.html#x2.14
+ 466. http://www.columbia.edu/kermit/ckermit70.html#x1.23
+ 467. http://www.columbia.edu/kermit/ckermit70.html#x4.7
+ 468. http://www.columbia.edu/kermit/ckb2.htm
+ 469. http://www.columbia.edu/kermit/ckb2.htm
470. http://www.columbia.edu/kermit/ckermit70.html#x4.9
- 471. http://www.columbia.edu/kermit/ckermit70.html#x1.5.4
- 472. http://www.columbia.edu/kermit/ckermit70.html#x1.5.5
- 473. http://www.columbia.edu/kermit/ckb2.htm
- 474. http://www.columbia.edu/kermit/ckb2.htm
- 475. http://www.columbia.edu/kermit/ckermit70.html#x1.5
- 476. http://www.columbia.edu/kermit/ckermit70.html#x1.6
- 477. http://www.columbia.edu/kermit/ckermit70.html#x7.10
- 478. http://www.columbia.edu/kermit/ckermit70.html#x7.10.11
- 479. http://www.columbia.edu/kermit/ckermit70.html#x1.6
- 480. http://www.columbia.edu/kermit/ckermit70.html#x4.2.2
- 481. http://www.columbia.edu/kermit/ckermit70.html#x4.11
- 482. http://www.columbia.edu/kermit/ckermit70.html#x1.5.4
- 483. http://www.columbia.edu/kermit/ckermit70.html#x4.9.1
- 484. http://www.columbia.edu/kermit/ckermit70.html#x4.0.6
- 485. http://www.columbia.edu/kermit/ckermit70.html#x4.2
- 486. http://www.columbia.edu/kermit/ckermit70.html#x4.1
- 487. http://www.columbia.edu/kermit/ckermit70.html#x4.7.1
- 488. http://www.columbia.edu/kermit/ckb2.htm
- 489. http://www.columbia.edu/kermit/ckermit70.html#x1.5
- 490. http://www.columbia.edu/kermit/ckermit70.html#x4.2.2
- 491. http://www.columbia.edu/kermit/ckermit70.html#x4.7.1
- 492. http://www.columbia.edu/kermit/ckermit70.html#x4.2
- 493. http://www.columbia.edu/kermit/ckermit70.html#x4.10
- 494. http://www.columbia.edu/kermit/ckermit70.html#x4.2.2
+ 471. http://www.columbia.edu/kermit/ckb2.htm
+ 472. http://www.columbia.edu/kermit/ckermit70.html#x1.5.4
+ 473. http://www.columbia.edu/kermit/ckermit70.html#x4.3
+ 474. http://www.columbia.edu/kermit/ckermit70.html#x1.5.5
+ 475. http://www.columbia.edu/kermit/ckermit70.html#x7.5
+ 476. http://www.columbia.edu/kermit/ckermit70.html#x4.9
+ 477. http://www.columbia.edu/kermit/ckermit70.html#x1.5.4
+ 478. http://www.columbia.edu/kermit/ckermit70.html#x4.9
+ 479. http://www.columbia.edu/kermit/ckermit70.html#x1.5.4
+ 480. http://www.columbia.edu/kermit/ckermit70.html#x1.5.5
+ 481. http://www.columbia.edu/kermit/ckb2.htm
+ 482. http://www.columbia.edu/kermit/ckb2.htm
+ 483. http://www.columbia.edu/kermit/ckermit70.html#x1.5
+ 484. http://www.columbia.edu/kermit/ckermit70.html#x1.6
+ 485. http://www.columbia.edu/kermit/ckermit70.html#x7.10
+ 486. http://www.columbia.edu/kermit/ckermit70.html#x7.10.11
+ 487. http://www.columbia.edu/kermit/ckermit70.html#x1.6
+ 488. http://www.columbia.edu/kermit/ckermit70.html#x4.2.2
+ 489. http://www.columbia.edu/kermit/ckermit70.html#x4.11
+ 490. http://www.columbia.edu/kermit/ckermit70.html#x1.5.4
+ 491. http://www.columbia.edu/kermit/ckermit70.html#x4.9.1
+ 492. http://www.columbia.edu/kermit/ckermit70.html#x4.0.6
+ 493. http://www.columbia.edu/kermit/ckermit70.html#x4.2
+ 494. http://www.columbia.edu/kermit/ckermit70.html#x4.1
495. http://www.columbia.edu/kermit/ckermit70.html#x4.7.1
- 496. http://www.columbia.edu/kermit/ckermit70.html#x4.2
- 497. http://www.columbia.edu/kermit/ckermit70.html#x4.10
- 498. http://www.columbia.edu/kermit/ckermit70.html#x1.11.5
- 499. http://www.columbia.edu/kermit/ckermit70.html#x4.0.6
- 500. http://www.columbia.edu/kermit/ckermit70.html#x4.11
- 501. http://www.columbia.edu/kermit/ckermit70.html#x4.9.1
- 502. http://www.columbia.edu/kermit/ckermit70.html#x4.11.3
- 503. http://www.columbia.edu/kermit/ckermit70.html#x4.9
- 504. http://www.columbia.edu/kermit/ckermit70.html#x4.9
- 505. http://www.columbia.edu/kermit/ckermit70.html#x4.5.1
- 506. http://www.columbia.edu/kermit/ckermit70.html#x7.10
- 507. http://www.columbia.edu/kermit/ckermit70.html#x7.10.5
- 508. http://www.columbia.edu/kermit/ckermit70.html#x7.10.3
- 509. http://www.columbia.edu/kermit/ckermit70.html#x7.10.5
- 510. http://www.columbia.edu/kermit/ckb2.htm
- 511. http://www.columbia.edu/kermit/ckermit70.html#x4.3
- 512. http://www.columbia.edu/kermit/ckermit70.html#x4.10
- 513. http://www.columbia.edu/kermit/ckermit70.html#x4.3
- 514. http://www.columbia.edu/kermit/ckermit70.html#x4.10
- 515. http://www.columbia.edu/kermit/ckermit70.html#x4.15
- 516. http://www.columbia.edu/kermit/ckermit70.html#x4.18
- 517. http://www.columbia.edu/kermit/ckermit70.html#x4.20
- 518. http://www.columbia.edu/kermit/ckermit70.html#x4.20
- 519. http://www.columbia.edu/kermit/ckermit70.html#x4.20
- 520. http://www.columbia.edu/kermit/ckermit70.html#x4.19
- 521. http://www.columbia.edu/kermit/ckermit70.html#x4.16
- 522. http://www.columbia.edu/kermit/ckermit70.html#x4.19
- 523. http://www.columbia.edu/kermit/ckermit70.html#x4.20.2.3
- 524. http://www.columbia.edu/kermit/ckermit70.html#x1.5
- 525. http://www.columbia.edu/kermit/ckermit70.html#x6.6.5.4
- 526. http://www.columbia.edu/kermit/ckermit70.html#x4.22.2
- 527. http://www.columbia.edu/kermit/ckermit70.html#x4.22.3
- 528. http://www.columbia.edu/kermit/ckb2.htm
- 529. http://www.columbia.edu/kermit/ckb2.htm
- 530. http://www.columbia.edu/kermit/ckermit70.html#x9.3
- 531. http://www.columbia.edu/kermit/ckermit70.html#x5.2.1
- 532. http://www.columbia.edu/kermit/ckermit70.html#x4.5.1
- 533. http://www.columbia.edu/kermit/ckermit70.html#x4.5.2
- 534. http://www.columbia.edu/kermit/ckermit70.html#x6.6
- 535. http://www.columbia.edu/kermit/ckermit70.html#xiii
- 536. http://www.columbia.edu/kermit/ckermit70.html#xiii
- 537. ftp://ftp.isi.edu/in-notes/rfc1489.txt
- 538. ftp://ftp.isi.edu/in-notes/rfc2319.txt
- 539. http://www.unicode.org/
- 540. http://www.columbia.edu/kermit/ckermit70.html#x6.6.2
- 541. http://www.columbia.edu/kermit/ckermit70.html#x6.6.5.1
- 542. ftp://ftp.isi.edu/in-notes/rfc2640.txt
- 543. http://www.columbia.edu/kermit/ckermit70.html#x6.6.2
- 544. http://www.columbia.edu/kermit/ckermit70.html#x6.0
- 545. http://www.columbia.edu/kermit/ckermit70.html#x6.5
- 546. http://www.columbia.edu/kermit/ckermit70.html#x6.4
- 547. http://www.columbia.edu/kermit/ckb2.htm
- 548. http://www.columbia.edu/kermit/ckermit70.html#x4.21
- 549. http://www.columbia.edu/kermit/ckermit70.html#x6.5
- 550. http://www.columbia.edu/kermit/ckermit70.html#x2.8
- 551. http://www.columbia.edu/kermit/ckermit70.html#x7.7
- 552. http://www.columbia.edu/kermit/ckermit70.html#x7.2
- 553. http://www.columbia.edu/kermit/ckermit70.html#x1.19
- 554. http://www.columbia.edu/kermit/ckermit70.html#x4.9
- 555. http://www.columbia.edu/kermit/ckermit70.html#x4.1
- 556. http://www.columbia.edu/kermit/ckermit70.html#x4.2
- 557. http://www.columbia.edu/kermit/ckermit70.html#x4.1
- 558. http://www.columbia.edu/kermit/ckermit70.html#x4.2
- 559. http://www.columbia.edu/kermit/ckermit70.html#x2.1.11
- 560. http://www.columbia.edu/kermit/ckermit70.html#x2.10
- 561. http://www.columbia.edu/kermit/ckermit70.html#ferrstring
- 562. http://www.columbia.edu/kermit/ckermit70.html#x4.2.5
- 563. http://www.columbia.edu/kermit/ckermit70.html#x2.1.10
- 564. http://www.columbia.edu/kermit/ckermit70.html#x9.1
- 565. http://www.columbia.edu/kermit/ckermit70.html#x7.23
- 566. http://www.columbia.edu/kermit/ckermit70.html#x7.23
- 567. http://www.columbia.edu/kermit/ckermit70.html#x1.22
- 568. http://www.columbia.edu/kermit/ckermit70.html#x1.6
- 569. http://www.columbia.edu/kermit/ckermit70.html#x7.23
- 570. http://www.columbia.edu/kermit/ckermit70.html#x7.24
- 571. http://www.columbia.edu/kermit/ckermit70.html#x7.24
- 572. http://www.columbia.edu/kermit/ckermit70.html#x4.2.3
- 573. http://www.columbia.edu/kermit/ckermit70.html#x7.12
- 574. http://www.columbia.edu/kermit/ckermit70.html#x7.9
- 575. http://www.columbia.edu/kermit/ckb2.htm
- 576. http://www.columbia.edu/kermit/ckermit70.html#x4.11.3
- 577. http://www.columbia.edu/kermit/ckermit70.html#x4.11.3
- 578. http://www.columbia.edu/kermit/ckermit70.html#x7.5
- 579. http://www.columbia.edu/kermit/ckermit70.html#x7.10.7
- 580. http://www.columbia.edu/kermit/ckermit70.html#x7.10.7
- 581. http://www.columbia.edu/kermit/ckermit70.html#x4.2.8.4
- 582. http://www.columbia.edu/kermit/ckermit70.html#x4.2.5
- 583. http://www.columbia.edu/kermit/ckermit70.html#x7.8
- 584. http://www.columbia.edu/kermit/ckermit70.html#x4.9.1
- 585. http://www.columbia.edu/kermit/ckb2.htm
- 586. http://www.columbia.edu/kermit/ckermit70.html#x7.19
- 587. http://www.columbia.edu/kermit/ckermit70.html#x7.16
- 588. http://www.columbia.edu/kermit/ckermit70.html#x7.9.1
- 589. http://www.columbia.edu/kermit/ckermit70.html#x7.5
- 590. http://www.columbia.edu/kermit/ckermit70.html#x7.3
- 591. http://www.columbia.edu/kermit/ckermit70.html#x4.11.3
- 592. http://www.columbia.edu/kermit/ckermit70.html#x4.5.1
- 593. http://www.columbia.edu/kermit/ckermit70.html#x7.10
- 594. http://www.columbia.edu/kermit/ckermit70.html#x7.10.10
- 595. http://www.columbia.edu/kermit/ckermit70.html#x1.5
- 596. http://www.columbia.edu/kermit/ckermit70.html#x7.23
- 597. http://www.columbia.edu/kermit/ckermit70.html#x7.10.7
- 598. http://www.columbia.edu/kermit/ckermit70.html#x7.10.7
- 599. http://www.columbia.edu/kermit/ckermit70.html#x4.11.3
- 600. http://www.columbia.edu/kermit/ckermit70.html#x7.10.11
- 601. http://www.columbia.edu/kermit/ckermit70.html#x4.9
- 602. http://www.columbia.edu/kermit/ckermit70.html#x7.10.3
- 603. http://www.columbia.edu/kermit/ckermit70.html#x7.3
- 604. http://www.columbia.edu/kermit/ckermit70.html#x7.9.2
- 605. http://www.columbia.edu/kermit/ckb2.htm
- 606. http://www.columbia.edu/kermit/ckermit70.html#x4.17.2
- 607. http://www.columbia.edu/kermit/ckermit70.html#x1.22
- 608. http://www.columbia.edu/kermit/ckermit70.html#x4.7.1
- 609. http://www.columbia.edu/kermit/ckermit70.html#x1.22
- 610. http://www.columbia.edu/kermit/ckermit70.html#x4.3
- 611. http://www.columbia.edu/kermit/ckermit70.html#x4.9
- 612. http://www.columbia.edu/kermit/ckermit70.html#x1.22
- 613. http://www.columbia.edu/kermit/ckermit70.html#x1.6
- 614. http://www.columbia.edu/kermit/ckermit70.html#x7.5
- 615. http://www.columbia.edu/kermit/ckermit70.html#x7.5
- 616. http://www.columbia.edu/kermit/ckermit70.html#x7.19
- 617. http://www.columbia.edu/kermit/ckermit70.html#x4.9.1
- 618. http://www.columbia.edu/kermit/ckermit70.html#x9.3
- 619. http://www.columbia.edu/kermit/ckermit70.html#x7.5
- 620. http://www.columbia.edu/kermit/ckb2.htm
- 621. http://www.columbia.edu/kermit/ckermit70.html#x7.4
- 622. http://www.columbia.edu/kermit/ckermit70.html#x7.20.2
- 623. http://www.columbia.edu/kermit/ckermit70.html#x7.10.5
- 624. http://www.columbia.edu/kermit/ckermit70.html#x7.10.9
- 625. http://www.columbia.edu/kermit/ckermit70.html#x1.10
- 626. http://www.columbia.edu/kermit/ckermit70.html#x1.5
- 627. http://www.columbia.edu/kermit/ckermit70.html#x4.7.1
- 628. http://www.columbia.edu/kermit/iksd.html
- 629. http://www.columbia.edu/kermit/ckermit70.html#x7.19
- 630. http://www.columbia.edu/kermit/ckermit70.html#x4.10
- 631. http://www.columbia.edu/kermit/ckermit70.html#x4.11
- 632. http://www.columbia.edu/kermit/ckermit70.html#x4.3
- 633. http://www.columbia.edu/kermit/gkermit.html
- 634. http://www.columbia.edu/kermit/ckermit70.html#x4.20
- 635. http://www.columbia.edu/kermit/gkermit.html
- 636. http://www.columbia.edu/kermit/ckb2.htm
- 637. http://www.columbia.edu/kermit/ckermit70.html#x7.3
- 638. mailto:kermit@columbia.edu
- 639. http://www.columbia.edu/kermit/ckermit70.html#top
- 640. http://www.columbia.edu/kermit/ckermit.html
- 641. http://www.columbia.edu/kermit/index.html
+ 496. http://www.columbia.edu/kermit/ckb2.htm
+ 497. http://www.columbia.edu/kermit/ckermit70.html#x1.5
+ 498. http://www.columbia.edu/kermit/ckermit70.html#x4.2.2
+ 499. http://www.columbia.edu/kermit/ckermit70.html#x4.7.1
+ 500. http://www.columbia.edu/kermit/ckermit70.html#x4.2
+ 501. http://www.columbia.edu/kermit/ckermit70.html#x4.10
+ 502. http://www.columbia.edu/kermit/ckermit70.html#x4.2.2
+ 503. http://www.columbia.edu/kermit/ckermit70.html#x4.7.1
+ 504. http://www.columbia.edu/kermit/ckermit70.html#x4.2
+ 505. http://www.columbia.edu/kermit/ckermit70.html#x4.10
+ 506. http://www.columbia.edu/kermit/ckermit70.html#x1.11.5
+ 507. http://www.columbia.edu/kermit/ckermit70.html#x4.0.6
+ 508. http://www.columbia.edu/kermit/ckermit70.html#x4.11
+ 509. http://www.columbia.edu/kermit/ckermit70.html#x4.9.1
+ 510. http://www.columbia.edu/kermit/ckermit70.html#x4.11.3
+ 511. http://www.columbia.edu/kermit/ckermit70.html#x4.9
+ 512. http://www.columbia.edu/kermit/ckermit70.html#x4.9
+ 513. http://www.columbia.edu/kermit/ckermit70.html#x4.5.1
+ 514. http://www.columbia.edu/kermit/ckermit70.html#x7.10
+ 515. http://www.columbia.edu/kermit/ckermit70.html#x7.10.5
+ 516. http://www.columbia.edu/kermit/ckermit70.html#x7.10.3
+ 517. http://www.columbia.edu/kermit/ckermit70.html#x7.10.5
+ 518. http://www.columbia.edu/kermit/ckb2.htm
+ 519. http://www.columbia.edu/kermit/ckermit70.html#x4.3
+ 520. http://www.columbia.edu/kermit/ckermit70.html#x4.10
+ 521. http://www.columbia.edu/kermit/ckermit70.html#x4.3
+ 522. http://www.columbia.edu/kermit/ckermit70.html#x4.10
+ 523. http://www.columbia.edu/kermit/ckermit70.html#x4.15
+ 524. http://www.columbia.edu/kermit/ckermit70.html#x4.18
+ 525. http://www.columbia.edu/kermit/ckermit70.html#x4.20
+ 526. http://www.columbia.edu/kermit/ckermit70.html#x4.20
+ 527. http://www.columbia.edu/kermit/ckermit70.html#x4.20
+ 528. http://www.columbia.edu/kermit/ckermit70.html#x4.19
+ 529. http://www.columbia.edu/kermit/ckermit70.html#x4.16
+ 530. http://www.columbia.edu/kermit/ckermit70.html#x4.19
+ 531. http://www.columbia.edu/kermit/ckermit70.html#x4.20.2.3
+ 532. http://www.columbia.edu/kermit/ckermit70.html#x1.5
+ 533. http://www.columbia.edu/kermit/ckermit70.html#x6.6.5.4
+ 534. http://www.columbia.edu/kermit/ckermit70.html#x4.22.2
+ 535. http://www.columbia.edu/kermit/ckermit70.html#x4.22.3
+ 536. http://www.columbia.edu/kermit/ckb2.htm
+ 537. http://www.columbia.edu/kermit/ckb2.htm
+ 538. http://www.columbia.edu/kermit/ckermit70.html#x9.3
+ 539. http://www.columbia.edu/kermit/ckermit70.html#x5.2.1
+ 540. http://www.columbia.edu/kermit/ckermit70.html#x4.5.1
+ 541. http://www.columbia.edu/kermit/ckermit70.html#x4.5.2
+ 542. http://www.columbia.edu/kermit/ckermit70.html#x6.6
+ 543. http://www.columbia.edu/kermit/ckermit70.html#xiii
+ 544. http://www.columbia.edu/kermit/ckermit70.html#xiii
+ 545. ftp://ftp.isi.edu/in-notes/rfc1489.txt
+ 546. ftp://ftp.isi.edu/in-notes/rfc2319.txt
+ 547. http://www.unicode.org/
+ 548. http://www.columbia.edu/kermit/ckermit70.html#x6.6.2
+ 549. http://www.columbia.edu/kermit/ckermit70.html#x6.6.5.1
+ 550. ftp://ftp.isi.edu/in-notes/rfc2640.txt
+ 551. http://www.columbia.edu/kermit/ckermit70.html#x6.6.2
+ 552. http://www.columbia.edu/kermit/ckermit70.html#x6.0
+ 553. http://www.columbia.edu/kermit/ckermit70.html#x6.5
+ 554. http://www.columbia.edu/kermit/ckermit70.html#x6.4
+ 555. http://www.columbia.edu/kermit/ckb2.htm
+ 556. http://www.columbia.edu/kermit/ckermit70.html#x4.21
+ 557. http://www.columbia.edu/kermit/ckermit70.html#x6.5
+ 558. http://www.columbia.edu/kermit/ckermit70.html#x2.8
+ 559. http://www.columbia.edu/kermit/ckermit70.html#x7.7
+ 560. http://www.columbia.edu/kermit/ckermit70.html#x7.2
+ 561. http://www.columbia.edu/kermit/ckermit70.html#x1.19
+ 562. http://www.columbia.edu/kermit/ckermit70.html#x4.9
+ 563. http://www.columbia.edu/kermit/ckermit70.html#x4.1
+ 564. http://www.columbia.edu/kermit/ckermit70.html#x4.2
+ 565. http://www.columbia.edu/kermit/ckermit70.html#x4.1
+ 566. http://www.columbia.edu/kermit/ckermit70.html#x4.2
+ 567. http://www.columbia.edu/kermit/ckermit70.html#x2.1.11
+ 568. http://www.columbia.edu/kermit/ckermit70.html#x2.10
+ 569. http://www.columbia.edu/kermit/ckermit70.html#ferrstring
+ 570. http://www.columbia.edu/kermit/ckermit70.html#x4.2.5
+ 571. http://www.columbia.edu/kermit/ckermit70.html#x2.1.10
+ 572. http://www.columbia.edu/kermit/ckermit70.html#x9.1
+ 573. http://www.columbia.edu/kermit/ckermit70.html#x7.23
+ 574. http://www.columbia.edu/kermit/ckermit70.html#x7.23
+ 575. http://www.columbia.edu/kermit/ckermit70.html#x1.22
+ 576. http://www.columbia.edu/kermit/ckermit70.html#x1.6
+ 577. http://www.columbia.edu/kermit/ckermit70.html#x7.23
+ 578. http://www.columbia.edu/kermit/ckermit70.html#x7.24
+ 579. http://www.columbia.edu/kermit/ckermit70.html#x7.24
+ 580. http://www.columbia.edu/kermit/ckermit70.html#x4.2.3
+ 581. http://www.columbia.edu/kermit/ck90.html
+ 582. http://www.columbia.edu/kermit/ckermit70.html#x7.12
+ 583. http://www.columbia.edu/kermit/ckermit70.html#x7.9
+ 584. http://www.columbia.edu/kermit/ckb2.htm
+ 585. http://www.columbia.edu/kermit/ckermit70.html#x4.11.3
+ 586. http://www.columbia.edu/kermit/ckermit70.html#x4.11.3
+ 587. http://www.columbia.edu/kermit/ckermit70.html#x7.5
+ 588. http://www.columbia.edu/kermit/ckermit70.html#x7.10.7
+ 589. http://www.columbia.edu/kermit/ckermit70.html#x7.10.7
+ 590. http://www.columbia.edu/kermit/ckermit70.html#x4.2.8.4
+ 591. http://www.columbia.edu/kermit/ckermit70.html#x4.2.5
+ 592. http://www.columbia.edu/kermit/ckermit70.html#x7.8
+ 593. http://www.columbia.edu/kermit/ckermit70.html#x4.9.1
+ 594. http://www.columbia.edu/kermit/ckb2.htm
+ 595. http://www.columbia.edu/kermit/ckermit70.html#x7.19
+ 596. http://www.columbia.edu/kermit/ckermit70.html#x7.16
+ 597. http://www.columbia.edu/kermit/ckermit70.html#x7.9.1
+ 598. http://www.columbia.edu/kermit/ckermit70.html#x7.5
+ 599. http://www.columbia.edu/kermit/ckermit70.html#x7.3
+ 600. http://www.columbia.edu/kermit/ckermit70.html#x4.11.3
+ 601. http://www.columbia.edu/kermit/ckermit70.html#x4.5.1
+ 602. http://www.columbia.edu/kermit/ckermit70.html#x7.10
+ 603. http://www.columbia.edu/kermit/ckermit70.html#x7.10.10
+ 604. http://www.columbia.edu/kermit/ckermit70.html#x1.5
+ 605. http://www.columbia.edu/kermit/ckermit70.html#x7.23
+ 606. http://www.columbia.edu/kermit/ckermit70.html#x7.10.7
+ 607. http://www.columbia.edu/kermit/ckermit70.html#x7.10.7
+ 608. http://www.columbia.edu/kermit/ckermit70.html#x4.11.3
+ 609. http://www.columbia.edu/kermit/ckermit70.html#x7.10.11
+ 610. http://www.columbia.edu/kermit/ckermit70.html#x4.9
+ 611. http://www.columbia.edu/kermit/ckermit70.html#x7.10.3
+ 612. http://www.columbia.edu/kermit/ckermit70.html#x7.3
+ 613. http://www.columbia.edu/kermit/ckermit70.html#x7.9.2
+ 614. http://www.columbia.edu/kermit/ckb2.htm
+ 615. http://www.columbia.edu/kermit/ckermit70.html#x4.17.2
+ 616. http://www.columbia.edu/kermit/ckermit70.html#x1.22
+ 617. http://www.columbia.edu/kermit/ckermit70.html#x4.7.1
+ 618. http://www.columbia.edu/kermit/ckermit70.html#x1.22
+ 619. http://www.columbia.edu/kermit/ckermit70.html#x4.3
+ 620. http://www.columbia.edu/kermit/ckermit70.html#x4.9
+ 621. http://www.columbia.edu/kermit/ckermit70.html#x1.22
+ 622. http://www.columbia.edu/kermit/ckermit70.html#x1.6
+ 623. http://www.columbia.edu/kermit/ckermit70.html#x7.5
+ 624. http://www.columbia.edu/kermit/ckermit70.html#x7.5
+ 625. http://www.columbia.edu/kermit/ckermit70.html#x7.19
+ 626. http://www.columbia.edu/kermit/ckermit70.html#x4.9.1
+ 627. http://www.columbia.edu/kermit/ckermit70.html#x9.3
+ 628. http://www.columbia.edu/kermit/ckermit70.html#x7.5
+ 629. http://www.columbia.edu/kermit/ckb2.htm
+ 630. http://www.columbia.edu/kermit/ckermit80.html
+ 631. http://www.columbia.edu/kermit/ckermit80.html#x9
+ 632. http://www.columbia.edu/kermit/ckermit70.html#x7.4
+ 633. http://www.columbia.edu/kermit/ckermit80.html
+ 634. http://www.columbia.edu/kermit/ckermit80.html#x9
+ 635. http://www.columbia.edu/kermit/ckermit70.html#x7.20.2
+ 636. http://www.columbia.edu/kermit/ckermit70.html#x7.10.5
+ 637. http://www.columbia.edu/kermit/ckermit70.html#x7.10.9
+ 638. http://www.columbia.edu/kermit/ckermit70.html#x1.10
+ 639. http://www.columbia.edu/kermit/ckermit70.html#x1.5
+ 640. http://www.columbia.edu/kermit/ckermit70.html#x4.7.1
+ 641. http://www.columbia.edu/kermit/iksd.html
+ 642. http://www.columbia.edu/kermit/ckermit70.html#x7.19
+ 643. http://www.columbia.edu/kermit/ckermit70.html#x4.10
+ 644. http://www.columbia.edu/kermit/ckermit70.html#x4.11
+ 645. http://www.columbia.edu/kermit/ckermit70.html#x4.3
+ 646. http://www.columbia.edu/kermit/gkermit.html
+ 647. http://www.columbia.edu/kermit/ckermit70.html#x4.20
+ 648. http://www.columbia.edu/kermit/gkermit.html
+ 649. http://www.columbia.edu/kermit/ckb2.htm
+ 650. http://www.columbia.edu/kermit/ckermit70.html#x7.3
+ 651. mailto:kermit@columbia.edu
+ 652. http://www.columbia.edu/kermit/ckermit70.html#top
+ 653. http://www.columbia.edu/kermit/ckermit.html
+ 654. http://www.columbia.edu/kermit/index.html