2 [1]The Columbia Crown The Kermit Project | Columbia University
3 612 West 115th Street, New York NY 10025 USA o [2]kermit@columbia.edu
5 [3]Home [4]Kermit 95 [5]C-Kermit [6]Scripts [7]Current [8]New [9]FAQ
8 C-Kermit 8.0 Update Notes
10 [ [11]Contents ] [ [12]C-Kermit ] [ [13]Kermit Home ]
12 Second Supplement to [14]Using C-Kermit, 2nd Edition
16 As of C-Kermit version: 8.0.211
17 Date of C-Kermit release: 10 April 2003
18 This file last updated: Mon Sep 13 08:52:36 2010
20 * IF YOU ARE READING A PLAIN-TEXT version of this document, note that
21 it is a plain-text dump of a Web page. You can visit the original
22 (and possibly more up-to-date) Web page here:
23 [15]http://www.columbia.edu/kermit/ckermit80.html
25 * If you are reading the HTML version of this file with a GUI Web
26 browser, the features added since C-Kermit 8.0.201 are shown in red
27 if your browser and monitor permit. Features that were new to
28 versions 8.0.200 and 201 are in black.
30 Authors: Frank da Cruz and Christine M. Gianone
31 Address: The Kermit Project
34 New York NY 10025-7799
36 Fax: +1 (212) 662-6442
37 E-Mail: [16]kermit-support@columbia.edu
38 Web: [17]http://www.columbia.edu/kermit/
39 Or: [18]http://www.kermit-project.org/
40 Or: [19]http://www.columbia.nyc.ny.us/kermit/
45 Copyright © 1997, 2002, Frank da Cruz and Christine M. Gianone.
49 Copyright © 1995, 2002, Trustees of Columbia University in the
50 City of New York. All rights reserved.
53 Copyright © 1985, 2002,
54 Trustees of Columbia University in the City of New York. All
55 rights reserved. See the C-Kermit [20]COPYING.TXT file or the
56 copyright text in the [21]ckcmai.c module for disclaimer and
59 When Kerberos(TM) and/or SRP(TM) (Secure Remote Password) and/or
60 SSL/TLS protocol are included:
61 Portions Copyright © 1990, Massachusetts Institute of
63 Portions Copyright © 1991, 1993 Regents of the University of
65 Portions Copyright © 1991, 1992, 1993, 1994, 1995 by AT&T.
66 Portions Copyright © 1997, Stanford University.
67 Portions Copyright © 1995-1997, Eric Young <eay@cryptosoft.com>.
69 For the full text of the third-party copyright notices, see
74 This file lists changes made to C-Kermit since version 7.0 was released
75 in January 2000. Use this file as a supplement to:
77 * The second edition of [23]Using C-Kermit; and:
78 * The [24]C-Kermit 7.0 Update Notes. Also available in plain-text
79 form as [25]ckermit70.txt.
81 until the third edition of Using C-Kermit is published. We apologize
82 for the scattered documentation and will consolidate it when we are
87 Several other files accompany this new Kermit release:
90 C-Kermit Tutorial (for Unix). Also distributed in Nroff form as
91 [27]ckuker.nr, the Unix C-Kermit manual page.
94 Discussion of Kermit's new authentication and encryption
95 features, updated for C-Kermit 8.0.
98 Detailed documentation of Kermit's Telnet client, updated for
102 Tutorial: Writing FTP automation scripts
105 Platform-independent C-Kermit hints and tips. Also distributed
106 in plain text form as [32]ckcbwr.txt
109 Unix-specific C-Kermit hints and tips. Also distributed in plain
110 text form as [34]ckubwr.txt.
113 VMS-specific C-Kermit hints and tips. Also distributed in plain
114 text form as [36]ckvbwr.txt.
117 Unix C-Kermit installation instructions. Also distributed in
118 plain text form as [38]ckuins.txt.
121 VMS C-Kermit installation instructions. Also distributed in
122 plain text form as [40]ckvins.txt.
125 Compile-time configuration options. Also distributed in plain
126 text form as [42]ckccfg.txt.
129 C-Kermit Program Logic Manual. Also distributed in plain text
130 form as [44]ckcplm.txt.
133 Internet Kermit Service Administrators Guide for Unix.
136 C-Kermit as an SSH Subsystem (SFTP server replacement).
138 [ [47]Top ] [ [48]C-Kermit ] [ [49]Kermit Home ]
143 [51]1. FIXES SINCE VERSION 7.0.196
145 [53]2.1. SSH Connections
146 [54]2.2. HTTP Connections
147 [55]2.2.1. HTTP Command Switches
148 [56]2.2.2. HTTP Action Commands
149 [57]2.2.3. HTTP Headers
150 [58]2.2.4. Secure HTTP Connections
151 [59]2.2.5. HTTP Variables
152 [60]2.2.6. The HTTP Command-Line Personality
153 [61]3. THE BUILT-IN FTP CLIENT
154 [62]3.1. Making and Managing FTP Connections
155 [63]3.1.1. Kermit Command-Line Options for FTP
156 [64]3.1.2. The FTP Command-Line Personality
157 [65]3.1.3. The FTP URL Interpreter
158 [66]3.1.4. Interactive FTP Session Establishment
159 [67]3.2. Making Secure FTP Connections
160 [68]3.3. Setting FTP Preferences
161 [69]3.4. Managing Directories and Files
162 [70]3.5. Uploading Files With FTP
163 [71]3.5.1. FTP PUT Switches
164 [72]3.5.2. Update Mode
166 [74]3.6. Downloading Files With FTP
167 [75]3.6.1. FTP GET Switches
168 [76]3.6.2. Filename Collisions
170 [78]3.7. Translating Character Sets
171 [79]3.7.1. Character Sets and Uploading
172 [80]3.7.2. Character Sets and Downloading
173 [81]3.8. FTP Command Shortcuts
174 [82]3.9. Dual Sessions
175 [83]3.10. Automating FTP Sessions
176 [84]3.10.1. FTP-Specific Variables and Functions
178 [86]3.10.3. Automating Secure FTP Connections
179 [87]3.11. Advanced FTP Protocol Features [88]4. FILE SCANNING
180 [89]5. FILE AND DIRECTORY NAMES CONTAINING SPACES
181 [90]6. OTHER COMMAND PARSING IMPROVEMENTS
182 [91]6.1. Grouping Macro Arguments
183 [92]6.2. Directory and File Name Completion
184 [93]6.3. Passing Arguments to Command Files
185 [94]6.4. More-Prompting
186 [95]6.5. Commas in Macro Definitions
188 [97]7. NEW COMMANDS AND SWITCHES
189 [98]8. SCRIPTING IMPROVEMENTS
190 [99]8.1. Performance and Debugging
191 [100]8.2. Using Macros as Numeric Variables
192 [101]8.3. New IF Conditions
193 [102]8.4. The ON_UNKNOWN_COMMAND and ON_CD Macros
194 [103]8.5. The SHOW MACRO Command
196 [105]8.7. New or Improved Built-in Variables and Functions
197 [106]8.8. The RETURN and END Commands
198 [107]8.9. UNDEFINing Groups of Variables
199 [108]8.10. The INPUT and MINPUT Commands
200 [109]8.11. Learned Scripts
201 [110]8.12. Pattern Matching
202 [111]8.13. Dates and Times
203 [112]8.14. Trapping Keyboard Interruption
204 [113]9. S-EXPRESSIONS
205 [114]9.1. What is an S-Expression?
206 [115]9.2. Integer and Floating-Point-Arithmetic
207 [116]9.3. How to Use S-Expressions
208 [117]9.4. Summary of Built-in Constants and Operators
210 [119]9.6. Assignments and Scope
211 [120]9.7. Conditional Expressions
212 [121]9.8. Extensibility
214 [123]9.10. Differences from Algebraic Notation
215 [124]9.11.Differences from Lisp
216 [125]10. FILE TRANSFER
217 [126]11. MODEMS AND DIALING
218 [127]12. TERMINAL CONNECTION
219 [128]13. CHARACTER SETS
220 [129]14. DIALOUT FROM TELNET TERMINAL SERVERS
221 [130]15. COPING WITH BROKEN KERMIT PARTNERS
222 [131]16. NEW COMMAND-LINE OPTIONS
225 [ [133]Top ] [ [134]C-Kermit ] [ [135]Kermit Home ]
229 The Initialization and Customization Files
230 C-Kermit 8.0 now supports specification of the initialization
231 file name (path) in an environment variable, CKERMIT_INI. It
232 also relies far less than before on the initialization for
233 functioning. See [136]Section 5 of the Unix C-Kermit
234 [137]installation instructions for details. As of version
235 8.0.201, C-Kermit also executes your customization file (if you
236 have one) even if the initialization file was not found.
237 Previously, the customization file was executed by a TAKE
238 command in the initialization file (and it still is, if an
239 initialization is found).
242 As always, we do our best to avoid changes that break existing
243 scripts. However, C-Kermit 8.0 does include a rather pervasive
244 syntax change that might alter the behavior of scripts that
245 depend on the previous behavior. As described in [138]Section 5,
246 C-Kermit now accepts doublequotes in most contexts where you
247 previously had to use braces to group multiple words into a
248 single field, or to force inclusion of leading or trailing
249 blanks. Most noticeably, in C-Kermit 7.0 and earlier:
251 echo {this is a string}
259 echo "this is a string"
265 In C-Kermit 8.0, both print:
269 To force the doublequotes to be treated as part of the string,
270 use either of the following forms:
272 echo {"this is a string"}
273 echo ""this is a string""
275 Similarly, to force braces to be treated as part of the string:
277 echo "{this is a string}"
278 echo {{this is a string}}
280 Other incompatibilities:
282 1. Using the SET HOST command to make HTTP connections is no
283 longer supported. Instead, use the new HTTP OPEN command,
284 described in [139]Section 2.2.
286 C-Kermit 7.1 Alpha.01 (8 December 2000)
288 Its major new features are those listed in the [140]Table of
289 Contents: the FTP client, file scanning, command parsing and
290 scripting improvements, S-Expressions, and support for the
291 Telnet Com Port Option, plus wider availability of the Kerberos,
292 SSL/TLS, and SRP security options for secure Internet
295 C-Kermit 7.1.199 Alpha.02 (4 January 2001)
297 + C-Kermit now accepts [141]FTP, TELNET, and IKSD URLs as its
298 first command-line argument.
299 + Character-set translation added to the FTP client for
301 + Optional [143]setting of date of incoming files by FTP [M]GET
302 from the server date.
303 + [144]FTP CHECK filename added to let FTP client check the
304 existence of a file on the server.
305 + [145]FTP GET /NAMELIST:filename added to get list of server
306 filenames into a local file.
307 + [146]FTP [M]PUT /SERVER-RENAME:template added to make server
308 rename a file as indicated by the template after it has
310 + FTP [M]GET /SERVER-RENAME:template added to make server rename
311 a file as indicated by the template after it has been sent
313 + FTP [147]VDIRECTORY added for getting verbose directory
314 listings from TOPS-20.
315 + [148]FTP TYPE TENEX added for transferring 8-bit binary files
317 + Added [149]automatic text/binary mode switching for FTP
318 [M]GET, based on filename patterns (e.g. *.zip, *.gz, *.exe
319 are binary; *.txt, *.c are text).
320 + [150]SET SEND I-PACKETS OFF added for coping with Kermit
321 servers that do not support I packets.
322 + A new option was added to [151]\fword() and \fsplit() for
323 parsing comma-separated lists that might contain empty
325 + Bug fixes including:
326 o {} or "" could not be used as expected to represent the
328 o ,- on a line by itself in a macro definition caused
329 subsequent statements to be skipped.
330 o FTP [M]GET didn't work right if path segments were
331 included in the filespec.
332 o FTP MGET, if interrupted, did not clear its file list.
333 o Various problems with FTP PUT /AS-NAME that nobody
335 o Some FTP messages and displays interfered with each
337 o Parsing of YESTERDAY, TODAY, and TOMORROW in date-time
339 o Automatic old-to-new dialing directory format conversion
341 o Various source-code portability problems fixed.
342 + Improvement of various HELP and SHOW messages.
344 C-Kermit 7.1.199 Alpha.04 (1 April 2001)
347 o Changed default modem type from NONE to GENERIC.
348 o Generic dialing now sends no init string at all.
349 o Changed default terminal bytesize from 7 to 8.
351 o SET SESSION-LOG TIMESTAMPED-TEXT for timestamped session
354 o Conexant modem family
355 o Lucent VENUS chipset
360 o FTP OPEN /PASSIVE and /ACTIVE switches added.
361 o Now works with servers that that don't include path in
363 o Fixed SEND /RECURSIVE not to follow symlinks (UNIX).
364 o SET FTP VERBOSE-MODE default is now OFF instead of ON.
366 o Fixed what I hope is the last "Receive window full"
368 o SET PREFIXING or SET CONTROL PREFIX now automatically
369 sets CLEARCHANNEL OFF.
370 o Fixed incorrect report of number of files transferred at
372 o Fixed SEND /RECURSIVE not to follow symlinks (UNIX).
374 o HTTP and shadow passwords enabled for SCO 5.0.6.
375 o Even with SET FILENAMES CONVERTED, spaces were still
376 accepted in incoming filenames; now they are converted to
378 o Added support for compile-time mktemp()/mkstemp()
381 o Session-log format for scripted sessions fixed.
383 o Fixed \frdir() not to follow symlinks (UNIX).
384 o Fixed \fday() not to dump core for dates prior to 17 Mar
387 o "Closing blah..." message upon exit could not be
389 o Added /PAGE and /NOPAGE to DELETE switches.
390 o Added GO response for DELETE /ASK (delete all the rest
392 o Added GO response to "more?" prompt (for multi-page
394 o Updated HELP texts.
396 C-Kermit 7.1.199 Beta.01 (10 May 2001)
398 + FTP client verbosity adjustments.
399 + Bug with generic modem dialing pausing several secs fixed.
400 + SET HOST /USER:, SET LOGIN USERID, etc, fixed when given no
402 + A couple \v(dm_blah) dial modifier variables added.
403 + "--version" command-line switch added.
404 + Fixed NetBSD serial-port DTR handling.
405 + Lots of syntax cleanups for Flexelint and gcc -Wall.
406 + Fixed modem-type aliases to not take precedence over real
408 + Fixed funny treatment of doublequotes by ECHO command.
409 + Enabled SET SESSION-LOG for VMS and other non-UNIX platforms.
410 + Fixed changing direction in command history buffer.
411 + Fixed handling of IKSD URLs.
412 + Made sure DELETE prints a message if it got any errors.
414 C-Kermit 8.0.200 Beta.02 (28 June 2001)
416 + Major version number increased from 7 to 8.
418 + More-consistent Kermit protocol defaults.
419 + CONNECT idle timeout and action selection.
420 + CONNECT status variable.
421 + A way to allocate more space for filename lists.
422 + Pseudoterminal handler fixed for late-model Linuxes.
423 + Command-line option -dd for timestamped debug log.
424 + Download directory now works for external protocols too.
425 + GREP /COUNT:variable.
426 + SET ATTRIBUTE RECORD-FORMAT { OFF, ON }.
429 C-Kermit 8.0.200 Beta.03 (9 Sep 2001)
431 + [153]HTTP 1.1 connections and scripting
432 + [154]ON_CTRLC macro for trapping Ctrl-C in scripts
433 + [155]Date-time parsing improvements, timezones, comparison,
435 + [156]Pattern-matching improvements
437 + SET EXIT HANGUP { ON, OFF }
438 + SET FILE EOF { CTRL-Z, LENGTH }
443 C-Kermit 8.0.200 Beta.04 (16 Nov 2001)
445 + [157]New Unix man page
446 + [158]New Unix installation instructions
447 + SET TELOPT policies are now enforced on non-Telnet ports if
448 the server begins Telnet negotiations.
449 + SET TERMINAL IDLE-ACTION { TELNET-NOP, TELNET-AYT }.
450 + UUCP lockfile creation race condition fixed.
451 + Dialout, modem signals, hangup, hardware flow control, etc,
452 tested extensively on many platforms, numerous problems fixed.
453 + Improved hints when dialing fails.
454 + SET STOP-BITS 2 can now be given without SET FLOW HARDWARE.
455 + Major improvements in RFC 2217 Telnet Com-Port Control.
456 + Improved ability to REDIAL a modem server port.
457 + kermit -h now shows the command name in the usage usage
459 + kermit -h now shows ALL command-line options.
460 + kermit -s blah, where blah is a symlink, now works.
461 + --noperms command-line option = SET ATTRIBUTE PERMISSIONS OFF.
462 + HTTP and HTTPS URLs now supported on the command line.
463 + An http command-line personality is now available.
464 + Initialization file streamlined to load faster, anachronisms
466 + Updated NEWS, INTRO, HELP text, SHOW commands. In particular,
467 see SHOW COMM, HELP SET LINE, HELP WAIT.
468 + Date/time arithmetic routines converted from floating-point to
469 integer arithmetic (internally) for greater accuracy and
471 + Quoted strings containing commas no longer break macro
473 + Dynamic Kermit file-transfer timeouts are now much more
475 + New "hot keys" to turn debug.log on/off during file transfer.
476 + Improved hints when file transfer fails.
477 + FTP CD orientation messages are now printed.
478 + -R now accepted on the FTP command line to request Recursion.
479 + -m allows Active or Passive mode to be chosen on the FTP
481 + -dd on the FTP command line creates a timestamped debug.log.
482 + FTP command-line security options filled in.
483 + Improved automatic text/binary mode switching for MGET.
484 + Removed spurious error messages that sometimes occur during
486 + DIRECTORY, GREP, TYPE, HEAD, and TAIL now have a /OUTPUT:file
488 + TYPE /NUMBER adds line numbers.
489 + CAT = TYPE /NOPAGE; MORE = TYPE /PAGE.
490 + GETOK ?-help fixed.
491 + \v(timestamp) (= "\v(ndate) \v(time)")
492 + \v(hour) (hour of the day, 0-23)
493 + \funix2dospath() converts a UNIX path (/) to a DOS one (\).
494 + \fdos2unixpath() converts a DOS (Windows, OS/2) path to a UNIX
496 + \fkeywordval() parses name=value pair, allows macro keyword
498 + We now make every attempt to not write passwords to the
500 + New Certificate Authority certificates file, includes the
501 Kermit Project at Columbia University so you can access our
503 + Secure targets improved and better documented in Unix
505 + All Linux (libc and glibc) builds consolidated under "make
507 + HP-UX makefile targets now have consistent names.
508 + New aix50 and aix51 targets added.
510 C-Kermit 8.0.200 Final (12 Dec 2001)
512 + Remote/local-mode confusion on some platforms introduced in
514 + Many of the makefile targets adjusted, new ones added.
515 + New "make install" target should please most people.
516 + New command: SHOW IKSD.
518 + Last-minute touchups to text messages, HELP text, etc.
519 + Enable modem-signal reading for SCO OSR5 and Unixware 7.
520 + Special superfast TRANSMIT /BINARY /NOECHO /NOWAIT mode added.
521 + Fixed PBX dialing in unmarked-area-code case.
522 + Improved SHOW COMMUNICATIONS tells lockfile directory, typical
524 + Some FTP OPEN command parsing problems fixed.
525 + Some errors in date arithmetic fixed.
526 + New command: SET TERMINAL AUTODOWNLOAD { ..., ERROR { STOP,
528 + New command: HELP FIREWALL.
529 + SET MODEM HANGUP-METHOD DTR added as synonym for RS232-SIGNAL
530 + Support for secure URL protocols added: telnets:, ftps:,
533 C-Kermit 8.0.201 (8 Feb 2002)
535 + Installability as an [159]SSH v2 Subsystem.
536 + [160]SET LOCUS command.
537 + [161]L-versions of CD, DIR, DELETE, MKDIR, etc, to force local
539 + [162]USER and ACCOUNT added as synonyms for FTP USER and FTP
541 + [163]SHOW VARIABLES now accepts a list of variables.
542 + Rudimentary support for [164]Caller ID when receiving phone
544 + Up/Down [165]Arrow-key navigation of command history buffer.
545 + [166]Automatic execution of customization file if init file is
548 C-Kermit 8.0.206 Beta.01 (11 Oct 2002)
552 o ORIENTATION lists location-related variables and their
554 o KCD changes to special directories by their symbolic
555 names ("kcd ?" for a list).
556 o SET CD HOME path to specify home directory for CD and KCD
558 o CONTINUE given at top level is equivalent to END -- handy
559 when PROMPT'ed out of a script, to continue the script.
561 New switches or operands for existing commands:
564 o ASK, ASKQ, GETOK /QUIET (suppresses error message on
566 o COPY /APPEND now allows concatenating multiple source
567 files into one dest file.
568 o SET TCP { HTTP-PROXY, SOCKS-SERVER } /USER, /PASSWORD.
569 o DIRECTORY command now accepts multiple filespecs, e.g.
572 SET QUIET ON now also applies to:
574 o SET HOST connection progress messages.
575 o "Press the X or E key to cancel" file-transfer message.
576 o REMOTE CD response.
577 o REMOTE LOGIN response.
579 Improvements and new features:
581 o Numerous FTP client fixes and new features, listed below.
582 o C-Kermit, when in remote mode at the end of a file
583 transfer, now prints a one-line "where" message. Control
584 with SET TRANSFER REPORT.
585 o Unix makefile "install" target now creates an UNINSTALL
587 o Improved operation and performance on RFC 2217 Telnet
589 o Improved CONNECT (interactive terminal connection)
591 o HELP text updated for many commands.
593 New or fixed makefile targets:
595 o Solaris 9 (several variations)
596 o Concurrent PowerMAX
602 Bugs fixed (general):
604 o Failure to run in VMS Batch fixed.
605 o LDIRECTORY fixed to run Kermit's built-in DIRECTORY
606 command rather than an external one.
607 o Fixed Solaris and other SVORPOSIX builds to find out
608 their full hostnames rather than just the "uname -n"
610 o Fixed some problems matching strings that start with ".".
611 o Fixed some problems matching pattern that contain {a,b,c}
613 o Fixed erroneous reporting of text-mode reception as
614 binary when sender did not report the file size (cosmetic
616 o Many problems with SWITCH statements fixed.
617 o Fixed SET OPTIONS DIRECTORY /DOTFILES to work for server
619 o Fixed DELETE to print an error message if the file was
621 o Fixed SET CONTROL UNPREFIX ALL and SET PREFIXING NONE to
623 o Fixed bugs executing macros from within the ON_EXIT
625 o \fday() and \fnday() fixed for dates prior to 17 Nov
627 o Serial speed-changing bug in Linux fixed.
628 o "Unbalanced braces" script parsing errors when using
630 o "if defined \v(name)" fixed to behave as described in the
632 o Fixed Problems caused by LOCAL variables whose names are
633 left substrings of macro names.
634 o The INPUT command was fixed to honor the PARITY setting.
635 o Fixed bug with COPY to existing file that is longer than
637 o REINPUT command failed to strip braces/quotes around its
639 o Network directory lookups didn't work for SSH
641 o REMOTE SET { FILE, TRANSFER } CHARACTER-SET fixed.
642 o Closed some holes whereby an incompletely received file
643 was not deleted when SET FILE INCOMPLETE is DISCARD, e.g.
644 when the Kermit is hung up upon.
645 o SET XFER CHARACTER-SET TRANSPARENT fixed to do the same
646 as SET XFER TRANSLATION OFF.
647 o SET HOST PTY (e.g. SSH) connection fixed to pass along
649 o C-Kermit search path for TAKE files was accidentally
652 FTP client bugs fixed:
654 o Character set translation was broken on little-endian
655 (e.g. PC) architectures.
656 o FTP PUT /SERVER-RENAME:, /RENAME-TO:, /MOVE-TO: switches
658 o Make SET TRANSFER MODE MANUAL apply to FTP.
659 o Make SET FILE INCOMPLETE { KEEP, DISCARD } apply to FTP.
660 o FTP MGET /UPDATE handled equal times incorrectly.
661 o FTP MGET /RECOVER fixed to ignore file dates, use only
663 o FTP MGET /RECOVER sometimes downloaded files it didn't
665 o FTP downloads with TRANSFER DISPLAY BRIEF could give
666 misleading error messages.
667 o FTP MGET temp file not deleted if FTP DEBUG set to OFF
669 o LOCUS not switched back when FTP connection is lost.
670 o Set incoming file date even if it was not completely
672 o FTP MGET sent SIZE and MDTM commands even when it didn't
674 o FTP MGET sent SIZE and MDTM commands even when it knew
676 o FTP MGET failed if no files were selected for download.
677 o FTP MGET a* b* c* would fail to get any c*'s if no b*'s
679 o Big problems canceling MGET with Ctrl-C.
680 o Some extraneous LOCUS dialogs squelched.
681 o Some inconsistencies in SET FTP FILENAMES AUTO fixed.
682 o Fixed file-descriptor pileup after multiple MGETs when
684 o Fixed "mget foo", where foo is a directory name.
688 o New [167]FTP protocol features added (FEAT, MLSD).
689 o FTP MGET /RECURSIVE now works as expected if server
691 o FTP MGET /DATES-DIFFER to download if local and remote
693 o FTP DATES default changed to ON.
694 o FTP MPUT, MGET /EXCEPT now allows up to 64 patterns (up
696 o Top-level SITE and PASSIVE commands added for
698 o MGET /COLLISION:APPEND /AS-NAME:newfile *.* puts all
699 remote files into one local file.
700 o SET FTP SERVER-TIME-OFFSET for when server has wrong
702 o Allow for alternative server interpretations of [M]MPUT
704 o SET FTP ANONYMOUS-PASSWORD lets you specify the default
706 o Allow "GET /RECURSIVE path/file" to force local
707 subdirectory creation.
708 o SET FTP DISPLAY is like SET TRANSFER DISPLAY but applies
710 o FTP { ENABLE, DISABLE } new-protocol-feature-name.
711 o FTP MGET /NODOTFILES.
712 o Debug log now records FTP commands and responses in
715 [ [168]Top ] [ [169]Contents ] [ [170]C-Kermit ] [ [171]Kermit Home ]
717 1. FIXES SINCE VERSION 7.0.196 First, the changes from 7.0.196 to 7.0.197...
718 Source and makefile tweaks to get successful builds on platforms that were
719 not available in time for the 7.0 release:
727 * Interactive UNIX System V/386 R3.2 V4.1.1
736 * SunOS 4.1 with X.25
740 There were no functional changes from 196 to 197.
742 Fixes applied after C-Kermit 7.0.197 was released:
744 Source code: Big flexelint and "gcc -Wall" audit and cleanup.
747 * Solaris RTS/CTS (hardware flow control) didn't work.
748 * BSDI RTS/CTS worked only in one direction.
749 * FreeBSD 4.0 with ncurses 5.0 broke interactive command parsing.
750 * QNX-32 build lacked -DBIGBUFOK so couldn't execute big macros.
753 * SET HOST /PTY didn't work on some platforms.
754 * Broken SET HOST /USER:xxx /PASSWORD:yyy /ACCOUNT:zzz switches
756 * Transparent printing was broken in Unix.
757 * ANSWER 0 (wait forever) didn't work.
758 * Some problems in Multitech modem command strings.
759 * Spurious "?Sorry, can't condition console terminal" errors.
760 * Disabling modem command strings by setting them to nothing broke
762 * SET DIAL TIMEOUT value was usually ignored.
763 * SET DIAL METHOD PULSE didn't work.
764 * Certain modem commands, if changed, not refreshed if modem type
766 * SET SESSION-LOG command was missing from VMS.
767 * VMS session log format fixed for scripts.
768 * HANGUP by dropping DTR didn't work in NetBSD.
769 * SET FLOW /AUTO versus SET FLOW confusion fixed.
770 * Spurious secondary Solaris lockfile removed.
771 * SCO OSR5 DTR On/Off hangup.
772 * UUCP lockfile race condition.
774 Commands and scripts:
775 * Missing CAUTIOUS and FAST commands restored.
776 * Broken PTY command in late-model Linuxes fixed (API changed).
777 * Fixed off-by-one error in command recall when switching direction.
778 * Fixed recall of commands that contain '?'.
779 * COPY /SWAP-BYTES didn't work on some architectures.
780 * Various combinations of COPY switches didn't work.
781 * Various problems with COPY or RENAME with a directory name as
783 * SHIFT didn't decrement \v(argc) if used within IF, ELSE, or SWITCH
785 * SHIFT didn't affect the \%* variable.
786 * Divide by zero improperly handled in some \function()s.
787 * Problems with RETURN from right-recursive functions.
788 * FSEEK /LINE \%c LAST didn't work if already at end.
789 * Some buffer vulnerabilities and potential memory leaks were
790 discovered and fixed.
791 * \frdirectory() fixed not to follow symbolic links.
792 * SET EXIT WARNING OFF fixed to work when EXIT given in a script.
793 * Missing DELETE and MKDIR error message fixed.
794 * \fday() core dump for ancient dates fixed.
797 * SEND /COMMAND was broken.
798 * CRECEIVE was broken (but RECEIVE /COMMAND was OK).
799 * Quoting wildcard chars in filenames didn't work.
800 * Problems canceling streaming file transfers with X or Z.
801 * Problems shifting between streaming and windowing file transfer.
802 * Non-FULL file-transfer displays erroneously said STREAMING when
804 * An active SEND-LIST prevented GET from working.
805 * SET SERVER GET-PATH interpretation of relative names like "." was
807 * The MAIL command was broken.
808 * "kermit -s *" might have skipped some files.
809 * Transaction log entries were not made for external protocol
811 * File count report fixed to show number of files actually
813 * Fixed filename conversion to convert spaces to underscores.
814 * Made SET PREFIXING / SET CONTROL PREFIX also adjust CLEARCHANNEL.
815 * More "Receive window full" errors fixed.
816 * Broken terminal buffering after curses display in Solaris fixed.
817 * SET FILE INCOMPLETE DISCARD did not work in all cases.
818 * Packet log changed to reformat the start-of-packet character
820 * Dynamic timeouts could grow ridiculously large.
823 * Hebrew-7 translations missed the letter Tav.
824 * C1 area of CP1252 was ignored.
825 * SET TRANSFER CHARACTER-SET TRANSPARENT could give garbage
827 * TRANSLATE might not work on Little Endian architectures.
828 * Insufficient range checking in certain TRANSLATE operations.
830 The following bugs in C-Kermit 8.0.200 were fixed in 8.0.201:
832 * An obscure path through the code could cause the Unix version of
833 C-Kermit to dump core during its startup sequence. This happened to
834 only one person, but now it's fixed.
835 * When C-Kermit 8.0 is in Kermit server mode and the client says "get
836 blah", where blah (on the server) is a symlink rather than a real
837 file, the server unreasonably refused to send the linked-to file.
838 * When C-Kermit is an FTP client and says "get foo/bar" (i.e. a
839 filename that includes one or more path segments), it failed to
840 accept the incoming file (this happened only with GET, not MGET).
841 * Array references should be case insensitive but only lowercase
842 array letters were accepted.
843 * SHOW VARIABLES dumped core on \v(sexpression) and \v(svalue).
844 * Spurious refusals of remote directory listings if the remote
845 server's date was set in the past.
846 * In AIX, and maybe elsewhere too, Kermit's COPY command always
847 failed with "Source and destination are the same file" when the
848 destination file didn't exist.
849 * The VMS version of C-Kermit did not work in Batch or when SPAWN'd.
850 To compound the problem, it also pretty much ignored the -B and -z
851 command-line options, whose purpose is to work around such
853 * C-Kermit 8.0 could not be built on IRIX 5.x.
854 * The C-Kermit 8.0 build for QNX6 said it was an "(unknown version)".
856 Other fixes are listed in the [172]previous section.
858 [ [173]Top ] [ [174]Contents ] [ [175]C-Kermit ] [ [176]Kermit Home ]
864 This section does not apply to [177]Kermit 95 2.0, which has its own
865 built-in SSH client, which is documented [178]SEPARATELY.
867 On most UNIX platforms, C-Kermit can make SSH (Secure SHell) connection
868 by running the external SSH command or program through its
869 pseudoterminal interface. The command is:
872 Tells Kermit to start the external SSH client, passing the given
873 text to it on the command line. Normally the text is just the
874 hostname, but it can be anything else that is acceptable to the
875 ssh client. If the command succeeds, the connection is made and
876 Kermit automatically enters CONNECT (terminal) mode. You can use
877 the SSH command to make a connection to any host that has an SSH
880 Kermit's SSH command gives you all the features of Kermit on an SSH
881 connection: command language, file transfer, character-set translation,
882 scripting, and all the rest. By default, C-Kermit invokes SSH with "-e
883 none", which disables the ssh escape character and makes the connection
884 transparent for purposes of file transfer. You can, however, change the
885 SSH invocation to whatever else you might need (an explicit path,
886 additional command-line arguments, etc) with:
889 Specifies the system command that Kermit's SSH command should
890 use to invoke the external SSH client. Use this command to
891 supply a specific path or alternative name, or to include
892 different or more command-line options.
894 In most cases, these connections work quite well. They can be scripted
895 like any other connection, and file transfer goes as fast as, or faster
896 than, on a regular Telnet connection. In some cases, however, the
897 underlying pseudoterminal driver is a limiting factor, resulting in
898 slow or failed file transfers. Sometimes you can work around such
899 problems by reducing the Kermit packet length. Note that Kermit does
900 not consider SSH connections to be reliable, so it does not offer to
901 use streaming in Kermit protocol transfers (but you can force it with
902 SET RELIABLE or SET STREAMING if you wish).
904 The SSH command is like the TELNET command: it enters CONNECT mode
905 automatically when the connection is made. Therefore, to script an SSH
908 set host /pty ssh -e none [ other-options ] host
911 to make the connection.
913 Here's a sequence that can be used to make a connection to a given host
914 using Telnet if the host accepts it, otherwise SSH:
916 if not defined \%1 exit 1 Usage: \%0 host
918 set host \%1 23 /telnet
920 set host /pty ssh -l \m(user) -e none \%1
921 if fail exit 1 \%1: Telnet and SSH both fail
922 echo SSH connection to \%1 successful
924 echo Telnet connection to \%1 successful
927 In SSH v2, it is possible to make an SSH connection direct to a Kermit
928 server system if the host administrator has configured the SSH server
929 to allow this; [179]CLICK HERE for details.
931 Since Kermit uses external ssh client software, and since there are
932 different ssh clients (and different releases of each one), the exact
933 command to be used to make an SSH/Kermit connection can vary. Here is
934 the command for the OpenSSH 3.0.2p1 client:
936 set host /pipe ssh -e none [ -l username ] -T -s hostname kermit
940 set host /pipe ssh -e none -l olga -T -s hq.xyzcorp.com kermit
942 The SSH client might or might not prompt you for a password or other
943 information before it makes the connection; this depends on your SSH
944 configuration (your public and private keys, your authorized hosts
945 file, etc). Here's a brief synopsis of the OpenSSH client command
946 syntax ("man ssh" for details):
949 This tells the SSH client to use no escape character. Since we
950 will be transferring files across the connection, we don't want
951 the connection to suddenly block because some character in the
955 This is the username on the remote host. You can omit the -l
956 option and its argument if your local and remote usernames are
957 the same. If they are different, you must supply the remote
961 This tells the SSH client to tell the SSH server not to allocate
962 a pseudoterminal. We are not making a terminal connection, we
963 don't need a terminal, and in fact if a terminal were allocated
964 on the remote end, the connection would not work.
967 This tells the SSH client to tell the SSH server to start the
968 specified subsystem ("kermit") once the connection is made. The
969 subsystem name comes after the hostname.
972 The IP host name or address of the desired host.
974 You might want to include other or additional ssh command-line options;
975 "man ssh" explains what they are. Here are some examples for the
976 OpenSSH 3.0.2p1 client:
978 -oClearAllForwardings yes
982 These ensure that a secure connection is used and that the
983 connection used for file transfer is not also used for
984 forwarding other things that might be specified in the
988 (i.e. SSH v2) Ensures that the negotiated protocol supports
991 Once you have an SSH connection to a Kermit server, it's just like any
992 other connection to a Kermit server (and very similar to a connection
993 to an FTP server). You give the client file transfer and management
994 commands for the server, and the server executes them. Of course you
995 can also give the client any other commands you wish.
997 [ [180]SSH Kermit Server Subsystem ] [ [181]Kermit 95 Built-in SSH
1000 2.2. HTTP Connections
1002 Hypertext Transfer Protocol, or HTTP, is the application protocol of
1003 the World Wide Web (WWW), used between Web browsers (clients) and Web
1004 servers. It allows a client to get files from websites, upload files to
1005 websites, delete files from websites, get information about website
1006 directories and files, and interact with server-side CGI scripts.
1007 C-Kermit includes an HTTP client capable of both clear-text and secure
1008 HTTP connections, that can do all these tasks and can be automated
1009 through the Kermit scripting language.
1011 Although C-Kermit 7.0 could make HTTP connections to Web servers, it
1012 could do so only when no other connection was open, and the procedure
1013 was somewhat awkward. C-Kermit 8.0 improves matters by:
1015 * Allowing an HTTP connection to be open at the same time as a
1016 regular SET LINE or SET HOST connection, and also at the same time
1017 as an FTP connection ([182]Section 3);
1018 * Upgrading the HTTP protocol level from 1.0 to 1.1, thus allowing
1019 for persistent connections, in which a series of commands can be
1020 sent on the same connection, rather than only one as in HTTP 1.0
1022 * Providing for "one-shot" URL-driven HTTP operations such as GET or
1024 * Providing a distinct HTTP command-line personality.
1026 Persistent HTTP connections are managed with the following commands:
1028 HTTP [ switches ] OPEN [ security-options ] host-or-url [ port ]
1029 Opens a persistent connection to the specified host (IP host
1030 name or address) on the specified port. If any switches
1031 (options, listed in the next section) are included, their values
1032 are saved and used for all subsequent HTTP action commands on
1033 the same connection. If no port is specified, HTTP (80) is used.
1034 A Uniform Resource Locator (URL, [183]RFC 1738) can be given
1035 instead of a hostname (or address) and port (but the URL can not
1036 include a directory/file path). The security options are
1037 explained [184]below. The HTTP OPEN command replaces the
1038 C-Kermit 7.0 SET HOST hostname HTTP command, which no longer
1039 works with HTTP GET and related commands.
1042 Closes any open HTTP connection and clears any saved switch
1045 A URL starts with a protocol name, which must be http or https in this
1046 case; optionally includes a username and password; and must contain a
1047 host name or address:
1049 protocol://[user[.password]]@host[:port][URI]
1051 HTTP is Hypertext Transfer Protocol. HTTPS is the secure (SSL/TLS)
1052 version of HTTP. The TCP service port is derived from the protocol
1053 prefix (so normally the ":port" field is omitted). Thus the URL
1054 protocol name specifies a default TCP service port and the URL user and
1055 password fields can take the place of the /USER and /PASSWORD switches
1056 ([185]Section 2.2.1). The optional URI is a "compact string of
1057 characters for identifying an abstract or physical resource" ([186]RFC
1058 2396), such as a file. It must begin with a slash (/); if the URI is
1059 omitted, "/" is supplied. Examples:
1061 http open http://www.columbia.edu/
1062 Equivalent to http open www.columbia.edu or http open
1063 www.columbia.edu http.
1065 http open https://olga.secret@www1.xyzcorp.com/
1066 Equivalent to http /user:olga /pass:secret open www1.xyzcorp.com
1069 Persistence is accomplished unilaterally by C-Kermit 8.0. An HTTP 1.0
1070 server closes the connection after each action. Although HTTP 1.1
1071 allows multiple actions on the same connection, an HTTP 1.1 server
1072 tends to close the connection if it is idle for more than a few
1073 seconds, to defend itself against denial-of-service attacks. But when
1074 you use Kermit's HTTP OPEN command to create a connection, Kermit
1075 reopens it automatically (if necessary) for each HTTP action until you
1076 close it with HTTP CLOSE, regardless of the server's HTTP protocol
1077 version, or how many times it closes the connection.
1079 Firewalls can be negotiated through proxies with the following
1082 SET TCP HTTP-PROXY [ host[:port] ]
1083 If a host (by hostname or IP address) is specified, Kermit uses
1084 it as a proxy server when attempting outgoing TCP connections --
1085 not only HTTP connections, but all TCP/IP connections, Telnet
1086 and FTP included. This allows Kermit to adapt to the HTTP
1087 firewall penetration method (as opposed to other methods such as
1088 SOCKS4). If no hostname or ip-address is specified, any
1089 previously specified Proxy server is removed. If no port number
1090 is specified, the "http" service is used. This command must be
1091 given before the HTTP OPEN command if a proxy is to be used or
1094 HTTP [ switches ] CONNECT host[:port]
1095 Instructs the HTTP server to act as a proxy, establishing a
1096 connection to the specified host (IP hostname or address) on the
1097 given port (80 = HTTP by default) and to redirect all data
1098 transmitted between Kermit and itself to the given host for the
1099 life of the connection. This command is to be used only for
1100 debugging HTTP proxy connections. If a proxy connection is
1101 required, instruct Kermit to use the proxy with the SET TCP
1104 2.2.1. HTTP Command Switches
1106 HTTP switches, like all other switches, are optional. When HTTP
1107 switches are included with the HTTP OPEN command, they apply
1108 automatically to this and all subsequent HTTP actions (GET, PUT, ...)
1109 on the same connection until an HTTP CLOSE command is given. So if you
1110 include switches (or the equivalent URL fields, such as user and
1111 password) in the HTTP OPEN command, you can omit them from subsequent
1112 commands on the same connection. If the connection has closed since
1113 your last command, it is automatically reopened with the same options.
1115 If you include switches with an HTTP action command (such as GET or
1116 PUT), they apply only to that command.
1119 To be used in case a page requires a username for access. The
1120 username is sent with page requests. If it is given with the
1121 OPEN command it is saved until needed. If a username is included
1122 in a URL, it overrides the username given in the switch.
1123 CAUTION: Username and password (and all other information,
1124 including credit card numbers and other material that you might
1125 prefer to protect from public view) are sent across the network
1126 in clear text on regular HTTP connections, but authentication is
1127 performed securely on HTTPS connections.
1130 To be used in case a web page requires a password for access.
1131 The password is sent with page requests. If it is given with the
1132 OPEN command it is saved until needed. If a password is given in
1133 a URL, it overrides the one given here. CAUTION: (same as for
1137 Identifies the client to the server. Overrides the default agent
1138 string, which is "C-Kermit" (for C-Kermit) or "Kermit-95" (for
1141 /ARRAY:array-designator
1142 Tells Kermit to store the response headers in the given array,
1143 one line per element. The array need not be declared in advance.
1147 Tells Kermit to display any response text on the screen. It
1148 applies independently of the output file specification; thus it
1149 is possible to have the server response go to the screen, a
1150 file, both, or neither.
1152 /HEADER:header-item(s)
1153 Used for specifying any optional headers to be sent with HTTP
1158 To send more than one header, use braces for grouping:
1160 /HEADER:{{tag:value}{tag:value}...}
1162 For a list of valid tags and value formats see [187]RFC 2616,
1163 "Hypertext Transfer Protocol -- HTTP/1.1". A maximum of eight
1164 headers may be specified.
1166 2.2.2. HTTP Action Commands
1168 HTTP actions can occur within a persistent connection, or they can be
1169 self-contained ("connectionless"). A persistent HTTP connection begins
1170 with an HTTP OPEN command, followed by zero or more HTTP action
1171 commands, and is terminated with an HTTP CLOSE command:
1173 http open www.columbia.edu
1174 if failure stop 1 HTTP OPEN failed: \v(http_message)
1175 http get kermit/index.html
1176 if failure stop 1 HTTP GET failed: \v(http_message)
1177 (more actions possible here...)
1180 A self-contained HTTP action occurs when a URL is given instead of a
1181 remote file name to an HTTP action command. In this case, Kermit makes
1182 the HTTP connection, takes the action, and then closes the connection.
1183 If an HTTP connection was already open, it is closed silently and
1186 http get http://www.columbia.edu/kermit/index.html
1188 Kermit's HTTP action commands are as follows. Switches may be included
1189 with any of these to override switch (or default) values given in the
1192 HTTP [ switches ] GET remote-filename [ local-filename ]
1193 Retrieves the named file from the server specified in the most
1194 recent HTTP OPEN command for which a corresponding HTTP CLOSE
1195 command has not been given. The filename may not include
1196 wildcards (HTTP protocol does not support them). If no HTTP OPEN
1197 command is in effect, this form of the HTTP GET command fails.
1198 The default local filename is the same as the remote name, but
1199 with any pathname stripped. For example, the command http get
1200 kermit/index.html stores the file in the current local directory
1201 as index.html. If the /HEADERS: switch is included, information
1202 about the file is also stored in the specified array (explained
1203 in [188]Section 2.2.3). All files are transferred in binary
1204 mode. HTTP does not provide for record-format or character-set
1207 HTTP [ switches ] GET url [ local-filename ]
1208 When HTTP GET is given a URL rather than a filename, Kermit
1209 opens a connection to the designated server (closing any
1210 previously open HTTP connection), gets the file, and then closes
1211 the connection. If the URL does not include a filename,
1212 index.html is supplied. This is the self-contained one-step
1213 "connectionless" method for getting a file from a Web server.
1214 The data is not interpreted; HTTP GET is like "lynx -source"
1215 rather than "lynx -dump".
1217 In the remaining HTTP action commands, the distinction between a remote
1218 filename and a URL are the same as in the HTTP GET command.
1220 HTTP [ switches ] HEAD remote-filename-or-url [ local-filename ]
1221 Like GET except without actually getting the file; instead it
1222 retrieves only the headers. If the /ARRAY: or /TOSCREEN switch
1223 is included, there is no default local output filename but you
1224 can still specify one. If neither of these switches is included,
1225 the default local filename is the same as the remote filename,
1226 but with any path stripped and with ".head" appended. The HEAD
1227 command can be used in a script with the /ARRAY: switch to
1228 retrieve information about the requested resource to determine
1229 whether the resource should actually be retrieved with a
1230 subsequent GET request.
1232 HTTP [ switches ] INDEX remote-directory-or-url [ local-filename ]
1233 Asks the server to send a listing of the files in the given
1234 server directory. This command is not supported by most Web
1235 servers. Even when it is supported, there is no standard format
1238 HTTP [ switches ] POST [ /MIME-TYPE:type ] source-file
1239 remote-path-or-url [ result-file ]
1240 Sends data to a process running on the remote host; the result
1241 is usually an HTML file but could be anything. The data to be
1242 posted must be read from a local file (the source-file). If a
1243 result file is specified, Kermit stores the server's response in
1246 HTTP [ switches ] PUT [ MIME-TYPE:type ] local-file [
1247 remote-file-or-url [ result-file ] ]
1248 Uploads a local file to the server. Only the name of a single
1249 file can be given; wildcards (and group transfers) are not
1250 supported by HTTP protocol. If no remote filename is given, the
1251 file is sent with the same name as the local file, but with any
1254 HTTP [ switches ] DELETE remote-file-or-url [ local-result-file ]
1255 Asks the server to delete the specified single file. If a result
1256 file is specified, it will contain any response data returned by
1259 Note the limitations of HTTP protocol compared to (say) FTP or Kermit.
1260 There is no command for changing directories, no standard way to get
1261 file or directory lists, no way to transfer file groups by using
1262 wildcard notation, etc, and therefore no good way to (say) fetch all
1263 pages, descend through subdirectories, perform automatic updates, etc.
1264 There is no assurance a connection will stay open and, as noted, there
1265 is no provision for data conversion between unlike platforms. The
1266 data's MIME headers can be used for postprocessing.
1270 Each HTTP request and response contains a set of name/value pairs
1271 called headers. HTTP headers are specified in [189]RFC 2616. For
1272 example, an HTTP GET request for /index.html on www.columbia.edu
1273 contains the following headers:
1275 GET /index.html HTTP/1.1
1276 Host: www.columbia.edu:80
1277 User-agent: C-Kermit 8.0
1278 Authorization: Basic base64-encoded-username-password
1280 These might be followed by any others specified with a /HEADERS:
1283 Accept: image/gif, image/x-xbitmap, image/jpeg, *.*
1284 Accept-Encoding: gzip
1286 Accept-Charset: iso-8859-1,utf-8
1289 The server sends back a short report about the file prior to sending
1290 the file contents. Example:
1293 Date: Fri, 24 Aug 2001 21:09:39 GMT
1294 Server: Apache/1.3.4 (Unix)
1295 Last-Modified: Mon, 06 Aug 2001 21:16:13 GMT
1296 ETag: "1fa137-10d7-3b6f091d"
1297 Accept-Ranges: bytes
1298 Content-Length: 4311
1299 Content-Type: text/html
1301 If you want to have this information available to a Kermit script you
1302 can use the /ARRAY switch to have Kermit put it in array, one line per
1303 array element. Example:
1305 set exit warning off
1306 http open www.columbia.edu
1307 if fail exit 1 Can't reach server
1308 http /array:&a get /index.html
1309 if fail exit 1 Can't get file
1310 echo Header lines: \fdim(&a)
1311 for \%i 1 \fdim(&a) 1 {
1315 Note that the "Date:" item is the current date and time; the
1316 "Last-Modified:" item is the file's modification date and time. An
1317 example showing how to use this information is presented in
1318 [190]Section 8.13.7.
1320 2.2.4. Secure HTTP Connections
1322 SSL/TLS (Secure Sockets Layer / Transport Layer Security) is the
1323 protocol used to secure HTTP, SMTP, and other Internet applications.
1324 See the [191]C-Kermit Reference Section 5.4 for an introduction to
1325 SSL/TLS. To make a secure HTTP connection, you need:
1327 1. A secure client (a version of C-Kermit or Kermit 95 with SSL/TLS
1328 security built in). Type "check ssl" at the Kermit prompt to make
1330 2. A secure server to connect to.
1331 3. The CA Root Certificate used to authenticate the server to the
1332 client. (see [192]Section 15 of the security reference for an
1333 introduction to certificates).
1335 And you must make a connection to the secure HTTP port: service name
1336 HTTPS, port number 443 (as opposed to service HTTP, port 80). You can
1337 also make secure connections to other ports by including the /TLS or
1338 /SSL switch with the HTTP OPEN command, if the host supports SSL/TLS on
1341 The quality of the SSL/TLS connection depends on the cipher suite.
1342 There are several possibilities:
1344 Anonymous cipher suite:
1345 If an anonymous cipher suite is negotiated, the connection is
1346 encrypted but there is no authentication. This connection is
1347 subject to a Man-In-The-Middle (MITM) attack.
1349 X.509 certificate on the server:
1350 When you connect to certain secure servers, an X.509 certificate
1351 is returned. This certificate is issued to a special hostname,
1352 something like www1.xyzcorp.com or wwws.xyzcorp.com (rather than
1353 the normal www.xyzcorp.com). It is signed by the host's
1354 Certificate Authority (CA). If the host certificate is
1355 configured on the client, it can be used to verify the
1356 certificate received from the server. If the certificate it
1357 verified as authentic, a check is made to ensure it has not
1358 expired and it was issued to the host you were attempting to
1359 connect to. If you had asked to connect to (say) www.xyzcorp.com
1360 but were given a certificate for www1.xyzcorp.com, you would be
1361 prompted for permission to continue.
1363 If the verification succeeded, the connection would be encrypted
1364 with one-way (server-to-client) authentication. This connection
1365 is not subject to a MITM attack.
1367 If a username and password are transmitted over this connection,
1368 they are not subject to interception. However, the standard
1369 risks associated with passing the password to the host for
1370 verification apply; for example, if the host has been
1371 compromised, the password will be compromised.
1373 X.509 client certificate:
1374 If a connection has been established with an X.509 server
1375 certificate, the server can ask the client to send a certificate
1376 of its own. This certificate must be verified against a CA Root
1377 certificate. The certificate itself (or subject info from the
1378 certificate) is used to determine the authorization for the
1379 client, and if successful, the username and password need not be
1383 Instead of using X.509 certificates, Kerberos 5 can be used to
1384 perform the authentication and key exchange. In this situation,
1385 there is mutual authentication between the client and server.
1386 The Kerberos 5 principal is used by the server to look up the
1387 appropriate authorization data. There is no need to send
1388 username and password.
1390 An HTTP connection is made with the HTTP OPEN command:
1392 HTTP [ switches ] OPEN [ { /SSL, /TLS } ] host [ port ]
1393 If /SSL or /TLS switches are included (these are synonyms), or
1394 if the service is HTTPS or the port is 443, a secure connection
1395 is attempted using the current authentication settings; see HELP
1396 SET AUTHENTICATION for details ([193]Section 6.2 of the security
1397 reference). If the no /SSL or /TLS switch is included but the
1398 port is 443 or the service is HTTPS, a secure connection is
1399 attempted. If an /SSL or /TLS switch is included but a port is
1400 not specified, an SSL/TLS connection is attempted on the default
1403 Certificates are covered in the separate [194]Kermit Security Reference
1404 for C-Kermit 8.0. You should let Kermit know to verify certificates
1405 with the SET AUTHENTICATION TLS command. For example:
1407 SET AUTHENTICATION TLS CRL-DIR directory
1408 Specifies a directory that contains certificate revocation files
1409 where each file is named by the hash of the certificate that has
1412 SET AUTHENTICATION TLS CRL-FILE filename
1413 Specifies a file that contains a list of certificate
1416 SET AUTHENTICATION TLS VERIFY-DIR directory
1417 Specifies a directory that contains root CA certificate files
1418 used to verify the certificate chains presented by the peer.
1419 Each file is named by a hash of the certificate.
1421 SET AUTHENTICATION TLS VERIFY-FILE filename
1422 Specifies a file that contains root CA certificates to be used
1423 for verifying certificate chains.
1425 SET AUTHENTICATION TLS VERIFY OFF
1426 Tells Kermit not to require a certificate and accept any
1427 certificate that is presented regardless of whether it is valid.
1429 There are many other options; see the security document for details.
1431 Now suppose you need need to fetch the file denoted by the following
1434 https://myuserid:mypassword@wwws.xyzcorp.com/clients/info/secret.html
1436 Once you have set up the handling of certificates as desired, you can
1437 use the following Kermit commands:
1439 http /user:myuserid /password:mypassword open www1.xyzcorp.com https
1441 http get /clients/info/secret.html
1445 As another example, let's say that you have a web form you need to
1446 populate with three fields: red,white and blue.
1448 <FORM ACTION="http://www.xyzcorp.com/cgi-bin/form.cgi" METHOD="POST">
1450 <INPUT NAME="White">
1454 You can handle this with the HTTP POST command. The data to be posted
1455 is stored in the local file data.txt.
1457 Red=seven stripes&White=six stripes&Blue=fifty stars
1459 and the response from the server will be stored into response.txt.
1461 http open www.xyzcorp.com http
1463 http /array:c post data.txt /cgi-bin/form.cgi response.txt
1467 In this scenario, the Common Gateway Interface (CGI) sends a response
1468 whether it succeeds or fails in a script-dependent manner. The script
1469 can either report success and enclose the response data; or it might
1470 send a 302 Found error which indicates that the "Location:" header
1471 should be used to determine the URL at which the data can be found.
1473 2.2.5. HTTP Variables
1476 The HTTP protocol code number of the most recent server reply,
1477 e.g. 404 for "not found".
1480 1 when an HTTP connection is open, 0 when there is no HTTP
1484 If an HTTP connection is open, the hostname:port, e.g.
1485 www.columbia.edu:80; otherwise, empty.
1488 Server error message, if any, from most recent HTTP command.
1491 A list of the security parameters and values for the current
1492 connection, if any. Empty if the connection is not to a secure
1493 server, or there is no connection.
1495 To display all the HTTP variables at once, type SHOW VAR HTTP:
1497 C-Kermit> http open www.columbia.edu
1498 C-Kermit> http get lkjlkjlkjlkj
1499 C-Kermit> sho var http
1501 \v(http_connected) = 1
1502 \v(http_host) = www.columbia.edu:80
1503 \v(http_message) = Not Found
1504 \v(http_security) = NULL
1507 2.2.6. The HTTP Command-Line Personality
1509 If you invoke C-Kermit with the name "http" or "https", you can use a
1510 special set of HTTP-specific command-line options. You can do this by
1511 creating a symbolic linke "http" or "https" to the C-Kermit 8.0
1512 executable, or by having a separate copy of it called "http" or
1513 "https". Here's the usage message ("http -h"):
1515 Usage: ./http host [ options... ]
1517 -d Debug to debug.log.
1518 -S Stay (issue command prompt when done).
1519 -Y Do not execute Kermit initialization file.
1520 -q Quiet (suppress most messages).
1522 -P password Password.
1523 -g pathname Get remote pathname.
1524 -p pathname Put remote pathname.
1525 -H pathname Head remote pathname.
1526 -l pathname Local path for -g, -p, and -H.
1527 -z opt[=value] Security options...
1528 cert=file Client certificate file
1529 certsok Accept all certificates
1530 key=file Client private key file
1532 verify=n 0 = none, 1 = peer , 2 = certificate required
1534 The "host" argument is the name of a Web host, e.g. www.columbia.edu.
1535 The action options are -p, -g, and -H. If you give an action option,
1536 Kermit does the action and then exits. If you give a host without an
1537 action option, Kermit makes an HTTP connection to the host and then
1538 gives you the C-Kermit prompt. Here's a simple example that fetches a
1539 publicly readable Web page:
1541 http www.columbia.edu -g kermit/index.html
1543 If you need to access a website for which a username and password are
1544 required, you can supply them on the command line with -u and -P. If
1545 you include a username but omit the password, Kermit prompts you for
1548 http www.columbia.edu -u olga -p kermit/index.html -l index.html
1551 Note that when PUT'ing files to websites, you have to supply both the
1552 -p (remote pathname) and -l (local path) options.
1554 If your version of Kermit is built with SSL/TLS security, you can also
1555 use the -z option to make secure HTTP (https) connections.
1557 Finally, as noted in [195]Section 16, you can also give a URL instead
1558 of a host name and options.
1560 [ [196]Top ] [ [197]Contents ] [ [198]C-Kermit Home ] [ [199]Kermit
1563 3. KERMIT'S BUILT-IN FTP CLIENT
1565 3.1. [200]Making and Managing FTP Connections
1566 3.2. [201]Making Secure FTP Connections
1567 3.3. [202]Setting FTP Preferences
1568 3.4. [203]Managing Directories and Files
1569 3.5. [204]Uploading Files With FTP
1570 3.6. [205]Downloading Files With FTP
1571 3.7. [206]Translating Character Sets
1572 3.8. [207]FTP Command Shortcuts
1573 3.9. [208]Dual Sessions
1574 3.10. [209]Automating FTP Sessions
1575 3.11. [210]Advanced FTP Protocol Features
1577 Earlier versions of C-Kermit and K95 included an FTP command, but it
1578 simply invoked an external FTP client. Now, by popular demand, Kermit
1579 includes its own built-in FTP client that offers the following
1580 advantages over traditional FTP clients (and its previous interface to
1583 * Any of Kermit's built-in [211]security methods can be used to
1584 establish and conduct secure FTP sessions with [212]FTP servers
1585 that support these methods. (Security modules can be subject to
1586 export restrictions.)
1587 * Kermit's FTP client uses "passive mode" by default to avoid
1588 blockage by firewalls and network address translators. Of course
1589 active mode can be chosen too when needed.
1590 * [213]Character sets can be translated as part of the transfer
1591 process even when the FTP server does not support character-set
1592 translation, including to/from the new Internet standard
1593 international character set, [214]Unicode UTF-8. This includes both
1594 the file's name and (for text files only) its contents.
1595 * All of C-Kermit's [215]file-selection mechanisms are available:
1596 size, date, name patterns and lists, exception lists, etc.
1597 * [216]Atomic file movement capabilities are provided (delete, move,
1598 or rename files automatically after successful transfer).
1599 * The correct file type, "ascii" (i.e. text) or binary, is chosen
1600 automatically for each file (explained in [217]Section 4), and any
1601 mixture of text and binary files can be sent in a single operation,
1602 even across platforms.
1603 * Update mode ("don't bother transferring files that didn't change
1604 since last time") and recovery (resumption of an interrupted
1605 transfer from the point of failure) are available in both
1607 * When uploading files from UNIX to UNIX, the file's permissions can
1608 be preserved if desired.
1609 * Recursive directory-tree PUTs are supported between any two
1610 platforms that have tree-structured file systems. Recursive GETs
1611 are supported between like platforms if the server cooperates and
1612 between like or unlike platforms if the server supports MLSD
1613 ([218]Section 3.11).
1614 * When receiving files, all of Kermit's file collision actions are
1615 available: backup, update, refuse, rename, etc.
1616 * Multi-file transfers can be interrupted on a per-file basis,
1617 automatically skipping to the next file.
1618 * FTP sessions are [219]fully scriptable.
1619 * An entire FTP session (connect, login, CD, upload or download,
1620 logout) can be specified on the command line without using a
1622 * All of Kermit's logging options and formats are available to keep
1623 an accurate and complete record of each connection and file
1624 transfer, and to aid in troubleshooting.
1625 * All of Kermit's file-transfer display options are available
1626 (fullscreen, brief, CRT, serial, none).
1629 * Kermit doesn't give you those annoying per-file prompts every time
1630 you start a multi-file transfer without remembering to give a
1631 "prompt" command first :-).
1633 [ [220]Top ] [ [221]FTP Top ] [ [222]FTP Client Overview ] [ [223]FTP
1634 Script Tutorial ] [ [224]C-Kermit Home ] [ [225]Kermit Home ]
1636 3.1. Making and Managing FTP Connections
1638 Each copy of Kermit can have one FTP connection open at a time. FTP
1639 connections are independent of regular terminal connections; a terminal
1640 connection (serial or network via SET LINE, DIAL, SET HOST, TELNET,
1641 etc) may be, but need not be, open at the same time as an FTP
1642 connection, and terminal connections can also be closed, and new
1643 connections opened, without interfering with the FTP connection (and
1644 vice versa). Thus, for example, Kermit can have an FTP connection and a
1645 TELNET connection open to the same host simultaneously, using the
1646 TELNET connection (e.g.) to send mail or take other desired actions as
1647 various FTP actions complete. Of course, each copy of Kermit can do
1648 only one thing at a time, so it can't (for example) transfer a file
1649 with FTP and another file with Kermit protocol simultaneously.
1651 A Kermit FTP session can be established by [226]command-line options,
1652 by [227]URL, or by [228]interactive commands.
1654 3.1.1. Kermit Command-Line Options for FTP
1656 The new command-line option '-9' (sorry, we're out of letters) can be
1657 used when starting C-Kermit, telling it to make an FTP connection:
1661 or if a non-default FTP port is needed:
1663 kermit -9 hostname:port
1665 You can also specify the username on the command line with the -M ("My
1666 User ID") option that was already there for other connection types:
1668 kermit -9 hostname -M olga
1670 If you specify the username on the command line, Kermit uses it when
1671 making the connection and does not prompt you for it (but it does
1672 prompt you for the password if one is required).
1674 Once the connection is made, you get the regular Kermit prompt, and can
1675 give interactive commands such as the ones described below. When you
1676 give a BYE command, Kermit closes the session and exits, just as a
1677 regular FTP client would do. If you don't want Kermit to exit when you
1678 give a BYE command, include the -S ("Stay") option on the command line.
1680 Other Kermit command-line options that are not specific to non-FTP
1681 connections should affect the FTP session in the expected ways; for
1682 example, -i and -T force binary and text mode transfers, respectively.
1684 File transfers can not be initiated on the "kermit -9" command line;
1685 for that you need to use Kermit's FTP personality (next section) or you
1686 can use URLs ([229]Section 3.1.3).
1688 3.1.2. The FTP Command-Line Personality
1690 If you want to replace your regular FTP client with C-Kermit, you can
1691 make a link called "ftp" to the C-Kermit binary (or you can store a
1692 copy of the C-Kermit binary under the name "ftp"). When C-Kermit is
1693 invoked with a program name of "ftp" (or "FTP", case doesn't matter),
1694 it assumes the command-line personality of the regular FTP client:
1696 ftp [ options ] hostname [ port ]
1698 In this case the options are like those of a regular FTP client:
1700 -d Debug: enables debug messages and creates a debug.log file.
1701 -n No autologin: Kermit should not send your user ID automatically.
1702 -t Packet trace: accepted but is treated the same as -d.
1703 -v Verbose: accepted but ignored (operation is verbose by default).
1704 -i Not interactive: accepted but ignored.
1706 and the hostname can also be a URL (explained in [230]Section 3.1.3).
1707 To specify a non-default TCP port for the FTP server, include the port
1708 number or name after the hostname.
1710 There are also some bonus options that allow you to execute an entire
1711 FTP session from the shell command line, as long as you don't include
1712 the -n option. These are not available with regular FTP clients, and at
1713 least one of these options (-g) conflicts with UNIX ftp (where -g means
1714 "no globbing", which does not apply to Kermit), and some of them (like
1715 the options above) also conflict with regular Kermit command-line
1718 -m mode = "passive" (default) or "active"
1719 -Y Don't execute the Kermit initialization file [1]
1720 -q Quiet, suppresses all but error messages [1]
1721 -S Stay, don't exit automatically [1]
1722 -A Autologin anonymously [2]
1723 -u name Username for autologin [2] (synonym: -M [1])
1724 -P password Password for autologin (see cautions below) [2]
1725 -D directory cd after autologin [2]
1727 -a Text ("ascii") mode [2] (synonym: -T [1])
1728 -R Recursive (works with -p) [4]
1729 -p files Files to put (upload) after autologin [2] (synonym: -s [1])
1730 -g files Files to get (download) after autologin [3]
1732 [1] Same as Kermit, not available in regular FTP clients.
1733 [2] Conflicts with Kermit, not available in regular FTP clients.
1734 [3] Same as Kermit, conflicts with regular FTP clients.
1735 [4] Conflicts with Kermit, available in some FTP clients.
1737 Fancier options such as restart, character-set translation, filename
1738 collision selection, automatic move/rename/delete, etc, are not
1739 available from the command line; for these you can use the commands
1740 described in the following sections. The -R option might also work with
1741 -g (GET) but that depends on the server.
1743 The following security options are also available, explained in
1746 -k realm Kerberos 4 realm [4]
1747 -f Kerberos 5 credentials forwarding [4]
1748 -x autoencryption mode [4]
1749 -c cipher SRP cipher type [4]
1750 -H hash SRP encryption hash [4]
1751 -z option Security options [4]
1753 If you include -A or specify a name of "anonymous" or "ftp", you are
1754 logged in anonymously and, in the absence of -P, Kermit automatically
1755 supplies a password of "user@host", where "user" is your local user ID,
1756 and "host" is the hostname of the computer where Kermit is running. If
1757 you do not include -p or -g, Kermit enters command mode so you can type
1758 commands or execute them from a script.
1760 If you include -p or -g, Kermit attempts to transfer the specified
1761 files and then exits automatically at the end of the transfer unless
1762 you also included -S (Stay). It uses the "brief" file transfer display
1763 (one line per file) unless you include the -q option to suppress it.
1765 When uploading files with -p, Kermit switches automatically between
1766 text and binary mode for each file.
1768 When downloading, you can either specify a particular mode (text or
1769 binary) to be used for all the files, or you can let Kermit select the
1770 type for each file automatically, based on its name (see [232]Sections
1771 3.5 and [233]3.6 for greater detail). In UNIX be sure to quote any
1772 wildcard characters to prevent the shell from expanding them, as shown
1773 in the examples just below. Filename collisions are handled according
1774 Kermit's FILE COLLISION setting (if specified in your Kermit
1775 customization file; otherwise the default, which is BACKUP).
1777 It should go without saying that the -P option should be used with
1778 caution. In addition to the well-known risks of transmitting plaintext
1779 passwords over the Internet, in this case the password also echos to
1780 the screen if you type it, and can be seen in ps and w listings that
1781 show the user's currently active command and command-line arguments.
1782 Thus command-line FTP sessions are most appropriate for secure or
1783 anonymous connections (those that do not require passwords).
1785 Here's an example in which you download the latest C-Kermit "tarball"
1786 from the Columbia University FTP archive:
1788 ftp -A kermit.columbia.edu -bg kermit/archives/ckermit.tar.gz
1790 This assumes that "ftp" is a symbolic link to C-Kermit. It logs you in
1791 anonymously and gets the ckermit.tar.gz file in binary mode from the
1792 kermit/archives directory.
1794 Here's a slightly more ambitious example that illustrates CD'ing to the
1795 desired server directory to get a group of files in text mode (in this
1796 case the C-Kermit source files):
1798 ftp -A kermit.columbia.edu -D kermit/f -ag "ck[cuw]*.[cwh]" makefile
1800 In this case we CD to the kermit/f directory so we don't have to
1801 include it in each file specification, and we quote the ck[cuw]*.[cwh]
1802 specification so the shell doesn't expand it, since we have to pass it
1803 as-is to the server. Note also that the quotes don't go around the
1804 entire file list; only around each file specification that needs to be
1807 Here's one more example, that uploads a debug log file in binary mode
1808 to the Kermit incoming directory (as we might ask you to do when
1809 following up on a problem report):
1811 ftp -A kermit.columbia.edu -D kermit/incoming -bp debug.log
1813 In this case the -D option is required to tell the server where to put
1816 Unless the -Y option is included, your Kermit initialization file
1817 (.mykermrc in UNIX, K95.INI in Windows) is executed before the command
1818 line options, so you can set any FTP-related preferences there, as
1819 described in the subsequent sections.
1821 3.1.3. The FTP URL Interpreter
1823 If Kermit is invoked with either its regular personality (as "kermit")
1824 or its FTP personality (as "ftp"), you can also give a URL
1825 (Universal Resource Locator) instead of a hostname and options,
1826 with or without a username and password:
1827 ftp ftp://user:password@host/path
1828 ftp ftp://user@host/path
1829 ftp ftp://@host/path (or ftp://:@host/path)
1831 kermit ftp://host/path
1833 If the FTP personality is used, the service must be "ftp". In all
1834 cases, a hostname or address must be included. If a user is included
1835 but no password, you are prompted for the password. If a path
1836 (filename) is included:
1837 * If "@" is included without a user, Kermit prompts for the username
1839 * If no user and no "@" are included, "anonymous" is used.
1842 If no path (and no action options) are included, an interactive FTP
1843 session is started, as in this example:
1844 ftp ftp://kermit.columbia.edu
1846 If a path is included, but a username is not included, "anonymous" is
1847 used and an appropriate user@host password is supplied automatically.
1848 If authentication is successful, Kermit attempts to GET the file
1849 indicated by the path or, if the path is the name of a directory, it
1850 asks the server for a directory listing. In both cases, Kermit
1851 disconnects from the server and exits after the operation is complete
1852 (unless you have included the -S option on the command line).
1854 Here's an example that gets a listing of the Kermit directory at the
1856 ftp ftp://kermit.columbia.edu/kermit/
1858 This example gets the top-level READ.ME file from the same directory:
1859 ftp ftp://kermit.columbia.edu/kermit/READ.ME
1861 Here's the same example, but requesting a text-mode transfer:
1862 ftp -T ftp://kermit.columbia.edu/kermit/READ.ME
1863 This illustrates that you can mix command-line options and URLs
1866 Here's an example that logs in as a (fictitious) real user to get a
1868 ftp ftp://olga@ftp.xyzcorp.com/resume.txt
1869 The password is not included, so Kermit prompts for it.
1871 This scheme allows Kermit to be used as the FTP helper of other
1872 applications, such as Web browsers, with all its advantages over other
1873 FTP clients (especially the ones that are built in to most Web
1874 browsers), e.g. that it can be given wildcards, and it can pick text
1875 and binary mode automatically for each file.
1877 HINT: suppose somebody sends you an FTP URL in email, or you see it in
1878 some text. If your terminal screen supports copy/paste, copy the url,
1879 and then at the shell prompt type "kermit", a space, and then paste the
1882 $ kermit ftp://alpha.greenie.net/pub/mgetty/source/1.1/mgetty1.1.27-O
1884 "$ is the shell prompt; the part you type is underlined, the rest is
1885 pasted in. Kermit does the rest.
1887 3.1.4. Interactive FTP Session Establishment
1889 As you read this and the following sections, bear in mind that any
1890 command that can be given at the prompt can also be used in a script
1891 program. Kermit's script programming language is the same as its
1892 interactive command language. [234]CLICK HERE if you would like to
1893 learn a bit more about script writing.
1895 An FTP session is established with the FTP OPEN command:
1897 FTP [ OPEN ] [ { /SSL, /TLS } ] hostname [ switches ] [ port ]
1898 Opens an FTP connection to the given host on the given port and,
1899 if FTP AUTOLOGIN is ON, also logs you in to the server,
1900 prompting for username and password if necessary. If no port is
1901 specified, the regular FTP protocol port (21) is used. The OPEN
1902 keyword is optional (unless the hostname conflicts with one of
1903 the FTP command keywords, which you can list by typing "ftp ?").
1905 The hostname can be an IP host name, numeric IP address, or if you have
1906 a network directory active (SET NETWORK DIRECTORY; see Chapter 6 of
1907 [235]Using C-Kermit), an entry name in the directory. In the latter
1908 case, if the given hostname matches exactly one entry, the associated
1909 name or address is used; if it matches more than one, Kermit cycles
1910 through them until one is found that can be opened; if it matches none,
1911 then the hostname is used as-is. If a directory is active but you want
1912 to bypass directory lookup, include an "=" sign at the beginning of the
1913 hostname, and/or use a numeric IP address.
1915 When an FTP connection is opened, the default file-transfer mode is set
1916 to binary if the client and server platforms are alike (e.g. both of
1917 them are some kind of UNIX), and to text ("ascii") if they are not
1918 alike. This has no particular effect for uploading since Kermit
1919 automatically switches between text and binary mode for each file, but
1920 might be important for downloading. The connection is also set to
1921 Stream mode and File structure. Record- or page-oriented file transfers
1922 are not supported by C-Kermit's FTP client.
1924 The optional FTP OPEN switches are:
1927 Logs you in anonymously, automatically supplying username
1928 "anonymous" and user@host as the password, based on your local
1929 user and host names.
1933 Overrides SET FTP AUTOLOGIN ON for this connection only.
1936 Uses the given username to log you in, thus avoiding the Name:
1938 Overrides SET FTP AUTOLOGIN OFF for this connection only.
1941 Uses the given text as your password, thus avoiding the
1942 Password: prompt. This switch is not recommended for use in
1943 script files, which would be a security risk.
1946 Uses the given text as your account (or secondary password,
1947 depending on the requirements of the server; most servers do not
1948 require or accept an account name). If an account is not
1949 supplied, you are not prompted for one.
1952 Opens the connection in passive mode. Passive mode is the
1953 default in Kermit's FTP client, unlike in most others, since it
1954 works better through firewalls. The /PASSIVE and /ACTIVE
1955 switches apply only to the connection that is being opened, and
1956 do not affect the global FTP PASSIVE-MODE setting.
1959 Opens the connection in active mode. Use this switch if the
1960 server does not support passive mode, or use the command SET FTP
1964 Added in C-Kermit 8.0.201. Tells C-Kermit not to send REST,
1965 STRU, FEAT, and MODE commands to the server when the connection
1966 is opened, since these have been reported to cause confusion in
1969 When a username or password is missing, a prompt is issued at the
1970 controlling terminal and you must type the response; the response can
1971 not be scripted. Use the switches to avoid prompts, or one of the
1972 secure authentication methods described in the next section, or see
1973 [236]SET FTP AUTOLOGIN and the [237]FTP USER and similar commands
1974 described later in this section.
1978 ftp open kermit.columbia.edu /anonymous ; Open and log in anonymously
1979 ftp kermit.columbia.edu /anonymous ; The OPEN keyword can be omitted
1980 ftp xyzcorp.com ; Open and maybe prompt for username
1981 ftp xyzcorp.com /user:olga ; Open and log in as olga
1982 ftp testing.abccorp.com 449 ; Specify a special TCP port number
1983 ftp testing.abccorp.com /user:olaf /password:secret 449
1985 The FTP OPEN command succeeds if a connection was opened to the server
1986 (even if the given username and password were not valid) and fails
1987 otherwise (see [238]Section 3.8 for details).
1989 When your FTP session is complete, you can terminate it as follows:
1992 Closes the FTP connection if one was open. The FTP prefix can be
1993 omitted if no other connection is open at the same time (see
1994 [239]Section 3.8 for details). If a connection log is active, an
1995 FTP record is written to it. If Kermit was started with the -9
1996 command-line option or with its FTP command-line personality,
1997 and the -S (Stay) option was not given, AND there is no other
1998 active connection, the FTP BYE command also exits, just as it
1999 does on a regular FTP client. Synonyms: FTP CLOSE, FTP QUIT (but
2000 if the FTP prefix is omitted from QUIT, this becomes the regular
2001 Kermit QUIT command, which is equivalent to EXIT; i.e. it closes
2002 the connection and exits from Kermit).
2004 The following commands can be used to achieve greater control over the
2005 connection and login process:
2007 SET FTP ANONYMOUS-PASSWORD text
2008 Allows you to choose the password text to be sent automatically
2009 by Kermit when you open an FTP connection with the /ANONYMOUS
2012 SET FTP AUTOLOGIN { ON, OFF }
2013 If you give this command prior to opening an FTP connection, it
2014 controls whether Kermit tries to log you in automatically as
2015 part of the connection process. Normally ON, which means the
2016 username and password are sent automatically (and prompted for
2017 if they are not yet known). When OFF, FTP OPEN connects to the
2018 server without logging in. OFF is equivalent to the -n
2019 command-line option when using Kermit's FTP command-line
2022 FTP USER name [ password [ account ] ]
2023 Used to log in to an FTP server to which a connection has been
2024 made without autologin, or when autologin failed. If the
2025 password is furnished on the command line, it is used; otherwise
2026 you are prompted for a password. An account may also be
2027 furnished if required by the server; it is not required by
2028 Kermit and is not prompted for if omitted. Synonyms: USER, FTP
2032 Sends an account name to a server that supports accounts. If the
2033 server does not support accounts, an error response occurs. If
2034 the server does support accounts, the account is accepted if it
2035 is valid and rejected if it is not. The account might be used
2036 for charging purposes or it might be a secondary password, or it
2037 might be used for any other purpose, such as an access password
2038 for a particular disk. Servers that support accounts might or
2039 might not allow or require the account to be sent prior to
2040 login; usually it is sent after login, if at all. Synonym:
2045 set ftp autologin off ; One thing at a time please
2046 ftp xyzcorp.com ; Try to make the connection
2047 if fail exit 1 FTP connection failed ; Check that it was made
2048 ftp user olga secret ; Now log in to the server
2049 if fail exit 1 FTP login failed ; Check that it worked
2050 ftp account 103896854 ; Login OK - send account
2051 if fail echo WARNING - FTP ACCT failed ; Warn if problem
2052 ... ; (have session here)
2053 bye ; Log out and disconnect
2055 The following commands are used to control or get information about the
2056 FTP connection. Any particular FTP server does not necessarily support
2060 Terminates a user session but leaves the connection open,
2061 allowing a new login via FTP USER.
2064 Most FTP servers automatically log you out and and disconnect
2065 your session if there has been no activity for a certain amount
2066 of time. Use this command to ask the server to set its idle
2067 limit to the given number of seconds. Omit the number to ask the
2068 server to inform you of its current idle limit.
2070 FTP STATUS [ filename ]
2071 Asks the FTP server to send information about the current
2072 session. The result is a free-format report that might include
2073 server identification, username and login time, FTP protocol
2074 settings, and file-transfer statistics. If a filename is given,
2075 the server is supposed to send detailed information about the
2079 Asks the FTP server to identify its operating system (Listed in
2080 Internet Assigned Numbers, Operating System Names). Examples:
2081 UNIX, VMS, VM/CMS, WINDOWS-NT. Unfortunately many variations are
2082 allowed (e.g. LINUX-2.0, LINUX-2.2, FREEBSD, ULTRIX, etc,
2083 instead of UNIX; WINDOWS-NT-3, WINDOWS-NT-3.5, WINDOWS-NT-3.51,
2084 WINDOWS-NT-4, etc). The report might also include other
2085 information like "Type L8", "Type I", or "Type A", indicating
2086 the file-transfer mode.
2088 FTP HELP [ keyword [ keyword [ ... ] ]
2089 Asks the server to list the commands it supports. The response
2090 is usually cryptic, listing FTP command mnemonics, not the
2091 commands used by the client (since the server has no way of
2092 knowing anything about the client's user interface). For
2093 example, the PUT command is STOR in FTP protocol. If a keyword
2094 is given, which should be an FTP protocol command,
2095 slightly-more- detailed help is given about the corresponding
2096 command (if the FTP server supports this feature). Examples:
2097 "ftp help", "ftp help stor".
2100 (Advanced) Sends an FTP SITE (site-specific) command. Usually
2101 this means that the FTP server is asked to run an external
2102 command with the given arguments. You might be able to find out
2103 what SITE commands are available by sending "ftp help site" to
2104 the server, but in general the availability of and response to
2105 SITE commands is (not surprisingly) site specific.
2108 (Advanced) Sends an FTP command in FTP protocol format. Use this
2109 command to send commands to the server that the FTP client might
2113 Lists client (Kermit) FTP settings and information. Also SHOW
2114 CONNECTION, SHOW COMMUNICATIONS.
2116 HELP FTP [ keyword ]
2117 Asks Kermit to list and describe its built-in FTP commands.
2119 HELP SET FTP [ keyword ]
2120 Asks Kermit to list and describe its built-in SET FTP commands.
2122 [ [240]Top ] [ [241]FTP Top ] [ [242]C-Kermit Home ] [ [243]Kermit Home
2125 3.1.5. Making Proxy Connections
2127 The simplist form of firewall traversal is the HTTP CONNECT command.
2128 The CONNECT command was implemented to allow a public web server which
2129 usually resides on the boundary between the public and private networks
2130 to forward HTTP requests from clients on the private network to public
2131 web sites. In order to allow secure web connections to be established,
2132 the CONNECT command works by authenticating the client with a
2133 username/password and then establishing a tunnel to the desired host.
2135 Many web servers support the CONNECT command and it can be configured
2136 to allow outgoing connections to authenticated user to any TCP/IP
2137 hostname/port combination accessible to the web server. The limitations
2138 of HTTP CONNECT is that it can only be used for outgoing connections
2139 for protocols that are implemented using TCP/IP. Protocols such as
2140 Kerberos authentication that use UDP/IP cannot be tunneled using HTTP
2143 Kermit provides support for the use of HTTP CONNECT proxy services with
2146 SET TCP HTTP-PROXY [/USER:username /PASSWORD:password] hostname/ip-address[:po
2149 When a port is not specified the default port configured on the HTTP
2150 server is used. This is frequently port 443. When a hostname is
2151 specified, it is resolved using the DNS available to the web server.
2153 3.2. Making Secure FTP Connections
2155 Also see: [244]Accessing IBM Information Exchange with Kermit.
2157 In the previous section, you can see several examples of traditional
2158 insecure authentication: username and password sent across the network
2159 in clear text. Of course this is bad practice on at least two counts:
2160 (1) storing passwords in files (such as script files) gives access to
2161 the target systems to anybody who can obtain read access to your
2162 scripts; and (2) sending this information over the network leaves it
2163 open to interception by network sniffers or compromised hosts.
2165 Because of the increasing need for security on the Internet, FTP
2166 servers are beginning to appear that offer secure forms of
2167 authentication, in which no information is sent over the network that
2168 would allow anyone who intercepts it to usurp your identity and gain
2171 Kermit provides an equivalent form of FTP security for each type of
2172 IETF standard security implemented in Telnet. These include
2173 GSSAPI-KERBEROS5, KERBEROS4, Secure Remote Password (SRP), and
2174 Transport Layer Security (SSL and TLS). It does not presently include
2175 SSL tunneling nor any form of SSH v1 or v2. When Kermit is built with
2176 the necessary libraries, secure FTP connections are attempted by
2177 default, in which all connections are authenticated and the command and
2178 data channels are private.
2180 The use of authentication and encryption for FTP connections can be
2181 adjusted with the commands listed below, which are available only if
2182 your version of Kermit was built with the corresponding security
2183 options and libraries:
2185 SET FTP AUTHTYPE { AUTOMATIC, GSSAPI-KRB5, KERBEROS4, SRP, SSL, TLS }
2186 Specifies an ordered list of authentication methods to be
2187 attempted when AUTOAUTHENTICATION is ON. The default list is:
2188 GSSAPI-KRB5, SRP, KERBEROS_V4, TLS, SSL. If none of the selected
2189 methods are supported by the server, an insecure login is used
2190 as a fallback. Note, by the way, that SSL or TLS can be used to
2191 secure an anonymous connection.
2193 SET FTP AUTOAUTHENTICATION { ON, OFF }
2194 Tells whether authentication should be negotiated by the FTP
2195 OPEN command. Default is ON. Use SET FTP AUTOAUTHENTICATION OFF
2196 to force a clear-text, unencrypted connection to FTP servers
2197 (such as the one at the Kermit FTP site) that normally would try
2198 to negotiate secure authentication and encryption.
2200 SET FTP AUTOENCRYPTION { ON, OFF }
2201 Tells whether encryption (privacy) should be negotiated by the
2202 FTP OPEN command, which can happen only if secure authentication
2203 is also negotiated. Default is ON.
2205 SET FTP AUTOLOGIN { ON, OFF }
2206 Tells Kermit whether to try logging in automatically when you
2207 make an FTP connection, as opposed to letting you do it "by
2208 hand" with the FTP USER command.
2210 SET FTP COMMAND-PROTECTION-LEVEL { CLEAR, CONFIDENTIAL, PRIVATE, SAFE }
2211 Determines the level of protection applied to the command
2214 CLEAR Data is sent in plaintext and not protected against tampering.
2215 CONFIDENTIAL Data is encrypted but not protected against tampering.
2216 PRIVATE Data is encrypted and is protected against tampering.
2217 SAFE Data is sent in plaintext but protected against tampering.
2219 The default is PRIVATE.
2221 SET FTP CREDENTIAL-FORWARDING { ON, OFF }
2222 Tells whether end-user credentials are to be forwarded to the
2223 server if supported by the authentication method (GSSAPI-KRB5
2224 only). This is often required to allow access to distributed
2225 file systems (e.g. AFS.)
2227 SET FTP DATA-PROTECTION-LEVEL { CLEAR, CONFIDENTIAL, PRIVATE, SAFE }
2228 Tells what level of protection is applied to subsequent data
2229 channels. The meanings of the protection-level keywords are the
2230 same as for SET FTP COMMAND-PROTECTION-LEVEL. The default is
2233 SET FTP SRP CIPHER name
2234 Specifies the cipher to be used for encryption when SRP
2235 authentication is in use. The list of possible choices is
2236 computed based on the capabilities of the local SRP library and
2237 includes NONE plus zero or more of the following:
2239 BLOWFISH_ECB CAST5_ECB DES_ECB DES3_ECB
2240 BLOWFISH_CBC CAST5_CBC DES_CBC DES3_CBC
2241 BLOWFISH_CFB64 CAST5_CFB64 DES_CFB64 DES3_CFB64
2242 BLOWFISH_OFB64 CAST5_OFB64 DES_OFB64 DES3_OFB64
2244 The default is DES3_ECB.
2246 SET FTP SRP HASH name
2247 Specifies the hash to be used for data protection when SRP
2248 authentication is in use. The choices are MD5 and SHA. The
2251 Command-line options:
2254 Specifies the realm to be used with Kerberos 4 authentication (=
2255 SET AUTH K4 REALM name).
2258 Enables forwarding of Kerberos 5 credentials to the host when
2259 using GSSAPI authentication (= SET AUTH K5 FORWARDABLE ON).
2262 Enables autoencryption (= SET FTP AUTOENCRYPTION ON).
2265 Specifies the kind of cipher to be used for encryption with SRP
2266 authentication. Equivalent to SET FTP SRP CIPHER, with the same
2267 choices. If this option is not given, CAST5_CBC is used.
2270 Specifies the hash to be used for encryption with SRP
2271 authentication. Equivalent to SET FTP SRP HASH, with the same
2272 choices. If this option is not given, SHA is used.
2275 Turns on SSL/TLS debugging.
2278 Requires secure connection.
2281 Says to accept all certificates without checking validity.
2284 Sets certificate verification mode to the given number, n:
2286 1 = verify certificate if presented
2287 2 = require verification of certificate
2290 Specifies a file containing a client certificate to be presented
2294 Specifies a file containing a private key matching the client
2298 (nokrb4) Disables the use of Kerberos 4.
2302 Disables the use of GSSAPI - Kerberos 5.
2306 Disables use of SRP.
2310 Disables the use of SSL.
2314 Disables the use of TLS.
2316 Caution: If your FTP connection is secured via AUTH TLS, it is not
2317 possible to interrupt a file transfer. This is a limitation of all
2318 known FTP servers that support AUTH TLS.
2320 Note that when using certain security methods, such as SSL or TLS, you
2321 may be prompted to confirm or verify certain actions or conditions, for
2322 example, whether to accept self-signed certificates. This can interfere
2323 with unattended operation of scripts; see [245]Section 3.10.
2325 [ [246]Top ] [ [247]FTP Top ] [ [248]C-Kermit Home ] [ [249]Kermit Home
2328 3.3. Setting FTP Preferences
2330 FTP preferences can be set globally and persistently with the commands
2331 in the following sections; many of these can also be overridden on a
2332 per-command basis with switches that have the same name.
2334 3.3.1. Logs, Messages, and Other Feedback
2336 You can control the amount of feedback received from your FTP session
2337 with the commands in this section. First, you can create a log of your
2338 FTP transfers with the following commands:
2340 SET TRANSACTION-LOG { VERBOSE, FTP, BRIEF }
2341 Selects the log format. VERBOSE is the default, and is described
2342 in [250]the manual. FTP chooses a WU-FTPD format, the same as is
2343 used by the popular FTP server. BRIEF creates per-file records
2344 in comma-separated-list format. For greater detail, see
2345 [251]Section 4.17 of the [252]C-Kermit 7.0 Update Notes.
2347 LOG TRANSACTIONS filename
2348 Records FTP (or Kermit, or any other protocol) uploads and
2349 downloads in the given file using the format selected by the
2350 most recent SET TRANSACTION-LOG command, if any, or else the
2353 FTP screen messages and displays are controlled by the following
2356 SET TRANSFER DISPLAY { FULLSCREEN, CRT, SERIAL, BRIEF, NONE, OFF }
2357 FTP transfers use Kermit's normal file-transfer display styles.
2358 Use this command to choose the desired format; the default on
2359 most platforms is FULLSCREEN. The display is automatically
2360 disabled if Kermit is running in the background or in batch.
2361 BRIEF is always used for command-line initiated transfers
2362 (unless suppressed by -q). While a file-transfer is in progress,
2363 you can interrupt it in the normal Kermit way by typing one of
2364 the following keys or key combinations:
2365 X - Cancel current file but go on to the next one (if any).
2366 Z - Cancel the entire transfer. Ctrl-L or Ctrl-W - Refresh
2367 the file-transfer display (if any).
2369 SET FTP DISPLAY { FULLSCREEN, CRT, SERIAL, BRIEF, NONE, OFF }
2370 Like SET TRANSFER DISPLAY, but applies only to FTP connections,
2371 and does not affect Kermit- or other protocol file transfers.
2373 SET QUIET { ON, OFF }
2374 This command applies to Kermit in general, not just FTP. OFF by
2375 default; when ON, it suppresses most messages from most commands
2376 as well as the file-transfer display.
2378 SET FTP PROGRESS-MESSAGES { ON, OFF }
2379 Tells whether Kermit should print locally-generated feedback
2380 messages for each non-file-transfer command. ON by default.
2382 SET FTP VERBOSE-MODE { ON, OFF }
2383 Tells whether to display all responses from the FTP server. OFF
2384 by default. This shows all responses to all commands, except
2385 when the file-transfer display is active, and unless you have
2386 SET QUIET ON. When OFF, responses are shown only for commands
2387 such as FTP PWD whose purpose is to display a response.
2389 SET FTP DEBUG { ON, OFF }
2390 Tells whether local client debugging information should be
2391 displayed. OFF by default. When ON, the commands that are sent
2392 to the server are shown, as well as its responses (even if
2393 VERBOSE-MODE is OFF), plus additional informational messages are
2394 printed regarding the progress of secure operations. Also, the
2395 temporary file created by the [253]MGET command is not deleted
2396 so you can see what's in it.
2398 Set all of these to OFF when silent running is desired.
2400 3.3.2. Operational Preferences
2402 FTP DISABLE new-protocol-feature-name
2403 FTP ENABLE new-protocol-feature-name
2404 Explained in [254]Section 3.11.
2406 SET FTP AUTOLOGIN { ON, OFF }
2407 If you give this command prior to opening an FTP connection, it
2408 controls whether Kermit tries to log you in automatically as
2409 part of the connection process. Normally ON, which means the
2410 username and password are sent automatically (and prompted for
2411 if they are not yet known). When OFF, FTP OPEN connects to the
2412 server without logging in. OFF is equivalent to the -n
2413 command-line option when using Kermit's FTP command-line
2414 personality. See [255]Section 3.1.4 for usage.
2416 SET FTP PASSIVE-MODE { ON, OFF }
2417 ON by default, to avoid random TCP port assignment for data
2418 connections, which can prevent FTP protocol from working through
2419 firewalls and network address translators (for more on these
2420 topics, see the [256]Kermit security reference. Set to OFF in
2421 case the FTP server does not support passive mode, or in case
2422 the client has problems with it (it has been observed, for
2423 example, that when using passive mode, the SCO XENIX 2.3.4
2424 TCP/IP stack hangs in the connect() call forever). Synonyms:
2425 PASSIVE [ ON ], PASSIVE OFF, PASV [ ON ], PASV OFF.
2427 SET FTP SEND-PORT-COMMANDS { ON, OFF }
2428 This command determines whether the FTP client sends a new PORT
2429 command to the server when accepting incoming data connections
2430 (as when not using passive mode.) When PASSIVE-MODE is OFF and
2431 SET SEND-PORT is OFF, the port that was originally specified is
2432 reused. This is the default behavior for normal FTP clients but
2433 it is not compatible with many firewalls.
2435 SET FTP CHARACTER-SET-TRANSLATION { ON, OFF }
2436 Whether to translate character sets when transferring files with
2437 FTP (explained in [257]Section 3.7). OFF by default.
2439 SET FTP SERVER-CHARACTER-SET name
2440 Tells Kermit the character set used by the FTP server, UTF-8 by
2441 default ([258]Section 3.7).
2443 SET FTP SERVER-TIME-OFFSET delta-time
2444 Tells Kermit to apply the given [259]delta time to file
2445 timestamps provided by the server for its files; for use when
2446 (for example) the server does not have its timezone set
2449 SET FTP ERROR-ACTION { PROCEED, QUIT }
2450 When transferring a group of files with FTP, and an error occurs
2451 with one of the files, Kermit normally goes on the next file.
2452 Use SET FTP ERROR-ACTION to QUIT to make Kermit stop the
2453 transfer immediately and fail if an error occurs with any single
2454 file in the group. Example: you have given Kermit a list of
2455 files to send, and one of the files can not be found, or read
2456 permission is denied. Note that canceling a file by typing 'X'
2457 during transfer is not considered an error (if you want to
2458 cancel the entire transfer, type 'Z' or Ctrl-C).
2460 SET FTP PERMISSIONS { AUTO, ON, OFF }
2461 When uploading files with PUT or MPUT, this tells whether Kermit
2462 should send each file's permissions. The default is OFF, which
2463 means not to send permissions, in which case the uploaded file's
2464 permissions are set by the FTP server according to its own
2465 criteria. ON means to send them, AUTO means to send them only if
2466 the client (Kermit) and server are on like platforms (e.g. both
2467 UNIX). This command has no effect when downloading, since the
2468 FTP protocol does not include a way for the server to inform the
2469 client of a file's permissions. Also see [260]FTP PUT
2470 /PERMISSIONS. Note that setting permissions after uploading is
2471 likely to work (correctly or at all) only when the client and
2472 server platforms are alike (e.g. both of them are some form of
2473 UNIX). Also note that Windows files don't have permissions. Also
2476 SET FTP DATES { ON, OFF }
2477 When downloading files with GET or MGET, this tells whether
2478 Kermit should try to set the received file's date from the
2479 server's date. FTP DATES is ON by default. Note, however, that
2480 FTP protocol does not allow date preservation when uploading. So
2481 at best, SET FTP DATES ON can work only when downloading, and
2482 then only when the server agrees to furnish file dates.
2484 SET FTP FILENAMES { AUTO, CONVERTED, LITERAL }
2485 When uploading (sending) files, this tells whether to convert
2486 outbound filenames to "common form". This means allowing only
2487 one period in a name, uppercasing any lowercase letters,
2488 replacing spaces by underscores, etc. AUTOMATIC is the default,
2489 meaning LITERAL when client and server are the same type of
2490 system (e.g. UNIX) and CONVERTED otherwise. Special case: if the
2491 setting is AUTOMATIC and the client is not UNIX and the server
2492 identifies itself as UNIX, Kermit uses a less-strict form of
2493 conversion, in which lowercase letters are not uppercased and
2494 the filename can contain any number of periods, but spaces are
2495 still converted to underscore. When receiving, conversion
2496 generally means to change all-uppercase names to lowercase and
2497 spaces to underscore.
2499 SET FTP UNIQUE-SERVER-NAMES { ON, OFF }
2500 Applies only to uploads. Tells the server to create new, unique
2501 names for incoming files that have the same names as existing
2502 files. OFF by default, in which case the server overwrites
2503 existing files with new files of the same name. When ON, the
2504 server uses its own built-in method for creating new names for
2505 incoming files; for example, appending a period (.) and a number
2506 to the name. CAUTION: Use this option only if you do not need to
2507 refer to the file after it is uploaded, since FTP protocol
2508 provides no mechanism for the client to find out what name was
2509 assigned by the server.
2511 SET FTP COLLISION { ... }
2512 When downloading, what to do if an incoming file has the same
2513 name as an existing file. Options are the same as for SET FILE
2514 COLLISION. If this command is not given, Kermit's regular FILE
2515 COLLISION setting is used. If this command is given, it
2516 overrides the FILE COLLISION setting for FTP transfers only. See
2517 [262]Section 3.6.2 for details.
2519 SET FTP TYPE { TEXT, BINARY, TENEX }
2520 Changes the default transfer mode. When sending (uploading)
2521 files, this command has no effect unless you disable automatic
2522 text/binary mode switching ([263]Section 4) with SET FILE SCAN
2523 OFF or SET TRANSFER MODE MANUAL. When receiving (downloading)
2524 files, this command establishes the transfer mode to be used
2525 when a filename does not match any of Kermit's text or binary
2526 filename patterns, unless you use SET FTP GET-FILETYPE-SWITCHING
2527 or SET TRANSFER MODE MANUAL to disable automatic switching, in
2528 which case, this command establishes the transfer mode for all
2529 downloaded files. In all cases, however, the FTP TYPE can be
2530 overridden in any GET or PUT command by including a /TEXT
2531 (/ASCII), /BINARY, or /TENEX switch. The FTP TYPE is independent
2532 of the Kermit FILE TYPE setting. TENEX is used for sending 8-bit
2533 binary files to 36-bit platforms such as TOPS-10, TOPS-20, and
2534 TENEX, and getting them back again. Synonym: ASCII = TEXT. Note:
2535 there is also an FTP TYPE command, which does what SET FTP TYPE
2536 does but also sends a TYPE command to the server immediately if
2537 the given type is different from the current one.
2539 If you want want specific FTP preference settings to be in effect for
2540 all your Kermit FTP sessions, put the desired SET FTP commands in your
2541 Kermit customization file (~/.mykermrc in UNIX, K95CUSTOM.INI in
2544 [ [264]Top ] [ [265]FTP Top ] [ [266]C-Kermit Home ] [ [267]Kermit Home
2547 3.4. Managing Directories and Files
2549 In Kermit, commands for directory and file management can refer to:
2551 * The local computer
2552 * A remote computer when you have a connection to a Kermit server or
2554 * A remote computer when you have a connection to an FTP server.
2556 (There can also be an HTTP connection, but the commands in this section
2557 don't apply to HTTP connections.)
2559 Thus in general, each such command comes in three forms:
2561 1. With no prefix in C-Kermit 8.0.200, it refers to the local computer
2562 (CD, DIR, etc). In C-Kermit 8.0.201 and later, however, the "locus"
2563 switches to automatically to the remote FTP server when you make an
2564 FTP connection (see the SET LOCUS description [268]Section 7); thus
2565 C-Kermit 8.0.201 acts almost exactly like a regular FTP client when
2566 it has an FTP connection, yet still acts like itself on other kinds
2568 2. With the REMOTE prefix, it is for a Kermit server (REMOTE CD,
2570 3. With the FTP prefix, it's for an FTP server (FTP CD, FTP DIR).
2571 4. Also see [269]Section 3.8, which explains "R-commands" and
2574 Kermit's FTP file and directory management commands are as follows.
2575 When an R-command is included in the Synonyms list, be sure to read
2576 [270]Section 3.8 about rules for use of R-commands.
2578 FTP CD [ directory ]
2579 Tells the FTP server to change its default (working) directory
2580 to the one given, which usually must be expressed in the syntax
2581 of the server platform (UNIX, VMS, etc). If the directory is not
2582 specified, the result depends on the FTP server -- it might
2583 complain that the command is illegal, or it might change to your
2584 original login directory. Synonyms: FTP CWD (Change Wording
2588 Tells the FTP server to change its default (working) directory
2589 to the parent directory of its current one (equivalent to
2590 "cd .." in UNIX, or "cd [-]" in VMS). Synonyms: RCDUP, FTP UP.
2593 Asks the FTP server to report ("print") its current working
2594 directory. Synonym: RPWD.
2597 Asks the FTP server to create the directory whose name is given.
2598 In general, the name must be in the syntax of the server's file
2599 system, and it must be either absolute (a full pathname) or
2600 relative to the server's current (working) directory. This
2601 command fails if the directory can't be created for any reason,
2602 including that it exists already. Synonym: RMKDIR.
2605 Asks the FTP server to remove the directory whose name is given.
2606 The rules are the same as for MKDIR, plus in most cases, the
2607 server will not remove any directory unless it is empty.
2610 FTP DIRECTORY [ filespec ] [ redirectors ]
2611 Tells the FTP server to send a directory listing of the
2612 specified files. If no filespec is given, the server lists all
2613 files in its current working directory. The results are in
2614 whatever format the server chooses to send them. You can use
2615 UNIX-like redirectors to send the listing to a file or a
2616 pipeline, exactly as with the regular Kermit client/server
2617 REMOTE DIRECTORY command ([271]Using C-Kermit, Chapter 11).
2618 Synonym: RDIRECTORY. Examples:
2620 ftp dir ; Show listing of all files on screen
2621 ftp dir *.txt ; List *.txt files on screen
2622 ftp dir *.txt > somefile ; Put listing in somefile
2623 ftp dir *.txt >> somefile ; Append listing to somefile
2624 ftp dir *.txt | sort > somefile ; Put sorted listing in somefile
2625 ftp dir | more ; Runs list through "more"
2626 ftp dir | sort | more ; Runs list through "sort" and "more"
2628 FTP VDIRECTORY [ filespec ] [ redirectors ]
2629 "Verbose" directory. This is an alternative FTP DIRECTORY
2630 command primarily for use with DECSYSTEM-20 (TOPS-20) FTP
2631 servers, which send only filenames when given a DIRECTORY
2632 command; the VDIRECTORY command makes them also send file sizes,
2633 dates, and attributes.
2636 Asks the FTP server whether the given file exists or, if the
2637 filespec contains wildcards, if any files match, and this
2638 command succeeds or fails accordingly.
2640 FTP MODTIME filename
2641 Asks the FTP server, via the not-yet-standard FTP MDTM command,
2642 to send the modification date and time of the given file. The
2643 response should be a numeric string in the format:
2644 yyyymmddhhmmssxxxxx... where yyyy is the year, mm is the month,
2645 dd is the day, hh is the hour (0-23), mm is the minute, ss is
2646 the second, and xxx... is the optional fraction of the second (0
2647 or more digits). The date and time is expressed in UTC (GMT,
2648 Zulu, Zero-Meridian). The result is available programmatically
2649 in the [272]\v(ftp_message) variable, and is understandable by
2650 Kermit's date-time switches and functions. For example, suppose
2651 we want to upload all local files that are newer than a
2652 particular file on the server:
2654 C-Kermit> ftp modtime signpost
2655 C-Kermit> echo \v(ftp_message)
2657 C-Kermit> ftp mput /after:\v(ftp_message)GMT *
2659 Note that we must append "GMT" to the date-time string to let
2660 the /AFTER switch know the time is GMT rather than local.
2663 Asks the FTP server to send the size (in bytes) of the given
2664 file. The result might vary depending on whether the current FTP
2665 TYPE is binary or text ("ascii"). For a reliable byte count, do
2666 FTP TYPE BINARY first. The result is available programmatically
2667 in the [273]\v(ftp_message) variable.
2669 FTP CHMOD permissions filename
2670 Tells the FTP server to set the permissions (protection) of the
2671 given file to the ones given. The permissions and filename must
2672 be given in whatever syntax is required by the server. Example
2673 (for a UNIX-based FTP server):
2675 ftp chmod 664 oofa.txt
2677 Not all servers support this command. For non-UNIX-based
2678 servers, you might need to use FTP QUOTE or FTP SITE and the
2679 appropriate platform-specific FTP server command.
2681 FTP UMASK [ number ]
2682 This command is probably specific to UNIX-based servers; it sets
2683 the UNIX "umask", which is the default permissions mask for new
2684 (in this case, incoming) files. Crudely put, the UNIX umask is
2685 an octal representation of a binary number in in which a 1 bit
2686 stands for a permission bit that must be 0, and a 0 bit stands
2687 for a permission bit that can be 0 or 1 depending on other
2688 factors, such as the permissions of the parent directory.
2689 Example: "umask 007" requires that new files are created without
2690 read/write/execute world permission. If the number is not
2691 specified, the server's current umask is reported.
2693 FTP RENAME filename newname
2694 Asks the FTP server to rename the file whose name is "filename"
2695 to "newname". Works only for one file; can not be used with
2696 wildcards. The server's interpretation of "newname" can vary (in
2697 some cases it must be a filename, in others perhaps it can also
2698 be a directory name, in which case if the filename denote a
2699 regular file, the file might be moved to the given directory).
2700 Some servers might allow files to be renamed ("moved") between
2701 physical disks or partitions, others might not. Synonym:
2704 FTP DELETE [ switches ] filespec [ filespec [ ... ] ]
2705 Tells the FTP server to delete the file or files listed. Each
2706 file specification may, but need not, contain wildcard
2707 characters to match multiple files. File specifications and
2708 wildcard syntax must be those of the server. Any file
2709 specifications that contain spaces must be enclosed in braces or
2710 doublequotes. FTP DELETE switches are:
2712 /ERROR-ACTION: /FILENAMES: /NOBACKUPFILES /QUIET
2713 /EXCEPT: /LARGER-THAN: /NODOTFILES /NOPAGE
2714 /PAGE /RECURSIVE /SMALLER-THAN:
2716 When used with FTP DELETE, the /RECURSIVE switch deletes files
2717 but not directories, and furthermore depends on the server
2718 providing recursive file lists, which is not the normal
2719 behavior. For further details, see the descriptions of these
2720 switches in [274]Section 3.6. Synonyms: FTP MDELETE (Kermit
2721 makes no distinction between DELETE and MDELETE); RDELETE.
2723 FTP TYPE { TEXT, BINARY, TENEX }
2724 Tells the FTP server to change its file-transfer type to the one
2725 given, immediately. See [275]SET FTP TYPE for details.
2727 [ [276]Top ] [ [277]FTP Top ] [ [278]C-Kermit Home ] [ [279]Kermit Home
2730 3.5. Uploading Files With FTP
2732 Uploading means sending files from the client (Kermit) to the FTP
2733 server. The basic command for uploading files with FTP is PUT:
2735 FTP PUT [ switches ] [ filespec [ as-name ] ]
2736 Uploads (sends) the file or files that match the file
2737 specification, which may include wildcards, to the server. If no
2738 filespec is given, the names of files to send are taken from the
2739 /LISTFILE: file, if any, otherwise from the SEND-LIST, if any.
2740 Unless you go out of your way to prevent it, Kermit determines
2741 the transfer mode (text or binary) for each file automatically,
2742 and switches automatically on a per-file basis. If an as-name is
2743 given, the file is sent under that name instead of its own (if
2744 an as-name is given with a wildcard filespec, the result is a
2745 bit more complicated, and is explained later in this section).
2747 Unlike normal FTP clients, Kermit does not prompt you by default (or at
2748 all) for each file; it just sends them, just as it does with Kermit
2749 protocol. The filespec can be a literal filename or a Kermit pattern,
2752 [280]http://www.columbia.edu/kermit/ckermit70.html#x4.9
2754 Kermit patterns are equivalent to C-Shell patterns and provide a fair
2755 amount of flexibility in selecting which files to send, which is
2756 augmented by the file-selection switches presented in [281]Section
2759 FTP MPUT [ switches ] filespec [ filespec [ ... ] ]
2760 FTP MPUT is just like FTP PUT except it allows you to give more
2761 than one file specification, and it does not allow an as-name in
2762 the file list. However, as-names can be given to either PUT or
2763 MPUT with the /AS-NAME: switch.
2765 If a PUT or MPUT command results in one file being uploaded, it
2766 succeeds if the file is uploaded completely and fails otherwise. If
2767 more than one file is selected for upload, success or failure depends
2768 on the [282]FTP ERROR-ACTION setting; if it is PROCEED (the default
2769 setting), then the [M]PUT command succeeds if at least one of the files
2770 was completely uploaded, and fails otherwise, If FTP ERROR-ACTION is
2771 QUIT, the [M]PUT command succeeds if all selected files were uploaded
2772 successfully, and fails if any file failed.
2774 FTP uploads may be interrupted just like Kermit uploads. While the
2775 transfer is in progress, type:
2777 X to interrupt the current file and go on to the next file.
2778 Z to cancel the current file and all remaining files.
2779 ^C (Control-C): Like Z, but might act more quickly.
2781 MPUT may be used as in regular FTP clients, but it is not required to
2782 send multiple files; in Kermit it is required only if you want to give
2783 multiple file specifications. Examples:
2785 ftp put oofa.txt ; Send a single file oofa.txt
2786 ftp put oofa.txt budget.txt ; Send single file oofa.txt as budget.txt
2787 ftp put *.txt ; Send all *.txt files
2788 ftp mput *.txt ; Send all *.txt files (same as "put *.txt")
2789 ftp mput *.txt foo.bar ; Send all *.txt files plus foo.bar
2791 The distinction between PUT and MPUT is important only when more than
2792 one filespec is given, just like the distinction between Kermit SEND
2795 ftp put oofa.txt budget.txt ; Send oofa.txt AS budget.txt
2796 ftp mput oofa.txt budget.txt ; Send oofa.txt AND budget.txt
2798 If the source file specification includes any path segments, for
2802 put subdir/another/andanother/oofa.txt
2804 the path portion is stripped from the filename that is sent to the
2805 server. However, if an as-name contains a path, it is retained.
2808 ftp put /usr/doc/oofa.txt ; Send as "oofa.txt".
2809 ftp put oofa.txt /tmp/oofa.txt ; Send as "/tmp/oofa.txt"
2811 The latter example sends the file oofa.txt from your current local
2812 directory to the server's /tmp directory. This works only if the server
2813 uses the same directory notation that you used in the as-name AND the
2814 given directory already exists on the server AND if you have write
2817 Use caution when uploading from a case-sensitive file system, such as
2818 UNIX, to a file system that is not case sensitive, such as Windows or
2819 VMS. If you have two files in UNIX, AA and aa and upload both of them,
2820 the second one will overwrite the first. The only way around this
2821 provided by FTP protocol is its "unique server names" feature (SET FTP
2822 UNIQUE-SERVER-NAMES or the /UNIQUE switch described below).
2824 3.5.1. FTP PUT Switches
2826 FTP PUT and MPUT are similar in format and behavior to the regular
2827 Kermit SEND and MSEND commands, and they allow most of the same
2830 C-Kermit>ftp put ? Filename, or switch, one of the following:
2831 /after: /larger-than: /rename-to:
2832 /array: /listfile: /server-character-set:
2833 /as-name: /local-character-set: /server-rename-to:
2834 /before: /move-to: /simulate
2835 /binary /nobackupfiles /smaller-than:
2836 /command /nodotfiles /tenex
2837 /delete /nofollowlinks /text
2838 /dotfiles /not-after: /transparent
2839 /error-action: /not-before: /type:
2840 /except: /permissions: /update
2841 /filenames: /quiet /unique-server-names
2843 /followlinks /recursive
2845 Since most of these switches are common to Kermit's SEND and MSEND
2846 commands, they described only briefly here. For greater detail see:
2848 [283]http://www.columbia.edu/kermit/ckermit70.html#x1.5 (explanation
2850 [284]http://www.columbia.edu/kermit/ckermit70.html#x4.7
2851 (file-transfer switches)
2853 First the file-selection switches:
2857 /NOT-AFTER:date-time
2858 /NOT-BEFORE:date-time
2859 Only send those files modified on or after or before the given
2860 date and time. These switches can be combined to select files
2861 modified between two date/times. Various date-time formats are
2862 accepted; if the date-time contains spaces, it must be enclosed
2863 in braces or doublequotes. See
2864 [285]http://www.columbia.edu/kermit/ckermit70.html#x1.6 and
2865 [286]Section 8.13 of this document for details about date-time
2868 ftp put /after:{1 jan 2000 0:00:00} *
2869 ftp put /after:-5days *
2872 /SMALLER-THAN:number
2873 Only send files larger (smaller) than the given number of bytes
2874 (octets). These switches can be combined to select files in a
2878 Only send files that are the given type, which is determined for
2879 each file just before sending it by file scanning. BINARY
2880 includes TENEX; if you have included a /TENEX switch, or
2881 previously given a [SET] FTP TYPE TENEX command, binary files
2882 are sent in TENEX, rather than BINARY mode.
2885 [Don't] include files whose names begin with dot (.). By
2886 default, such files are not included unless your filespec
2887 explicitly mentions them.
2890 Don't include files whose names end with .~nnn~, where nnn is a
2891 number, e.g. oofa.txt.~27~. These are backup files created by
2892 Kermit, EMACS, and other applications. By default, backup files
2896 (UNIX only) Skip over symbolic links rather than following them
2897 (default). This applies to wildcard and/or recursive [M]PUTs; if
2898 a single filename is given, and it happens to be a symbolic
2899 link, the file it points to is sent.
2902 (UNIX only) Always follow (resolve) symbolic links, even in
2903 wildcard or recursive [M]PUTs. Use with caution. Watch out for
2904 circular links, endless loops, etc.
2907 Exception list -- don't send files whose names match the given
2908 pattern. See [287]Section 1.5.4 of the [288]C-Kermit 7.0 Update
2909 Notes for details. If you want to exclude a directory from a
2910 recursive [M]PUT, use /EXCEPT:{dirname/*}.
2913 Sends the desired files from the current (or given) directory,
2914 plus all directories beneath it, including empty directories,
2915 replicating the directory structure on the server. No special
2916 capabilities are required in the server, but of course your
2917 login ID on the server must have the appropriate access and
2918 permission to create directories. Recursive PUTs work not only
2919 between like platforms (e.g. UNIX to UNIX) but also between
2920 unlike ones (e.g. UNIX to VMS or Windows), in which case
2921 text-file format differences are handled by Kermit's automatic
2922 text/binary mode switching ([289]Section 4) and character-set
2923 translation ([290]Section 3.7). Synonym: /SUBDIRECTORIES.
2926 Send only files that have changed since last time ([291]Section
2930 The "file" to be sent is an array, or a segment of one, rather
2931 than a real file. In this case the other selection switches
2932 don't apply. The array contents are sent in text mode, and each
2933 array element is treated as a line. Example:
2935 ftp put /as-name:array.txt /array:&a
2937 (or, to send a segment of the array, /array:&a[100:199]). If you
2938 don't include an /AS-NAME, a name of "_array_x_" is used (where
2939 x is the array letter). If you include this switch, most other
2940 switches are meaningless and ignored.
2943 The "file" to be sent is the standard output of a command,
2944 rather than a real file. It is sent in text or binary mode
2945 according to the prevailing FTP TYPE, which can be overridden
2946 with a /TEXT or /BINARY switch. Example: Example:
2948 ftp put /command /as-name:{userlist} {finger | sort -r}
2951 Tells Kermit to obtain the list of files to be sent from the
2952 file whose name is given. This file must contain one file
2953 specification (which may be wild) per line. If the list includes
2954 files from different directories, such as a recursive listing of
2955 a directory tree, the paths are recreated on the server (if
2956 possible) if you include the /RECURSIVE switch; otherwise all
2957 the files are sent to the current directory on the server.
2959 Now the other switches:
2962 If a single file is being sent, send it with the given text as
2963 its name. If multiple files are being sent, the text must be a
2964 template that includes variables such as \v(filename),
2965 \v(filenumber), \v(ntime), to allow dynamic creation of each
2966 name. The same applies to the as-name field of the FTP PUT
2967 command. If this switch is not included (and an as-name is not
2968 included as the second filename to PUT), each file is sent with
2974 Forces this upload to take place in the given mode, regardless
2975 of the current FTP TYPE setting, and without automatic
2976 text/binary switching. /ASCII is a synonym for /TEXT.
2979 Specifies that the file(s) is/are to be passed through the given
2980 command or pipeline on their way to the server. Example:
2982 ftp put /binary /filter:{gzip -c \v(filename)} /as-name:\v(filename).gz *
2985 /LOCAL-CHARACTER-SET:name
2986 /SERVER-CHARACTER-SET:name
2987 Character-set translation for text files, explained in
2990 /ERROR-ACTION:{PROCEED,QUIT}
2991 Overrides the prevailing [293]FTP ERROR-ACTION for the duration
2992 of this PUT or MPUT command only.
2995 Resume an interrupted transfer where from the point of
2996 interruption (explained in [294]Section 3.5.2). Synonym:
3000 Tells Kermit to delete each source file immediately after, and
3001 only if, it has been uploaded completely and successfully. This,
3002 in effect, moves the file from the client to the server.
3005 Tells Kermit to move each source file to the named local
3006 directory after, and only if, it has been uploaded completely
3010 Tells Kermit to rename each (local) source file according to the
3011 given template after, and only if, it has been uploaded
3012 completely and successfully. The template works as in /AS-NAME.
3014 /SERVER-RENAME-TO:template
3015 Tells Kermit to ask the server to rename each file according to
3016 the given template as soon as, and only if, it has been received
3017 completely and successfully. The template works as in /AS-NAME.
3018 Requires write and rename access on the server, so doesn't
3019 usually work with (e.g.) anonymous uploads to public incoming
3020 areas where the permissions don't allow renaming. Examples:
3022 ftp mput /server-rename:\v(filename).ok *
3023 Appends ".ok" to each filename on the server when it's
3026 ftp mput /as-name:\v(filename).tmp /server-rename:\v(filename) *
3027 This is the reverse of the previous example; it uses a
3028 temporary name while uploading is in progress and reverts
3029 the file to its real name when uploading is complete.
3031 ftp mput /as-name:\v(filename)
3032 /server-rename:../final/\v(filename) *
3033 Moves the file from the working directory to a final
3034 directory when the upload is complete, but in this case
3035 you have to know the pathname syntax of the server. If the
3036 rename fails, the [M]PUT command fails according to the
3037 [295]FTP ERROR-ACTION selection.
3039 /FILENAMES:{AUTOMATIC,CONVERTED,LITERAL}
3040 Overrides the [296]FTP FILENAMES setting for this upload only.
3042 /PERMISSIONS:{ON,OFF}
3043 Overrides the [297]FTP PERMISSIONS setting for this upload only.
3046 Tells Kermit to tell the server to give [298]unique names to
3047 incoming files that would otherwise overwrite existing files
3048 that have the same name. This switch conflicts with /UPDATE,
3049 /RECOVER, /PERMISSIONS, and /SERVER-RENAME since the client has
3050 no way of knowing the name assigned by the server.
3053 Don't display file-transfer progress or statistics.
3056 Shows which files would be sent without actually sending them.
3057 Useful (for example) with /UPDATE (next section). The results
3058 are shown in the file-transfer display (if it is not disabled)
3059 and in the transaction log (if one is active). Hint: use SET
3060 TRANSFER DISPLAY BRIEF.
3064 When you include the /UPDATE switch, this means to skip sending any
3065 file that already exists on the server if the local file's modification
3066 date/time is not later than that of the corresponding file on the
3067 server. Here is a typical application for update mode: Suppose that on
3068 Computer A, you maintain a large set of files (say, a collection of Web
3069 pages and graphics images, or the source files for a software
3070 application), and you need to keep a parallel copy on another Computer,
3071 B. Of course you could upload the entire collection every day:
3074 ftp computerb.xyzcorp.com
3075 ( authentication details... )
3076 ftp cd target-directory
3077 ftp put [ switches ] *
3079 But if the total size is large or the network slow, this would be
3080 unnecessarily time-consuming. Worse, if other users or sites had to
3081 update whenever new files appeared in B's directory, this would cause
3082 them unnecessary work. By including the /UPDATE switch:
3084 ftp put /update [ other-switches ] *
3086 only those files that changed since last time are uploaded. Here's how
3087 it works. For each local file that is selected for uploading:
3089 * The remote filename is determined in the normal way, according to
3090 the [299]FTP FILENAMES setting, /FILENAMES switch, or the as-name,
3092 * Kermit sends an MDTM (modification time) command for the
3093 corresponding remote filename to the server.
3094 * If the server does not understand the MDTM command, the file is
3096 * If the server can't find a file with the given name, the file is
3098 * If the local file's modification time is later than that of the
3099 remote file, the file is sent.
3100 * Otherwise -- the remote file exists but its modification time is
3101 equal to or earlier than that of the local file -- the file is
3104 All time comparisons take place in Coordinated Universal Time
3105 (UTC)([300]1), also known as GMT or Zulu time: Timezone 0; standard
3106 time, without daylight savings.
3108 WARNING: Some FTP servers, such as Novell NWFTPD.NLM, ignore or
3109 misimplement the FTP specification and send local time rather than
3112 Update mode is useful only when always used in the same direction. When
3113 you upload (PUT) a file with FTP, the destination file receives the
3114 current timestamp on the server's computer, not the original file's
3115 timestamp ([301]2). If you try to FTP PUT /UPDATE the same file again,
3116 it will be skipped (as expected) since the remote copy is newer.
3117 However, if you try to FTP GET /UPDATE the same file ([302]Section
3118 3.6), it will be transferred for the same reason.
3120 To check the availability of PUT /UPDATE on a particular connection,
3121 issue an FTP MODTIME command for a file that is known to exist on the
3122 server. If it succeeds, PUT /UPDATE should work and in that case, you
3123 can run a procedure like the one above every day: the first time, it
3124 sends all the files; after that, it sends only the ones that changed.
3125 If a transaction log is active, a notation is included for any files
3129 1. Why is Coordinated Universal Time abbreviated UTC? From the
3130 [303]National Institute of Standards and Technology FAQ: "In 1970
3131 the Coordinated Universal Time system was devised by an
3132 international advisory group of technical experts within the
3133 International Telecommunication Union (ITU). The ITU felt it was
3134 best to designate a single abbreviation for use in all languages in
3135 order to minimize confusion. Since unanimous agreement could not be
3136 achieved on using either the English word order, CUT, or the French
3137 word order, TUC, the acronym UTC was chosen as a compromise."
3138 2. The Kermit FTP client is unusual in that, when downloading only, it
3139 can set the received file's date from the file's date on the
3140 server, but this should not affect the update feature. When
3141 uploading to an FTP server, however, there is no mechanism for the
3142 client to set the date of the uploaded file on the server.
3146 Suppose that while you are uploading a large file over a slow
3147 connection, the connection is lost before the entire file is
3148 transferred. With most FTP clients, you would have to start over, thus
3149 resending the portion of the file that was sent already, and that is
3150 already on the server. But Kermit's /RECOVER switch (Synonym: /RESTART)
3151 lets you continue an interrupted transfer from the point of failure,
3152 thus transferring only the part that wasn't sent already. The
3153 prerequisites for recovery are:
3155 * The transfer must be in BINARY mode, or else the client and server
3156 must reside on like systems (e.g. both on some form of UNIX).
3157 * The FTP server must support the SIZE command.
3159 Here's how it works. When you include the /RECOVER switch:
3161 * Kermit checks for conflicting switches, such as /UPDATE and
3162 /UNIQUE; if /RECOVER is given with these switches an error occurs.
3163 If /RECOVER is given in other circumstances where it could serve no
3164 useful purpose (e.g. with arrays, pipes, or filters), it is
3167 If the switch is accepted, then for each selected file:
3169 * If it is not binary (determined by scanning) and the client and
3170 server are not on like platforms, recovery is canceled (the entire
3171 file is sent). Otherwise:
3172 * A SIZE command is sent for the file (using its remote name). If the
3173 reply indicates the file was not found, or the SIZE command was not
3174 understood, or any other kind of error, recovery is canceled.
3176 * A MDTM (modification time) command is sent for the file. If a valid
3177 reply is received, and the modification time of the local file is
3178 later than that of the remote file, recovery is canceled.
3180 * If the sizes of the two files are identical, the file is not sent.
3182 * Kermit seeks to the recovery spot in the local file, tells the
3183 server to APPEND the data which is about to arrive to the remote
3184 file, and then sends the data starting at the recovery point.
3186 To safeguard file integrity, recovery is not attempted unless all the
3187 preconditions are met. For the widest possible usefulness, APPEND is
3188 used rather than RESTART. For stream transfers (the only kind that
3189 Kermit supports) the results are the same.
3191 By design, the /RECOVER switch can be included with any FTP PUT or MPUT
3192 command, even if it specifies a group of files. This allows you to
3193 resume an interrupted batch transfer from where it left off. The files
3194 that were already completely sent are skipped, the file that was
3195 interrupted is recovered, and the remaining files are uploaded.
3197 By the way, it doesn't matter how the original partial file was
3198 uploaded -- FTP, Kermit, Zmodem, etc: as long as the preconditions are
3199 met, it can be recovered with FTP PUT /RECOVER, or for that matter also
3200 using Kermit protocol and SEND /RECOVER.
3202 A word of caution, however, when the original upload was in text mode
3203 with character-set translation ([304]Section 3.7):
3205 * If the original upload involved a translation from one single-byte
3206 character set to another (e.g. Code Page 850 to Latin-1), recovery
3207 is safe if you specify the same translations for the recovery. If
3208 you don't, the resulting file will contain a mixture of character
3210 * If the original upload involved a translation that changed the size
3211 of the file (e.g. from an alphabetic Code Page or Latin Alphabet to
3212 Unicode, or vice versa), recovery is NOT safe, even if you specify
3213 the same translations.
3215 Kermit has no way of knowing anything about the previous upload. As a
3216 safeguard, an error occurs if you include /RECOVER and also specify a
3217 character-set of UCS2 or UTF8, since recovery can't possibly work in
3218 that situation. Otherwise, it's up to you to avoid unsafe recovery
3221 [ [305]Top ] [ [306]FTP Top ] [ [307]C-Kermit Home ] [ [308]Kermit Home
3224 3.6. Downloading Files With FTP
3226 Although uploading files with Kermit's FTP client is just as easy and
3227 flexible as sending files with Kermit protocol, the same is not always
3228 true for downloading because FTP servers lack some of the capabilities
3231 * If you want to get more than one file, you have to use MGET, not
3232 GET, since the underlying FTP protocol is different in the two
3233 cases. Kermit can't "autodetect" which one you mean, as it can with
3234 PUT and MPUT, since it can't be expected to know the wildcard
3235 syntax of the remote platform and/or FTP server (the same is true
3236 for all other FTP clients). To complicate matters, FTP protocol now
3237 includes two underlying mechanisms (NLST and MLSD) for
3238 accomplishing MGET operations and, as explained in [309]Section
3239 3.11, the two behave differently.
3240 * Automatic text-binary mode switching is not done by the server. It
3241 can be done by the client (Kermit), but in this case it is not
3242 based on a file scan (since there is no way for Kermit prescan a
3243 server file), but rather on the filename, using C-Kermit 7.0
3244 [310]filename patterns.
3245 * Some options that are available with FTP PUT can not be used with
3246 FTP [M]GET or don't work the same way:
3247 /PERMISSIONS (FTP protocol has no mechanism for this).
3248 /[NOT-]BEFORE, /[NOT-]AFTER (because of the timezone problem).
3249 /RECOVER works only in binary mode. /RECURSIVE has limited
3252 The commands for downloading are:
3254 SET FILE DOWNLOAD-DIRECTORY [ directory ]
3255 As with Kermit transfers, this command, if given, tells C-Kermit
3256 where to store incoming files in the absence of a specific
3257 as-name. If not given, incoming files are stored as indicated by
3258 the as-name, if any, otherwise in the current directory, just as
3259 with Kermit transfers. The more verbose transfer display formats
3260 give the full pathname of each received file, and, in case you
3261 have trouble finding a downloaded file afterwards, its full path
3262 is also listed in the transaction log (if you kept one), and you
3263 can also ask Kermit where it went with the [311]WHERE command.
3265 SET FTP GET-FILETYPE-SWITCHING { ON, OFF }
3266 ON by default, causing Kermit to switch automatically into text
3267 or binary mode for each file based on whether its name matches a
3268 text pattern or binary pattern. Set this OFF, or use a /TEXT,
3269 /BINARY, or /TENEX switch to defeat this feature. Use SHOW
3270 PATTERNS to see the current pattern list.
3272 [ FTP ] GET [ switches ] filename [ as-name ]
3273 Asks the server to send the given file, and if it comes, stores
3274 it locally under the given as-name, if any, otherwise under its
3275 original name (modified according to the selected filename
3276 conversion option), in your download directory, if you have
3277 specified one, otherwise in the directory indicated in the
3278 as-name, if any, otherwise in your current directory. If you
3279 accidentally use a wildcard in the filename ("get *.txt") the
3280 server will reply with a message like "File not found" (unless
3281 there is a file whose name actually is "*.txt"). If FTP
3282 GET-FILETYPE-SWITCHING is ON, and in the absence of any GET
3283 switches to override it, the file is transferred in binary mode
3284 if it matches any of Kermit's binary name patterns, and in text
3285 mode if it matches any of Kermit's text name patterns, and in
3286 the prevailing FTP TYPE if it matches none of these patterns.
3288 [ FTP ] MGET [ switches ] filespec [ filespec [ filespec [ ... ] ] ]
3289 Like GET, but for multiple files. One or more file
3290 specifications can be given, and any or all (or none) of them
3291 can contain wildcards or can be directory names. The file list
3292 may not include an as-name, but you can still give one with the
3295 In both the FTP GET and MGET commands, any filenames that contain
3296 spaces must be enclosed in braces or doublequotes (see [312]Section 5
3299 FTP downloads may be interrupted just like Kermit transfers. While the
3300 transfer is in progress, type:
3302 * X to interrupt the current file and go on to the next file.
3303 * Z (or Control-C) to cancel the current file and all remaining
3306 Before proceeding, a brief word about temporary files. In FTP protocol,
3307 the MGET command works by requesting a file list from the server, and
3308 then (internally) issuing a GET command (FTP RETR protocol directive)
3309 for each file. The file list returned by the server can be any size at
3310 all, so in case it is huge, we don't store it in memory; instead we put
3311 it in a temporary file. For troubleshooting purposes, you should be
3312 aware of two points:
3314 1. The location of the temporary file is chosen according the TMP or
3315 TEMP environment variables. If neither of these variables is
3316 defined, you might need to define it. In case there is not enough
3317 space on the indicated disk or partition for the server's file
3318 list, you might need to either clean up the temporary area, or
3319 redefine the environment variable to indicate a different area that
3320 has sufficient space.
3321 2. If you want to look at the list yourself, use SET FTP DEBUG ON.
3322 This tells Kermit to (a) give you the full pathname of the
3323 temporary file at the end of each MGET command, and (b) not to
3324 delete it, as it normally does.
3326 3.6.1. FTP GET Switches
3328 The following switches are available with FTP GET and MGET:
3331 Specifies a text-mode transfer. Overrides the global FTP TYPE
3332 setting and filename pattern-matching for the duration of the
3333 current command only, All files are downloaded in text mode.
3337 Specifies a binary-mode transfer. Overrides the global FTP TYPE
3338 setting and filename pattern-matching for the duration of the
3339 current command only. All files are downloaded in binary mode.
3342 Like /BINARY but specifies a special binary transfer mode to be
3343 used when getting 8-bit binary files from a 36-bit platform such
3344 as TOPS-10, TOPS-20, or TENEX. All files are downloaded in the
3345 special binary mode.
3348 This instructs Kermit to try to recover an incomplete download
3349 from the point of failure. Works only in binary mode, and only
3350 if the server supports the (not-yet-standard) FTP "REST"
3351 directive. See [313]Section 3.6.3 for details. Synonym:
3354 /FILENAMES:{CONVERTED,LITERAL}
3355 Overrides the [314]FTP FILENAMES (filename conversion) setting
3356 for this download only, forcing incoming filenames to be either
3357 converted or taken literally.
3360 For GET, this is equivalent to giving an as-name after the
3361 filename. For MGET, this is the only way to specify alternative
3362 names for the incoming files. With MGET, the /AS-NAME text
3363 should (must) contain a Kermit variable, usually \v(filename) or
3364 \v(filenumber). Example:
3366 mget /text /as-name:\v(filename).new *.c
3368 This gets all ".c" files and stores them with "
3370 .new" appended to their names. See the [315]C-Kermit 7.0 Update
3374 This specifies that the incoming file is to be written to the
3375 standard input of a command, rather than to a file. The command
3376 name is the as-name from the GET command or the /AS-NAME
3377 argument. If you need to refer to the incoming file's name in
3378 the command, use \v(filename). See the description of the
3379 regular Kermit [316]GET /COMMAND command for details and
3383 Transfers the files quietly; don't put up a file-transfer
3386 /ERROR-ACTION:{QUIT,PROCEED}
3387 This switch affects only MGET. If an error occurs with a
3388 particular file, this tells whether to go on to the next file
3389 (PROCEED) or to stop right away and fail (QUIT). The default is
3392 The file selection switches are:
3394 /EXCEPT:{pattern} or /EXCEPT:{{pattern}{pattern}{...}}
3395 Exception list for MGET; skip downloading any file whose name
3396 matches any of the given patterns (when using the second format,
3397 up to 64 patterns may be specified). [317]CLICK HERE for syntax
3400 /SMALLER-THAN:number
3401 Download only files whose size is smaller than the given number
3402 of bytes (octets). Requires that the FTP server support the SIZE
3406 Download only files whose size is greater than the given number
3407 of bytes. Requires that the FTP server support the SIZE or MLSD
3411 During MGET, don't download any files whose names end with
3412 backup suffixes (.~n~ where n is a number).
3415 During MGET, don't download any files whose names begin with
3416 period (.). Equivalent to /EXCEPT:{.*}.
3418 /LISTFILE:local-filename
3419 The given file contains a list of files to GET, one per line.
3420 Filenames in the listfile can contain wildcard characters in the
3421 syntax of the server. There is no limit on the number of lines
3424 /NAMELIST:local-filename
3425 If this switch is given, then instead of actually retrieving the
3426 selected files, the GET command retrieves a list of the names of
3427 the files that would be retrieved, and places it in the
3428 specified file. The resulting file is an ordinary text file,
3429 with one filename per line, suitable for reading by a person, or
3430 processing by a computer program, including Kermit itself (FOPEN
3431 / FREAD / FWRITE / FCLOSE), and as /FILELIST: file. If the
3432 filename is omitted or given as "-" (dash, hyphen), the list
3433 goes to the screen. NOTE: if you want a copy of the complete
3434 list sent by the server, use SET FTP DEBUG ON, perform an MGET,
3435 and the temporary file containing the list will be kept rather
3436 than deleted (and Kermit tells you its name).
3438 /UPDATE, /COLLISION:keyword
3439 Explained in [318]Section 3.6.2.
3442 This means to try to download an entire directory tree, rather
3443 than just files from a particular directory. In fact, FTP
3444 protocol does not provide a method to request a recursive
3445 download (unless the server supports MLSD; see [319]Section
3446 3.11), so this works only if the FTP server does it anyway,
3447 without being asked, as some do. In this case, Kermit detects
3448 that names in the returned file list contain directory
3449 separators, and therefore attempts to create the needed
3450 directories as the files arrive. But this can work only if the
3451 server is on the same kind of platform as the client, so the
3452 pathname syntax can be recognized, and also because the server
3453 does not switch between text and binary mode, which would be
3454 vital for cross-platform transfers. Use with caution. Synonym:
3457 Even when the server does not provide recursive file lists,
3458 [M]GET /RECURSIVE forces Kermit to replicate any directory
3459 structure implied or expressed by the server's file list. For
3462 get somepath/somefile
3464 Gets the file named somefile from the server's somepath
3465 directory and puts it Kermit's current (or download) directory,
3468 get /recursive somepath/somefile
3470 creates the path locally and then puts the file in it. Similarly
3475 downloads all the files in all the data subdirectories of all
3476 the subdirectories of the server's current directory and stores
3477 them locally in Kermit's current (or download) directory,
3480 mget /recursive */data/*
3482 re-creates the server's directory structure locally.
3484 The FTP protocol does not include explicit mechanisms for recursion, so
3485 Kermit builds upon what is available. Although an Internet draft
3486 describes a mechanism ("MLSD") that would allow protocol-driven
3487 recursion, similar to Kermit's File Attribute packets (circa 1984), it
3488 has not yet attained RFC or standard status, and servers are not yet
3489 widely available that offer this feature. In the meantime, the
3490 effectiveness of MGET /RECURSIVE depends on the FTP server
3491 implementation. If the server returns a recursive list in response to
3492 the standard NLST command (whose behavior is ill-defined), Kermit's FTP
3493 MGET /RECURSIVE command uses it to re-create the remote directory tree
3494 locally. If the server supports MLSD, C-Kermit 8.0.206 and Kermit 95
3495 2.1 and later are able to sense it automatically and use it, as
3496 described below in [320]Section 3.11.
3498 The /BEFORE:, /AFTER:, /NOT-BEFORE:, and /NOT-AFTER: switches are not
3499 available for downloading because of the confusion with timezones.
3500 Would the given times be in the local timezone, the server's timezone,
3501 or GMT? The FTP server's directory listings show its own local times
3502 but since we don't know what timezone the server is in, there's no way
3503 to reconcile our local times with the server's. Similarly, /PERMISSIONS
3504 can't be preserved in downloads because FTP protocol provides no means
3505 of querying the server for a file's permission.
3507 Source-file disposition switches:
3510 Each file that is downloaded successfully is to be deleted from
3511 the server. Requires the appropriate file access rights on the
3514 /SERVER-RENAME-TO:template
3515 Asks the server to rename each (remote) source file immediately
3516 after, and only if, it is sent correctly. See [321]PUT
3517 /SERVER-RENAME-TO: for details.
3519 Destination-file disposition switches:
3522 Displays the incoming file on the screen rather than storing it
3523 on disk. If this switch is given, the /RENAME-TO and /MOVE-TO
3524 switches are ignored, the file-transfer display is suppressed,
3525 and the given file(s) is/are shown on the screen. Can be used
3528 get /text /to-screen /filter:more oofa.txt
3530 In fact, you should always use /TO-SCREEN with /FILTER or
3531 /COMMAND when the command would result in displaying the
3532 incoming file on the screen; otherwise C-Kermit would have no
3533 way of knowing to suppress its file transfer display (since it
3534 can't be expected to know what the command or filter does).
3537 Each file that is downloaded is to be renamed as indicated if
3538 and only if it was received completely and without error. The
3539 template can be literal text or can contain variables that are
3540 evaluated for each file. For MGET, the text must contain
3541 variables; for GET it can be a literal string. The \v(filename)
3542 variable contains the name of the current file, so:
3544 ftp mget /rename-to:\v(filename).ok *
3546 causes each file that is successfully downloaded to have ".ok"
3547 appended to its name. For details see [322]Section 4.1 of the
3548 [323]C-Kermit 7.0 Update Notes.
3551 Just like /RENAME-TO:, except the text denotes the name of a
3552 directory to which successfully downloaded files are to be
3553 moved. If the directory does not exist, it is created.
3555 The file transfer display does not show the /MOVE-TO or /RENAME-TO
3556 value, since the incoming file has not yet been moved or renamed.
3558 3.6.2. Filename Collisions
3560 What should happen if an incoming file has the same name as an existing
3561 file in the same directory? By default, Kermit's FILE COLLISION setting
3562 applies: BACKUP, RENAME, UPDATE, DISCARD, etc, as described in
3563 [324]Using C-Kermit. Kermit's default FILE COLLISION setting is BACKUP
3564 (rename the existing file and store the incoming file under its own
3565 name) and therefore this is also the default FTP collision action.
3567 The name under which an incoming file is to be stored is determined as
3570 * If an as-name was given, the as-name is used. Otherwise:
3571 * If the client and server platforms are alike or [325]FTP FILENAMES
3572 is set to LITERAL (or the /FILENAMES:LITERAL switch was given for
3573 this download), the incoming filename is used literally. Otherwise:
3574 * The incoming filename is converted to a form that is friendly to
3575 the local platform. For UNIX, for example, incoming filenames that
3576 are all uppercase (as they might be from, say, VMS or an IBM
3577 mainframe) are converted to lowercase.
3579 If the resulting name coincides with the name of a local file that
3580 already exists, we have a filename collision. Collisions are handled
3581 according to the currently selected collision action:
3583 SET FTP COLLISION { BACKUP, RENAME, UPDATE, DISCARD, APPEND, OVERWRITE
3585 This establishes a filename collision for FTP, separate from the
3586 Kermit one. The initial FTP collision setting is inherited from
3587 Kermit's FILE COLLISION setting when the first FTP command is
3588 given, but subsequent changes to Kermit's FILE COLLISION setting
3589 do not affect the FTP COLLISION setting. SHOW FTP tells the
3590 current FTP COLLISION setting.
3592 FTP GET /COLLISION:{BACKUP,RENAME,UPDATE,DISCARD,APPEND,OVERWRITE}
3593 Overrides the current FTP COLLISION action for this download
3597 This is equivalent to GET /COLLISION:UPDATE, and is included for
3598 symmetry with PUT /UPDATE
3600 FTP GET /UPDATE and /COLLISION:UPDATE mean to download only those files
3601 whose modification dates on the server are later than those on the
3602 client. Date-time comparisons are done in Coordinated Universal Time
3603 (UTC, GMT, ZULU). The command:
3605 FTP MGET /COLLISION:APPEND /AS-NAME:newfilename *.*
3607 Downloads all matching remote files into a single local file (in
3608 whatever order the server sends them).
3612 Recovery is available for downloads too, but there are some differences
3613 from the uploading case described in [326]Section 3.5.3:
3615 * The transfer must be in BINARY mode. It can not be in text mode,
3616 even if the FTP server is on the same kind of platform as Kermit,
3617 and even if there is no character-set translation. The original
3618 download must also have been in binary mode.
3619 * The FTP server must support the REST ("restart") directive.
3620 Unfortunately, this is not a standard command; at this writing, it
3621 is described only in an Internet Draft, not an RFC or Internet
3622 Standard, but nevertheless it is found in several popular FTP
3623 servers, such as [327]ProFTPD.
3625 Here's how download recovery works:
3627 * Kermit checks for conflicting switches, such as /UPDATE, /COMMAND,
3628 or /FILTER. If /RECOVER is given with these switches an error
3630 * The prevailing transfer mode (SET FTP TYPE) must be BINARY. If it
3631 is not, the /BINARY switch must have been included with the FTP
3634 If the /RECOVER switch is accepted, then for each selected file:
3636 * A SIZE command is sent for the file (using its remote name). If the
3637 reply indicates the file was not found, or the SIZE command was not
3638 understood, or any other kind of error, recovery is canceled (i.e.
3639 the entire file is downloaded).
3640 * If the sizes of the two files are identical, the file is not sent.
3642 * Kermit sends the REST directive to the server, indicating the size
3643 of the local file. If the server responds affirmatively, Kermit
3644 opens the local file in append mode and appends the incoming data
3645 to it. Otherwise, recovery is canceled and the entire file is
3648 The /RECOVER switch can be included with any FTP GET or MGET command,
3649 even if it specifies a group of files. This lets you resume an
3650 interrupted batch transfer from where it left off. The files that were
3651 already completely sent are skipped, the file that was interrupted is
3652 recovered, and the remaining files are uploaded. BUT... unlike with
3653 uploading, where this can be done with any mixture of text and binary
3654 files, when downloading, it can only be done if all the files are
3657 It doesn't matter how the original partial file was downloaded -- FTP,
3658 Kermit, HTTP, Zmodem, etc: as long as the preconditions are met, it can
3659 be recovered with FTP [M]GET /RECOVER, or for that matter also with GET
3660 /RECOVER (using Kermit protocol).
3662 [ [328]Top ] [ [329]FTP Top ] [ [330]C-Kermit Home ] [ [331]Kermit Home
3665 3.7. Translating Character Sets
3667 A possibly unique feature of Kermit's FTP client is its ability to
3668 convert character sets when transferring files in text mode,
3669 independent of the capabilities of the FTP server, as well as to
3670 translate the character sets of filenames regardless of transfer mode.
3671 For compatibility with existing FTP clients, and because there is a
3672 certain performance penalty, Kermit won't do this unless you ask for
3673 it. If you enable this feature, you need to inform Kermit of the
3674 character set (to be) used on the server and in some cases (explained
3675 below) also the local file character set. This discussion assumes you
3676 know a bit about character sets (as you must if you have to use them);
3677 see Chapter 16 of [332]Using C-Kermit for a detailed treatment. The
3678 Kermit commands for FTP character-set conversion are:
3680 SET FTP CHARACTER-SET-TRANSLATION { ON, OFF }
3681 Whether to translate character sets when transferring text files
3682 with FTP. OFF by default. Set this to ON to enable character-set
3683 translation for subsequent FTP uploads and downloads.
3685 SET FTP SERVER-CHARACTER-SET [333]name
3686 Text character set (to be) used by the server. Most FTP servers
3687 are ignorant of character sets, so all translations are done
3688 unilaterally by Kermit's FTP client. This means that when
3689 downloading files, you must know in advance the character-set
3690 used in the files you are downloading (and in their names). When
3691 uploading, you must specify the character-set to which local
3692 filenames and text-file contents are to be translated for
3693 transmission to the server. If you SET FTP
3694 CHARACTER-SET-TRANSLATION ON but do not specify an FTP
3695 SERVER-CHARACTER-SET, [334]UTF8 is used, since this is the new
3696 Internet standard international character set; it is upwards
3697 compatible with ASCII and it encompasses most written languages
3698 and therefore does not favor any particular group of people, as
3699 any other default would do. If you SET FTP SERVER-CHARACTER-SET
3700 to something (anything) when FTP CHARACTER-SET TRANSLATION is
3701 OFF, this also sets the latter ON.
3703 SET FILE CHARACTER-SET [335]name
3704 This is the regular Kermit (non-FTP-specific) command for
3705 identifying the character set (to be) used in local text files
3708 TO REITERATE: If you SET FTP CHARACTER-SET TRANSLATION ON but do not
3709 specify an FTP SERVER-CHARACTER-SET, outbound text files are converted
3710 to UTF-8 and inbound text files are assumed to be UTF-8. If this is not
3711 appropriate, be sure to also specify the desired FTP
3712 SERVER-CHARACTER-SET.
3714 You can use "special" (non-ASCII) characters in filenames in all the
3715 client / server file management commands (FTP MKDIR, RMDIR, DIRECTORY,
3716 VDIRECTORY, DELETE, etc), and also in file-transfer commands. When
3717 giving commands such as FTP DIR (RDIR) and FTP PWD (RPWD), the reply is
3718 translated too, so you can read it. In this example, the client and
3719 server use entirely different codes to represent the special characters
3722 C-Kermit> ftp xyzcorp.de /anonymous
3723 C-Kermit> set ftp server-character-set latin1
3724 C-Kermit> set file character-set german
3725 C-Kermit> rcd Städte
3727 "/pub/ftp/Städte is current directory"
3729 -rw-rw---- 1 olaf 54018 Jan 6 17:58 Adenbüttel.txt
3730 -rw-rw---- 1 ursula 373 Jan 5 15:19 Aßlar.txt
3731 -rw-rw---- 1 gisbert 482 Jan 5 15:20 Blowatz.txt
3732 -rw-rw---- 1 gudrun 124 Jan 5 15:19 Böblingen.txt
3733 -rw-rw---- 1 olga 14348 Jan 7 14:23 Köln.txt
3735 When the client and server file systems use different character sets,
3736 you should take care to use only those characters that the two sets
3737 share in common when creating filenames or text-file contents. For
3738 example, PC code pages contain a lot line- and box-drawing characters,
3739 and sometimes "smart quotes", etc, that are not found in ISO standard
3740 8-bit character sets. You should be especially careful to avoid using
3741 such characters in filenames.
3743 [ [336]C-Kermit Character Sets ]
3745 3.7.1. Character Sets and Uploading
3747 Kermit's PUT and MPUT commands include full file-scanning capabilities,
3748 as described in [337]Section 4. Thus if FTP CHARACTER-SET-TRANSLATION
3749 is ON and your character-set associations are set up appropriately,
3750 Kermit automatically switches on a per-file basis between text and
3751 binary mode, and for each text file between your chosen 7-bit text
3752 character set (e.g. ASCII or ISO 646 German), 8-bit text (e.g. Latin-1
3753 or Japanese EUC), UCS-2, and UTF-8, and converts each of these
3754 automatically to the server character-set, and furthermore
3755 automatically differentiates between the Little and Big Endian forms of
3756 UCS-2, always sending in Big Endian form.
3758 WARNING: It is not advisable to use UCS-2 (or any Unicode
3759 transformation other than UTF-8) "on the wire", i.e. as a server
3760 character set. Most FTP servers are not able to cope with it, since
3761 it contains lots of 0 (NUL) characters. If you do use it, Kermit
3762 does not translate filenames to or from UCS-2, for reasons well
3763 known to C programmers (for example, UNIX APIs assume filename
3764 strings are NUL-terminated). [338]UTF-8 is the preferred (and
3765 standard) Unicode format for the Internet.
3767 FTP character-set translations differ from the regular Kermit ones by
3768 not restricting translations to a file-character-set /
3769 transfer-character-set pair. You can have Kermit's FTP client translate
3770 between any pair of character sets it knows about. You can see the list
3771 of supported character sets by typing either of the following:
3773 set ftp server-character-set ?
3774 set file character-set ?
3776 A typical list looks like this ([339]CLICK HERE for an explanation of
3779 C-Kermit>set file char ? One of the following:
3780 ascii cp869-greek hebrew-7 mazovia-pc
3781 british cyrillic-iso hebrew-iso next-multinational
3782 bulgaria-pc danish hp-roman8 norwegian
3783 canadian-french dec-kanji hungarian portuguese
3784 cp1250 dec-multinational iso2022jp-kanji shift-jis-kanji
3785 cp1251-cyrillic dg-international italian short-koi
3786 cp1252 dutch jis7-kanji spanish
3787 cp437 elot927-greek koi8 swedish
3788 cp850 elot928-greek koi8r swiss
3789 cp852 euc-jp koi8u ucs2
3790 cp855-cyrillic finnish latin1-iso utf8
3791 cp858 french latin2-iso
3792 cp862-hebrew german latin9-iso
3793 cp866-cyrillic greek-iso macintosh-latin
3796 Thus you can translate not only between private sets (like PC code
3797 pages) and standard ones (like Latin-1) as in Kermit protocol, but also
3798 between any given pair of private sets (e.g. CP852 and Mazovia). All
3799 conversions go through Unicode as the intermediate character set,
3800 resulting in a minimum of character loss, since Unicode is a superset
3801 of all other character sets known to Kermit.
3803 In addition to the SET commands listed above, the FTP PUT and MPUT
3804 commands include switches that apply only to the current command:
3806 /LOCAL-CHARACTER-SET:name
3807 /SERVER-CHARACTER-SET:name
3808 Use these switches to force a particular translation. These
3809 switches override the global FTP CHARACTER-SET-TRANSLATION and
3810 SERVER-CHARACTER-SET settings and also character-set
3811 differentiation by file scanning for the duration of the PUT or
3812 MPUT command. The file scan is still performed, however, to
3813 determine whether the file is text or binary; thus these
3814 switches do not affect binary files unless you also include the
3815 /TEXT switch to force all files to be treated as text.
3817 In other words, if you include one or both of these switches with a PUT
3818 or MPUT command, they are used. Similarly, the /TRANSPARENT switch
3819 disables character-set translation for the PUT or MPUT command despite
3820 the prevailing FTP CHARACTER-SET-TRANSLATION and SERVER-CHARACTER-SET
3823 When uploading, the FILE CHARACTER-SET setting is ignored unless you
3824 have forced Kermit not to [340]scan local files by including a /TEXT or
3825 /BINARY switch with your [M]PUT command, or by disabling automatic
3826 text/binary switching in some other way.
3830 1. Suppose you have a CP852 (East European) text file that you want to
3831 upload and store in ISO Latin Alphabet 2 encoding:
3832 ftp put /local-char:cp852 /server-char:latin2 magyar.txt
3834 2. Suppose you always want your text files converted to Latin-2 when
3835 uploading with FTP. Then put:
3836 set ftp server-character-set latin2
3838 in your Kermit customization file, and then you can omit the
3839 /SERVER-CHARACTER-SET: switch from your FTP PUT commands:
3840 ftp put /local-char:cp852 magyar.txt
3842 3. Now suppose that all the text files on your PC are written in
3843 Hungarian, but they have a variety of encodings, and you don't want
3844 to have to include the /LOCAL-CHARACTER-SET: switch on every FTP
3845 PUT command, or (more to the point) you want to be able to send a
3846 mixture of these files all at once. Put these commands in your
3847 Kermit customization file:
3848 set ftp server-character-set latin2 ; ISO 8859-2
3849 set file default 7-bit-character-set hungarian ; ISO 646 Hungarian
3850 set file default 8-bit-character-set cp852 ; PC East European Code Page
3852 and now PUT and MPUT will automatically detect and switch among ISO
3853 646 Hungarian, Code Page 852, UTF-8, and UCS-2 encodings,
3854 translating each one to Latin-2 for uploading:
3857 And since binary files are also detected automatically, the latter can
3862 even when "*" matches a diverse collection of binary and text files,
3863 because translations are skipped automatically for binary files.
3865 3.7.2. Character Sets and Downloading
3867 The commands and switches are the same as for uploading, but automatic
3868 character-set switching works differently, since Kermit can't scan the
3869 server files in advance. Instead, the transfer mode (text or binary) is
3870 based on the filenames; each name is compared with Kermit's list of
3871 text name patterns and binary name patterns. If the name matches a
3872 binary pattern (for example, if the filename is oofa.tar.gz and one of
3873 the filename patterns is "*.gz"), the file is downloaded in binary
3874 mode; otherwise if it matches a text pattern (e.g. oofa.txt matches
3875 "*.txt"), it is transferred in text ("ascii") mode. Otherwise, it is
3876 transferred in the prevailing FTP TYPE.
3878 In C-Kermit 8.0, the pattern lists used with FTP GET are not the same
3879 lists used with Kermit transfers, and can not be viewed with SHOW
3880 PATTERNS, nor adjusted with ADD and REMOVE TEXT-PATTERNS and
3881 BINARY-PATTERNS, or SET FILE TEXT-PATTERNS and BINARY-PATTERNS.
3882 Configuration of the FTP patterns list will be added in a future
3887 get /server-char:latin1 /local-char:cp850 Grüße.txt
3888 In this command, the filename contains special characters, which
3889 you enter using whatever character set your local computer uses,
3890 in this case PC Code Page 850 (cp850). The command tells Kermit
3891 (in case it didn't know already from its FILE CHARACTER-SET
3892 setting) that the local character set is cp850 and the server's
3893 character-set is ISO 8859-1 Latin Alphabet 1 (latin1). Kermit
3894 translates the filename from cp850 to latin1 and sends the
3895 latin1 name to the server. Since it's a text file (matches
3896 "*.txt"), its contents are translated to cp850 on arrival, and
3897 it is saved with a cp850 name.
3899 mget /text /server:latin1 /local:utf8 *.txt
3902 + Tells C-Kermit that the server's files are encoded in ISO
3903 8859-1 Latin Alphabet 1.
3904 + Tells C-Kermit to translate the incoming files into Unicode
3906 + Asks the server to send all ".txt" files in text mode.
3908 mget /server:latin1 /local:utf8 *
3909 Tells Kermit to get all files from the server's directory,
3910 switching between text and binary mode based on the filename.
3911 The names of all the files are translated (to UTF-8 in this
3912 case), but contents are translated (also to UTF-8) only for text
3915 Note that any pair of 8-bit character sets is likely to have some
3916 incompatibilities. Any characters in the source file that do not have
3917 equivalents in the destination file's character set are converted to
3918 question marks. This applies to both filenames and to text file
3921 Also note that the server's ability to accept special characters in
3922 filenames depends on the particular server. For example:
3926 works with WU-FTPD, but:
3934 [341]RFC2640, July 1999, specifies a method by which the FTP client and
3935 server can negotiate the use of UTF8. However, RFC2640-capable servers
3936 are rare to nonexistent at this writing, and in any case you don't need
3937 them to be able to transfer text in UTF8. C-Kermit lets you upload and
3938 download text files in any character set it knows about, converting to
3939 or from any other character set it knows about, without the knowledge,
3940 permission, or cooperation of the server, and regardless of its
3943 [ [342]Top ] [ [343]FTP Top ] [ [344]C-Kermit Home ] [ [345]Kermit Home
3946 3.8. FTP Command Shortcuts
3948 C-Kermit's FTP client coexists with other C-Kermit functions by
3949 requiring the "ftp" prefix for each FTP-related command: FTP OPEN, FTP
3950 GET, FTP BYE, and so on. For interactive use, however, this can be
3951 rather awkward and sometimes surprising, for example when a GET command
3952 starts a Kermit GET rather than an FTP GET. In fact, many Kermit
3953 commands might just as easily apply to an FTP connection: GET, PUT
3954 (SEND), BYE, and CLOSE. The following command lets you choose how these
3955 commands are interpreted:
3957 SET GET-PUT-REMOTE { AUTO, KERMIT, FTP }
3958 Controls the orientation of GET, PUT, REMOTE and other
3959 file-transfer and client/server commands that might apply to
3960 either Kermit or FTP. The default setting is AUTO, meaning that
3961 these commands apply to FTP if an FTP connection is open, and to
3962 Kermit otherwise. KERMIT means they always apply to Kermit, FTP
3963 means they always apply to FTP.
3965 Here is a complete list of affected commands:
3967 Kermit Command FTP Equivalent
3975 BINARY FTP TYPE BINARY
3976 TEXT (or ASCII) FTP TYPE ASCII
3977 SEND (or PUT) FTP PUT
3978 MSEND (or MPUT) FTP MPUT
3979 RESEND FTP PUT /RECOVER
3980 CSEND FTP PUT /COMMAND
3983 REGET FTP GET /RECOVER
3984 REMOTE HELP (RHELP) FTP HELP
3985 REMOTE CD (RCD) FTP CD (CWD)
3986 REMOTE PWD (RPWD) FTP PWD
3987 REMOTE DIRECTORY (RDIR) FTP DIRECTORY
3988 REMOTE DELETE (RDEL) FTP DELETE
3989 REMOTE MKDIR (RMKDIR) FTP MKDIR
3990 REMOTE RMDIR (RRMDIR) FTP RMDIR
3991 REMOTE RENAME (RRENAME) FTP RENAME
3992 REMOTE TYPE (RTYPE) FTP TYPE
3993 REMOTE EXIT (REXIT) FTP BYE
3995 The commands in the right-hand column always access FTP. The commands
3996 in the left column can access either Kermit protocol or FTP:
3998 * When GET-PUT-REMOTE is set to KERMIT, or to AUTO when there is no
3999 FTP connection, the commands in the left-hand column access Kermit
4000 protocol, and those right-hand column are required for FTP.
4001 * When GET-PUT-REMOTE is set to FTP, or to AUTO when there is an
4002 active FTP connection, the commands in the left-hand column access
4003 the FTP connection and can not be used to access Kermit protocol.
4004 In this case, if you want to be able to use both Kermit protocol
4005 and the FTP connection, you must SET GET-PUT-REMOTE KERMIT, and
4006 then use the FTP commands in the right-hand column to access the
4009 Note that file-management commands such as DIRECTORY, DELETE, CD, PWD,
4010 MKDIR, RMDIR, HELP, RENAME, COPY, TYPE, and so on, always apply
4011 locally, no matter what kind of connection you have. This is the
4012 opposite of most FTP clients, where these commands are intended for the
4013 server, and require an "L" prefix for local execution (e.g. "dir" gets
4014 a directory listing from the server, "ldir" gets a local directory
4015 listing). To illustrate with the CD command and a typical UNIX FTP
4018 Client Server Change Local Directory Change Remote Directory
4019 FTP FTP lcd cd (cwd)
4020 Kermit Kermit cd rcd, remote cd
4021 Kermit FTP cd ftp cd, rcd, remote cd
4023 Also note that not all REMOTE commands are useful with FTP, since FTP
4024 servers do not offer the corresponding functions. These include:
4026 * REMOTE ASSIGN - FTP servers don't have variables
4027 * REMOTE COPY - FTP servers don't copy files
4028 * REMOTE HOST - FTP servers don't execute host (shell) commands
4029 * REMOTE KERMIT - FTP servers don't execute Kermit commands
4030 * REMOTE PRINT - FTP servers don't print files
4031 * REMOTE QUERY - FTP servers don't have variables
4032 * REMOTE SET - FTP servers don't have Kermit settings
4033 * REMOTE WHO - FTP servers don't send user lists
4035 Finally note that command shortcuts do not apply to the HELP command.
4036 For help about an FTP command, use (for example) "help ftp delete", not
4037 "help delete" or "help rdelete".
4039 [ [346]Top ] [ [347]FTP Top ] [ [348]C-Kermit Home ] [ [349]Kermit Home
4044 You can have an FTP session open at the same time as a regular Kermit
4045 SET LINE or SET HOST (terminal) session. In this case, the default SET
4046 GET-PUT-REMOTE AUTO setting should ensure that all "two-faced" commands
4047 like GET, PUT, REMOTE, HANGUP, BYE, etc, apply to the Kermit session,
4048 and all commands for the FTP session must include the FTP prefix. To be
4049 absolutely certain, you can use SET GET-PUT-REMOTE KERMIT.
4054 set host foo.bar.baz.com
4058 Now you have both an FTP and Telnet connection to the same host (of
4059 course they could also be to different hosts, and you could also have a
4060 direct or dialed serial connection instead of a Telnet connection). Now
4061 assuming you have a Kermit server on the far end of the Kermit
4064 rcd incoming ; Changes Kermit server's directory (= REMOTE CD)
4065 ftp cd incoming ; Changes FTP server's directory
4066 put oofa.txt ; Sends a file on the Kermit connection
4067 ftp put oofa.txt ; Sends a file on the FTP connection
4068 bye ; Shuts down the Kermit connection
4069 ftp bye ; Shuts down the FTP connection
4071 Note that PUT and SEND are synonyms for both FTP and Kermit
4074 You can also establish dual sessions on the Kermit command line:
4076 kermit -j host1 -9 host2
4078 This makes a Telnet connection to host1 and an FTP connection to host2.
4080 [ [350]Top ] [ [351]FTP Top ] [ [352]C-Kermit Home ] [ [353]Kermit Home
4083 3.10. Automating FTP Sessions
4085 Most of Kermit's scripting features can be used to make and control FTP
4086 sessions: FOR and WHILE loops, IF-ELSE and SWITCH constructions,
4087 variables, arrays, built-in functions, and all the rest. You can't use
4088 INPUT, MINPUT, OUTPUT, CLEAR, or SCRIPT on an FTP session, but these
4089 are not needed since the FTP protocol is well defined.
4091 [354]CLICK HERE for an FTP scripting tutorial.
4093 3.10.1. FTP-Specific Variables and Functions
4095 The following variable tells whether an FTP connection is open:
4098 1 if there is an active FTP connection, 0 if there isn't.
4100 The FTP OPEN command sets:
4103 The host to which the most recent FTP connection was made.
4106 The security method negotiated for the current FTP session. The
4107 value is "NULL" when no security is used. Other possibilities
4108 are GSSAPI, KERBEROS_V4, SSL, TLS, and SRP. Also see
4109 \v(authname), \v(authstate), and \v(authtype). See [355]3.2.
4110 Making Secure FTP Connections.
4113 The OS type (UNIX, VMS, etc) of the FTP server host.
4115 The FTP USER command (or FTP OPEN /USER:, or FTP with automatic login)
4119 1 if you are logged in to an FTP server, 0 if you are not.
4121 The current COMMAND-PROTECTION-LEVEL and DATA-PROTECTION-LEVEL values
4126 The values are "clear", "confidential", "safe" or "private". See
4127 [356]3.2. Making Secure FTP Connections.
4129 The FTP GET-PUT-REMOTE setting is reflected in:
4131 \v(ftp_getputremote)
4132 The values are "auto", "ftp", or "kermit".
4134 Every FTP command sets the \v(success) variable, as well as the
4135 following two FTP-specific variables:
4138 The standardized numeric FTP protocol code from the server's
4139 response to the last client command, a 3-digit decimal number
4140 defined in [357]RFC959. Briefly:
4142 1xx = Positive Preliminary Reply
4143 2xx = Positive Completion Reply
4144 3xx = Positive Intermediate Reply
4145 4xx = Transient Negative Completion Reply
4146 5xx = Permanent Negative Completion Reply
4149 The text message, if any, from the server's response to the last
4150 client command. If the most recent response had multiple lines,
4151 this variable has only the final line. These messages are not
4152 standardized and vary in format and content from server to
4153 server. Synonym: \v(ftp_msg).
4155 FTP file transfers set the regular Kermit transfer status variables:
4157 \v(cps) Characters per second of most recent transfer.
4158 \v(filespec) File specification used in most recent transfer.
4159 \v(fsize) Size of file most recently transferred.
4160 \v(tfsize) Total size of file group most recently transferred.
4161 \v(xferstatus) Status of most recent transfer (0 = success, 1 = failure).
4162 \v(tftime) Elapsed time of most recent transfer, in seconds.
4164 During an FTP transfer, the per-file variables are:
4166 \v(filename) Name of current file.
4167 \v(filenumber) Ordinal file number in group (1, 2, 3, ...)
4171 Let's begin with a simple example showing how to log in, send some
4174 define error if fail { ftp bye, stop 1 Error: \%1 }
4177 ftp ftp.xyzcorp.com /anonymous
4178 if fail stop 1 Connection failed
4179 if not \v(ftp_loggedin) stop 1 Login failed
4188 First we define an error handling macro to be used after the connection
4189 is made. Then we set up a brief-format transaction log to keep a record
4190 of our file transfers. Then we make a connection to the host and log in
4191 anonymously. The "if fail" command checks whether the connection was
4192 made. The "if not" command checks whether login was successful.
4193 Obviously the script should not continue unless both tests succeed.
4195 Next we change to the server's 'incoming' directory and to our own
4196 'upload' directory, and send all the files that are in it (they can be
4197 any mixture of text and binary files), deleting each source file
4198 automatically after it is successfully uploaded. Each of these
4199 operations is checked with the ERROR macro, which prevents the script
4200 from continuing past a failure.
4202 Finally we close the FTP session with the "bye" command.
4204 Just like any other Kermit script, this one can be used in many ways:
4206 * It can be stored in a file, and Kermit can be told to TAKE the
4208 * In UNIX, it can be a "[358]kerbang" script and therefore run
4209 directly from the shell prompt or as a cron job.
4211 We could have used command shortcuts like "rcd", "put", and "bye", but
4212 since they can be ambiguous under certain circumstances, it is better
4213 to avoid them in scripts; they are intended mainly for convenience
4214 during interactive use. However, if you wish to use the shortcuts in a
4215 script, you can do it this way (error handling omitted for brevity):
4217 local \%t ; Declare a local temporary variable
4218 assign \%t \v(ftp_getputremote) ; Save current FTP GET-PUT-REMOTE setting
4219 set ftp get-put-remote ftp ; Choose FTP orientation
4220 ftp xyzcorp.com /anonymous ; Open an FTP connection
4221 get oofa.txt ; GET a file
4222 put foo.bar ; PUT a file
4223 rdel yesterday.log ; Delete a file on the server
4224 bye ; Log out and disconnect from server.
4225 set ftp get-put-remote \%t ; Restore previous GET-PUT-REMOTE setting
4227 Of course, FTP scripts can also be written as macros. This lets you
4228 pass parameters such as hostnames, usernames, and filenames to them:
4231 if < \v(argc) 4 end 1 Usage: \%0 host user remotefile [ localfile ]
4233 if fail end 1 FTP OPEN \%1 failed
4234 if not \v(ftp_loggedin) end 1 FTP LOGIN failed
4236 if fail end 1 FTP GET \%3 failed
4240 Add this definition to your Kermit customization file, and it will
4241 always be available when you start Kermit. This macro lets you download
4242 a file with FTP by giving a single command, e.g.:
4244 doftpget xyzcorp.com anonymous oofa.txt
4246 3.10.3. Automating Secure FTP Sessions
4248 Often when making secure connections, you are prompted interactively
4249 for certain information or permission to proceed. These prompts can
4250 stop an automated procedure. To avoid them, you must give the
4251 appropriate commands to disable them, and/or supply the prompted-for
4252 information beforehand. Here are a few hints:
4254 * Make sure that SET TAKE ERROR and SET MACRO ERROR are both OFF.
4255 This is the default, but in case you have set either one of these
4256 ON in your script or initialization file, this makes the script
4257 halt on any kind of error. Normally you would want to check each
4258 operation for success or failure and take appropriate action.
4259 * On SSL and TLS connections, you may be asked whether it is OK to
4260 proceed with a connection to server that presents a self-signed
4261 certificate. You can use the SET AUTHENTICATION SSL (or TLS) VERIFY
4262 or SET AUTH SSL (or TLS) CERTS-OK commands to avoid this prompt by
4263 not requesting a certificate from the peer.
4264 * (More to be added...)
4266 [ [359]Top ] [ [360]FTP Top ] [ [361]FTP Script Tutorial ] [
4267 [362]C-Kermit Home ] [ [363]Kermit Home ]
4269 3.11. Advanced FTP Protocol Features
4271 The remainder of the FTP documentation (through the end of Section 3)
4272 is new to C-Kermit 8.0.206, but we leave it in black to prevent
4273 headaches. Except for titles.
4275 * [365]FEATURE NEGOTIATION
4276 * [366]USING MGET: NLST VERSUS MLSD
4280 The new releases of [369]C-Kermit (8.0.206) and [370]Kermit 95 (2.1)
4281 support new FTP protocol features from RFC 2389 as well as most of
4282 what's in the Elz and Hethmon Extensions to FTP Internet Draft (see
4283 [371]References). Some of these features, such as SIZE (request a
4284 file's size), MDTM (request file's modification time), and REST
4285 (restart interrupted transfer) have been widely implemented in FTP
4286 clients and servers for years (as well as in the initial release of the
4287 Kermit FTP clients). Others such as FEAT and MLSD are rarely seen and
4288 are new to the upcoming Kermit releases. TVFS (Trivial Virtual File
4289 Store) is supported implicitly, and the UTF-8 character-set is already
4290 fully supported at the protocol and data-interchange level.
4292 For Kermit users, the main benefit of the new FTP protocol extensions
4293 is the ability to do recursive downloads. But the extensions also
4294 introduce complications and tradeoffs that you should be aware of. Of
4295 course Kermit tries to "do the right thing" automatically in every case
4296 for backwards compatibility. But (as noted later) some cases are
4297 inherently ambiguous and/or can result in nasty surprises, and for
4298 those situations new commands and switches are available to give you
4299 precise control over Kermit's behavior, in case the defaults don't
4300 produce the desired results.
4304 Command-line FTP clients such as Kermit (as well as the traditional FTP
4305 programs found on Unix, VMS, ..., even Windows) have commands like PUT,
4306 MPUT, GET, MGET, and BYE, which they convert into zero or more FTP
4307 protocol commands, such as NLST, RETR, QUIT. For clarity, we'll use
4308 "command" to refer to commands given by the user to the FTP client, and
4309 "directive" for FTP protocol commands sent by the FTP client to the FTP
4312 3.11.2. Feature Negotiation
4314 New FTP protocol features are negotiated by the client sending a FEAT
4315 directive and the server responding with a list of (new) features it
4316 supports, or else with an error indication if it does not support the
4317 FEAT directive at all, in which case the client has to guess which new
4318 features it supports (Kermit guesses that it supports SIZE and MDTM but
4319 not MLST). Note that the MLST feature includes MLSD, which is not
4320 listed separately as a feature.
4322 Guessing is nice when it works, but sometimes it doesn't, and some FTP
4323 servers become confused when you send them a directive they don't
4324 understand, or they do something you didn't want, sometimes to the
4325 point of closing the connection. For this reason, Kermit lets you
4326 override default or negotiated features with the following new
4329 FTP { ENABLE, DISABLE } FEAT
4330 Enables or disables the automatic sending of a FEAT directive
4331 upon connection to an FTP server. Note that FTP [ OPEN ] /NOINIT
4332 also inhibits sending the FEAT directive (and several others)
4333 for the connection being OPEN'd, but without necessarily
4334 disabling FEAT for subsequent connections in the same Kermit
4335 instance. FEAT is ENABLED by default, in which case many FTP
4336 servers are likely to reply:
4338 500 'FEAT': command not understood
4340 which is normally harmless (but you never know). (In C-Kermit
4341 8.0.208, this error message is suppressed unless you SET FTP
4344 FTP ENABLE { MDTM, MLST, SIZE }
4345 Enables the given directive for implicit use by the FTP GET and
4346 MGET commands in case it has been disabled or erroneously
4347 omitted by the server in its FEAT response. Note: MLSD can be
4348 used in the FTP ENABLE and DISABLE commands as a synonym for
4349 MLST. YOU MUST GIVE THIS COMMAND AFTER MAKING THE FTP
4352 FTP DISABLE { MDTM, MLST, SIZE }
4353 Disables implicit use of the given directive by GET or MGET in
4354 case it causes problems; for example, because it makes multifile
4355 downloads take too long or the server announces it erroneously
4356 or misimplements it. Use DISABLE FEAT before making a connection
4357 to prevent Kermit from sending the FEAT directive as part of its
4358 initial sequence. Note that disabling FEAT, SIZE, or MDTM does
4359 not prevent you from executing explicit FTP FEATURES, FTP SIZE,
4360 or FTP MODTIME commands. Also note that disabling SIZE prevents
4361 PUT /RESTART (recovery of interrupted uploads) from working. YOU
4362 MUST GIVE THIS COMMAND AFTER MAKING THE FTP CONNECTION.
4364 To enable or disable more than one feature, use multiple FTP ENABLE or
4365 FTP DISABLE commands. The SHOW FTP command shows which features are
4366 currently enabled and disabled.
4369 This command sends a FEAT directive to the server. In case you
4370 have been disabling and enabling different features, this
4371 resynchronizes Kermit's feature list with the server's. If the
4372 server does not support the FEAT directive, Kermit's feature
4373 list is not changed.
4375 FTP OPTIONS directive
4376 Informational only: the server tells what options, if any, it
4377 supports for the given directive, e.g. MLST. Fails if the server
4378 does not support the OPTS directive or if the directive for
4379 which options are requested is not valid. The directive is
4383 Sends a SIZE directive to the server for the given file. The
4384 filename must not contain wildcards. The server responds with an
4385 error if the file can't be found, is not accessible, or the SIZE
4386 directive is not supported, otherwise with the length of the
4387 file in bytes, which Kermit displays and also makes available to
4388 you in its \v(ftp_message) variable. If the directive is
4389 successful, Kermit (re-)enables it for internal use by the GET
4390 and MGET directives on this connection.
4392 FTP MODTIME filename
4393 Works just like the SIZE directive except it sends an MDTM
4394 directive. Upon success, the server sends modification date-time
4395 string, which Kermit interprets for you and also makes available
4396 in its \v(ftp_message) variable.
4398 Whenever a SIZE or MDTM directive is sent implicitly and rejected by
4399 the server because it is unknown, Kermit automatically disables it.
4401 3.11.3. Using MGET: NLST versus MLSD
4403 When you give an MGET command to an FTP client, it sends a request to
4404 the FTP server for a list of files, and then upon successful receipt of
4405 the list, goes through it and issues a RETR (retrieve) directive for
4406 each file on the list (or possibly only for selected files).
4408 With the new FTP protocol extensions, now there are two ways to get the
4409 list of files: the NLST directive, which has been part of FTP protocol
4410 since the beginning, and the new MLSD directive, which is new and not
4411 yet widely implemented. When NLST is used and you give a command like
4412 "mget *.txt", the FTP client sends:
4416 and the server sends back a list of the files whose names match, e.g.
4422 Then when downloading each file, the client sends SIZE (if it wants
4423 have a percent-done display) and MDTM (if it wants to set the
4424 downloaded file's timestamp to match that of the original), as well as
4425 RETR (to retrieve the file).
4427 But when MLSD is used, the client is not supposed to send the filename
4428 or wildcard to the server; instead it sends an MLSD directive with no
4429 argument (or the name of a directory), and the server sends back a list
4430 of all the files in the current or given directory; then the client
4431 goes through the list and checks each file to see if it matches the
4432 given pattern, the rationale being that the user knows only the local
4433 conventions for wildcards and not necessarily the server's conventions.
4434 So with NLST the server interprets wildcards; with MLSD the client
4437 The interpretation of NLST wildcards by the server is not
4438 necessarily required or even envisioned by the FTP protocol
4439 definition (RFC 959), but in practice most clients and servers work
4442 The principal advantage of MLSD is that instead of sending back a
4443 simple list of filenames, it sends back a kind of database in which
4444 each entry contains a filename together with information about the
4445 file: type, size, timestamp, and so on; for example:
4447 size=0;type=dir;perm=el;modify=20020409191530; bin
4448 size=3919312;type=file;perm=r;modify=20000310140400; bar.txt
4449 size=6686176;type=file;perm=r;modify=20001215181000; baz.txt
4450 size=3820092;type=file;perm=r;modify=20000310140300; foo.txt
4451 size=27439;type=file;perm=r;modify=20020923151312; foo.zip
4454 (If the format of the file list were the only difference between NLST
4455 and MLSD, the discussion would be finished: it would always be better
4456 to use MLSD when available, and the MGET user interface would need no
4457 changes. But there's a lot more to MLSD than the file-list format; read
4460 The client learns whether the server supports MLSD in FEAT exchange.
4461 But the fact that the server supports MLSD doesn't mean the client
4462 should always use it. It is better to use MLSD:
4464 * On connections where the server imposes a time penalty for every
4465 command, e.g. the Red Hat Rawhide server. With MLSD, the client
4466 needs to send only one command (RETR) per file, whereas NLST
4467 requires three (SIZE, RETR, and MDTM). Suppose there is a 30-second
4468 delay for each command and 1000 files are to be fetched; in that
4469 case, MLSD saves 60,000 seconds = 1000 minutes = 16 hours and 40
4471 * For recursive downloads since there is no dependable way to
4472 download directory trees with NLST.
4474 But it is better to use NLST:
4476 * If you want only a couple short files out of a large directory. In
4477 this case, NLST is the better choice since the server sends a list
4478 of only the files you want, not a list of (say) a million files,
4479 which can make a big difference on slow connections. For example,
4480 suppose your wildcard matches three files of 1K each, but the
4481 million-file listing is 80MB long, and your connection is through a
4482 modem. The overhead of using MLSD is practically infinite.
4483 * If the server supports wildcarding features not known to the
4484 client, but that can be used to achieve desirable effects otherwise
4485 unobtainable, such as "[dir...]*.txt" in VMS or AOS/VS "except"
4487 * If you have been given a wildcard string by an FTP site
4488 administrator for fetching a specific group of files out of a
4489 larger directory, e.g. "mget ck[cuw]*.[cwh] makefile", that is
4490 expected to work with any client (an FTP site administrator can't
4491 be expected to know the wildcard syntax of every FTP client).
4493 But when using MLSD there are complications:
4495 * MLSD wants either a blank argument (meaning the current directory)
4496 or else the name of a specific directory. The client must not send
4497 it a wildcard or a filename.
4498 * But if the user's command is "mget xxx", how does the client know
4499 whether to send "xxx" in the MLSD directive? It might be the name
4500 of a directory on on the server, in which case it should be sent,
4501 or it might be the name of a file on the server (or a wildcard), in
4502 which case it must not be sent. Since the client knows its own
4503 wildcard syntax, then in most cases it would be right to send
4504 "MLSD" with no argument if xxx is wild, and to send "MLSD xxx" if
4506 * But suppose the server's file system allows filename characters
4507 that correspond with the client's wildcard syntax? For example:
4508 "[abc]" could be either a valid VMS directory name or a wildcard
4509 pattern used by the FTP client. What should the client do with
4510 "mget [abc]"? In this case there must be a way for the user to
4511 force sending the MGET argument as the MLSD argument.
4512 * If "xxx" is a regular file in the server's current directory, "mget
4513 xxx" works with NLST but not with MLSD.
4515 To further complicate matters, NLST can (in theory) work just like
4516 MLSD: if sent with a blank argument or a directory name, it is supposed
4517 to return a complete list of files in the current or given directory,
4518 which the client can match locally against some pattern. It is not
4519 known if any FTP server or client does this but nevertheless, it should
4520 be possible since this behavior can be inferred from RFC 959.
4522 In view of these considerations, and given the need to preserve the
4523 traditional FTP client command structure and behavior so the software
4524 will be usable by most people:
4526 1. The MGET command should produce the expected result in the common
4527 cases, regardless of whether NLST or MLSD is used underneath.
4528 2. For anomalous cases, the user needs a way to control whether the
4529 MGET argument is sent to the server or kept for local use.
4530 3. At the same time, the user might need a way to send a directory
4531 name to the server, independent of any wildcard pattern.
4532 4. The user needs a way to force NLST or MLSD for a given MGET
4535 By default, Kermit's MGET command uses MLSD if MLST is reported by the
4536 server in its FEAT list. When MLSD is used, the filespec is sent to the
4537 server if it is not wild (according to Kermit's own definition of
4538 "wild" since it can't possibly know the server's definition). If the
4539 filespec is wild it is held for local use to select files from the list
4540 returned by the server. If MLST is not reported by the server or is
4541 disabled, Kermit sends the MGET filespec with the NLST directive.
4543 The default behavior can be overridden globally with FTP DISABLE MLST,
4544 which forces Kermit to use NLST to get file lists. And then for
4545 situations in which MLSD is enabled, the following MGET switches can be
4546 used to override the defaults for a specific MGET operation:
4549 Forces the client to send NLST. Example:
4554 Forces the client to send MLSD (even if MLST is disabled).
4560 When this switch is given, it forces the client to hold the
4561 pattern for local use against the returned file list. If a
4562 remote filespec is also given (e.g. the "blah" in "mget
4563 /match:*.txt blah"), then it is sent as the NLST or MLSD
4564 argument, presumably to specify the directory whose files are to
4565 be listed. When the /MATCH switch is not given, the MGET
4566 filespec is sent to the server if the directive is NLST or if
4567 the filespec is not wild. Examples:
4569 Command: With NLST: With MLSD:
4571 mget *.txt NLST *.txt MLSD
4572 mget foo NLST foo MLSD foo
4573 mget /match:*.txt NLST MLSD
4574 mget /match:*.txt foo NLST foo MLSD foo
4576 In other words, the pattern is always interpreted locally unless MGET
4577 uses NLST and no /MATCH switch was given.
4581 3.11.4.1. Downloading a Single File
4583 There are no choices here, just use the FTP GET command. Kermit always
4584 sends the RETR directive, and possibly SIZE and/or MDTM. The small
4585 advantage of using MLST in this case is outweighed by the risk and
4586 effort of coding a special case.
4588 3.11.4.2. Downloading a Group of Files from a Single Directory
4590 This case presents tradeoffs, especially on slow connections:
4592 * For downloading all or most of the files in a directory, MLSD is
4593 better because it eliminates the need to send SIZE and MDTM for
4594 each file. No special actions are required in this case; Kermit
4595 uses MLSD automatically if the server supports it (unless you have
4597 * For a small number of files from a large directory, NLST is better
4598 because it bypasses downloading of a potentially huge file list
4599 prior to the files themselves. If you have a connection to a server
4600 that supports MLSD, use the /NLST switch to force NLST:
4602 mget /nlst t[1234].h
4604 * If the server supports MLSD but does not support separate SIZE or
4605 MDTM directives, and you need the size and/or timestamp
4606 information, MLSD is better; no special actions required.
4607 * If the server supports MLSD but does not support the "size" and
4608 "modify" facts, but it does support the SIZE or MDTM directives,
4609 and you need the size and/or timestamp information, NLST is better.
4611 3.11.4.3. Downloading a Directory Tree
4613 MLSD is the only choice for recursive downloads; they rarely, if ever,
4614 work with NLST (the few cases where they do work rely on extra-protocol
4615 "secret" notations for the NLST argument). No special actions are
4616 required to force MLSD when the server supports it, unless you have
4617 disabled it. Examples:
4620 This tells the server to send all files and directories in the
4621 tree rooted at its current directory.
4623 MGET /RECURSIVE *.txt
4624 This tells the server to send all *.txt files in the tree rooted
4625 at its current directory.
4627 MGET /MLSD /RECURSIVE *.txt
4628 Same as the previous example but forces Kermit to send MLSD in
4629 case it was disabled, or in case the server is known to support
4630 it even though it did not announce it in its FEAT listing.
4632 MGET /RECURSIVE /MATCH:*.zip archives
4633 Tells the server to send all ZIP files in the tree rooted at its
4634 "archives" directory.
4636 MGET /RECURSIVE /MATCH:* [abc]
4637 The server is running on VMS and you want it to send all the
4638 files in the directory tree rooted at [ABC]. But since "[abc]"
4639 looks just like a wildcard, you have to include a /MATCH: switch
4640 to force Kermit to send "[abc]" as the MLSD argument.
4642 In all cases in which the /RECURSIVE switch is included, the server's
4643 tree is duplicated locally.
4645 Although MLSD allows recursion and NLST does not, the MLSD
4646 specification places a heavy burden on the client; the obvious,
4647 straightforward, and elegant implementation (depth-first, the one
4648 that Kermit currently uses) requires as many open temporary files as
4649 the server's directory tree is deep, and therefore client resource
4650 exhaustion -- e.g. exceeding the maximum number of open files -- is
4651 a danger. Unfortunately MLSD was not designed with recursion in
4652 mind. (Breadth-first traversal could be problematic due to lack of
4653 sufficient navigation information.)
4655 Of course all of Kermit's other MGET switches can be used too, e.g. for
4656 finer-grained file selection (by date, size, etc), for moving or
4657 renaming files as they arrive, to override Kermit's automatic per-file
4658 text/binary mode switching, to pass the incoming files through a
4659 filter, to convert text-file character sets, and so on.
4661 3.11.4.4. NLST/MLSD Summary Table
4663 Here's a table summarizing MGET behavior when the server supports both
4664 NLST and MLSD. /NLST and /MLSD switches are included for clarity to
4665 indicate which protocol is being used, and the expected effects. In
4666 practice you can omit the /NLST and /MLSD switches and the Kermit
4667 client chooses the appropriate or desired protocol as described above.
4668 Sample commands presume a Unix file system on the server, but of course
4669 the server can have any file system or syntax at all.
4671 User's Command FTP Sends Remarks
4672 mget /nlst NLST Gets a list of all the files in the server's current
4673 and downloads each file. The list includes names only, so Kermit also
4674 must send SIZE and MDTM directives if size and timestamp information is
4675 required (this is always true of NLST). Sending NLST without an
4676 argument is allowed by the RFC959 NLST definition and by the Kermit FTP
4677 client, but might not work with other clients, and also might not work
4679 mget /nlst foo NLST foo If "foo" is a directory, this gets a list of
4680 all the files from the server's "foo" directory and downloads each
4681 file; otherwise this downloads the file named "foo" (if any) from the
4682 server's current directory.
4683 mget /nlst *.txt NLST *.txt Gets a list of the files in the server's
4684 current directory whose names match the pattern *.txt, and then
4685 downloads each file from the list. Because we are using NLST, we send
4686 the filespec (*.txt) to the server and the server interprets any
4688 mget /nlst foo/*.txt NLST foo/*.txt Gets a list of the files in the
4689 server's "foo" directory whose names match the pattern *.txt, and then
4690 downloads each file from the list (server interprets wildcards).
4691 mget /nlst /match:*.txt NLST Gets a list of all the files in the
4692 server's current directory and then downloads each one whose name
4693 matches the pattern *.txt (client interprets wildcards).
4694 mget /nlst /match:*.txt foo NLST foo Gets a list of all the files in
4695 the server's "foo" directory and then downloads each one whose name
4696 matches the pattern *.txt (client interprets wildcards).
4697 mget /mlsd MLSD Gets a list of all the files from the server's current
4698 directory and then downloads each one. The list might include size and
4699 timestamp information, in which case Kermit does not need to send SIZE
4700 and MDTM directives for each file (this is always true of MLSD).
4701 mget /mlsd foo MLSD foo Gets a list of all the files from the server's
4702 "foo" directory (where the string "foo" does not contain wildcards) and
4703 then downloads each one. If "foo" is a regular file and not a
4704 directory, this command is supposed to fail, but some servers have been
4705 observed that send the file.
4706 mget /mlsd *.txt MLSD Gets a list of all the files from the server's
4707 current directory and then downloads only the ones whose names match
4708 the pattern "*.txt". Because we are using MLSD and the MGET filespec is
4709 wild, we do not send the filespec to the server, but treat it as though
4710 it had been given in a /MATCH: switch and use it locally to match the
4712 mget /mlsd foo/*.txt MLSD This one won't work because MLSD requires
4713 that the notions of server directory and filename-matching pattern be
4714 separated. However, the client, which can't be expected to know the
4715 server's file-system syntax, winds up sending a request that the server
4716 will (or should) reject.
4717 mget /mlsd /match:*.txt MLSD Gets a list of all the files from the
4718 server's current directory and then downloads only the ones whose names
4719 match the pattern "*.txt" (client interprets wildcards).
4720 mget /mlsd /match:*.txt foo MLSD foo If "foo" is a directory on the
4721 server, this gets a list of all the files from the server's "foo"
4722 directory and then downloads only the ones whose names match the
4723 pattern "*.txt" (client interprets wildcards). This leaves the server
4724 CD'd to the "foo" directory; there's no way the client can restore the
4725 server's original directory because MLSD doesn't give that information,
4726 and since the client can not be expected to know the server's
4727 file-system syntax, it would not be safe to guess. If "foo" is a
4728 regular file, MLSD fails.
4729 mget /mlsd foo bar MLSD This one is problematic. You're supposed to be
4730 able to give MGET a list a filespecs; in this case we name two
4731 directories. The client must change the server's directory to "foo" to
4732 get the list of files, and then the files themselves. But then it has
4733 no way to return to the server's previous directory in order to do the
4734 same for "bar", as explained in the previous example.
4735 mget /mlsd /match:* [abc] MLSD [abc] Including a /MATCH: switch forces
4736 [abc] to be sent to the server even though the client would normally
4737 think it was a wildcard and hold it for local interpretation. In this
4738 example, [abc] might be a VMS directory name.
4739 mget /mlsd /match:* t*.h MLSD t*.h Contrary to the MLSD specification,
4740 some MLSD-capable FTP servers do interpret wildcards. This form of the
4741 MGET command can be used to force a wildcard to be sent to the server
4744 When MLSD is used implicitly (that is, without an /MLSD switch given to
4745 force the use of MLSD) and an MGET command such as "mget foo/*.txt"
4746 fails, Kermit automatically falls back to NLST and tries again.
4750 1. Postel, J., and J. Reynolds, File Transfer Protocol (FTP), RFC 959,
4751 October 1985: [372]ftp://ftp.isi.edu/in-notes/rfc959.txt.
4752 2. Hethmon, P, and R. Elz, Feature negotiation mechanism for the File
4753 Transfer Protocol, RFC 2389, August 1998:
4754 [373]ftp://ftp.isi.edu/in-notes/rfc2389.txt.
4755 3. Elz, R, and P. Hethmon, Extensions to FTP, Internet Draft
4756 draft-ietf-ftpext-mlst-16.txt, September 2002:
4757 [374]http://www.ietf.org/internet-drafts/draft-ietf-ftpext-mlst-16.
4759 4. [375]The Kermit FTP Client (overview).
4761 [ [376]Top ] [ [377]FTP Top ] [ [378]C-Kermit Home ] [ [379]Kermit Home
4766 A new feature called file scanning is used in various contexts to
4767 determine if a file is text or binary, and if it is text, what kind of
4768 text. The overhead of file scanning is surprisingly tolerable, usually
4769 about a quarter second per file. File scanning is now used instead of
4770 filename patterns unless you SET FILE SCAN OFF, which restores the
4773 The primary benefit of file scanning is in file transfer. For all
4774 practical purposes, now you can stop worrying about whether a file
4775 should be sent in binary or text mode, or about sending mixtures of
4776 text and binary files in a single operation, or configuring and
4777 fine-tuning your lists of binary-file and text-file name patterns: now
4780 File scanning is done by the file sender, which determines the type of
4781 each file before it sends it and informs the receiver (Kermit or FTP
4782 server) of the type. File scanning is NOT done by the receiver, because
4783 it is the sender's responsibility to determine each file's type, send
4784 the file in the right mode, and inform the receiver of the mode. If
4785 both transfer partners are capable of this (or any other) form of
4786 automatic text/binary mode switching, then files can be sent in both
4787 directions with no worries about corruption due to inappropriate
4788 transfer mode. (As noted in [380]Section 3, FTP servers don't do this,
4789 so this discussion does not apply when using Kermit to download from an
4792 The rest of this section is mainly for the curious. If you don't read
4793 it and simply accept all defaults, every file you send should go in the
4794 appropriate mode automatically. As always, however, for character-set
4795 translation to work for 7- and 8-bit character-set files, the
4796 appropriate SET FILE CHARACTER-SET command(s) must have been executed
4797 to identify their encoding (Kermit's default file character-set is
4798 neutral ASCII except on platforms like HP-UX or DG/UX, where the
4799 default file character-set is known). And of course, receiving is
4800 another matter -- obviously the other Kermit must also send each file
4801 in the appropriate mode.
4803 Scanning is more reliable than filename patterns simply because
4804 filenames are not reliable indicators of the file's contents. Classic
4805 examples include ".doc" files, which are binary if Microsoft Word
4806 documents but text on most other platforms, and ".com" files, which are
4807 binary on DOS and Windows but text on VMS. Anyway, nobody knows the
4808 naming conventions (if any) of all the applications (and persons!) on
4809 your computer. Scanning, on the other hand, determines each file's type
4810 by inspecting its contents rather than just looking at its name.
4812 Also, file patterns -- even when they work as intended -- categorize
4813 each file only as text or binary, whereas file scanning can make finer
4817 Binary data, not to be converted in any way. Examples include
4818 binary machine code (executable programs), graphics images (GIF,
4819 JPG, etc), compressed files (Z, GZ, etc), archives and packages
4820 (ZIP, TAR, RPM, etc), object files and libraries (OBJ, DLL,
4824 Text encoded in a 7-bit character set such as ASCII or one of
4825 the ISO 646 national versions. Kermit has no way to tell which
4826 character is used, only that it's 7-bit text. Typical examples
4827 include program source code, README files, Perl or Kermit
4828 scripts, plain-text email, HTML, TeX, and various textual
4829 encodings of binary files: Hex, Base64, etc. When sending such
4830 files, the FILE DEFAULT 7BIT-CHARACTER-SET is used as the file
4831 character-set, and then the appropriate transfer character set
4832 is chosen from the associations list (ASSOCIATE, SHOW
4836 Text encoded in an 8-bit character set such as Latin-1, Latin-2,
4837 Latin/Hebrew, Latin/Cyrillic, KOI8, HP-Roman8, JIS X 0208, Code
4838 Page 437, or Code Page 1252. Again, Kermit has no way of knowing
4839 which particular set is in use, only that it's 8-bit text. When
4840 sending such files, the FILE DEFAULT 8BIT-CHARACTER-SET is used
4841 as the file character-set, and then the appropriate transfer
4842 character set is chosen from the associations list.
4845 Unicode in its basic form, 16 bits (2 octets) per character.
4846 When sending such files, UCS2 is the file character-set and the
4847 byte order is identified automatically; the appropriate transfer
4848 character set is chosen from the associations list. Normally
4849 this would be UTF8. UTF-16 is not supported yet; Kermit's
4850 Unicode translations are restricted to Plane 0, the Base
4851 Multilingual Plane (BMP).
4854 Unicode in its 8-bit transformation format. When sending such
4855 files, UTF8 is the file character-set; the appropriate transfer
4856 character set is chosen from the associations list, normally
4859 File scanning is available in UNIX C-Kermit, in K-95, and to a limited
4860 extent, in VMS C-Kermit (full scanning is problematic in VMS because
4861 even plain-text files might contain binary record-format information).
4862 The relevant commands are:
4864 SET TRANSFER MODE { AUTOMATIC, MANUAL }
4865 Tells whether the file-transfer mode (text or binary) should be
4866 set by automatic or "manual" means. AUTOMATIC is the default,
4867 which allows any of the automatic methods that are enabled to do
4868 their jobs: FILE SCAN, FILE PATTERNS, peer recognition, etc.
4869 MANUAL lets you control the transfer mode with the SET FILE TYPE
4870 commands. As always, /TEXT and /BINARY switches on your
4871 file-transfer commands override all other methods; if you give
4872 one of these switches, scanning is not done. SHOW TRANSFER
4873 displays the current TRANSFER MODE setting.
4875 SET FILE SCAN { ON [ number ], OFF }
4876 Turns this feature on and off. It's ON by default. When OFF, the
4877 previous rules apply (SET FILE PATTERNS, etc). When ON is given,
4878 you can also specify a number of bytes to be scanned. The
4879 default is 49152 (= 48K). If a negative number is given, the
4880 entire file is scanned, no matter how big, for maximum certainty
4881 (for example, a PostScript file that appears to be plain text
4882 might include an embedded graphic past the normal scanning
4883 limit). SHOW FILE displays the current FILE SCAN setting.
4885 SET FILE DEFAULT 7BIT-CHARACTER-SET name
4886 Tells the 7-bit character-set to use if scanning identifies a
4887 7-bit text file, e.g. GERMAN. SHOW FILE displays the current SET
4888 FILE DEFAULT settings. So does SHOW CHARACTER-SETS.
4890 SET FILE DEFAULT 8BIT-CHARACTER-SET name
4891 Tells the 8-bit character-set to use if scanning identifies an
4892 8-bit text file, e.g. LATIN1. SHOW FILE and SHOW CHARACTER-SET
4895 ASSOCIATE FILE-CHARACTER-SET fcs tcs
4896 When sending files and a file character-set (fcs) is identified
4897 by scanning, this tells C-Kermit which transfer character-set
4898 (tcs) to translate it to. It also allows C-Kermit to set the
4899 appropriate transfer character-set automatically whenever you
4900 give a SET FILE CHARACTER-SET command.
4902 ASSOCIATE TRANSFER-CHARACTER-SET tcs fcs
4903 When receiving files and a file arrives whose transfer
4904 character-set (tcs) is announced by the sender, this command
4905 tells C-Kermit which file character-set (fcs) to translate it
4906 to. It also allows C-Kermit to set the appropriate file
4907 character-set whenever you give a SET TRANSFER CHARACTER-SET
4910 SET FILE CHARACTER-SET name
4911 When given for a 7-bit set, also sets FILE DEFAULT
4912 7BIT-CHARACTER-SET to the same set. When given for an 8-bit set,
4913 also sets FILE DEFAULT 8BIT-CHARACTER-SET to the same set. If an
4914 ASSOCIATE FILE-CHARACTER-SET command has been given for this
4915 set, also sets the corresponding transfer character-set.
4917 DIRECTORY /XFERMODE [ filespec ]
4918 Performs a file scan of the given files, listing the result for
4919 each file. If FILE SCAN is OFF but PATTERNS are ON, the result
4920 shown according to the current FILE TEXT-PATTERNS and
4921 BINARY-PATTERNS, and are restricted to (B) and (T). When FILE
4922 SCAN is ON, the results are:
4925 (T)(7BIT) Text: 7-bit
4926 (T)(8BIT) Text: 8-bit
4927 (T)(UTF8) Text: Unicode UTF8
4928 (T)(UCS2BE) Text: Unicode UCS2 Big Endian
4929 (T)(UCS2LE) Text: Unicode UCS2 Little Endian
4931 So you can use DIR /XFER to get a preview of how each file in a
4932 selected group will be transferred. Everything to the right of
4933 the (B) or (T) is new. If FILE SCAN is OFF, you only get the (B)
4936 Note: Big and Little Endian refer to the ordering of bytes
4937 within a computer word. Big Endian architecture is standard and
4938 is used on most non-PC computers. Little Endian architecture is
4941 To illustrate file-transfer with scanning, suppose you have a directory
4942 containing a mixture of text and binary files, and each text file can
4943 be 7-bit German ISO 646, 8-bit Latin-1, or Unicode in any of the
4944 following forms: UCS2 Little Endian, UCS2 Big Endian, or UTF8
4945 ([381]UTF-16 is not supported yet). Assuming all the built-in defaults
4946 are in effect, the following three commands do the job:
4948 set file char german ; This sets the default for 7-bit text files
4949 set file char latin1 ; This sets the default for 8-bit text files
4952 Each file is sent in the appropriate mode (text or binary), with text
4953 files converted to the appropriate transfer character-set and labeled
4954 so the receiver can convert them according to its own local
4957 By the way, what if you want to inhibit character-set translation but
4958 still allow automatic text/binary mode switching? Previously, you could
4959 simply SET TRANSFER CHARACTER-SET TRANSPARENT. But now with file
4960 scanning, the file and transfer character-sets are set automatically
4961 per file. A new command was added for this purpose:
4963 SET TRANSFER TRANSLATION { ON, OFF }
4964 Enables and disables file-transfer character-set translation. It
4965 is enabled by default.
4967 When TRANSFER TRANSLATION is OFF but FILE SCAN is ON, files are still
4968 scanned to see if they are text or binary, but no character-set
4969 translation is done when they text: only the normal record-format
4972 Like all SET commands, SET TRANSFER TRANSLATION is global and
4973 persistent. You can also force a particular file-transfer command
4974 (SEND, MSEND, GET, RECEIVE, TRANSMIT, etc) to not translate without
4975 affecting the global translation settings by including the new
4976 /TRANSPARENT switch, e.g.
4978 send /transparent oofa.txt
4980 As of C-Kermit 8.0.206, SET TRANSFER CHARACTER-SET TRANSPARENT implies
4981 SET TRANSFER TRANSLATION OFF.
4983 File scanning is also used in the TYPE command. The source file type
4984 and character set are determined as above, and then the file is
4985 automatically converted to your display character-set, line by line. In
4986 Kermit 95, the display character-set is Unicode, perhaps converted to
4987 your current console code page; in other versions of C-Kermit, it is
4988 your current file character-set. Thus if you have the following set
4991 SET FILE CHARACTER-SET (necessary in Unix but not K95)
4992 SET FILE DEFAULT 7BIT CHARACTER-SET
4993 SET FILE DEFAULT 8BIT CHARACTER-SET
4995 then you should be able to TYPE any text file and see something
4996 reasonable. For example, in Unix, if your DEFAULT 7BIT-CHARACTER-SET is
4997 ITALIAN and your DEFAULT 8BIT-CHARACTER-SET is LATIN1, and your FILE
4998 CHARACTER-SET is LATIN1, you can TYPE an Italian ISO 646 file, a
4999 Latin-1 file, or any kind of Unicode file, and have it translated
5000 automatically to Latin-1 for your display.
5002 In the GUI version of Kermit 95, you can see mixtures of many different
5003 scripts if the file is UTF8 or UCS2: Roman, Cyrillic, Hebrew, Greek,
5004 Armenian, Georgian, etc, all on the same screen at once.
5006 File scanning also adds a new criterion for file selection, i.e. to
5007 select only text (or binary) files. Several commands now include a new
5008 switch, /TYPE:{BINARY,TEXT,ALL}. BINARY means select only binary
5009 regular files (not directories). TEXT means select only text files. ALL
5010 means don't scan; select all files. Examples:
5012 SEND /TYPE:BINARY *.*
5013 Sends only binary files, skipping over text files.
5015 NOTE: File scanning is NOT done when using external protocols (because
5016 the external protocol programs, such as sz, are processing each file,
5019 DIRECTORY /TYPE:TEXT
5020 Lists only text files but not binary files.
5022 DELETE /TYPE:BINARY foo.*
5023 Deletes all foo.* files that are regular binary files but does
5024 not delete any text files.
5026 CHMOD /TYPE:BINARY 775 *
5027 (UNIX) Changes the permissions of all binary files to 775.
5029 When FILE SCAN is OFF and FILE PATTERNS are ON, behavior is as before
5030 with PATTERNS ON, but with some improvements:
5032 * Pathnames are now stripped prior to pattern matching.
5033 * Backup suffixes (like .~3~) are stripped prior to pattern matching.
5035 [ [382]Top ] [ [383]Contents ] [ [384]C-Kermit Home ] [ [385]Kermit
5038 5. FILE AND DIRECTORY NAMES CONTAINING SPACES
5040 Prior to the introduction of the graphical user interface (GUI), it was
5041 inconceivable that file or directory names could contain spaces,
5042 because space is a field delimiter in all command languages. GUIs,
5043 however, use dialog boxes for filenames, so there is never any question
5044 of distinguishing a filename from adjacent fields -- because there are
5045 no adjacent fields -- and therefore it has become quite common on
5046 computers that have GUIs to have file and directory names composed of
5047 multiple words. Of course this poses problems for command shells and
5048 other text-oriented programs.
5050 Most command shells address these problems by allowing such names to be
5051 enclosed in doublequotes, e.g.:
5053 cd "c:\Program Files"
5055 C-Kermit previously used braces for this:
5057 cd {c:\Program Files}
5059 which was not what most people expected. And even when braces were
5060 used, Kermit had difficulties with completion, file menus, and so
5061 forth, within braced fields.
5063 C-Kermit 8.0 allows either doublequotes or braces to be used for
5068 rename "this file" "that file"
5069 rename {this file} "that file"
5070 rename "this file" {that file}
5074 Note that the doublequotes or brackets must enclose the whole file or
5075 directory specification:
5083 In C-Kermit 8.0, you can also use completion on these filenames, in
5084 which case Kermit supplies the quotes (or braces) automatically.
5085 Example (in which the current directory contains only one file whose
5086 name starts with "th" and its full name is "this file" (without the
5087 quotes, but with the space)):
5091 Kermit repaints the filename field like this:
5095 That is, it backspaces over the original "th" and then writes the
5096 filename in doublequotes.
5098 If completion is only partial, Kermit still supplies the quotes, but in
5099 this case also beeps. To continue the filename, you must first
5100 backspace over the closing quote. The closing quote is supplied in this
5101 case to make sure that you can see the spaces, especially if they are
5102 trailing. For example, if the current directory contains two files
5103 whose names start with "th", and their fill names are "this file" and
5112 If it didn't print the closing quote, you would probably wonder why it
5115 Also, if you begin a filename field with a doublequote or opening
5116 brace, now you can use completion or get ?-help; this was never
5119 C-Kermit>type "thi? Input file specification, one of the following:
5120 this file this other file
5123 [ [386]Top ] [ [387]Contents ] [ [388]C-Kermit Home ] [ [389]Kermit
5126 6. OTHER COMMAND PARSING IMPROVEMENTS
5128 6.1. Grouping Macro Arguments
5130 Doublequotes now can be used in macro invocations to group arguments
5131 containing spaces, where previously only braces could be used:
5134 xx one "this is two" three
5138 Macro arguments at level 0 (\v(argc) = 4):
5144 Also, you can now quote braces and quotes in macro args (this didn't
5145 work before). Examples:
5147 xx "{" ; The argument is a single left brace
5148 xx {"} ; The argument is a doublequote character
5150 In case this new behavior interferes with your scripts, you can restore
5151 the previous behavior with:
5153 SET COMMAND DOUBLEQUOTING OFF
5155 6.2. Directory and File Name Completion
5157 C-Kermit 8.0 also includes better completion for directory names, e.g.
5158 in the CD command. If the name typed so far uniquely matches a
5159 directory name, it is completed (as before), but now if the directory
5160 contains any subdirectories, completion is partial (allowing you to
5161 supply additional path segments without backspacing); otherwise it is
5164 Completion has also been improved for file and directory names that
5165 contain not only spaces (as described above) but also "metacharacters"
5166 such as asterisk (*) and tilde (~): now the field is repainted if
5167 necessary. For example, if the current directory contains only one file
5168 whose name contains "blah", then in:
5172 "*blah" is replaced by the filename. In earlier releases, the part
5173 typed so far was left on the command line (and in the history buffer),
5174 so even when the original command worked, the recalled version would
5175 not. Similarly for ~ (the nearly-universal Unix notation for username):
5179 is repainted as (e.g.):
5181 type /users/home/olga/x(Beep)
5183 Speaking of command history, the new SHOW HISTORY command shows your
5184 command history and recall buffer. SAVE COMMAND HISTORY saves it into a
5185 file of your choice.
5187 6.3. Passing Arguments to Command Files
5189 The method for passing arguments to command files has been improved.
5190 Prior to C-Kermit 7.0 there was no provision for doing this. In
5191 C-Kermit 7.0, the TAKE command was changed to allow arguments to be
5192 given after the filename:
5194 take commandfile arg1 arg2 ...
5196 This was accomplished by replacing the current \%1, \%2, etc, with the
5197 given arguments, since a new set of macro argument variables is created
5198 only when a macro is executed, not a command file. It is much more
5199 intuitive, however, if arguments to command files worked like those to
5200 macros: the command file sees the arguments as its own \%1, \%2, etc,
5201 but the caller's variables are not disturbed. C-Kermit 8.0 accomplishes
5202 this by automatically creating an intermediate temporary macro to start
5203 the command file (if any arguments were given), thus creating a new
5204 level of arguments as expected.
5208 The familiar --more?-- prompt that appears at the end of each screenful
5209 of command-response output now accepts a new answer: G (Go) meaning
5210 "show all the rest without pausing and asking me any more questions". P
5211 (Proceed) is a synonym for G.
5213 6.5. Commas in Macro Definitions
5215 As noted in the [390]C-Kermit manual, comma is used to separate
5216 commands in a macro definition. Even when the macro is defined on
5217 multiple lines using curly-brace block-structure notation without
5218 commas, the definition is still stored internally as a comma-separated
5219 list of commands. Therefore special tricks are needed to include a
5220 comma in a command. The classic example is:
5224 if fail echo Sorry, blah failed...
5227 This would result in Kermit trying to execute a "blah" command. This
5228 could always be handled by enclosing the text in braces:
5232 if fail echo {Sorry, blah failed...}
5235 but doublequotes (more intuitive) should have worked too. Now they do:
5239 if fail echo "Sorry, blah failed..."
5244 As of version 8.0.201, C-Kermit on most platforms lets you access the
5245 command history buffer with arrow keys, just as you always could with
5246 control characters. The restrictions are:
5248 1. Only Up and Down arrow keys are accepted.
5249 2. Only 7-bit ANSI arrow-key sequences are understood (ESC followed by
5250 [ or uppercase letter O, followed by uppercase letter A or (up) B
5253 This change was made to facilitate command recall in Linux-based PDAs
5254 that don't have a Control key, or at least not one that's easily (or
5255 always) accessible, such as the Sharp Zaurus SL5500.
5257 [ [391]Top ] [ [392]Contents ] [ [393]C-Kermit Home ] [ [394]Kermit
5260 7. NEW COMMANDS AND SWITCHES
5262 See [395]Section 4 for more about file scanning and the /TYPE: switch.
5264 ASK[Q] [ /TIMEOUT:number /QUIET /DEFAULT:text ] variable [ prompt ]
5265 The new optional /TIMEOUT: switch for ASK and ASKQ causes the
5266 command to time out and and fail if no response is given within
5267 the specified number of seconds, 1 or greater (0 or less means
5268 no timeout, wait forever). This works just like SET ASK-TIMER,
5269 except its effect is local to the ASK command with which it is
5270 given and it does not disturb the global ask timer setting. The
5271 new /QUIET switch tells Kermit not to print an error message if
5272 the ASK or ASKQ command times out waiting for a response.
5274 Version 8.0.211 adds the /DEFAULT:text switch for ASK-Class
5275 commands (ASK, ASKQ, and GETOK). This lets you supply a default
5276 answer in case the user supplies an empty answer or the
5277 /TIMEOUT: switch was included and the time limit expired without
5278 an answer. In both these cases, the command succeeds.
5281 Equivalent to TYPE /NOPAGE.
5284 Changes Kermit's local working directory to the parent of the
5285 current one. Equivalent to "cd .." in UNIX or Windows, "cd [-]"
5286 in VMS, "cd ^" in AOS/VS, etc; in other words, it's a
5287 platform-independent way of moving one level up in a directory
5290 CHMOD [ switches ] permission files
5291 UNIX only. Sets file permissions for one or more files or
5292 directories. The permission must be given as an octal number,
5293 e.g. 664, 755. Switches: /DIRECTORIES, /FILES, /NOLIST, /PAGE,
5294 /DOTFILES, /LIST, /NOPAGE, /RECURSIVE, /TYPE:{TEXT,BINARY,ALL},
5295 /SIMULATE. The /TYPE: switch allows selection of only text or
5296 binary files. For example, if you have a mixture of source files
5297 and executables, you can use "chmod /files /type:text 664" to
5298 give owner/group read/write and world read permission to the
5299 text files, and "chmod /files /type:binary 775" to give the same
5300 plus execute permission to the executables. Use /SIMULATE to see
5301 which files would be affected, without actually changing their
5304 CLEAR KEYBOARD-BUFFER
5305 Flushes any as-yet unread characters from the keyboard input
5306 buffer. Useful for flushing typeahead in scripts.
5309 When given at an interactive command prompt that was reached by
5310 issuing a PROMPT command (described in this section) from a
5311 script, this command returns to the script, continuing its
5312 execution at the command after the PROMPT command. In this
5313 context, CONTINUE is simply a more-intuitive synonym for END.
5315 COPY, RENAME, and TRANSLATE
5316 These commands now work on file groups if the target filename is
5317 a directory, e.g. "copy oofa.* ..", "rename * ~olga/tmp/"
5319 COPY /APPEND source destination
5320 The source file specification can now include wildcards, in
5321 which case all of the source files that match will go into the
5322 destination file in alphabetical order by name.
5325 Asks permission to delete each file before deleting it. In
5326 C-Kermit 7.0, the answers were "yes" (or "ok") and "no".
5327 C-Kermit 8.0 adds "go" (meaning, delete all the rest without
5328 asking) and "quit" (cancel the DELETE command and return to the
5332 Deletes not only files but also directories.
5335 Deletes all files that match the given file specification in the
5336 current (or given) directory and all directories beneath it.
5339 Prints only the number of files deleted and total size freed,
5340 without listing each file.
5343 Shorthand for DELETE /RECURSIVE /DIRECTORIES /DOTFILES/.
5344 Equivalent to Windows DELTREE or Unix "rm -Rf". If no file
5345 specification is given, the contents of the current directory,
5346 plus all of its subdirectories and their contents, are deleted.
5349 Delete only regular binary files (requires FILE SCAN ON).
5352 Delete only regular text files (requires FILE SCAN ON).
5354 DIRECTORY [ switches ] [ filespec [ filespec [ filespec ... ] ] ]
5355 The DIRECTORY command now accepts more than one file
5356 specification; e.g. "directory moon.txt sun.doc stars.*".
5358 DIRECTORY /NORECURSIVE xxx
5359 If xxx is a directory name, forces listing of the directory
5360 itself rather than its contents.
5362 DIRECTORY /FOLLOWLINKS xxx
5363 (UNIX only) Tells the DIRECTORY command to follow symbolic
5364 links. This not the default because it can cause endless loops.
5366 DIRECTORY /NOFOLLOWLINKS xxx
5367 (UNIX only) Tells the DIRECTORY command not to follow symbolic
5368 links, but rather, merely to list them. This is the default.
5370 DIRECTORY /OUTPUT:filename
5371 Sends the results of the DIRECTORY command to the given file.
5374 Prints only the number of directories and files and the total
5375 size, without listing each file.
5377 DIRECTORY /TYPE:{TEXT,BINARY}
5378 Shows only files of the selected type, based on file scan.
5381 Now shows results of file scan (see [396]Section 4).
5383 FOPEN [ switches ] channel filename
5385 As of version 8.0.211, FOPEN allows /dev/tty as a filename in
5386 Unix-based operating systems.
5389 (8.0.211) Trims any trailing blanks or tabs from the item (such
5390 as a line of text) that it has read.
5393 (8.0.211) Converts Horizontal Tab characters to the appropriate
5394 number of spaces, based on VT100-like tab stops (1,9,17,25,...).
5396 GREP [ switches ] pattern files
5397 Similar to Unix grep command: displays file lines that match the
5398 given [397]pattern. Switches:
5401 Don't show the matching lines, just tell how many lines
5402 match. If a variable name is specified, the count is
5403 stored in the given variable.
5406 Include files whose names begin with dot.
5409 Show line numbers of matching lines.
5412 only list the names of files that contain matching lines,
5413 but not the lines themselves.
5419 Ignore alphabetic case while pattern matching.
5422 skip files whose names start with dot (period).
5425 Suppress output but set SUCCESS or FAILURE according to
5429 Look for lines that do not match the pattern.
5432 Don't pause between screens of output.
5435 Write results into the given file.
5438 Pause between screens of output.
5441 Search files in subdirectories too.
5444 Search only files of the specified type.
5446 Synonyms: FIND, SEARCH.
5448 GETOK /TIMEOUT:n /QUIET /DEFAULT:text
5449 The new /QUIET switch instructs GETOK, when given a timeout, not
5450 to print an error message if it times out. As of 8.0.211, a
5451 default answer can be supplied (see ASK).
5453 HEAD [ switches ] filename
5454 Equivalent to TYPE /HEAD [ other-switches ] filename.
5457 Explains date-time formats, including timezone notation and
5461 Explains the firewall negotiation capabilities of your version
5464 KCD [ symbolic-directory-name ]
5465 Changes Kermit's working directory to the named symbolic
5466 directory, such as such as exedir, inidir, startup, download, or
5467 and home. Type "kcd ?" for a list of symbolic directory names
5468 known to your copy of Kermit, or give the new ORIENTATION
5469 command for a more detailed explanation. If you give a KCD
5470 command without a directory name, Kermit returns to its "home"
5471 directory, which is determined in some way that depends on the
5472 underlying operating system, but which you can redefine with the
5473 (new) SET CD HOME command. Your home directory is shown by SHOW
5474 CD and it's also the value of the \v(home) variable.
5477 Displays the C-Kermit license.
5480 When Kermit has a connection to a Kermit or FTP server, file
5481 management commands such as CD, DIRECTORY, and DELETE might be
5482 intended for the local computer or the remote server. C-Kermit
5483 8.0.200 and earlier always executes these commands on the local
5484 computer. If you want them executed by the remote server, you
5485 have to prefix them with REMOTE (e.g. REMOTE CD) or use special
5486 R-command aliases (e.g. RCD = REMOTE CD, RDIR = REMOTE DIR,
5487 etc). But this feels unnatural to FTP users, who expect
5488 unprefixed file management commands to be executed by the remote
5489 server, rather than locally. C-Kermit 8.0.201 adds automatic
5490 locus switching to present an FTP-like interface for FTP
5491 connections and the normal Kermit interface for Kermit
5492 connections, and a SET LOCUS command (described below) to
5493 control whether or how this is done. For when LOCUS is REMOTE, a
5494 new set of commands was added for local management: LCD (Local
5495 CD), LDIR (Local DIR), etc. These are described below under SET
5499 Equivalent to TYPE /PAGE.
5502 Displays symbolic directory names and the corresponding variable
5503 names and values. The symbolic names, such as exedir, inidir,
5504 startup, download, and home, can be used as arguments to the new
5508 For use in a macro or command file: enters interactive command
5509 mode within the current context ([398]Section 8.1). If the
5510 optional text is included, the prompt is set to it. The text can
5511 include variables, functions, etc, as in the SET PROMPT command.
5512 They are evaluated each time the prompt is printed. Unlike the
5513 SET PROMPT command, the text argument applies only to the
5514 current command level. Thus you can have different prompts at
5517 REMOTE SET MATCH { DOTFILE, FIFO } { ON, OFF }
5518 Allows the client to tell the server whether wildcards sent to
5519 the server should match dot files (files whose names begin with
5520 period) or FIFOs (named pipes). See SET MATCH.
5522 SET ATTRIBUTE RECORD-FORMAT { ON, OFF }
5523 Allows control of the Kermit's Record-Format attribute. Set this
5524 to OFF in case incoming file are refused due to unknown or
5525 invalid record formats if you want to accept the file anyway
5526 (and, perhaps, postprocess it to fix its record format).
5528 SET CD HOME [ directory ]
5529 Specifies the target directory for the CD and KCD commands, when
5530 they are given without an argument, and also sets the value of
5531 the \v(home) variable.
5533 SET EXIT HANGUP { OFF, ON }
5534 Normally ON, meaning that when Kermit exits, it also explicitly
5535 hangs up the current SET LINE / SET PORT serial port according
5536 to the current SET MODEM TYPE and SET MODEM HANGUP METHOD, and
5537 closes the port device if it was opened by Kermit in the first
5538 place (as opposed to inherited). SET EXIT HANGUP OFF tells
5539 Kermit not to do this. This can't prevent the operating system
5540 from closing the device when Kermit exits (and it's a "last
5541 close") but if the port or modem have been conditioned to
5542 somehow ignore the close and keep the connection open, at least
5543 Kermit itself won't do anything explicit to hang it up or close
5546 SET FILE EOF { CTRL-Z, LENGTH }
5547 Specifies the end-of-file detection method to be used by
5548 C-Kermit when sending and receiving text files, and in the TYPE
5549 and similar text-file oriented commands. The normal and default
5550 method is LENGTH. You can specify CTRL-Z when handling CP/M or
5551 MS-DOS format text files, in which a Ctrl-Z (ASCII 26) character
5552 within the file marks the end of the file.
5554 SET FILE LISTSIZE number
5555 Allocates space for the given number of filenames to be filled
5556 in by the wildcard expander. The current number is shown by SHOW
5557 FILE. If you give a command that includes a filename containing
5558 a wildcard (such as "*") that matches more files that Kermit's
5559 list has room for, you can adjust the list size with this
5562 SET FILE STRINGSPACE number
5563 Allocates space for the given amount of filename strings for use
5564 by the wildcard expander. The current number is shown by SHOW
5565 FILE. The number is the total number of bytes of all the file
5566 specifications that match the given wildcard.
5568 If you need to process a bigger list of files than your computer has
5569 memory for, you might be able use an external file list. The Kermit
5570 SEND and the FTP PUT and GET commands accept a /LISTFILE: switch,
5571 which gives the name of a file that contains the list of files to be
5572 transferred. Example for UNIX:
5574 !find . -print | grep / > /tmp/names
5575 ftp put /update /recursive /listfile:/tmp/names
5577 SET LOCUS { AUTO, LOCAL, REMOTE }
5578 Added in C-Kermit 8.0.201. Sets the locus for unprefixed file
5579 management commands such as CD, DIRECTORY, MKDIR, etc. When
5580 LOCUS is LOCAL these commands act locally and a REMOTE (or R)
5581 prefix (e.g. REMOTE CD, RCD, RDIR) is required to send file
5582 management commands to a remote server. When LOCUS is REMOTE, an
5583 L prefix is required to issue local file management commands
5584 (e.g. LCD, LDIR). The word LOCAL can't be used as a prefix since
5585 it is already used for declaring local variables. LOCUS applies
5586 to all types of connections, and thus is orthogonal to SET
5587 GET-PUT-REMOTE, which selects between Kermit and FTP for remote
5588 file-transfer and management commands. The default LOCUS is
5589 AUTO, which means we switch to REMOTE whenever an FTP connection
5590 is made, and to LOCAL whenever a non-FTP connection is made, and
5591 switch back accordingly whenever a connection is closed. So by
5592 default, Kermit behaves in its traditional manner unless you
5593 make an FTP connection, in which case it acts like a regular FTP
5594 client (but better :-) LOCUS applies to the following
5597 Unprefixed Remote Local Description
5598 CD (CWD) RCD LCD Change (Working) Directory
5599 CDUP RCDUP LCDUP CD Up
5600 PWD RPWD LPWD Print Working Directory
5601 DIRECTORY RDIR LDIR Request a directory listing
5602 DELETE RDEL LDEL Delete (a) file(s)
5603 RENAME RREN LREN Rename a file
5604 MKDIR RMKDIR LMKDIR Create a directory
5605 RMDIR RRMDIR LRMDIR Remove a directory
5607 SET MATCH { DOTFILE, FIFO } { ON, OFF }
5608 Whether C-Kermit filename patterns (wildcards) should match
5609 filenames that start with dot (period), or (Unix only) FIFOs
5610 (named pipes). The defaults are to skip dotfiles in Unix but
5611 match them elsewhere, and to skip FIFOs. Applies to both
5612 interactive use and to server mode, when the server receives
5613 wildcards, e.g. in a GET command. Also see REMOTE SET MATCH.
5615 SET OPTIONS DIRECTORY /DOTFILES
5616 Now works for server listings too (UNIX only). Give this command
5617 prior to having Kermit enter server mode, and then it will show
5618 files whose names begin with dot (period) when sent a REMOTE
5622 (as well as the -q command-line option) Now applies also to:
5624 + SET HOST connection progress messages.
5625 + "Press the X or E key to cancel" file-transfer message.
5626 + REMOTE CD response.
5627 + REMOTE LOGIN response.
5629 SET RECEIVE PERMISSIONS { ON, OFF }
5630 Tells C-Kermit whether to set the permissions of incoming files
5631 (received with Kermit protocol) from the permissions supplied in
5632 the file's Attribute packet (if any). Normally ON. Also see SET
5636 Like UNIX chroot, without requiring privilege. Sets the root for
5637 file access, does not allow reference to or creation of files
5638 outside the root, and can't be undone.
5640 SET SEND PERMISSIONS { ON, OFF }
5641 Tells C-Kermit whether to include file permissions in the
5642 attributes it includes with each file when sending with Kermit
5643 protocol. Also see SET RECEIVE PERMISSIONS.
5645 SET TCP { HTTP-PROXY, SOCKS-SERVER } /USER:name /PASSWORD:text
5646 These commands now allow specification of username and password.
5649 (See [399]Section 12.)
5651 SET TRANSFER MESSAGE [ text ]
5652 Sets an initial text message to be displayed in the
5653 file-transfer display. The transfer message is automatically
5654 deleted once used, so must be set each time a message a desired.
5655 Any variables in the message are evaluated at the time the SET
5656 command is given. If the optional text is omitted, any transfer
5657 message that is currently set is removed. Synonym: SET XFER MSG.
5658 SHOW TRANSFER displays it if it has been set but not yet used.
5661 In C-Kermit 8.0, SHOW COMMUNICATIONS, when given in remote mode
5662 (i.e. before any connection has been established), tells the
5663 typical dialout device name for the particular platform on which
5664 it's running (e.g. TXA0: for VMS, or /dev/cua0p0 for HP-UX). On
5665 Unix platforms, it also tells the name of the lockfile
5666 directory. This way, you have an idea of what the SET LINE
5667 device name should look like, and if the SET LINE command fails,
5668 you know the name of the directory or device that is protected
5671 SHOW VARIABLES [ name [ name [ ... ] ] ]
5672 In C-Kermit 8.0.201 you can request values of a list of built-in
5673 (\v(xxx)) variables. Each name is a pattern, as before, but now
5674 it a free pattern rather than an anchored one (explained in
5675 [400]Section 8.12) so now "show var date time" shows the values
5676 of all variables whose names include the strings "date" or
5679 TAIL [ switches ] filename
5680 Equivalent to TYPE /TAIL [ other-switches ] filename.
5682 TRANSMIT /NOECHO [ other switches ] filename
5683 The /NOECHO switch is equivalent to giving the command SET
5684 TRANSMIT ECHO OFF prior to the TRANSMIT command, except the
5685 switch affects only the command with which it was given and does
5686 not affect the prevailing global setting.
5688 TRANSMIT /NOWAIT [ other switches ] filename
5689 The /NOWAIT switch is equivalent to giving the command SET
5690 TRANSMIT PROMPT 0 prior to the TRANSMIT command, except the
5691 switch affects only the command with which it was given and does
5692 not affect the prevailing global setting.
5694 TRANSMIT /NOWAIT /NOECHO /BINARY [ other switches ] filename
5695 When the TRANSMIT command is given with the /NOWAIT, /NOECHO,
5696 and /BINARY switches, this activates a special "blast the whole
5697 file out the communications connection all at once" mode that
5698 Kermit didn't have prior to version 8.0. There has been
5699 increasing demand for this type of transmission with the advent
5700 of devices that expect image (e.g. .JPG) or sound (e.g. .MP3)
5701 files as raw input. The obvious question is: how does the
5702 receiving device know when it has the whole file? This depends
5703 on the device, of course; usually after a certain amount of time
5704 elapses with nothing arriving, or else when Kermit hangs up or
5705 closes the connection.
5707 TYPE /CHARACTER-SET:name
5708 Allows you to specify the character set in which the file to be
5714 TYPE /OUTPUT:filename
5715 Sends the results of the TYPE command to the given file.
5717 TYPE /TRANSLATE-TO:name
5718 Used in conjunction with TYPE /CHARACTER-SET:xxx; allows you to
5719 specify the character set in which the file is to be displayed.
5722 Used to disable character-set translation in the TYPE command,
5723 which otherwise can take place automatically based on file
5724 scanning, even when /CHARACTER-SET and /TRANSLATE-TO switches
5728 Parses the text, evaluating any backslash items in it (such as
5729 function calls) but doesn't do anything further, except possibly
5730 printing error messages. Useful for invoking functions that have
5731 side effects without using or printing their direct results,
5732 e.g. "void \fsplit(\%a,&a)".
5734 Symbolic Links in UNIX
5736 The UNIX versions of C-Kermit have had /FOLLOWLINKS and /NOFOLLOWLINKS
5737 switches added to several commands to control the treatment of symbolic
5738 links. Different commands deal differently with symbolic links:
5740 Kermit SEND, FTP MPUT
5741 /NOFOLLOWLINKS is the default, which means symbolic links are
5742 skipped entirely. The alternative, /FOLLOWLINKS, should be used
5743 with caution, since an innocent link might point to a whole file
5744 system, or it might cause a loop. There is no way in Kermit or
5745 FTP protocol to send the link itself. We either skip them or
5746 follow them; we can't duplicate them.
5749 /NOFOLLOWLINKS is the default, which means the DIRECTORY command
5750 lists symbolic links in a way that shows they are links, but it
5751 does not follow them. The alternative, /FOLLOWLINKS, follows
5752 links and gives information about the linked-to directories and
5756 The DELETE command does not have link-specific switches. DELETE
5757 never follows links. If you tell Kermit to delete a symbolic
5758 link, it deletes the link itself, not the linked-to file. Ditto
5762 The COPY command behaves just like the UNIX cp command; it
5763 always follows links.
5766 The RENAME command behaves just like the UNIX mv command; it
5767 operates on links directly rather than following.
5769 [ [401]Top ] [ [402]Contents ] [ [403]C-Kermit Home ] [ [404]Kermit
5772 8. OTHER SCRIPTING IMPROVEMENTS
5774 8.1. Performance and Debugging
5776 A command cache for frequently used commands plus some related
5777 optimizations increases the speed of compute-bound scripts by anywhere
5780 The new PROMPT command can be used to set breakpoints for debugging
5781 scripts. If executed in a command file or macro, it gives you an
5782 interactive command prompt in the current context of the script, with
5783 all its variables, arguments, command stack, etc, available for
5784 examination or change, and the ability to resume the script at any
5785 point (END resumes it, Ctrl-C or STOP cancels it and returns to top
5788 The new Ctrl-C trapping feature ([405]Section 8.14) lets you intercept
5789 interruption of scripts. This can be used in combination with the
5790 PROMPT command to debug scripts. Example:
5793 echo INTERRUPTED BY CTRL-C...
5794 echo The command stack has not yet been rolled back:
5796 echo Type Ctrl-C again or use the END command to return to top level.
5800 Adding this ON_CTRL definition to your script lets you interrupt it at
5801 any point and get prompt that is issued at the current command level,
5802 so you can query local variables, etc.
5804 [ [406]Top ] [ [407]Contents ] [ [408]C-Kermit Home ] [ [409]Kermit
5807 8.2. Using Macros as Numeric Variables
5809 A macro is a way to assign a value to a name, and then use the name to
5810 refer to the value. Macros are used in two ways in Kermit: as
5811 "subroutines" or functions composed of Kermit commands, which are
5812 executed, or as variables to hold arbitrary values -- text, numbers,
5815 When a macro is to be executed, its name is given as if it were a
5816 C-Kermit command, optionally preceded by the word "do". When a macro is
5817 used as a variable, it must be "escaped" with \m(xxx) (or equivalent
5818 function, e.g. \s(xxx), \:(xxx), \fdefinition(xxx)), where xxx is the
5819 macro name, for example:
5821 define filename /usr/olga/oofa.txt
5824 Of course variables can also hold numbers:
5827 declare \&a[\m(size)]
5830 if ( == \m(index) 3 ) echo The third value is: \&a[\m(index)]
5831 evaluate index (\m(index) * 4)
5832 if ( > \m(index) \m(size) ) echo Out of range!
5834 But these are contexts in which only numbers are valid. C-Kermit 8.0
5835 has been changed to treat non-escaped non-numeric items in strictly
5836 numeric contexts as macro names. So it is now possible (but not
5837 required) to omit the \m(...) notation and just use the macro name in
5844 if ( == index 3 ) echo The third value is: \&a[index]
5845 evaluate index (index * 4)
5846 if ( > index size ) echo Out of range!
5848 This is especially nice for loops that deal with arrays. Here, for
5849 example, is a loop that reverses the order of the elements in an array.
5850 Whereas formerly it was necessary to write:
5854 .tmp := \&a[\%n-\%i+1]
5855 .\&a[\%n-\%i+1] := \&a[\%i]
5856 .\&a[\%i] := \m(tmp)
5859 Recoding this to use macro names "i" and "n" instead of the backslash
5860 variables \%i and \%n, we have:
5865 .\&a[n-i+1] := \&a[i]
5869 which reduces the backslash count to less than half. The final
5870 statement in the loop could be written ".\&a[i] ::= tmp" if the array
5871 contained only numbers (since ::= indicates arithmetic expression
5874 Also, now you can use floating-point numbers in integer contexts (such
5875 as array subscripts), in which case they are truncated to an integer
5876 value (i.e. the fractional part is discarded).
5878 Examples of numeric contexts include:
5881 * Any numeric function argument.
5882 * Right-hand side of ::= assignments.
5883 * EVALUATE command or \fevaluate() function expression.
5884 * The INCREMENT or DECREMENT by-value.
5885 * IF =, >, <, !=, >=, and <= comparands.
5886 * The IF number construct.
5887 * FOR-loop variables.
5888 * STOP, END, and EXIT status codes.
5889 * The INPUT timeout value.
5890 * PAUSE, WAIT, SLEEP, MSLEEP intervals.
5891 * The SHIFT argument.
5892 * Numeric switch arguments, e.g. TYPE /WIDTH:number, SEND
5894 * SCREEN MOVE-TO row and column number.
5895 * Various SET DIAL parameters (timeout, retry limit, etc).
5896 * Various SET SEND or RECEIVE parameters (packet length, window size,
5898 * Various other SET parameters.
5902 * S-Expressions (explained in [410]Section 9).
5904 Macro names used in numeric contexts must not include mathematical
5905 operators. Although it is legal to create a macro called "foo+bar", in
5906 a numeric context this would be taken as the sum of the values of "foo"
5907 and "bar". Any such conflict can be avoided, of course, by enclosing
5908 the macro name in \m(...).
5910 [ [411]Top ] [ [412]Contents ] [ [413]C-Kermit Home ] [ [414]Kermit
5913 8.3. New IF Conditions
5915 Several new IF conditions are available:
5917 IF DECLARED arrayname
5918 Explained in [415]Section 8.6.
5921 Allows a script to test whether a key was pressed without
5922 actually trying to read it.
5924 IF KERBANG (Unix only)
5925 True if Kermit was started from a Kerbang script. This is useful
5926 for knowing how to interpret the \&@[] and \&_[] argument vector
5927 arrays, and under what conditions to exit.
5930 This is just a synonym for IF NUMERIC, which is true if n
5931 contains only digits (or, if n is a variable, its value contains
5934 By contrast, IF FLOAT n succeeds if n is a floating-point number OR an
5935 integer (or a variable with floating-point or integer value).
5936 Therefore, IF FLOAT should be used whenever any kind of number is
5937 acceptable, whereas IF INTEGER (or IF NUMERIC) when only an integer can
5940 [ [416]Top ] [ [417]Contents ] [ [418]C-Kermit Home ] [ [419]Kermit
5943 8.4. The ON_UNKNOWN_COMMAND Macro
5945 The new ON_UNKNOWN_COMMAND macro, if defined, is executed whenever you
5946 give a command that is not known to C-Kermit; any operands are passed
5947 as arguments. Here are some sample definitions:
5949 DEF ON_UNKNOWN_COMMAND telnet \%1 ; Treat unknown commands as hostnames
5950 DEF ON_UNKNOWN_COMMAND dial \%1 ; Treat unknown commands phone numbers
5951 DEF ON_UNKNOWN_COMMAND take \%1 ; Treat unknown commands as filenames
5952 DEF ON_UNKNOWN_COMMAND !\%* ; Treat unknown commands as shell commands
5954 The ON_CD macro, if defined, is executed whenever Kermit is given a CD
5955 (change directory) command (8.0.211). Upon entry to this macro, the
5956 directory has already changed and the new directory string is available
5957 in the \v(directory) variable, and also as the first argument (\%1).
5959 [ [420]Top ] [ [421]Contents ] [ [422]C-Kermit Home ] [ [423]Kermit
5962 8.5. The SHOW MACRO Command
5964 The SHOW MACRO command has been changed to accept more than one macro
5973 An exact match is required for each name (except that case doesn't
5974 matter). If you include wildcard characters, however, a pattern match
5979 shows all macros whose names start with a, b, or c, and end with x.
5981 [ [424]Top ] [ [425]Contents ] [ [426]C-Kermit Home ] [ [427]Kermit
5986 A clarification regarding references to array names (as opposed to
5987 array elements): You can use array-name "abbreviations" like &a only in
5988 contexts that expect array names, like ARRAY commands or array-name
5989 function arguments such as the second argument of \fsplit(). In a LOCAL
5990 statement, however, you have to write \&a[], since "local &a" might
5991 refer to a macro named "&a".
5993 In function arguments, however, you MUST use the abbreviated form:
5994 \fsplit(\%a,&a) or \fsplit(\%a,&a[]). If you include the backslash (as
5995 in "\fsplit(\%a,\&a[])") a parse error occurs.
5997 Here are the new array-related commands:
5999 IF DECLARED arrayname
6000 Allows a script to test whether an array has been declared. The
6001 arrayname can be a non-array backslash variable such as \%1 or
6002 \m(name), in which case it is evaluated first, and the result is
6003 treated as the array name. Otherwise, arrayname is treated as in
6004 the ARRAY commands: it can be a, &a, &a[], \&a, \&a[], \&a[3],
6005 \&a[3:9], etc, with the appropriate results in each case.
6009 UNDECLARE is a new top-level command to undeclare an array.
6010 Previously this could only be done with "declare \&a[0]" (i.e.
6011 re-declare the array with a dimension of 0).
6013 ARRAY LINK linkname arrayname
6014 Creates a symbolic link from the array named by linkname (which
6015 must be the name of an array that is not yet declared in the
6016 current context) to the array named by arrayname (which must the
6017 name of a currently declared array that is not itself a link, or
6018 a variable containing the name of such an array). The two names
6019 indicate the same array: if you change an array element, the
6020 change is reflected in the link too, and vice versa. If you
6021 undeclare the link, the real array is unaffected. If you
6022 undeclare the real array, all links to it disappear. If you
6023 resize an array (directly or through a link), all links to it
6024 are updated automatically.
6026 Array links let you pass array names as arguments to macros. For
6027 example, suppose you had a program that needed to uppercase all the
6028 elements of different arrays at different times. You could write a
6029 macro to do this, with the array name as an argument. But without array
6030 links, there would be no way to refer to the argument array within the
6031 macro. Array links make it easy:
6035 array link \&e[] \%1
6036 for i 1 \fdim(&e) 1 { .\&e[i] := \fupper(\&e[i]) }
6038 declare \&a[] = these are some words
6042 The macro declares the array link LOCAL, which means it doesn't
6043 conflict with any array of the same name that might exist outside the
6044 macro, and that the link is destroyed automatically when the macro
6045 exits. This works, by the way, even if the link name and the macro
6046 argument name are the same, as long as the link is declared LOCAL.
6048 As noted, you can't make a link to a nonexistent array. So when writing
6049 a macro whose job is to create an array whose name is passed as an
6050 argument, you must declare the array first (the size doesn't matter as
6051 long as it's greater than 0). Example:
6053 define tryme { ; Demonstration macro
6054 local \&e[] ; We only need this inside the macro
6055 array link \&e[] \%1 ; Make local link
6056 shift ; Shift argument list
6057 void \fsplit(\%*,&e) ; Split remainder of arg list into array
6059 declare \&a[1] ; Declare target array in advance
6060 tryme &a here are some words ; Invoke the macro with array name and words
6061 show array a ; See the results
6063 One final improvement allows the macro itself to declare the array
6064 (this was not possible in earlier Kermit releases): if the array name
6065 in the DECLARE command is a variable (and not an array name), or
6066 includes variables, the resulting value is used as the array name. So:
6068 define tryme { ; Demonstration macro
6069 declare \%1[1] ; Preliminary declaration for target array
6070 local \&e[] ; We only need this inside the macro
6071 array link \&e[] \%1 ; Make local link
6072 shift ; Shift argument list
6073 void \fsplit(\%*,&e) ; Split remainder of arg list into array
6075 tryme &a here are some words ; Invoke the macro with array name and words
6076 show array a ; See the results
6078 The SHOW ARRAY command now indicates whether an array name is a link.
6080 Also see the descriptions of [428]\fjoin() and [429]\fsplit(), plus
6081 [430]Section 8.10 on the MINPUT command, which shows how an entire
6082 array (or segment of it) can be used as the MINPUT target list.
6084 [ [431]Top ] [ [432]Contents ] [ [433]C-Kermit Home ] [ [434]Kermit
6087 8.7. New or Improved Built-in Variables and Functions
6089 The following new built-in variables are available:
6091 \v(buildid) A date string like "20000808" indicating when C-Kermit was b
6093 \v(ftime) Current time, secs since midnight, including fraction of sec
6095 \v(iprompt) The current SET PROMPT value
6096 \v(sexp) The most recent S-Expression (see [435]Section 9)
6097 \v(sdepth) The current S-Expression invocation depth ([436]Section 9)
6098 \v(svalue) The value of the most recent S-Expression ([437]Section 9)
6100 \v(ftp_code) Most recent FTP response code ([438]Section 3)
6101 \v(ftp_connected) FTP connection status ([439]Section 3)
6102 \v(ftp_cpl) FTP Command Protection Level ([440]Section 3.2)
6103 \v(ftp_dpl) FTP Data Protection Level ([441]Section 3.2)
6104 \v(ftp_getputremote) The current SET GET-PUT-REMOTE setting ([442]Section 3.8)
6106 \v(ftp_host) Name or IP address of FTP server ([443]Section 3)
6107 \v(ftp_loggedin) FTP login status ([444]Section 3)
6108 \v(ftp_message) Most recent FTP response message ([445]Section 3)
6109 \v(ftp_security) FTP Security method ([446]Section 3.2)
6110 \v(ftp_server) OS type of FTP server ([447]Section 3)
6112 \v(http_code) Most recent HTTP response code
6113 \v(http_connected) HTTP connection status
6114 \v(http_host) Name or IP address of HTTP server
6115 \v(http_message) Most recent HTTP response message
6116 \v(http_security) TLS cipher used to secure the HTTP session
6118 \v(hour) Hour of the day, 0 to 23.
6119 \v(timestamp) Equivalent to "\v(ndate) \v(time)".
6121 \v(log_debug) Current debug log file, if any.
6122 \v(log_packet) Current packet log file, if any.
6123 \v(log_session) Current session log file, if any.
6124 \v(log_transaction) Current transaction log file, if any.
6125 \v(log_connection) Current connection log file, if any.
6127 The following new or improved built-in functions are available:
6129 \fcmdstack() Allows programmatic access to the command stack.
6130 \fcvtdate() [448]Section 8.13, format options added
6131 \fdelta2secs() [449]Section 8.13
6132 \fdostounixpath(s1) Converts a DOS filename to Unix format.
6133 \fsplit() Now allows grouping/nesting in source string.
6134 \fword() Allows the same grouping and nesting.
6135 \fjoin(&a,s1,n1,n2) Copies an array into a single string.
6136 \fsubstitute(s1,s2,s3) Substitutes characters within a string.
6137 \freplace() Has new 4th "occurrence" argument.
6138 \fsexpression() Evaluates an S-Expression (explained in [450]Section 9
6140 \ftrim(), \fltrim() Now trim CR and LF by default, as well as SP and Tab.
6141 \funixtodospath(s1) Converts a Unix filename to DOS format.
6142 \fkeywordval(s1,c1) Assigns values to keywords (macros) (explained below).
6144 Most functions that have "2" in their names to stand for the word "to"
6145 can now also be written with "to", e.g. "\fdelta2secs(),"
6149 (New to 8.0.211) Replaces Horizontal Tab characters in the given
6150 string with spaces based on VT100-like tab stops.
6153 As of version 8.0.211, returns -1 if s2 is an empty string.
6154 Previously it returned 0, making \fverify(abc,\%a) look as if
6155 \%a was a string composed of a's, b's, and/or c's when in fact
6156 it contained nothing.
6159 As of version 8.0.211, returns 0 if string is empty or missing.
6160 Previously it returned the empty string, which made it unsafe to
6161 use in arithmetic or boolean expressions.
6164 New to version 8.0.211, its value is the INPUT SCALE-FACTOR
6165 ([451]Section 8.10), default 1.0.
6167 8.7.1. The \fkeywordval() Function
6169 \fkeywordval(s1,c1) is new to C-Kermit 8.0. Given a string s1 of the
6170 form "name=value", it creates a macro with the given name and assigns
6171 it the given value. If no value appears after the equal sign, any
6172 existing macro of the given name is undefined. Blanks are automatically
6173 trimmed from around the name and value. The optional c1 parameter is
6174 the assignment operator character, equal sign (=) by default. This
6175 function is handy for processing keyword parameters or any other form
6176 of parameter-value pair. Suppose, for example, you want to write a
6177 macro that accepts keyword parameters rather than positional ones:
6180 local \%i modem hangup method device speed number
6181 def number 5551234 ; Assign default parameter values
6183 def modem usrobotics
6187 for \%i 1 \v(argc)-1 1 { ; Parse any keyword parameters...
6188 if not \fkeywordval(\&_[\%i]) end 1 Bad parameter: "\&_[\%i]"
6190 set dial country \m(country)
6191 set modem type \m(modem)
6192 set modem hang \m(hangup)
6193 set dial method \m(tone)
6204 In this example, all the defaults are set up inside the macro, and
6205 therefore it can be invoked with no parameters at all. But if you want
6206 to have the macro dial a different number, you can supply it as
6209 mydial number=7654321
6211 You can supply any number of keyword parameters, and you can give them
6214 mydial number=7654321 hangup=modem speed=115200
6216 8.7.2. The \fsplit(), \fjoin(), and \fword() Functions
6218 \fjoin(&a,s1,n1,n2) is also new; it creates a string from an array (or
6219 a piece of one). &a is the name of the array (a range specifier can be
6220 included); s1 is a character or string to separate each element in the
6221 result string (can be omitted, in which case the elements are not
6222 separated at all), and n1 is a grouping mask, explained below. If s1 is
6223 empty or not specified, the array elements are separated with spaces.
6224 If you want the elements concatenated with no separator, include a
6225 nonzero n2 argument. Given the array:
6227 declare \&a[] = 0 1 2 3 4 5 6 7 8 9
6229 you can get effects like this:
6231 \fjoin(&a) 0 1 2 3 4 5 6 7 8 9
6232 \fjoin(&a,:) 0:1:2:3:4:5:6:7:8:9
6233 \fjoin(&a,{,}) 0,1,2,3,4,5,6,7,8,9
6234 \fjoin(&a,...) 0...1...2...3...4...5...6...7...8...9
6235 \fjoin(&a,,,1) 0123456789
6237 \fsplit(), \fword(), \fstripb(), and \fjoin() accept a "grouping mask"
6238 argument, n1, which is a number from 0 to 63, in which:
6244 16 = [] square brackets
6245 32 = <> angle brackets
6247 These can be OR'd (added) together to make any number 0-63 (-1 is
6248 treated the same as 63, 0 means no grouping). If a bit is on, the
6249 corresponding kind of grouping is selected. (If more than 1 bit is set
6250 for \fjoin(), only the lowest-order one is used.)
6252 If you include the same character in the grouping mask and the include
6253 list, the grouping mask takes precedence. Example:
6256 \fsplit(\%a,&a[],,,-1) = 3 <-- doublequote used for grouping
6257 \fsplit(\%a,&a[],,",-1) = 3 <-- doublequote still used for grouping
6259 Nesting of matched left and right grouping characters (parentheses,
6260 braces, and brackets, but not quotes) is recognized. Example:
6262 def \%a a (b c <d e [f g {h i} j k] l m> n o) p
6263 \fsplit(\%a,&a,,,0) = 16 (no grouping)
6264 \fsplit(\%a,&a,,,2) = 15 (braces only)
6265 \fsplit(\%a,&a,,,16) = 11 (square brackets only)
6266 \fsplit(\%a,&a,,,32) = 7 (angle brackets only)
6267 \fsplit(\%a,&a,,,63) = 3 (all)
6268 \fsplit(\%a,&a,,,-1) = 3 (all)
6270 \fsplit() and \fjoin() are "reciprocal" functions. You can split a
6271 string up into an array and join it back into a new string that is
6272 equivalent, as long as \fsplit() and \fjoin() are given equivalent
6273 grouping masks, except that the type of braces might change. Example:
6275 def \%a a {b c [d e] f g} "h i" j <k l> m
6277 echo WORDS=\fsplit(\%a,&a,,,-1)
6279 asg \%b \fjoin(&a,{ },2)
6281 echo WORDS=\fsplit(\%b,&b,,,-1)
6284 The arrays a and b are identical. The strings a and b are as follows:
6286 \%a: a {b c [d e] f g} "h i" j <k l> m
6287 \%b: a {b c [d e] f g} {h i} j {k l} m
6289 It is possible to quote separator grouping characters with backslash to
6290 override their grouping function. And of course to include backslash
6291 itself in the string, it must be quoted too. Furthermore, each
6292 backslash must be doubled, so the command parser will still pass one
6293 backslash to \fsplit() for each two that it sees. Here are some
6294 examples using \fsplit() with a grouping mask of 8 (treat parentheses
6295 as grouping characters).
6302 a b \\\\(c d e\\\\) f 7
6304 \fsplit() has also been changed to create its array (if one is given)
6305 each time it is called, so now it can be conveniently called in a loop
6306 without having to redeclare the array each time.
6308 Incidentally... Sometimes you might want to invoke \fsplit() in a
6309 situation where you don't care about its return value, e.g. when you
6310 just want to fill the array. Now you can "call" \fsplit() or any other
6311 function with the new [452]VOID command:
6313 void \fsplit(\%a,&a)
6315 \fsplit() and \fjoin() also accept a new, optional 6th argument, an
6316 options flag, a number that can specify a number of options. So far
6317 there is just one option, whose value is 1:
6320 Normally separators are collapsed. So, for example,
6322 \fword(Three little words,2)
6324 returns "little" (the second word). Space is a separator, but
6325 there are multiple spaces between each word. If the value 1 is
6326 included in the option flag, however, each separator counts. If
6327 two separators are adjacent, an empty word is produced between
6328 them. This is useful for parsing (e.g.) comma-separated lists
6329 exported from databases or spreadsheets.
6331 8.7.3. The \fcmdstack() Function
6333 The new \fcmdstack() function gives access to the command stack:
6336 Arguments: n1 is the command stack level. If omitted, the
6337 current level, \v(cmdlevel), is used. n2 is a function code
6338 specifying the desired type of information:
6340 0 (default) = name of object at level n1.
6341 1 (nonzero) = object type (0 = prompt; 1 = command file; 2 = macro).
6343 The default for n2 is 0.
6345 The name associated with prompt is "(prompt)". Here's a loop that can
6346 be included in a macro or command file to show the stack (similar to
6347 what the SHOW STACK command does):
6349 for \%i \v(cmdlevel) 0 -1 {
6350 echo \%i. [\fcmdstack(\%i,1)] \fcmdstack(\%i,0)
6353 In this connection, note that \v(cmdfile) always indicates the most
6354 recently invoked active command file (if any), even if that file is
6355 executing a macro. Similarly, \v(macro) indicates the most recently
6356 invoked macro (if any), even if the current command source is not a
6357 macro. The name of the "caller" of the currently executing object
6358 (command file or macro) is:
6360 \fcmdstack(\v(cmdlevel)-1)
6364 \fcmdstack(\v(cmdlevel)-1,1)
6366 To find the name of the macro that invoked the currently executing
6367 object, even if one or more intermediate command files (or prompting
6368 levels) are involved, use a loop like this:
6370 for \%i \v(cmdlevel)-1 0 -1 {
6371 if = \fcmdstack(\%i,1) 2 echo CALLER = \fcmdstack(\%i,0)
6374 Of course if you make a macro to do this, the macro must account for
6375 its own additional level:
6378 for \%i \v(cmdlevel)-2 0 -1 {
6379 if = \fcmdstack(\%i,1) 2 return \fcmdstack(\%i,0)
6384 The built-in variable \v(cmdsource) gives the current command source as
6385 a word ("prompt", "file", or "macro").
6387 8.7.4. The VOID Command
6389 VOID is like ECHO in that all functions and variables in its argument
6390 text are evaluated. but it doesn't print anything (except possibly an
6391 error message if a function was invocation contained or resulted in any
6392 errors). VOID sets FAILURE if it encounters any errors, SUCCESS
6395 [ [453]Top ] [ [454]Contents ] [ [455]C-Kermit Home ] [ [456]Kermit
6398 8.8. The RETURN and END Commands
6400 The execution of a macro is terminated in any of the following ways:
6402 * With an END [ number [ message ] ] command. If a number is given,
6403 the macro succeeds if the number is 0, and fails if it is not zero;
6404 if a number is not given, the macro succeeds.
6405 * With a STOP command, which works just like END except it peels back
6406 the command stack all the way to top level.
6407 * With a RETURN [ text ] command, in which case the macro always
6409 * By running out of commands to execute, in which case the macro
6410 succeeds or fails according the most recently executed command that
6411 sets success or failure.
6413 The same considerations apply to command files invoked by the TAKE
6416 If a macro does not execute any commands that set success or failure,
6417 then invoking the macro does not change the current SUCCESS/FAILURE
6418 status. It follows, then, that the mere invocation of a macro does not
6419 change the SUCCESS/FAILURE status either. This makes it possible to
6420 write macros to react to the status of other commands (or macros), for
6425 stop 1 SET LINE failed - please try another device.
6427 set modem type usrobotics
6433 By the way, none of this is news. But it was not explicitly documented
6434 before, and C-Kermit 7.0 and earlier did not always handle the RETURN
6435 statement as it should have.
6437 [ [457]Top ] [ [458]Contents ] [ [459]C-Kermit Home ] [ [460]Kermit
6440 8.9. UNDEFINing Groups of Variables
6442 The UNDEFINE command, which previously accepted one variable name, now
6443 accepts a list of them, and also accepts wildcard notation to allow
6444 deletion of variables that match a given pattern.
6446 UNDEFINE [ switches ] name [ name [ name [ ... ] ] ]
6447 Undefines the variables whose names are given. Up to 64 names
6448 may be given in one UNDEFINE command.
6450 If you omit the switches and include only one name, the UNDEFINE
6451 command works as before.
6456 Specifies that the names given are to treated as patterns rather
6457 than literal variable names. Note: pattern matching can't be
6458 used with array references; use the ARRAY command to manipulate
6459 arrays and subarrays.
6462 List the name of each variable to be undefined, and whether it
6463 was undefined successfully ("ok" or "error"), plus a summary
6467 List the names of the variables that would be deleted without
6468 actually deleting them. Implies /LIST.
6470 The UNDEFINE command fails if there were any errors and succeeds
6473 The new _UNDEFINE command is like UNDEFINE, except the names are
6474 assumed to be variable names themselves, which contain the names (or
6475 parts of them) of the variables to be undefined. For example, if you
6476 have the following definitions:
6479 define foo This is some text
6485 undefines the variable \%a, but:
6489 undefines the macro foo.
6491 Normal Kermit patterns are used for matching; metacharacters include
6492 asterisk, question mark, braces, and square brackets. Thus, when using
6493 the /MATCHING switch, if the names of the macros you want to undefine
6494 contain any of these characters, you must quote them with backslash to
6495 force them to be taken literally. Also note that \%* is not the name of
6496 a variable; it is a special notation used within a macro for "all my
6497 arguments". The command "undef /match \%*" deletes all \%x variables,
6498 where x is 0..9 and a..z. Use "undef /match \%[0-9]" to delete macro
6499 argument variables or "undef /match \%[i-n]" to delete a range of \%x
6502 [ [461]Top ] [ [462]Contents ] [ [463]C-Kermit Home ] [ [464]Kermit
6505 8.10. The INPUT and MINPUT Commands
6507 As of C-Kermit 8.0.211, the INPUT and MINPUT commands accept a switch:
6509 [M]INPUT /NOMATCH timeout
6510 The /NOMATCH switch allows INPUT or MINPUT to read incoming
6511 material for the specified amount of time, without attempting to
6512 match it with any text or patterns. When this switch is
6513 included, the [M]INPUT command succeeds when the timeout
6514 interval expires, with \v(instatus) set to 1, meaning "timed
6515 out", or fails upon interruption or i/o error.
6517 Also in version 8.0.211, there is a new way to apply a scale factor to
6520 SET INPUT SCALE-FACTOR floating-point-number
6521 This scales all [M]INPUT timeouts by the given factor, allowing
6522 time-sensitive scripts to be adjusted to changing conditions
6523 such as congested networks or different-speed modems without
6524 having to change each INPUT-class command. This affects only
6525 those timeouts that are given in seconds, not as wall-clock
6526 times. Although the scale factor can have a fractional part, the
6527 INPUT timeout is still an integer. The new built-in variable
6528 \v(inscale) tells the current INPUT SCALE-FACTOR.
6530 The MINPUT command can be used to search the incoming data stream for
6531 several targets simultaneously. For example:
6533 MINPUT 8 one two three
6535 waits up to 8 seconds for one of the words "one", "two", or "three" to
6536 arrive. Words can be grouped to indicate targets that contain spaces:
6538 MINPUT 8 nineteen twenty "twenty one"
6540 And of course you can also use variables in place of (or as part of)
6543 MINPUT 8 \%a \&x[3] \m(foo)
6545 Until now you had to know the number of targets in advance when writing
6546 the MINPUT statement. Each of the examples above has exactly three
6549 But suppose your script needs to look for a variable number of targets.
6550 For this you can use arrays and \fjoin(), described in [465]Section
6551 8.7. Any number of \fjoin() invocations can be included in the MINPUT
6552 target list, and each one is expanded into the appropriate number of
6553 separate targets each time the MINPUT command is executed. Example:
6555 declare \&a[10] = one two three
6556 minput 10 foo \fjoin(&a) bar
6558 This declares an array of ten elements, and assigns values to the first
6559 three of them. The MINPUT command looks for these three (as well as the
6560 words "foo" and "bar"). Later, if you assign additional elements to the
6561 array, the same MINPUT command also looks for the new elements.
6563 If an array element contains spaces, each word becomes a separate
6564 target. To create one target per array element, use \fjoin()'s grouping
6567 dcl \&a[] = {aaa bbb} {ccc ddd} {xxx yyy zzz}
6569 minput 10 \fjoin(&a) <-- 7 targets
6570 minput 10 \fjoin(&a,,2) <-- 3 targets
6572 [ [466]Top ] [ [467]Contents ] [ [468]C-Kermit Home ] [ [469]Kermit
6575 8.11. Learned Scripts
6577 C-Kermit now includes a simple script recorder that monitors your
6578 commands, plus your actions during CONNECT mode, and automatically
6579 generates a script program that mimics what it observed. You should
6580 think of this feature as a script-writing ASSISTANT since, as you will
6581 see [470]later in this section, the result generally needs some editing
6582 to make it both secure and flexible. The script recorder is controlled
6583 by the new LEARN command:
6585 LEARN [ /ON /OFF /CLOSE ] [ filename ]
6586 If you give a filename, the file is opened for subsequent
6587 recording. The /ON switch enables recording to the current file
6588 (if any); /OFF disables recording. /CLOSE closes the current
6589 script recording file (if any). If you give a filename without
6590 any switches, /ON is assumed.
6592 The /OFF and /ON switches let you turn recording off and on during a
6593 session without closing the file.
6597 * All commands that you type (or recall) at the prompt are recorded
6599 + LEARN commands are not recorded.
6600 + The CONNECT command is not recorded.
6601 + The TELNET command is converted to SET HOST /NETWORK:TCP.
6602 * Commands obtained from macros or command files are not recorded.
6604 + Every line you type is converted to an OUTPUT command.
6605 + The last prompt before any line you type becomes an INPUT
6607 + Timeouts are calculated automatically for each INPUT command.
6608 + A PAUSE command is inserted before each OUTPUT command just to
6611 Thus the script recorder is inherently line-oriented. It can't be used
6612 to script character-oriented interactions like typing Space to a
6613 "More?" prompt or editing a text file with VI or EMACS.
6615 But it has advantages too; for example it takes control characters into
6616 account that might not be visible to you otherwise, and it
6617 automatically converts control characters in both the input and output
6618 streams to the appropriate notation. It can tell, for example that the
6619 "$ " prompt on the left margin in UNIX is really {\{13}\{10}$ },
6620 whereas in VMS it might be {\{13}\{10}\{13}$ }. These sequences are
6621 detected and recorded automatically.
6623 A learned script should execute correctly when you give a TAKE command
6624 for it. However, it is usually appropriate to edit the script a bit.
6625 The most important change would be to remove any passwords from it. For
6626 example, if the script contains:
6628 INPUT 9 {\{13}\{10}Password: }
6629 IF FAIL STOP 1 INPUT timeout
6631 OUTPUT bigsecret\{13}
6633 you should replace this by something like:
6635 INPUT 9 {\{13}\{10}Password: }
6636 IF FAIL STOP 1 INPUT timeout
6637 ASKQ pswd Please type your password:
6639 OUTPUT \m(pswd)\{13}
6641 The LEARN command can't do this for you since it knows nothing about
6642 "content"; it only knows about lines and can't be expected to parse or
6643 understand them -- after all, the Password prompt might be in some
6644 other language. So remember: if you use the LEARN command to record a
6645 login script, be sure edit the resulting file to remove any passwords.
6646 Also be sure to delete any backup copies your editor or OS might have
6649 Other manual adjustments might also be appropriate:
6651 * If the target of an INPUT command can vary, you can replace the
6652 INPUT command with MINPUT and the appropriate target list, and/or
6653 the target with a \fpattern(). For example, suppose you are dialing
6654 a number that can be answered by any one of 100 terminal servers,
6655 whose prompts are ts-00>, ts-01>, ts-02>, ... ts-99>. The script
6656 records a particular one of these, but you want it to work for all
6657 of them, so change (e.g.):
6658 INPUT 10 ts-23> ; or whatever
6661 INPUT 10 \fpattern(ts-[0-9][0-9]>)
6663 * The INPUT timeout values are conservative, but they are based only
6664 on a single observation; you might need to tune them.
6665 * The PAUSE commands might not be necessary, or the PAUSE interval
6666 might need adjustment.
6667 * In case you made typographical errors during recording, they are
6668 incorporated in your script; you can edit them out if you want to.
6670 Here is a sample script generated by Kermit ("learn vms.ksc") in which
6671 a Telnet connection is made to a VMS computer, the user logs in, starts
6672 Kermit on VMS, sends it a file, and then logs out:
6674 ; Scriptfile: vms.ksc
6675 ; Directory: /usr/olga
6676 ; Recorded: 20001124 15:21:23
6678 SET HOST /NETWORK:TCP vms.xyzcorp.com
6679 IF FAIL STOP 1 Connection failed
6681 INPUT 7 {\{13}\{10}\{13}Username: }
6682 IF FAIL STOP 1 INPUT timeout
6685 INPUT 3 {\{13}\{10}\{13}Password: }
6686 IF FAIL STOP 1 INPUT timeout
6689 INPUT 18 {\{13}\{10}\{13}$ }
6690 IF FAIL STOP 1 INPUT timeout
6692 OUTPUT set default [.incoming]\{13}
6693 INPUT 12 {\{13}\{10}\{13}$ }
6694 IF FAIL STOP 1 INPUT timeout
6697 INPUT 15 {\{13}\{10}\{13}ALTO:[OLGA.INCOMING] C-Kermit>}
6698 IF FAIL STOP 1 INPUT timeout
6703 INPUT 18 {\{13}\{10}\{13}ALTO:[OLGA.INCOMING] C-Kermit>}
6704 IF FAIL STOP 1 INPUT timeout
6707 INPUT 6 {\{13}\{10}\{13}$ }
6708 IF FAIL STOP 1 INPUT timeout
6714 The commands generated by Kermit during CONNECT (INPUT, IF FAIL, PAUSE,
6715 and OUTPUT) have uppercase keywords; the commands typed by the user are
6716 in whatever form the user typed them (in this case, lowercase).
6718 [ [471]Top ] [ [472]Contents ] [ [473]C-Kermit Home ] [ [474]Kermit
6721 8.12. Pattern Matching
6723 A pattern is a character string that is used to match other strings.
6724 Patterns can contain metacharacters that represent special actions like
6725 "match any single character", "match zero or more characters", "match
6726 any single character from a list", and so on. The best known
6727 application of patterns is in file specifications that contain
6728 wildcards, as in "send *.txt", meaning "send all files whose names end
6731 Patterns are also used in increasingly many other ways, to the extent
6732 it is useful to point out certain important distinctions in the ways in
6733 which they are used:
6736 If an anchored pattern does not begin with "*", it must match
6737 the beginning of the string, and if it does not end with "*", it
6738 must match the end of the string. For example, the anchored
6739 pattern "abc" matches only the string "abc", not "abcde" or
6740 "xyzabc" or "abcabc". The anchored pattern "abc*" matches any
6741 string that starts with "abc"; the anchored pattern "*abc"
6742 matches any string that ends with "abc"; the anchored pattern
6743 "*abc*" matches any string that contains "abc" (including any
6744 that start and/or end with it).
6747 A floating pattern matches any string that contains a substring
6748 that matches the pattern. In other words, a floating pattern has
6749 an implied "*" at the beginning and end. You can anchor a
6750 floating pattern to the beginning by starting it with "^", and
6751 you can anchor it to the end by ending it with "$" (see examples
6755 A wildcard is an anchored pattern that has the additional
6756 property that "*" does not match directory separators.
6758 This terminology lets us describe Kermit's commands with a bit more
6759 precision. When a pattern is used for matching filenames, it is a
6760 wildcard, except in the TEXT-PATTERNS and BINARY-PATTERNS lists and
6761 /EXCEPT: clauses, in which case directory separators are not
6762 significant (for example, a BINARY-PATTERN of "*.exe" matches any file
6763 whose name ends in .exe, no matter how deeply it might be buried in
6764 subdirectories). When Kermit parses a file specification directly,
6765 however, it uses the strict wildcard definition. For example, "send
6766 a*b" sends all files whose names start with "a" and end with "b" in the
6767 current directory, and not any files whose names end with "b" that
6768 happen to be in subdirectories whose names start with "a". And as
6769 noted, wildcards are anchored, so "delete foo" deletes the file named
6770 "foo", and not all files whose names happen to contain "foo".
6772 Most other patterns are anchored. For example:
6776 does not succeed (and you would be surprised if it did!). In fact, the
6777 only floating patterns are the ones used by commands or functions that
6778 search for patterns in files, arrays, or strings. These include:
6780 * The GREP and TYPE /MATCH commands.
6781 * The \fsearch(), \frsearch(), and \farraylook() functions.
6783 Thus these are the only contexts in which explicit anchors ("^" and
6787 Prints all lines containing "abc" in all files whose names end
6791 Prints all lines that start with "abc" in all ".txt" files.
6794 Prints all lines that end with "abc" in all ".txt" files.
6797 Prints all lines that start with "a" and end with "z" in all
6800 Similarly for TYPE /PAGE, /fsearch(), /frsearch(), and \farraylook().
6802 Here is a brief summary of anchored and floating pattern equivalences:
6810 [ [475]Top ] [ [476]Contents ] [ [477]C-Kermit Home ] [ [478]Kermit
6813 8.13. Dates and Times
6815 C-Kermit's comprehension of date-time formats is considerably expanded
6816 in version 8.0. Any command that reads dates, including the DATE
6817 command itself, or any switch, such as the /BEFORE: and /AFTER:
6818 switches, or any function such as \fcvtdate(), now can understand dates
6819 and times expressed in any ISO 8601 format, in Unix "asctime" format,
6820 in FTP MDTM format, and in practically any format used in RFC 822 or
6821 RFC 2822 electronic mail, with or without timezones, and in a great
6822 many other formats as well. HELP DATE briefly summarizes the acceptable
6825 Furthermore, C-Kermit 8.0 includes a new and easy-to-use form of
6826 date-time arithmetic, in which any date or time can be combined with a
6827 "delta time", to add or subtract the desired time interval (years,
6828 months, weeks, days, hours, minutes, seconds) to/from the given date.
6829 And new functions are available to compare dates and to compute their
6832 As you can imagine, all this requires quite a bit of "syntax". The
6835 [ date ] [ time ] [ delta ]
6837 Each field is optional, but in most cases (depending on the context)
6838 there must be at least one field. If a date is given, it must come
6839 first. If no date is given, the current date is assumed. If no time is
6840 given, an appropriate time is supplied depending on whether a date was
6841 supplied. If no delta is given, no arithmetic is done. If a delta is
6842 given without a date or time, the current date and time are used as the
6845 Date-time-delta fields are likely to contain spaces (although they need
6846 not; space-free forms are always available). Therefore, in most
6847 contexts -- and notably as switch arguments -- date-time information
6848 must be enclosed in braces or doublequotes, for example:
6850 send /after:"8-Aug-2001 12:00 UTC" *.txt
6852 Kermit's standard internal format for dates and times is:
6860 Date-times can always be given in this format. yyyy is the 4-digit
6861 year, mm is the two-digit month (1-12; supply leading zero for
6862 Jan-Sep), dd is the 2-digit day (leading zero for 1-9), hh is the hour
6863 (0-23), mm the minute (0-59), ss the second (0-59), each with leading
6864 zero if less than the field width. The date and time can be separated
6865 by a space, an underscore, a colon, or the letter T. The time is in
6866 24-hour format. Thus the various quantities are at the following fixed
6870 1-4 Year (4 digits, 0000-9999)
6871 5-6 Month (2 digits, 1-12)
6872 7-8 Day (2 digits, 1-31)
6873 9 Date-Time Separator (space, :, _, or the letter T)
6874 10-11 Hour (2 digits, 0-23)
6875 12 Hour-Minute Separator (colon)
6876 13-14 Minute (2 digits, 0-59)
6877 15 Minute-Second Separator (colon)
6878 16-17 Second (2 digits, 0-59)
6882 19800526 13:07:12 26 May 1980, 13:07:12 (1:07:12PM)
6884 This is the format produced by the DATE command and by any function
6885 that returns a date-time. It is suitable for lexical comparison and
6886 sorting, and for use as a date-time in any Kermit command. When this
6887 format is given as input to a command or function, various date-time
6888 separators (as noted) are accepted:
6890 19800526 13:07:12 26 May 1980, 13:07:12 (1:07:12PM)
6891 20010208_10:28:35 2 February 2001, 10:28:35 AM
6892 18580101:12:00:00 1 January 1858, noon
6893 20110208T00:00:00 2 February 2011, midnight
6895 Certain other special date-time formats that are encountered on
6896 computer networks are recognized:
6899 This is a fixed format used by Unix, named after Unix's
6900 asctime() ("ASCII time") function. It is always exactly 24
6901 characters long. Example: Fri Aug 10 16:38:01 2001
6903 Asctime with Timezone
6904 This is like Asctime format, but includes a 3-character timezone
6905 between the time and year. It is exactly 28 characters long.
6906 Example: Fri Aug 10 16:38:01 GMT 2001
6909 E-mail date-time formats are defined in [479]RFC 2822 with a
6910 fair amount of flexibility and options. The following examples
6911 are typical of e-mails and HTTP (web-page) headers:
6913 Sat, 14 Jul 2001 11:49:29 (No timezone)
6914 Fri, 24 Mar 2000 14:19:59 EST (Symbolic timezone)
6915 Tue, 26 Jun 2001 10:19:45 -0400 (EDT) (GMT Offset + comment)
6918 This is the date-time format supplied by FTP servers that
6919 support the (not yet standard but widely used nevertheless) MDTM
6920 command, by which the FTP client asks for a file's modification
6923 yyyymmddhhmmss[.ffff]
6925 where yyyy is the 4-digit year, mm is the 2-digit month, and so
6926 on, exactly 14 digits long. An optional fractional part
6927 (fraction of second) may also be included, separated by a
6928 decimal point (period). Kermit rounds to the nearest second.
6931 20020208102835.515 (8 February 2002 10:28:36 AM)
6935 The date, if given, must precede the time and/or delta, and can be in
6936 many, many formats. For starters, you can use several symbolic date
6937 names in place of actual dates:
6940 This is replaced by the current date and time. The time can not
6941 be overriden (if you want to supply a specific time, use TODAY
6945 This is replaced by the current date and a default time of
6946 00:00:00 is supplied, but can be overridden by a specific time;
6947 for example, if today is 8 February 2002, then "TODAY" is
6948 "20020802 00:00:00" but "TODAY 10:28" is "20020802 10:28:00".
6951 Like TODAY, but one day later (if today is 8 February 2002, then
6952 "TOMORROW" is "20020803 00:00:00" but "TOMORROW 16:30" is
6953 "20020803 16:30:00").
6956 Like TODAY, but one day earlier.
6958 MONDAY, TUESDAY, WEDNESDAY, ..., SUNDAY
6959 The date on the given day of the week, today or later. A default
6960 time of 00:00:00 is supplied but can be overridden. Example:
6961 "SATURDAY 12:00" means next Saturday (or today, if today is
6964 You can give an explicit date in almost any conceivable format, but
6965 there are some rules:
6967 * If a date is given, it must have three fields: day, month, and
6968 year; the order can vary (except that the month can not be last).
6969 * If names are used for days, months, etc, they must be English.
6970 * The year must lie between 0000 and 9999, inclusive.
6971 * All calendar calculations use Gregorian dating, so calculated dates
6972 for years prior to 1582 (or later, depending on the country) will
6973 not agree with historical dates. Other forms of dating (e.g.
6974 Hebrew, Chinese) are not supported.
6976 Various date-field separators are accepted: hyphen, slash, space,
6977 underscore, period. The same field separator (if any) must be used in
6978 both places; for example 18-Sep-2001 but not 18-Sep/2001. Months can be
6979 numeric (1-12) or English names or abbreviations. Month name
6980 abbreviations are normally three letters, e.g. Apr, May, Jun, Jul.
6981 Capitalization doesn't matter.
6983 Here are a few examples:
6985 18 Sep 2001 (English month, abbreviated)
6986 18 September 2001 (English month, spelled out)
6987 2001 Sept 18 (Year, month, day)
6988 18-Sep-2001 (With hyphens)
6989 18/09/2001 (All numeric with slashes)
6990 18.09.2001 (Ditto, with periods)
6991 18_09_2001 (Ditto, with underscores)
6992 09/18/2001 (See below)
6993 2001/09/18 (See below)
6994 September 18, 2001 (Correspondence style)
6995 Sep-18-2001 (Month-day-year)
6996 20010918 (Numeric, no separators)
6998 You can also include the day of the week with a specific date, in which
6999 case it is accepted (if it is a valid day name), but not verified to
7000 agree with the given date:
7002 Tue, 18 Sep 2001 (Abbreviated, with comma)
7003 Tue,18 Sep 2001 (Comma but no space)
7004 Tue 18 Sep 2001 (Abbreviated, no comma)
7005 Tuesday 18 Sep 2001 (Spelled out)
7006 Tuesday, 18 Sep 2001 (etc)
7007 Friday, 18 Sep 2001 (Accepted even if not Friday)
7009 In all-numeric dates with the year last, such as 18/09/2001, Kermit
7010 identifies the year because it's 4 digits, then decides which of the
7011 other two numbers is the month or day based on its value. If both are
7012 12 or less and are unequal, the date is ambiguous and is rejected. In
7013 all-numeric dates with the year first, the second field is always the
7014 month and the third is the day. The month never comes last. A date with
7015 no separators is accepted only if it is all numeric and has exactly
7016 eight digits, and is assumed to be in yyyymmdd format.
7018 20010918 (18-Sep-2001 00:00:00)
7020 or 14 digits (as in FTP MDTM format):
7022 20010918123456 (18-Sep-2001 12:34:56)
7024 You can always avoid ambiguity by putting the year first, or by using
7025 an English, rather than numeric, month. A date such as 09/08/2001 would
7026 be ambiguous but 2001/09/08 is not, nor is 09-Aug-2001.
7028 Until the late 1990s, it was common to encounter 2-digit years, and
7029 these are found to this day in old e-mails and other documents. Kermit
7030 accepts these dates if they have English months, and interprets them
7031 according to the windowing rules of [480]RFC 2822: "If a two digit year
7032 is encountered whose value is between 00 and 49, the year is
7033 interpreted by adding 2000, ending up with a value between 2000 and
7034 2049. If a two digit year is encountered with a value between 50 and
7035 99, or any three digit year is encountered, the year is interpreted by
7038 If you need to specify a year prior to 1000, use leading zeros to
7039 ensure it is not misinterpreted as a "non-Y2K-compliant" modern year:
7041 7-Oct-77 (19771007 00:00:00)
7042 7-Oct-0077 (00771007 00:00:00)
7046 The basic time format is hh:mm:dd; that is hours, minutes, seconds,
7047 separated by colons, perhaps with an optional fractional second
7048 separated by a decimal point (period). The hours are in 24-hour format;
7049 12 is noon, 13 is 1pm, and so on. Fields omitted from the right default
7050 to zero. Fields can be omitted from the left or middle by including the
7051 field's terminating colon. Examples:
7053 11:59:59 (11:59:59 AM)
7056 11:59:59.33 (11:59:59 AM)
7058 03:21:00 (3:21:00 AM)
7059 3:21:00 (3:21:00 AM)
7060 15:21:00 (3:21:00 PM)
7061 :21:00 (00:21:00 AM)
7063 11::59 (11:00:59 AM)
7065 Leading zeros can be omitted, but it is customary and more readable to
7066 keep them in the minute and second fields:
7068 03:02:01 (03:02:01 AM)
7069 3:02:01 (03:02:01 AM)
7072 AM/PM notation is accepted if you wish to use it:
7074 11:59:59 (11:59:59 AM)
7075 11:59:59AM (11:59:59 AM)
7076 11:59:59A.M. (11:59:59 AM)
7077 11:59:59am (11:59:59 AM)
7078 11:59:59a.m. (11:59:59 AM)
7079 11:59:59PM (11:59:59 PM = 23:59:59)
7080 11:59:59P.M. (11:59:59 PM = 23:59:59)
7081 11:59:59pm (11:59:59 PM = 23:59:59)
7082 11:59:59p.m. (11:59:59 PM = 23:59:59)
7084 You can omit the colons if you wish, in which case Kermit uses the
7085 following rules to interpret the time:
7087 1. 6 digits is hh:mm:ss, e.g. 123456 is 12:34:56.
7088 2. 5 digits is h:mm:ss, e.g. 12345 is 1:23:45.
7089 3. 4 digits is hh:mm, e.g. 1234 is 12:34.
7090 4. 3 digits is h:mm, e.g. 123 is 1:23.
7091 5. 2 digits is hh, e.g. 12 is 12:00.
7092 6. 1 digit is h (the hour), e.g. 1 is 1:00.
7099 230pm (02:30:00 PM = 14:30:00)
7101 2315 (11:15:00 PM = 23:15:00 PM)
7103 231500 (23:15:00 PM)
7107 If a time is given, it can (but need not) be followed by a time zone
7108 designator. If no time zone is included, the time is treated as local
7109 time and no timezone conversions are performed.
7111 The preferred time zone designator is the UTC Offset, as specified in
7112 [481]RFC 2822: a plus sign or minus sign immediately followed by
7113 exactly four decimal digits, signifying the difference in hh (hours)
7114 and mm (minutes) from Universal Coordinated Time (UTC, also known as
7115 Greenwich Mean Time, or GMT), with negative numbers to the West and
7116 positive numbers to the East. For example:
7118 Fri, 13 Jul 2001 12:54:29 -0700
7120 indicates a local time of 12:54:29 that is 07 hours and 00 minutes
7121 behind (less than, East of) Universal Time. The space is optional, so
7122 the example could also be written as:
7124 Fri, 13 Jul 2001 12:54:29-0700
7126 The following symbolic time zones are also accepted, as specified by
7127 [482]RFC 2822 and/or in ISO 8601:
7129 GMT = +0000 Greenwich Mean Time
7130 Z = +0000 Zulu (Zero Meridian) Time
7131 UTC = +0000 Universal Coordinated Time
7132 UT = +0000 Universal Time
7133 EDT = -0400 Eastern (USA) Daylight Time
7134 EST = -0500 Eastern (USA) Standard Time
7135 CDT = -0500 Central (USA) Daylight Time
7136 CST = -0600 Central (USA) Standard Time
7137 MDT = -0600 Mountain (USA) Daylight Time
7138 MST = -0700 Mountain (USA) Standard Time
7139 PDT = -0700 Pacific (USA) Daylight Time
7140 PST = -0800 Pacific (USA) Standard Time
7142 Note that GMT, Z, UTC, and UT all express the same concept: standard
7143 (not daylight) time at the Zero Meridian. UTC, by the way, is an
7144 international standard symbol and does not correspond to the order of
7145 the English words, Universal Coordinated Time, but it happens to have
7146 the same initial letters as these words. Of course hundreds of other
7147 symbolic timezones and variations exist, but they are not standardized,
7148 and are therefore not supported by Kermit.
7150 When a time zone is included with a time, the time is converted to
7151 local time. In case the conversion crosses a midnight boundary, the
7152 date is adjusted accordingly. Examples converting to EST (Eastern USA
7153 Standard Time = -0500):
7156 11:30:00 EST = 11:30:00
7157 11:30:00 GMT = 06:30:00
7158 11:30:00 PST = 14:30:00
7159 11:30:00Z = 06:30:00
7160 11:30PM GMT = 18:30:00
7161 11:30 -0500 = 11:30:00
7162 11:30 -0800 = 08:30:00
7163 11:30 +0200 = 04:30:00
7165 Unlike most of Kermit's other date-time conversions, timezone knowledge
7166 (specifically, the offset of local time from UTC) is embodied in the
7167 underlying operating system, not in Kermit itself, and any conversion
7168 errors in this department are the fault of the OS. For example, most
7169 UNIX platforms do not perform conversions for years prior to 1970.
7173 Date/time expressions can be composed of a date and/or time and a delta
7174 time, or a delta time by itself. When a delta time is given by itself,
7175 it is relative to the current local date and time. Delta times have the
7176 following general format:
7178 {+,-}[number units][hh[:mm[:ss]]]
7180 In other words, a delta time always starts with a plus or minus sign,
7181 which is followed by a "part1", a "part2", or both. The "part1", if
7182 given, specifies a number of days, weeks, months, or years; "part2"
7183 specifies a time in hh:mm:ss notation. In arithmetic terms, these
7184 represents some number of days or other big time units, and then a
7185 fraction of a day expressed as hours, minutes, and seconds; these are
7186 to be added to or subtracted from the given (or implied) date and time.
7187 The syntax is somewhat flexible, as shown by the following examples:
7189 +1 day (Plus one day)
7193 + 1 day 3:00 (Plus one day and 3 hours)
7196 +3:00:00 (Plus 3 hours)
7199 +2 days (Plus 2 days)
7200 -12 days 7:14:22 (Minus 12 days, 7 hours, 14 minutes, and 22 seconds)
7202 The words "week", "month", and "year" can be used like "day" in the
7203 examples above. A week is exactly equivalent to 7 days. When months are
7204 specified, the numeric month number of the date is incremented or
7205 decremented by the given number, and the year and day adjusted
7206 accordingly if necessary (for example, 31-Jan-2001 +1month =
7207 03-Mar-2001 because February does not have 31 days). When years are
7208 specified, they are added or subtracted to the base year. Examples
7209 (assuming the current date is 10-Aug-2001 and the current time is
7212 18-Sep-2001 +1day (20010918 00:00:00)
7213 today +1day (20010811 00:00:00)
7214 now+1d (20010811 19:21:11)
7215 + 1 day (20010811 19:21:11)
7216 + 1 day 3:14:42 (20010811 22:35:54)
7217 + 7 weeks (20010928 19:21:11)
7218 +1d3:14:42 (20010811 22:35:54)
7219 +1w3:14:42 (20010817 22:35:54)
7220 +1m3:14:42 (20010910 22:35:54)
7221 +1y3:14:42 (20020810 22:35:54)
7222 2 feb 2001 + 10 years (20110208 00:00:00)
7223 2001-02-08 +10y12 (20110208 12:00:00)
7224 31-dec-1999 23:59:59+00:00:01 (20000101 00:00:00)
7225 28-feb-1996 +1day (19960229 00:00:00) (leap year)
7226 28-feb-1997 +1day (19970301 00:00:00) (nonleap year)
7227 28-feb-1997 +1month (19970328 00:00:00)
7228 28-feb-1997 +1month 11:59:59 (19970328 11:59:59)
7229 28-feb-1997 +20years (20170228 00:00:00)
7230 28-feb-1997 +8000years (99970228 00:00:00)
7232 For compatibility with VMS, the following special delta-time format is
7238 (no spaces). The hyphen after the number indicates days. It corresponds
7239 exactly to the Kermit notation:
7244 The following forms all indicate exactly the same date and time:
7246 18-Sep-2001 12:34:56 +1-3:23:01
7247 18-Sep-2001 12:34:56 +1d3:23:01
7248 18-Sep-2001 12:34:56 +1 day 3:23:01
7250 and mean "add a day plus 3 hours, 23 minutes, and 1 second" to the
7253 Note that delta times are not at all the same as UTC offsets; the
7254 former specifies an adjustment to the given date/time and the latter
7255 specifies that the local time is a particular distance from Universal
7258 11-Aug-2001 12:34:56 -0800 (20010811 16:34:56 -- UTC Offset)
7259 11-Aug-2001 12:34:56 -08:00 (20010811 04:34:56 -- Delta time)
7261 If you give a time followed by a modifier that starts with a + or -
7262 sign, how does Kermit know whether it's a UTC offset or a delta time?
7263 It is treated as a UTC offset if the sign is followed by exactly four
7264 decimal digits; otherwise it is a delta time. Examples (for USA Eastern
7267 11-Aug-2001 12:34:56 -0800 (20010811 16:34:56 -- UTC Offset)
7268 11-Aug-2001 12:34:56 -08:00 (20010811 04:34:56 -- Delta time)
7269 11-Aug-2001 12:34:56 -800 (20010811 04:34:56 -- Delta time)
7270 11-Aug-2001 12:34:56 -8 (20010811 04:34:56 -- Delta time)
7272 The first example says that at some unknown place which is 8 hours
7273 ahead of Universal Time, the time is 12:34:56, and this corresponds to
7274 16:34:56 in Eastern Daylight time. The second example says to subtract
7275 8 hours from the local time. The third and fourth are delta times
7276 because, even though a colon is not included, the time does not consist
7277 of exactly 4 digits.
7279 When a delta time is written after a timezone, however, there is no
7280 ambiguity and no syntax distinction is required:
7282 11-Aug-2001 12:34:56 -0800 -0800 (20010811 08:34:56)
7283 11-Aug-2001 12:34:56 -0800 -08:00 (Ditto)
7284 11-Aug-2001 12:34:56 -08:00 -08:00 (Illegal)
7286 8.13.5. The DATE Command
7288 Obviously a great many combinations of date, time, time zone, and delta
7289 time are possible, as well as many formatting options. The purpose of
7290 all this flexibility is to comply with as many standards as possible --
7291 Internet RFCs, ISO standards, and proven corporate standards -- as well
7292 as with notations commonly used by real people, in order that dates and
7293 times from the widest variety of sources can be assigned to a variable
7294 and used in any date-time field in any Kermit command.
7296 You can test any date-and/or-time format with the DATE command, which
7297 converts it to standard yyyymmdd hh:mm:ss format if it is understood,
7298 or else gives an explicit error message (rather than just "BAD DATE" as
7299 in previous C-Kermit releases) to indicate what is wrong with it.
7300 Examples (on Tuesday, 31 July 2001 in New York City, Eastern Daylight
7303 DATE command argument Result
7304 12:30 20010731 12:30:00
7305 12:30:01 20010731 12:30:01
7306 12:30:01.5 20010731 12:30:02
7307 1230 20010731 12:30:00
7308 230 20010731 02:30:00
7309 230+1d 20010801 02:30:00
7310 230+1d3:00 20010801 05:30:00
7311 20010718 19:21:15 20010718 19:21:15
7312 20010718_192115 20010718 19:21:15
7313 20010718T192115 20010718 19:21:15
7314 18 Jul 2001 +0400 20010717 23:59:59
7315 18 Jul 2001 192115 20010718 19:21:15
7316 18 Jul 2001 192115.8 20010718 19:21:16
7317 18-Jul-2001T1921 20010718 19:21:00
7318 18-Jul-2001 1921Z 20010718 15:21:00
7319 18-Jul-2001 1921 GMT 20010718 15:21:00
7320 18-Jul-2001 1921 UTC 20010718 15:21:00
7321 18-Jul-2001 1921 Z 20010718 15:21:00
7322 18-Jul-2001 1921Z 20010718 15:21:00
7323 18-Jul-2001 1921 -04:00:00 20010718 19:21:00
7324 21-Jul-2001_08:20:00am 20010721 08:20:00
7325 21-Jul-2001_8:20:00P.M. 20010721 20:20:00
7326 Fri Jul 20 11:26:25 2001 20010720 11:26:25
7327 Fri Jul 20 11:26:25 GMT 2001 20010720 07:26:25
7328 Sun, 9 Apr 2000 06:46:46 +0100 20000409 01:46:46
7329 Sunday, 9 Apr 2000 06:46:46 +0100 20000409 01:46:46
7330 now 20010731 19:41:12
7331 today 20010731 00:00:00
7332 today 09:00 20010731 09:00:00
7333 tomorrow 20010801 00:00:00
7334 tomorrow 09:00 20010801 09:00:00
7335 tomorrow 09:00 GMT 20010801 05:00:00
7336 yesterday 20010730 00:00:00
7337 yesterday 09:00 20010730 09:00:00
7338 + 3 days 20010803 00:00:00
7339 +3 days 20010803 00:00:00
7340 +3days 20010803 00:00:00
7341 + 3days 20010803 00:00:00
7342 + 3 days 09:00 20010803 09:00:00
7343 + 2 weeks 20010814 00:00:00
7344 + 1 month 20010831 00:00:00
7345 - 7 months 20001231 00:00:00
7346 + 10 years 20110731 00:00:00
7347 friday 20010803 00:00:00
7348 saturday 20010804 00:00:00
7349 sunday 20010805 00:00:00
7350 monday 20010806 00:00:00
7351 tuesday 20010731 00:00:00
7352 wednesday 20010801 00:00:00
7353 thursday 20010802 00:00:00
7354 friday 07:00 20010803 07:00:00
7355 thursday 1:00pm 20010802 13:00:00
7356 thursday 1:00pm GMT 20010802 09:00:00
7357 Thu, 10 Nov 94 10:50:47 EST 19941110 10:50:47
7358 Fri, 20 Oct 1995 18:35:15 -0400 (EDT) 19951020 18:35:15
7359 31/12/2001 20011231 00:00:00
7360 12/31/2001 20011231 00:00:00
7361 2001-July-20 20010720 00:00:00
7362 2001-September-30 20010930 00:00:00
7363 30-September-2001 20010930 00:00:00
7364 Sep 30, 2001 12:34:56 20010930 12:34:56
7365 September 30, 2001 20010930 00:00:00
7366 September 30, 2001 630 20010930 06:30:00
7367 September 30 2001 630 20010930 06:30:00
7368 Sep-30-2001 12:34:59 20010930 12:34:59
7369 20010807113542.014 20010807 11:35.42
7370 20010807113542.014Z 20010807 07:35:42
7372 8.13.6. New Date-Time Functions
7374 In the following descriptions, date-time function arguments are the
7375 same free-format date-time strings discussed above, with the same
7376 defaults for missing fields. They are automatically converted to
7377 standard format internally prior to processing.
7380 Converts the date-time d1 to standard format and local time.
7381 This function is not new, but now it accepts a wider range of
7382 argument formats that can include timezones and/or delta times.
7383 If the first argument is omitted, the current date and time are
7384 assumed. The optional second argument is a format code for the
7387 n1 = 1: yyyy-mmm-dd hh:mm:ss (mmm = English 3-letter month
7389 n1 = 2: dd-mmm-yyyy hh:mm:ss (ditto)
7390 n1 = 3: yyyymmddhhmmss (all numeric)
7393 Converts the date-time d1 to Universal Coordinated Time (UTC),
7394 also known as GMT or Zulu or Zero-Meridian time. The default d1
7395 is NOW. If d1 is a valid date-time, the UTC result is returned
7396 in standard format, yyyymmdd hh:ss:mm.
7399 Compares two free-format date-times, d1 and d2, and, if both
7400 arguments are valid, returns a number: -1 if d1 is earlier than
7401 (before) d2; 0 if d1 is the same as d2; 1 if d1 is later than
7405 Computes the difference between two free-format date-times, d1
7406 and d2. If both arguments are valid, returns a delta time which
7407 is negative if d1 is earlier than (before) d2 and positive
7408 otherwise. If d1 and d2 are equal, the result is "+0:00".
7409 Otherwise, the result consists of the number of days, hours,
7410 minutes, and seconds that separate the two date-times. If the
7411 number of days is zero, it is omitted. If the number of days is
7412 nonzero but the hours, minutes, and seconds are all zero, the
7413 time is omitted. if the seconds are zero, they are omitted.
7416 Converts a delta time to seconds. For example, "+1d00:00:01" to
7417 86401. Valid delta times must start with a + or - sign. Days are
7418 accepted as time units, but not years, months, or weeks. If the
7419 result would overflow a computer long word (as would happen with
7420 32-bit long words when the number of days is greater than
7421 24854), the function fails.
7423 HINT: Although Kermit has a number of built-in date and time variables,
7424 it doesn't have a single one suitable for writing a timestamp. For this
7425 you would normally use something like "\v(ndate) \v(time)". But
7426 \fcvtdate() (with no arguments) is equivalent: it returns the current
7427 date and time in yyyymmdd hh:mm:ss format, suitable for time stamping.
7429 8.13.7. Date-Time Programming Examples
7431 Here's a macro that converts any date-time to UTC, which you might use
7432 if C-Kermit didn't already have a \futcdate() function:
7435 .local := \fcvtdate(\%*) ; 1.
7436 .tmp := \fcvtdate(\m(local)UTC) ; 2.
7437 .offset := \fdiffdate(\m(local),\m(tmp)) ; 3.
7438 .utc := \fcvtdate(\m(local)\m(offset)) ; 4.
7442 Brief explanation: Line 1 converts the macro argument, a free-format
7443 date-time, to standard-format local time. Line 2 appends the "UTC"
7444 timezone to the local time and converts the result to local time. In
7445 other words, we take the same time as the local time, but pretend it's
7446 UTC time, and convert it to local time. For example, if New York time
7447 is 4 hours ahead of UTC, then 6:00pm New York time is 2:00pm UTC. Line
7448 3 gets the difference of the two results (e.g. "+04:00"). Line 4
7449 appends the difference (delta time) to the local time, and converts it
7450 again, which adds (or subtracts) the UTC offset to the given time. Line
7451 5 displays the result.
7453 Here's a script that opens a web page, gets its headers into an array,
7454 scans the array for the "Last-Modified:" header, and interprets it:
7455 http open www.columbia.edu
7456 if fail stop 1 HTTP OPEN failed
7457 http /array:a head index.html /dev/null
7458 if fail stop 1 HTTP GET failed
7460 for \%i 1 \fdim(&a) 1 {
7461 .\%x := \findex(:,\&a[\%i])
7463 .tag := \fleft(\&a[\%i],\%x-1)
7464 .val := \fltrim(\fsubstr(\&a[\%i],\%x+1))
7465 if ( eq "\m(tag)" "Last-Modified" ) {
7466 echo HTTP Date: \m(val)
7467 .rdate := \fcvtdate(\m(val))
7468 echo {Standard Date (local): \m(rdate)}
7469 echo {Standard Date (UTC): \futcdate(\m(rdate))}
7477 HTTP Date: Mon, 13 Aug 2001 20:05:42 GMT
7478 Standard Date (local): 20010813 16:05:42
7479 Standard Date (UTC): 20010813 20:05:42
7481 As you can see, Kermit had no trouble decoding the date-time-string
7482 from the website, converting to local time, and converting back to UTC
7483 with no conflicts or loss of information. If it had been in any other
7484 known format, the result would have been the same.
7486 Now suppose we want to download the web page only if it is newer than
7487 our local copy. The \fdate(filename) function (which returns the
7488 modification date-time of the given file) and the new \fcmpdates()
7489 function make it easy. Insert the following just before the BREAK
7492 if ( < 0 \fcmpdates(\m(rdate),\fdate(index.html)) ) {
7493 echo GETTING index.html...
7494 http get index.html index.html
7495 if success echo HTTP GET OK
7497 echo index.html: no update needed
7502 This says, "if 0 is less than the comparison of the remote file date
7503 and the local file date, get the remote file, otherwise skip it." And
7504 it automatically reconciles the time-zone difference (if any).
7506 It would be nice to be able to extend this script into a
7507 general-purpose website updater, but unfortunately HTTP protocol
7508 doesn't provide any mechanism for the client to ask the server for a
7509 list of files, recursive or otherwise.
7511 [ [483]Top ] [ [484]Contents ] [ [485]C-Kermit Home ] [ [486]Kermit
7514 8.14. Trapping Keyboard Interruption
7516 Normally when you type Ctrl-C and Kermit is in command mode (as opposed
7517 to CONNECT mode) with COMMAND INTERRUPTION ON (as it is unless you have
7518 set it OFF), Kermit interrupts any command that is currently in
7519 progress, and if a command file or macro is executing, rolls the
7520 command stack back to top level, closing all open command files,
7521 deactivating all macros, deallocating all local variables and arrays,
7522 and leaving you at the command prompt.
7524 Suppose, however, you want certain actions to occur when a script is
7525 interrupted; for example, closing open files, writing log entries, or
7526 displaying summary results. You can do this by defining a macro named
7527 ON_CTRLC. When Ctrl-C is detected, and a macro with this name is
7528 defined, Kermit executes it from the current command level, thus giving
7529 it full access to the environment in which the interruption occurred,
7530 including local variables and open files. Only when the ON_CTRLC macro
7531 completes execution is the command stack rolled back to top level.
7533 Once the ON_CTRLC macro is defined, it can be executed only once. This
7534 is to prevent recursion if the user types Ctrl-C while the ON_CTRLC
7535 macro is executing. If you type Ctrl-C while the Ctrl-C macro is
7536 active, this does not start a new copy of ON_CTRLC; rather, it returns
7537 to the top-level command prompt. After the ON_CTRLC macro returns, it
7538 has been removed from the macro table so if you want to use it again or
7539 install a different Ctrl-C trap, you must execute a new DEFINE ON_CTRLC
7540 command. In any case, as always when you interrupt a script with
7541 Ctrl-C, its completion status is FAILURE.
7543 Normally the ON_CTRLC macro would be defined in the command file or
7544 macro to which it applies, and should be declared LOCAL. This way, if
7545 the command file or macro completes successfully without being
7546 interrupted, the ON_CTRLC definition disappears automatically.
7547 Otherwise the definition would still be valid and the macro would be
7548 executed, probably out of context, the next time you typed Ctrl-C.
7550 Here's a simple example of a command file that sets a Ctrl-C trap for
7553 local on_ctrlc ; Make Ctrl-C trap local to this command file.
7554 define on_ctrlc { ; Define the ON_CTRLC macro.
7555 echo Interrupted at \v(time).
7556 echo Iterations: \%n
7558 xecho Type Ctrl-C to quit
7559 for \%n 1 999 1 { ; Prints a dot every second until interrupted.
7563 echo Finished normally at \v(time) ; Get here only if not interrupted.
7565 echo Iterations: \%n
7567 This prints a summary no matter whether it completes normally or is
7568 interrupted from the keyboard. In both cases the trap is automatically
7571 For an example of how to use ON_CTRLC to debug scripts, see
7574 [ [488]Top ] [ [489]Contents ] [ [490]C-Kermit Home ] [ [491]Kermit
7579 This section is primarily for those who want to write
7580 calculation-intensive scripts, especially if they require
7581 floating-point arithmetic, and/or for those who are familiar with the
7582 LISP programming language.
7584 Ever since C-Kermit version 5 was released in 1988, scripting has been
7585 one of its major attractions, and arithmetic is a key part of it.
7586 Versions 5 and 6 included integer arithmetic only, using traditional
7587 algebraic notation, e.g.:
7589 echo \fevaluate(3*(2+7)/2)
7592 C-Kermit 7.0 added support for floating-point arithmetic, but only
7593 through function calls:
7595 echo \ffpdivide(\ffpmultiply(3.0,\ffpadd(2.0,7.0)),2.0)
7598 C-Kermit 8.0 introduces a third form of arithmetic that treats integers
7599 and floating-point numbers uniformly, is easier to read and write, and
7600 executes very quickly:
7605 But first some background.
7607 The Kermit command and scripting language differs from true programming
7608 languages (such as C or Fortran) in many ways; one of the most
7609 prominent differences is the way in which variables are distinguished
7610 from constants. In a command language, words are taken literally; for
7611 example, the Unix shell:
7615 displays the file named foo.bar. Whereas in a programming language like
7616 C, words are assumed to be variables:
7618 s = foo.bar; /* Assigns the value of foo.bar to the variable s */
7620 To make a programming language take words literally, you have to quote
7623 s = "foo.bar"; /* Assigns a pointer to the string "foo.bar" to the variable s
7626 The opposite holds for command languages: to get them to treat a word
7627 as a variable rather than a constant, you have to escape them. For
7628 example, in the Unix shell:
7630 foo=123 ; Assign value 123 to variable foo.
7631 echo foo ; Prints "foo"
7632 echo $foo ; Prints "123"
7636 define foo 123 ; Assign value 123 to variable foo.
7637 echo 123 ; This prints "123".
7638 echo foo ; This prints "foo".
7639 echo \m(foo) ; This prints "123".
7641 In other words, character strings (such as "foo" above) are interpreted
7642 as literal strings, rather than variable names, except in special
7643 commands like DEFINE that deal specifically with variable names (or in
7644 numeric contexts as explained in [492]Section 8.2). The special
7645 "escape" character (dollar sign ($) for the shell, backslash (\) for
7646 Kermit) indicates that a variable is to be replaced by its value.
7648 The requirement to escape variable names in command languages normally
7649 does not impose any special hardship, but can add a considerable
7650 notational burden to arithmetic expressions, which are typically full
7651 of variables. Especially in Kermit when floating point numbers are
7652 involved, where you must use special \ffpxxx() functions, e.g.
7653 "\ffpadd(\m(a),\m(b))" rather than the simple "+" operator to add two
7654 floating-point numbers together, because the original arithmetic
7655 handler doesn't support floating point (this might change in the
7656 future). To illustrate, the general formula for the area of a triangle
7659 sqrt(s * (s - a) * (s - b) * (s - c))
7661 where a, b, and c are the lengths of the triangle's three sides and:
7665 Except in special cases (e.g. a = 3, b = 4, c = 5), the result has a
7666 fractional part so the computation must be done using floating-point
7667 arithmetic. We can create a Kermit 7.0 function for this as follows:
7671 assign s \ffpdiv(\ffpadd(\ffpadd(\%1,\%2),\%3),2.0)
7672 assign t1 \ffpsub(\m(s),\%1)
7673 assign t2 \ffpsub(\m(s),\%2)
7674 assign t3 \ffpsub(\m(s),\%3)
7675 return \ffpsqrt(\ffpmul(\m(s),\ffpmul(\m(t1),\ffpmul(\m(t2),\m(t3)))))
7678 But as you can see, this is rather cumbersome. Note, in particular,
7679 that arithmetic functions like \ffpadd(), \ffpmul(), etc, take exactly
7680 two operands (like their symbolic counterparts + and *), so obtaining
7681 the product of three or more numbers (as we do in this case) is
7684 Using the alternative S-Expression notation, we can reduce this to a
7685 form that is both easier to read and executes faster (the details are
7689 (let s (/ (+ \%1 \%2 \%3) 2.0))
7690 (sqrt (* s (- s \%1) (- s \%2) (- s \%3)))
7693 In both examples, the \%1..3 variables are the normal Kermit macro
7694 arguments, referenced by the normal escaping mechanism. For increased
7695 readability, we can also assign the macro arguments \%1, \%2, and \%3
7696 to the letters a, b, and c corresponding to our formula:
7699 (let a \%1 b \%2 c \%3)
7700 (let s (/ (+ a b c) 2.0))
7701 (sqrt (* s (- s a) (- s b) (- s c)))
7704 And now the Kermit function reads almost like the original formula.
7705 Here Kermit behaves more like a regular programming language. In an
7706 S-Expression, macro names need not be escaped when they are used as the
7707 names of numeric variables.
7709 [ [493]Top ] [ [494]Contents ] [ [495]C-Kermit Home ] [ [496]Kermit
7712 9.1. What is an S-Expression?
7714 The S-Expression concept is borrowed from the Lisp programming
7715 language. "S-Expression" is short for Symbolic Expression (itself
7716 sometimes shortened to SEXP). S-Expressions provide a kind of
7717 Alternative Mini-Universe within the Kermit command language when the
7718 regular rules don't apply, a universe enclosed in parentheses.
7720 C-Kermit does not pretend to be a full Lisp interpreter; only the
7721 arithmetic parts of Lisp have been incorporated: S-Expressions that
7722 operate on numbers and return numeric values (plus extensibility
7723 features described in [497]Section 9.8, which allow some degree of
7726 An S-Expression is a list of zero or more items, separated by spaces,
7727 within parentheses. Examples:
7735 If the S-Expression is empty, it has the NIL (empty) value. If it is
7736 not empty and the first item is an operator (such as + or *), there can
7737 be zero or more subsequent items, called the operands:
7741 Here the operator is "+" and the operands are "1" and "2", and the
7742 value of the S-Expression is the value of the operation (in this case
7743 3). The operator always comes first, which is different from the
7744 familiar algebraic notation; this because S-Expression operators can
7745 have different numbers of operands:
7749 (+ 1 2 3 4 5 6 7 8 9)
7751 If the first item in the S-Expression is not an operator, then it must
7752 be a variable or a number (or a macro; see [498]Section 9.8), and the
7753 S-Expression can only contain one item; in this case, the
7754 S-Expression's value is the value of the variable or number:
7759 Operands can be numbers, variables that have numeric values, functions
7760 that return numbers, or other S-Expressions. To illustrate an
7761 S-Expression within an S-Expression, observe that:
7765 is equivalent to any of the following (plus an infinite number of
7769 (+ (- 3 2) (/ 14 (+ 3 4)))
7771 S-Expressions can be nested to any reasonable level; for example, the
7772 value of the following S-Expression is 64:
7774 (- (* (+ 2 (* 3 4)) (- 9 (* 2 2))) 6)
7776 Operators have no precedence, implied or otherwise, since they can't be
7777 mixed. The only exceptions are unary + and -, which simply indicate the
7782 Order of evaluation is specified entirely by parentheses, which are
7783 required around each operator and its operands: (+ a (* b c)) instead
7786 S-Expressions provide a simple and isolated environment in which
7787 Kermit's macro names can be used without the \m(...) escaping that is
7788 normally required. Given:
7796 (+ \m(a) \m(b) \m(c))
7802 Within an S-Expression, as in other strictly numeric contexts
7803 ([499]Section 8.2), any operand that starts with a letter is treated as
7804 a Kermit macro name. In this context, abbreviations are not accepted;
7805 variable names must be spelled out in full. Alphabetic case is not
7806 significant; "a" and "A" are the same variable, but both are different
7809 Of course, regular Kermit variables and functions can be used in
7810 S-Expressions in the normal ways:
7812 (* \v(math_pi) (^ \%r 2)) ; Area of a circle with radius \%r
7813 (+ \fjoin(&a)) ; Sum of all elements of array \&a[]
7815 [ [500]Top ] [ [501]Contents ] [ [502]C-Kermit Home ] [ [503]Kermit
7818 9.2. Integer and Floating-Point-Arithmetic
7820 Normally, if all numbers in an S-Expression are integers, the result is
7823 (+ 1 1) ; Result is 2
7824 (/ 9 3) ; Result is 3
7826 If any of the operands is floating point, however, the result is also
7829 (+ 1 1.0) ; Result is 2.0
7830 (/ 9.0 3) ; Result is 3.0
7832 If all the operands are integers but the result has a fractional part,
7833 the result is floating point:
7835 (/ 10 3) ; Result is 3.333333333333333
7837 To force an integer result in such cases, use the TRUNCATE operator:
7839 (truncate (/ 10 3)) ; Result is 3
7841 Similarly, to force a computation to occur in floating point, you can
7842 coerce one of its operands to FLOAT:
7844 (+ 1 (float 1)) ; Result is 2.0
7846 The result is also floating point if the magnitude of any integer
7847 operand, intermediate result, or the result itself, is larger than the
7848 maximum for the underlying machine architecture:
7852 If the result is too large even for floating-point representation,
7853 "Infinity" is printed; if it is too small to be distinguished from 0,
7856 Large numbers can be used and large results generated, but they are
7857 accurate only to the precision of the underlying machine. For example,
7860 (+ 111111111111111111111 222222222222222222222)
7862 should be 333333333333333333333, but 333333333333333300000.0 is
7863 produced instead if the machine is accurate to only about 16 decimal
7864 digits, even with coercion to floating-point. The order of magnitude is
7865 correct but the least significant digits are wrong. The imprecise
7866 nature of the result is indicated by the ".0" at the end. Contrast
7869 (+ 111111111 222222222)
7871 which produces an exact integer result.
7873 [ [504]Top ] [ [505]Contents ] [ [506]C-Kermit Home ] [ [507]Kermit
7876 9.3. How to Use S-Expressions
7878 S-Expressions may be given as commands to C-Kermit. Any command whose
7879 first character is "(" (left parenthesis) is interpreted as an
7882 If you enter an S-Expression at the C-Kermit> prompt, its result is
7889 If an S-Expression is executed within a macro or command file, its
7890 value is not printed. However, you can control the printing action
7893 SET SEXPRESSION ECHO { AUTO, ON, OFF }
7894 AUTO is the default, meaning print the value at top level only;
7895 ON means always print the value; OFF means never print it.
7897 In any case, the value of the most recent S-Expression (and the
7898 S-Expression itself) may be accessed programmatically through the
7899 following variables:
7902 The S-Expression most recently executed.
7905 The value of the S-Expression most recently executed.
7907 Besides issuing S-Expressions as commands in themselves, you can also
7908 execute them anywhere within a Kermit command, but in this case they
7909 must be enclosed in a function call (otherwise they are taken
7913 The argument "s" is an S-Expression; the outer parentheses may
7914 be omitted. The value of the S-Expression is returned. Note that
7915 since S-Expressions usually contain spaces, some form of
7916 grouping or quoting might be needed in some contexts:
7918 echo \fsexpression((+ 1 1)) ; Outer parentheses may be included
7919 echo \fsexpr(+ 1 1) ; Outer parentheses may be omitted
7920 echo Value = "\fsexp(+ 1 a)" ; Can be embedded in strings
7921 echo Value = \&a[\fsexp(/ b 2)] ; Can be used in array subscripts
7922 if = {\fsexp(+ 1 1)} 2 { ; Braces needed here for grouping
7923 echo One plus one still equals two
7926 The IF statement illustrates how to use S-Expressions as (or in) IF or
7929 * Although S-Expressions and IF conditions are similar in appearance,
7930 they are not interchangeable. Therefore you must use \fsexpr() to
7931 let Kermit know it's an S-Expression rather than a regular IF
7932 condition, or a boolean or algebraic expression within an IF
7934 * In contexts where a single "word" is expected, you must enclose the
7935 \fsexp() invocation in braces if the S-Expression contains spaces
7936 (and most of them do).
7938 If an S-Expression is the last command executed in a macro, its value
7939 becomes the return value of the macro; no RETURN command is needed.
7943 (let s (/ (+ \%1 \%2 \%3) 2.0))
7944 (sqrt (* s (- s \%1) (- s \%2) (- s \%3)))
7947 This is equivalent to (but more efficient than):
7950 (let s (/ (+ \%1 \%2 \%3) 2.0))
7951 return \fsexp(sqrt (* s (- s \%1) (- s \%2) (- s \%3)))
7954 When an S-Expression is entered as a command -- that is, the first
7955 nonblank character of the command is a left parenthesis -- then it is
7956 allowed to span multiple lines, as many as you like, until the first
7957 left parenthesis is matched:
7976 The S-Expression concept lends itself easily to embedding and
7977 recursion, but the depth to which recursion can occur is limited by the
7978 resources of the computer (memory size, address space, swap space on
7979 disk) and other factors. There is no way that C-Kermit can know what
7980 this limit is, since it varies not only from computer to computer, but
7981 also from moment to moment. If resources are exhausted by recursion,
7982 C-Kermit simply crashes; there's no way to trap this error. However,
7983 you can set a depth limit on S-Expressions:
7985 SET SEXPRESSION DEPTH-LIMIT number
7986 Limits the number of times the S-Expression reader can invoke
7987 itself without returning to the given number. The default limit
7988 is 1000. This limit applies to S-Expressions embedded within
7989 other S-Expressions as well as to S-Expressions that invoke
7990 recursive macros. If the limit is exceeded, Kermit prints
7991 "?S-Expression depth limit exceeded" and returns to its prompt.
7992 More about recursion in [508]Section 9.8.
7994 You can also test the depth programmatically:
7997 The current S-Expression invocation depth. The depth includes
7998 both nesting level and recursion. For example, in:
7999 (foo (foo (foo (foo (foo))))), the innermost (foo) is at depth
8002 Help, completion, and syntax checking are not available within an
8003 S-Expression. If you type ? within an S-Expression, it says:
8005 C-Kermit>(? S-Expression ("help sexp" for details)
8007 As it says, typing "help sexp" will display a brief help text.
8009 The SHOW SEXPRESSION command displays current SET SEXPRESSION settings
8010 and related information.
8012 [ [509]Top ] [ [510]Contents ] [ [511]C-Kermit Home ] [ [512]Kermit
8015 9.4. Summary of Built-in Constants and Operators
8017 Three constants are built in:
8019 * PI, whose value is the value of pi (the quotient of circumference
8020 of any circle and its diameter, 3.141592653...) to the underlying
8021 machine's precision;
8022 * T, which always has the value 1, which signifies truth in Kermit
8023 logical expressions or S-Expressions;
8024 * NIL, which always has the empty value, and can serve as a False
8027 These constants are specific to S-Expressions and are not visible
8028 outside them. They may not be used as the target of an assignment. So,
8032 assign t 0 Succeeds but this is not the same T!
8034 E (the base of natural logarithms, 2.7182818184...) is not built in
8035 since it is not intrinsic in most Lisp dialects. If you want E to be
8036 the base of natural logarithms you can:
8040 Operators are either symbols (such as "+") or words. Words must be
8041 spelled out in full, not abbreviated. Differences of alphabetic case
8044 The most basic operation in S-Expressions is evaluation:
8046 EVAL [ s-expression or variable or number [ another [ another ... ] ] ]
8047 Evaluates its operands and returns the value of the last one
8048 evaluated. Examples:
8053 (eval (+ 1 a)) value of a+1
8054 (eval (setq a 1) (setq b (+ a 0.5))) value of b (= a+0.5)
8056 You can use "." as a shorthand for EVAL:
8062 (. (setq a 1) (setq b (+ a 0.5)))
8064 Opposite of EVAL is the operator that suppresses evaluation of its
8068 The value (quote item) is "item". If the item is itself an
8069 S-Expression, the result is the S-Expression with the outer
8070 parentheses stripped. Examples:
8075 (quote (this is a string)) this is a string
8076 (quote this is a string) (illegal)
8078 A shorthand notation is also accepted for quoting:
8079 'a is equivalent to (quote a). And therefore:
8080 '(a b c) is equivalent to (quote (a b c)).
8081 More about quoting in [513]Section 9.8.
8084 Is a combination of EVAL and QUOTE. It evaluates the item as an
8085 S-Expression, and then puts quotes around the result (more about
8086 this in [514]Section 9.8).
8088 The following operators assign values to variables:
8090 SETQ [ variable [ value [ variable [ value [ ... ] ] ] ] ]
8091 Applies to global variables. For each variable given: if a value
8092 is not given, the variable is undefined. If a value is given,
8093 assigns the value to the variable. The value may be a number, a
8094 variable, or anything that resolves to a number including an
8095 S-Expression. Returns the value of the last assignment.
8098 (setq) Does nothing, returns NIL.
8099 (setq a) Undefines a, returns NIL.
8100 (setq a 1) Assigns 1 to a, returns 1.
8101 (setq a 1 b 2) Assigns 1 to a, 2 to b, returns 2.
8102 (setq a 1 b 2 c) Assigns 1 to a, 2 to b, undefines c, returns NIL.
8104 To undefine a variable that is not the final one in the list, give it a
8105 value of "()" or NIL:
8107 (setq a () b 2) Undefines a, assigns 2 to b, returns 2.
8108 (setq a nil b 2) Ditto.
8110 Note that a variable can be used right away once it has a value:
8112 (setq a 1 b a) Assigns 1 to a, the value of a (1) to b, returns 1.
8114 The results of SETQ (when used with macro names) can be checked
8115 conveniently with SHOW MACRO, e.g:
8119 LET [ variable [ value [ variable [ value [ ... ] ] ] ] ]
8120 Like SETQ, but applies to local variables. Note that "local" is
8121 used in the Kermit sense, not the Lisp sense; it applies to the
8122 current Kermit command level, not to the current S-Expression.
8124 If you want to use SETQ or LET to assign a value to a backslash
8125 variable such as \%a or \&a[2], you must double the backslash:
8128 (setq \\%b (+ \%a 1))
8129 (setq \\&a[2] (setq (\\%c (+ \%a \%b))))
8133 * Double the backslash when you want to indicate the variable's NAME;
8134 * Don't double the backslash when you want its VALUE.
8136 See [515]Section 9.6 for a fuller explanation of variable syntax and
8139 Here's a summary table of arithmetic operators; in the examples, a is 2
8142 Operator Description Example Result
8143 + Adds all operands (0 or more) (+ a b) 0.7
8144 - Subtracts all operands (0 or more) (- 9 5 2 1) 1
8145 * Multiplies all operands (0 or more) (* a (+ b 1) 3) -1.80
8146 / Divides all operands (2 or more) (/ b a 2) -0.325
8147 ^ Raise given number to given power (^ 3 2) 9
8148 ++ Increments variables (++ a 1.2) 3.2
8149 -- Decrements variables (-- a) 1
8150 ABS Absolute value of 1 operand (abs (* a b 3)) 7.8
8151 MAX Maximum of all operands (1 or more) (max 1 2 3 4) 4
8152 MIN Minimum of all operands (1 or more) (min 1 2 3 4) 1
8153 MOD (%) Modulus of all operands (1 or more) (mod 7 4 2) 1
8154 FLOAT Convert an integer to floating-point (float 1) 1.0
8155 TRUNCATE Integer part of floating-point operand (truncate 3.333) 3
8156 CEILING Ceiling of floating-point operand (ceiling 1.25) 2
8157 FLOOR Floor of floating-point operand (floor 1.25) 1
8158 ROUND Operand rounded to nearest integer (round 1.75) 2
8159 SQRT Square root of 1 operand (sqrt 2) 1.414..
8160 EXP e (2.71828..) to the given power (exp -1) 0.367..
8161 SIN Sine of angle-in-radians (sin (/ pi 2)) 1.0
8162 COS Cosine of angle-in-radians (cos pi) -1.0
8163 TAN Tangent of angle-in-radians (tan pi) 0.0
8164 LOG Natural log (base e) of given number (log 2.7183) 1.000..
8165 LOG10 Log base 10 of given number (log10 1000) 3.0
8167 The ++ and -- operators are also assignment operators and work just
8168 like SETQ and LET in their interpretations of operators and operands,
8171 * Each target variable must already be defined and have a numeric
8173 * The assignment value is the amount by which to increment or
8174 decrement the variable.
8175 * If an assignment value is not given, 1 is used.
8177 If you include more than one variable-value pair in a ++ or --
8178 expression, every variable (except, optionally, the last) must be
8179 followed by a value. Examples:
8181 (++ a) Equivalent to (setq a (+ a 1)) and to (++ a 1)
8182 (++ a 2) Equivalent to (setq a (+ a 2))
8183 (-- a (* 2 pi)) Equivalent to (setq a (- a (* 2 pi)))
8184 (++ a 1 b 1 c 1 d) Equivalent to four SETQs incrementing a,b,c,d by 1.
8186 Another group of operators forms the predicates. These return a "truth
8187 value", in which 0 (or NIL) is false, and 1 or any other nonzero number
8190 Operator Description Example Result
8191 = (or ==) Operands are equal (= 1 1.0) 1
8192 != Operands are not equal (!= 1 1.0) 0
8193 < Operands in strictly ascending order (< 1 2 3) 1
8194 <= Operands in ascending order (<= 1 1 2 3) 1
8195 > Operands in strictly descending order (> 3 2 1) 1
8196 >= Operands in descending order (<= 3 3 2 1) 1
8197 AND (&&) Operands are all true (and 1 1 1 1 0) 0
8198 OR (||) At least one operand is true (or 1 1 1 1 0) 1
8199 XOR Logical Exclusive OR (xor 3 1) 0
8200 NOT (!) Reverses truth value of operand (not 3) 0
8202 The Exclusive OR of two values is true if one value is true and the
8203 other value is false.
8205 And another group operates on bits within an integer word:
8207 Operator Description Example Result
8208 & Bitwise AND (& 7 2) 2
8209 | Bitwise OR (| 1 2 3 4) 7
8210 # Bitwise Exclusive OR (# 3 1) 2
8211 ~ Reverses all bits (~ 3) -4
8213 These operators coerce their operands to integer by truncation if
8214 necessary. The result of bit reversal is hardware dependent.
8216 The final category of operator works on truth values:
8218 Operator Description Example Result
8219 IF Conditional evaluation (if (1) 2 3) 2
8221 IF (predicate) (s1) [ (s2) ]
8222 The IF operator is similar to Kermit's IF command. If the
8223 predicate is true (i.e. evaluates to a nonzero number), the
8224 first S-Expression (s1) is evaluated and its value is returned.
8225 Otherwise, if (s2) is given, it is evaluated and its value
8226 returned; if (s2) is not given, nothing happens and the NIL
8227 (empty) value is returned.
8229 You can group multiple expressions in the s1 and s2 expressions using
8232 (if (< a 0) (eval (setq x 0) (setq y 0)) (eval (setq x a) (setq y b)))
8236 (if (< a 0) (. (setq x 0) (setq y 0)) (. (setq x a) (setq y b)))
8238 Each operator has its own requirement as to number and type of
8239 operands. In the following table, "number" means any kind of number --
8240 integer or floating-point -- or a variable, function, macro, or
8241 S-Expression that returns a number; "vname" means variable name,
8242 "fpnumber" means a floating-point number (or anything that resolves to
8243 one), and "integer" means integer (or anything that resolves to one).
8244 "truthvalue" means anything that resolves to a value of zero or an
8245 empty value (which indicates false) or a nonzero value (which indicates
8246 true). "any" means any kind of value, including none at all.
8248 Operator Number of operands Type of operands Returns
8249 EVAL (.) 0 or more S-Expression Last value (default NIL)
8250 STRING 1 S-Expression string
8251 QUOTE (') 1 word string
8252 SETQ 0 or more vname value pairs Last value (default NIL)
8253 LET 0 or more vname value pairs Last value (default NIL)
8254 + 0 or more number number (default 0)
8255 - 0 or more number number (default 0)
8256 * 0 or more number number (see note (1))
8257 / 2 or more number number
8258 ^ 2 or more number number
8259 ++ 1 or more vname value pairs Result of last increment
8260 -- 1 or more vname value pairs Result of last decrement
8262 MAX 1 or more number number
8263 MIN 1 or more number number
8264 MOD (%) 2 number number
8265 FLOAT 1 number fpnumber
8266 TRUNCATE 1 number integer
8267 CEILING 1 number integer
8268 FLOOR 1 number integer
8269 ROUND 1 number integer
8270 SQRT 1 number fpnumber
8271 EXP 1 number fpnumber
8272 SIN 1 number fpnumber
8273 COS 1 number fpnumber
8274 TAN 1 number fpnumber
8275 LOG 1 number fpnumber
8276 LOG10 1 number fpnumber
8277 = (==) 1 or more number truthvalue
8278 != 1 or more number truthvalue
8279 < 1 or more number truthvalue
8280 <= 1 or more number truthvalue
8281 > 1 or more number truthvalue
8282 >= 1 or more number truthvalue
8283 AND (&&) 1 or more truthvalue truthvalue
8284 OR (||) 1 or more truthvalue truthvalue
8285 XOR 2 truthvalue truthvalue
8286 NOT (!) 1 truthvalue truthvalue
8287 & 1 or more number (see note 2) integer
8288 | 1 or more number (see note 2) integer
8289 # 2 number (see note 2) integer
8290 ~ 1 number (see note 2) integer
8291 IF 2 or 3 truthvalue,any,any any
8293 Operators that don't require any arguments return the default values
8296 1. The value of "*", when used as an operand, is initially "1" and the
8297 value of the most recent S-Expression thereafter, as in Franz Lisp.
8298 This is handy when doing a series of calculations by hand:
8299 C-Kermit>(* 13272.42 0.40)
8305 2. The bitwise operators coerce their operands to integer by
8308 [ [516]Top ] [ [517]Contents ] [ [518]C-Kermit Home ] [ [519]Kermit
8313 As noted elsewhere in this discussion, all backslash items (variables
8314 such as \%a, macro parameters such as \%1, array elements such as
8315 \&a[\%i], built-in variables such as \v(ndate), built-in functions such
8316 as \fjoin(), macro names enclosed in \m(), \s(), or \:(), etc) are
8317 evaluated at "top level" before the S-Expression is sent to the
8318 S-Expression reader. To use a backslash variable as the target of an
8319 assignment (e.g. by SETQ, LET, ++, or --), you must double the
8320 backslash, e.g. (setq \\%r 1234). This is discussed at greater length
8321 in the next section.
8323 Thus S-Expression reader generally deals only with macro names (not
8324 backslash items) as variables. It is important to understand how the
8325 reader handles macro names. There are fundamentally two kinds of
8326 S-Expressions: those that contain a single element, such as:
8330 and those that contain more than one element:
8334 If an S-Expression contains only one element, and it is the name of a
8335 macro, the macro's definition is examined. If the definition is a
8336 number (integer or floating-point, positive or negative), then this
8337 becomes the value of the expression. If the definition starts with '
8338 (apostrophe), then the quoted word or string is the value of the
8339 expression (explained in [520]Section 9.8). Otherwise, the macro is
8340 assumed to be composed of Kermit commands (possibly including
8341 S-Expressions), which are executed. If the macro has a RETURN value, or
8342 it executes an S-Expression as its last command, the result becomes the
8343 value of the S-Expression; otherwise the result is empty.
8345 For S-Expressions that contain more than one element, and the first
8346 element is the name of a macro, then this macro is executed with the
8347 arguments that are given, after the arguments are evaluated by the
8348 S-Expression reader. Likewise, If the first element is a built-in
8349 operator, then it is applied to the operands after they are evaluated.
8350 In both cases, each operand is fed to the S-Expression reader
8351 recursively for evaluation. If an operand is a number or a quoted
8352 string, it is used as-is. But if it's a macro name, this degenerates
8353 into the first case, and the previous paragraph applies.
8361 define foo '(one two three)
8362 (foo) Result: one two three
8363 define foo return \frandom(1000)
8364 (foo) Result: 713 (or other number)
8366 (foo) Result: The sum of a and b
8368 A more difficult example:
8373 The result in the last example depends on the definition of abc:
8375 * If it has no definition, an error occurs; otherwise:
8376 * If the definition is an S-Expression, the result is the
8377 S-Expression's value; otherwise:
8378 * If the definition consists of Kermit commands, they are executed.
8379 But in this case "(foo)" produces the empty result, because it
8380 doesn't RETURN anything.
8382 The use of macros as S-Expression operators is described in
8385 [ [522]Top ] [ [523]Contents ] [ [524]C-Kermit Home ] [ [525]Kermit
8388 9.6. Assignments and Scope
8390 The assignment operators SETQ and LET apply to global and local
8391 variables, respectively. SETQ and LET are standard Lisp operators
8392 adapted to Kermit scoping rules. When the operands are numeric or
8393 arithmetic, SETQ is equivalent to Kermit's EVALUATE command:
8398 When the operand is a string, SETQ is equivalent to DEFINE:
8400 (setq a '(this is a string))
8401 define a this is a string
8403 In the first case, both statements create a macro named "a" with a
8404 value of 3. But in neither case is the macro "a" necessarily global. If
8405 either of these commands executes in an environment (i.e. macro
8406 invocation level) where a "local a" command has been given, the "a"
8407 macro is global to that environment, but is not visible outside it.
8409 LET is equivalent to the Kermit LOCAL command, followed by the
8410 corresponding EVALUATE:
8419 Again, "local" in this context applies to the Kermit macro invocation
8420 stack, not to the S-Expression nesting level. To illustrate, recall our
8424 (let a \%1 b \%2 c \%3)
8425 (let s (/ (+ a b c) 2.0))
8426 (sqrt (* s (- s a) (- s b) (- s c)))
8429 Because SETQ and LET expressions return a value, they can be placed
8430 within a larger S-Expression. In this case we can replace the first
8431 reference to the "s" variable by its defining expression:
8434 (let a \%1 b \%2 c \%3)
8435 (sqrt (* (let s (/ (+ a b c) 2.0)) (- s a) (- s b) (- s c)))
8438 This would not work if LET were local to the S-Expression, but it works
8439 nicely in the context of Kermit macros. The previous definition is
8444 (setq a \%1 b \%2 c \%3)
8445 (sqrt (* (setq s (/ (+ a b c) 2.0)) (- s a) (- s b) (- s c)))
8448 In both cases, the variables a, b, c, and s are local to the "newarea"
8449 macro, and global within it.
8451 Multiple assignments can be handled in several ways. Here is the
8452 obvious way to initialize a series of variables to the same value:
8459 Here is a more compact and efficient way of doing the same thing:
8461 (setq a 0 b 0 c 0 s 0)
8463 However, in case the value was more complex, it's better to put only
8464 one copy of it in the S-Expression; in this case we rely on the fact
8465 that SETQ returns the value of its last assignment:
8467 (setq a (setq b (setq c (setq s (* x (^ y 2))))))
8469 Similarly, to set a series of variables to x, x+1, x+2, ...
8471 (setq c (+ (setq b (+ (setq a (+ (setq s x) 1)) 1)) 1))
8473 In the last example, you can see why "last" does not always correspond
8474 to "rightmost" (the leftmost variable "c" is assigned last).
8476 If you are working with backslash variables like \%a or array elements
8477 like \&a[1], remember two rules:
8478 1. Don't put spaces inside array brackets.
8479 2. You must double the backslash when using SETQ, LET, ++, or -- to
8480 assign a value to a backslash variable.
8482 Examples of assigning to a backslash variable:
8490 Examples of referring to a backslash variable's value:
8493 (setq b (+ \%a \&a[1]))
8497 The special notation is required because all backslashed items (\%x
8498 variables, array elements, built-in \v(xxx) variables, and \fxxx()
8499 function invocations) are evaluated in a single pass BEFORE the
8500 S-Expression is executed; any other approach would result in
8501 unacceptable performance. So, for example, in:
8503 declare \&a[] = 1 2 3
8506 (setq \\%y (+ \%x \&a[1]))
8508 the S-Expression becomes:
8512 before it is sent to the S-Expression evaluator. If the backslash had
8513 not been doubled on the assignment target, the result would have been:
8517 which is illegal because you can't assign a value to a number.
8518 Conversely, if backslashes were doubled on right-hand-side values:
8520 (setq \\%y (+ \\%x \\&a[1])
8522 this too, would give an error (not numeric - "\%x").
8524 If you omit the double backslash in the assignment target, the result
8525 depends on whether the variable already has a value:
8529 If \%a has a non-numeric single-word value, then this becomes the name
8530 of the variable that is assigned by SETQ. To illustrate:
8541 If \%a has no value, a numeric value, or a multiword value, an "invalid
8542 assignment" error occurs.
8544 [ [526]Top ] [ [527]Contents ] [ [528]C-Kermit Home ] [ [529]Kermit
8547 9.7. Conditional Expressions
8549 The IF operator provides a compact form of decision-making within
8550 S-Expressions. An IF expression can stand wherever a number might
8551 stand, as long is it returns a number. Here's a quick way to obtain the
8552 average value of all the elements in an array that contains only
8555 (/ (+ \fjoin(&a)) (float \fdim(&a)))
8557 This results in a "Divide by zero" error if the array is empty. If you
8558 want to define the average value of an empty array to be 0 instead of
8559 getting an error, you can use IF to check the array size:
8561 (if \fdim(&a) (/ (+ \fjoin(&a)) (float \fdim(&a))) 0)
8565 (if (not \fdim(&a)) 0 (/ (+ \fjoin(&a)) (float \fdim(&a))))
8567 Of course, IF can fit anywhere else into an S-Expression:
8569 (setq a (+ b (if (< c 0) 0 c)))
8571 and the IF expression can be as complex as you like:
8573 (setq a (+ b (if (and (or (> x 0) (> y 0)) (< c 0) (> d 1) (!= e 0)) 1 0)))
8575 and the "then" and "else" parts can contain multiple S-Expressions
8576 enclosed within (EVAL ...):
8578 (if x (eval (...) (...) (...)) (eval (...) (...) (...)))
8580 AND and OR operators are guaranteed to "short circuit". If any operand
8581 of AND is false, none of the subsequent operands is evaluated;
8582 likewise, if an OR operand is true, no further operands are evaluated.
8584 Bear in mind that the S-Expression IF is not the same as Kermit IF; the
8585 condition is only allowed to be an S-Expression or a variable or
8586 number, not the whole list of possibilities you see when you type "if
8587 ?" at the C-Kermit> prompt. But keep reading...
8589 [ [530]Top ] [ [531]Contents ] [ [532]C-Kermit Home ] [ [533]Kermit
8594 To extend the capabilities of S-Expressions, you can use Kermit macro
8595 names as operators, with the following limitations:
8597 * The macro must not have the same name as a built-in operator.
8598 * You must use the full macro name, not an abbreviation.
8600 And with the following enhancement:
8602 * If the last statement executed by the macro is an S-Expression, its
8603 value is returned automatically. In other words:
8605 define bump (++ \%1)
8609 define bump return \fsexpression(++ \%1)
8611 Here's an example in which we define a FIBONACCI operator that returns
8612 the nth element, n >= 0, of the Fibonacci series, 0 1 1 2 3 5 8 13 21
8613 34 55, . . ., in which the first element is 0, the second is 1, and
8614 each subsequent element is the sum of the two before it. This series
8615 was devised by Leonardo Pisano, Filius Bonacci (Fibonacci for short) in
8616 1202 to describe how fast rabbits can breed, and also forms the basis
8617 for the Golden Mean, the branching behavior of plants, the spiral of a
8618 nautilus shell, etc. (Thanks to [534]Dat Thuc Nguyen for December 2003
8619 corrections to this section!)
8621 We can write a FIBONACCI function as a macro easily with S-Expressions:
8625 (if (== \%1 1) 1 (+ (fibonacci (- \%1 2)) (fibonacci (- \%1 1)))))
8628 You can read this as:
8630 If the argument (\%1) is 0, return a result of 0; if it is 1,
8631 return 1; otherwise:
8632 return the sum of fibonacci(argument - 2) and fibonacci(argument -
8635 Note that a RETURN statement is not needed, since S-Expressions
8636 automatically set the return value of their containing macros.
8638 For comparison, here's how it would be coded without S-Expressions:
8643 } else if == \%1 1 {
8646 return \feval(\fexec(fibonacci \feval(\%1-2)) -
8647 + \fexec(fibonacci \feval(\%1-1)))
8651 Now we can use the FIBONACCI function (whichever way you write it) just
8652 as if it were a built-in operator:
8661 Within S-Expressions only (not outside them), S-Expressions themselves
8662 can be used as macro arguments:
8665 (setq x (fibonacci (* a b )))
8667 The value of the S-Expression (in this case "8"), and not the
8668 S-Expression itself, is sent to the macro.
8670 Your macro is responsible for argument validation and error handling. A
8671 robust Fibonacci macro would be more like this:
8674 if < \v(argc) 2 end 1 ?\%0: Missing argument
8675 if > \v(argc) 2 end 1 ?\%0: Too many arguments
8676 if not integer \%1 end 1 ?\%0: Integers only
8677 if < \%1 1 end 1 ?\%0: Argument out of range
8679 (if (== \%1 1) 1 (+ (fibonacci (- \%1 2)) (fibonacci (- \%1 1)))))
8682 Recall that "END nonzero-number [ message ]" causes a macro invocation
8683 to fail. When the macro is the operator in an S-Expression, this makes
8684 the S-Expression fail too. Also note that our Fibonacci macro is just
8685 an illustration, not a practical example. Since it is recursive (calls
8686 itself), it won't work for large arguments because the call stack can
8687 exceed available memory. See [535]Section 9.9.2 for a practical
8690 Kermit macros, when used as S-Expression operators, can do anything at
8691 all except initiate file transfers: they can print messages on the
8692 screen, read and write files, interact with the user, and so on. For
8693 example, here's a macro ASKME that asks you to enter a number, makes
8694 sure that you did, and then returns its value for use in the
8701 if not def \%n continue
8702 if not numeric \%n {
8703 echo Not numeric - "\%n"
8710 (setq a (* 2 (askme))) ; Get number from user, double it, assign result to a.
8712 Here's a macro you can use to validate that a number is in a given
8716 if != \v(argc) 4 end 1 ?\%0: Wrong number of arguments
8717 if ( < \%1 \%2 || > \%1 \%3 ) return 0
8721 The first argument is the number to be checked, the second is the
8722 minimum acceptable value, the third is the maximum. You can use this
8723 (for example) in IF conditions:
8725 define yes echo \%1 IS OK
8726 define no echo \%1 IS NOT OK
8729 (if (inrange a 0 100) (yes a) (no a))
8730 (if (inrange b -1000 +1000) (yes b) (no b))
8732 This is just an illustration, of course; there's already a built-in
8733 operator to let you do range checking without help from macros:
8735 (if (<= 0 a 100) (yes a) (no a))
8736 (if (<= -1000 b +1000) (yes b) (no b))
8738 To send string parameters to a macro, some kind of quoting is required
8739 to tell the S-Expression parser to take a given "word" literally rather
8740 than replacing it by its value. For this we use the Lisp QUOTE
8743 define length return \flength(\%1)
8744 (length (quote abcdefghijklmnopqrstuvwxyz))
8747 This causes the string "abcdefghijklmnopqrstuvwxyz" to be sent
8748 literally to the LENGTH macro. Kermit, like Lisp, also offers a
8749 shortcut for QUOTE, that lets us quote a word by prefixing it with a
8750 single quote (') character, also called apostrophe (ASCII 39):
8752 (length 'abcdefghijklmnopqrstuvwxyz)
8755 The two forms are equivalent.
8757 How the macro treats its arguments is up to the macro. In the example
8758 above, the argument is treated as a literal string. However, it can
8759 also be treated as a variable name:
8761 define string This is a string
8762 define length return \flength(\m(\%1))
8766 Note the construct \m(\%1). This means "the value of the macro whose
8767 name is the value of
8768 \%1". The value of \%1 in this case is the word "string", and the value
8769 of the macro whose name is "string" is "This is a string".
8771 What if the macro takes multiple arguments, or a variable number of
8772 them? Here's a simple macro that prints a phrase that includes its
8775 define complain echo It's too \%*!
8777 (Recall that \%* means "all arguments".)
8779 It can be called in the traditional way:
8781 complain hot Result: "It's too hot!"
8782 complain cold and wet Result: "It's too cold and wet!"
8784 Or from an S-Expression if you quote the arguments:
8786 (complain 'hot) Result: "It's too hot!"
8787 (complain 'cold 'and 'wet) Result: "It's too cold and wet!"
8789 To group multiple words into a single argument, use parentheses:
8791 (complain (quote (cold and wet))) Result: "It's too cold and wet!"
8792 (complain '(cold and wet)) Result: "It's too cold and wet!"
8794 Note the difference:
8796 (complain 'cold 'and 'wet) Three arguments
8797 (complain '(cold and wet)) One argument
8799 Since the COMPLAIN macro uses \%* to refer to all its arguments, no
8800 matter how many, it doesn't care which form you use. But it makes a
8801 difference in cases where the macro refers to its arguments
8804 To illustrate, let's consider a macro that receives the name of a macro
8805 and its argument list and executes it with its arguments, without
8806 knowing how many arguments there are. The following LOOP macro is used
8807 to execute the given macro with the given argument list the requested
8810 def loop { local i, for i 1 \%1 1 do \%2 \%3 }
8812 Within the LOOP macro, the first argument (\%1) is the loop count, \%2
8813 is the macro name, and \%3 is the argument list. When the LOOP macro is
8814 invoked traditionally like this:
8818 it prints "It's too hot!" three times. To invoke it from an
8819 S-Expression, you must quote both the macro name as well as the
8820 argument, since in this case the macro name itself is an argument:
8822 (loop 3 'complain 'hot)
8824 Now what if you need to send different or variable numbers of arguments
8825 to the LOOP macro? The LOOP macro can handle it already, provided you
8826 group the arguments into LOOP's third argument (\%3). In Kermit syntax,
8829 loop 3 complain cold and wet
8831 prints "It's too cold!" three times ("and wet" is lost); but with
8832 grouping (either of the following two forms):
8834 loop 3 complain {cold and wet}
8835 loop 3 complain "cold and wet"
8837 the LOOP macro prints "It's too cold and wet!" three times as desired.
8839 To do the same thing in an S-Expression, just use the Lisp forms of
8840 quoting instead of the Kermit forms; the following two are equivalent:
8842 (loop 3 'complain (quote (cold and wet)))
8843 (loop 3 'complain '(cold and wet))
8845 Here's a similar example in which we write a macro that shows both the
8846 name and the value of one or more other macros, whose names are given
8847 as arguments (similar to "show macro"):
8851 for \%i 1 \v(argc)-1 1 {
8852 echo \&_[\%i] = \m(\&_[\%i])
8856 (Recall that \&_[] is the macro's argument vector array, equivalent to
8857 \%1, \%2, ...) The DISPLAY macro can be used in S-Expressions like
8861 (display 'a 'b 'c 'd)
8870 The names must be quoted to prevent their evaluation before they are
8871 sent to the macro. This ability to pass variables "by name" to macros,
8872 rather than by value, lets you write macros that change the values of
8873 argument variables. For example, here's a macro that doubles the value
8874 of its argument variable:
8876 define double (++ \%1 \%1)
8878 which you can call like this:
8883 In the macro, \%1 is replace by the variable name "a"; "(++ a a)" adds
8884 "a" to itself, and sets the value of "a" to the result.
8886 There are no built-in operators other than QUOTE, ', and STRING for
8887 handling strings in S-Expressions, but using just these, plus macros
8888 that use Kermit's regular string-handling features, you can easily
8889 extend S-Expressions to do string manipulation:
8891 define len return \flen(\%1) Returns length of argument string
8892 define cap return \fupper(\%1) Uppercase argument string
8893 define rev return \freverse(\%1) Reverses argument string
8894 define sub return \fsubstr(\%1,\%2,\%3) Returns substring of arg string
8896 (len '(this is a string)) Result: 16
8897 (rev '(this is a string)) Result: gnirts a si siht
8898 (rev (cap '(this is a string))) Result: GNIRTS A SI SIHT
8899 (sub (rev (cap '(this is a string))) 5 9) Result: TS A SI S
8901 You can assign a string to a macro name as follows:
8903 (setq foo '(this is a string))
8904 (setq foo (quote (this is a string)))
8906 The two are exactly equivalent. In both cases, the macro "foo" has the
8911 so when it is retrieved it can be identified as a string rather than a
8912 number or commands to be executed. Thus:
8914 (setq foo (quote (this is a string)))
8916 foo = '(this is a string)
8920 Note the different results for "show macro foo" and "(foo)". The former
8921 shows the internal definition; the latter evaluates the variable, which
8922 removes the quoting. And perhaps more important, note that if the
8923 apostrophe and surrounding parentheses were not stored as part of the
8924 definition, (foo) would try to execute "this is a string" as a command.
8926 Given the assignment above, the following work as expected:
8928 (len foo) Result: 16
8929 (rev foo) Result: gnirts a si siht
8930 (rev (cap foo)) Result: GNIRTS A SI SIHT
8931 (sub (rev (cap foo)) 5 8) Result: TS A SI S
8933 Note that, unlike built-in S-Expression operators that return numbers
8934 or truth values, these operators return strings. If you want to assign
8935 their return values to other variables, you can do so:
8937 (setq bar (rev (cap foo))) Result: GNIRTS A SI SIHT
8939 But now the S-Expression processor doesn't know the value of "bar" is
8940 supposed to be a string, rather than a macro to execute. For this you
8941 need one final special operator, STRING. The STRING operator takes an
8942 S-Expression as an operand, evaluates it, and then returns its value
8943 enclosed in '(), so you can use the value as a string is subsequent
8944 S-Expressions. Use STRING for referencing macros that return strings:
8946 (setq bar (string (rev (cap foo)))) Result: '(GNIRTS A SI SIHT)
8948 STRING is like QUOTE, except that it evaluates its operand before
8949 applying the quoting, rather than taking the operand literally.
8951 To reference backslash variables or functions that return string
8952 values, you must use the regular quoting mechanisms:
8954 (setq time '(\v(time)))
8955 (setq date '(\v(date)))
8956 assign \%r this is a string
8959 That's because backslash items are evaluated BEFORE the S-Expression
8960 parser ever sees them, and the values of \v(time) and so on are not
8961 valid S-Expressions, so STRING won't like them.
8963 Finally a brief word on the touchy topic of quoting. Suppose you want
8964 to include (say) literal parentheses in a string that will later be
8965 processed by the S-Expression reader (or \fsplit() or \fword()).
8966 Normally, you can't do this because parentheses are meaningful in these
8967 contexts. To defeat the normal parsing rules, you can quote the
8968 parentheses with backslash. However, due to the many levels of string
8969 processing involved, a surprisingly large amount of backslashes might
8970 be required, for example:
8972 (setq s '(a b (c d) \\\\\\\\\\\\\\\\(e f (g h) x\\\\\\\\\\\\\\\\) j k))
8974 This is nearly impossible to explain(*). Instead, just remember two
8977 * In situations like this, it's better to use DEFINE to create the
8978 string, rather than SETQ. The example above requires only double
8979 backslashes when DEFINE is used:
8980 define s '(a b (c d) \\(e f (g h) x\\) j k)
8982 * The level of quoting depends on how many levels of evaluation the
8983 string must pass through, which is not always obvious. However, the
8984 number of backslashes required in any given situation is always a
8985 power of 2. So if 1 doesn't work, try 2; if 2 doesn't work, try 4;
8986 if 4 doesn't work, try 8, 16, 32, and so on.
8988 Considerations like this apply in any scripting language (shell, Tcl,
8989 Perl, Python, etc). The situation is known as "Quoting Hell".
8991 (*) If you really want an explanation, here it is:
8993 * Every SEXP has its backslash items evaluated in a single pass at
8994 top level before being passed to the SEXP reader, so \%1,
8995 \v(ftime), etc, can be evaluated up front, freeing the SEXP reader
8996 of having to know about such things, which in turn makes it much
8997 more efficient. Therefore one level of quoting is lost right away,
8998 and therefore you must double each backslash that is to be used as
9000 * When the SEXP reader sees '\', it treats it as a quote; discards it
9001 and keeps the next character. Thus '\\' becomes '\'. This would be
9002 the end of it, except that:
9003 * The SEXP reader must call itself recursively on its operands, so we
9004 must double any quotes in the operands: 2^2 = 4.
9005 * If the result is to be passed as an argument to a macro, the
9006 backslashes must again be doubled, because the macro processor
9007 evaluates the arguments before sending them to the macro: 2^3 = 8.
9008 * If the macro itself is to see the quotes, rather than just the
9009 result of the quoting, the quotes must be doubled again: 2^4 = 16.
9011 Moral: To create string constants in which grouping characters must be
9012 quoted, use DEFINE rather than SETQ.
9014 [ [536]Top ] [ [537]Contents ] [ [538]C-Kermit Home ] [ [539]Kermit
9021 The following program computes statistics -- means, maxima, minima,
9022 variance, standard deviation, and correlation -- from data stored in
9023 parallel arrays, \&x[] and \&y[], which can contain any mixture of
9024 integer and floating-point numbers: positive, negative, or zero. Array
9025 setup and validation are not shown. Except for the traditional FOR loop
9026 and printing the results at the end, the entire computation is done
9029 ; Initialize sums, maxima, minima, and number of elements
9031 (setq xsum 0 ysum 0 xsum2 0 ysum2 0 xysum 0)
9032 (setq xmin (setq xmax \&x[1]) ymin (setq ymax \&y[1]))
9035 ; Loop through elements and accumulate sums, maxima, and minima
9038 (setq x \&x[i] y \&y[i]) ; Notational convenience
9039 (setq xmax (max xmax x) ymax (max ymax y)) ; X and Y maxima
9040 (setq xmin (min xmin x) ymin (min ymin y)) ; X and Y minima
9041 (++ xsum x ysum y) ; X and Y sums
9042 (++ xsum2 (^ x 2) ysum2 (^ y 2)) ; Sum of X and Y squares
9043 (++ xysum (* x y)) ; Sum of XY products
9048 (setq xmean (/ xsum n) ymean (/ ysum n)) ; Mean X and Y
9049 (setq xss (- xsum2 (/ (^ xsum 2) n))) ; Intermediate values
9050 (setq yss (- ysum2 (/ (^ ysum 2) n)))
9051 (setq xyss (- xysum (/ (* xsum ysum) n)))
9052 (setq xvar (/ xss n) yvar (/ yss n)) ; X and Y variance
9053 (setq sdx (sqrt xvar) sdy (sqrt yvar)) ; Std deviation in X and Y
9054 (setq tmp (* xss yss))
9055 (setq cc (if tmp (/ xyss (sqrt tmp)) 1.0)) ; Correlation coefficient
9056 show macro xmean ymean xvar yvar sdx sdy cc ; Print the results
9058 The final "if tmp" check accounts for the possibility that both arrays
9059 contain all 0's. Results can also be printed with "echo CC = \m(cc)",
9060 or any other desired way. Interestingly, if we had not needed the sum
9061 of the squares and products, we could have obtained the sums, maxima,
9062 and minima of the X's and Y's without a loop like this:
9064 (setq xsum (+ \fjoin(&x)) ysum (+ \fjoin(&y)))
9065 (setq xmax (max \fjoin(&x)) ymax (max \fjoin(&y)))
9066 (setq xmin (min \fjoin(&x)) ymin (min \fjoin(&y)))
9068 Any Kermit function that returns numbers or lists of numbers can be
9069 included in an S-Expression as an operand.
9071 9.9.2. Practical Fibonacci Series
9073 The recursive Fibonacci example given previously is simple and elegant,
9074 but not very useful since it causes memory occupation to grow each time
9075 it calls itself, until eventually both physical memory and disk swap
9076 space are filled and the program crashes. Even for small arguments,
9077 like 17, execution time can be prohibitive:
9080 (setq result (fibonacci 17))
9081 (setq t2 (- \v(ftime) t1))
9082 echo FIBONACCI(17) = \m(result): TIME = \ffpround(t2,3)
9084 prints (on a certain rather slow computer):
9086 FIBONACCI(17) = 1597: TIME = 5.861
9088 Any recursive function can be recoded iteratively. The result is not as
9089 pretty, but execution is far less expensive:
9092 (if (== \%3 0) (\%2) (fibiter (+ \%1 \%2) \%1 (- \%3 1)))
9098 Here's the result on the same computer for the same argument of 17:
9100 FIBONACCI(17) = 1597: TIME = 0.015
9102 (47 times faster.) Execution time increases proportionally to the size
9103 of the argument in the iterative case, whereas in the recursive case it
9104 goes up geometrically, quickly reaching infinity.
9106 [ [540]Top ] [ [541]Contents ] [ [542]C-Kermit Home ] [ [543]Kermit
9109 9.10. Differences from Algebraic Notation
9113 * Algebraic notation uses infix operators and normal rules of
9114 operator precedence, with parentheses used to force exceptions to
9115 the rules; many operations can be included in an expression.
9116 S-Expressions use prefix operators with no intrinsic precedence;
9117 each operation is enclosed in parentheses, and the arrangement of
9118 parentheses determines precedence.
9119 * Algebraic infix operators require two operands; S-Expression prefix
9120 operators can accept a variable number of operands.
9121 * You can use algebraic notation anywhere that C-Kermit accepts a
9122 number, e.g. "echo \&a[((1+1)*2-1]", but you can use S-Expressions
9123 only as top-level commands. You can, however, use either algebraic
9124 or S-Expressions anywhere at all by enclosing them in \fevaluate()
9125 or \fsexpression(), respectively.
9126 * You can use any mixture of integer and floating-point numbers in
9127 S-Expressions, but only integers are permitted in algebraic
9128 expressions. Outside of S-Expressions, floating point arithmetic is
9129 supported only by \ffp...() function calls.
9130 * Operators and operands in S-Expressions must be separated by
9131 spaces, e.g. "(+ a b)". Spaces are not required in algebraic
9132 expressions: "((a+b)*c)".
9133 * When assigning values to backslash variables (such as \%x or
9134 \&a[2]) using SETQ or LET, you must double the backslash.
9136 [ [544]Top ] [ [545]Contents ] [ [546]C-Kermit Home ] [ [547]Kermit
9139 9.11. Differences from Lisp
9141 * Kermit has a lot of built-in operators not found in Lisp: ++, ^,
9143 * Most dialects of real Lisp do not allow S-Expressions that don't
9144 start with an operator, for example:
9147 This expression can cause an error in Lisp (even if "a" has a
9148 value), but is acceptable in Kermit, where it returns the value of
9149 the variable "a". Similarly, (1) returns the value "1".
9150 * In real Lisp, EVAL requires exactly one operand. In Kermit, it can
9151 have 0, 1, 2, or more operands. It returns the value of the last
9153 * Real Lisp SETQ and LET usually require an even number of operands.
9154 Kermit allows an odd number, in which case the last (or only)
9155 variable is undefined (i.e. deleted, destroyed).
9156 * Kermit does not support ratios such as "7/8". Some Lisp dialects
9157 accept ratios as numbers, and generate ratios when told to divide
9158 two integers whose quotient is not a whole number; e.g. in Common
9160 [13] USER(37): (/ (+ 1 2 3 4) 3)
9164 * The result of (/ 10 3) is 3.333.... Some Lisp dialects truncate the
9165 result to 3 since both operands are integers, some don't; some give
9166 the result as a ratio. C-Kermit always gives a floating point
9167 result when there is a fractional part. If you want an integer
9168 result, you can use TRUNCATE, FLOOR, or CEILING, e.g. (truncate (/
9170 * There is currently no "bignum" support. Large numbers can be used
9171 and large results generated, but (as noted in [548]Section 9.2)
9172 they are accurate only to the precision of the underlying machine.
9173 \v(math_precision) gives the machine precision as a number of
9174 decimal digits, e.g. 16.
9175 * Scientific notation for floating-point numbers is not supported. If
9176 the magnitude of a number is greater than the precision of the
9177 underlying hardware, the less-significant digits are shown but
9178 their values are meaningless. If it the number is too small to be
9179 represented internally, it is shown as "0.0".
9180 * Many Lisp features are omitted: List processing (CAR, CDR, etc),
9181 DEFUN, Lisp-specific control structures, and so on.
9183 [ [549]Top ] [ [550]Contents ] [ [551]C-Kermit Home ] [ [552]Kermit
9188 New commands and switches:
9190 SET TRANSFER REPORT { OFF, ON }
9191 Enables or disables the (new) one-line message printed by Kermit
9192 after a remote-mode file transfer to indicate the source and
9193 destination file, complete with path, to let you know where the
9196 SEND /TYPE:{TEXT,BINARY}
9197 Sends only files of the given type (see [553]Section 4).
9199 SEND /NOFOLLOWLINKS:
9200 (UNIX only) Skip over symbolic links rather than following them
9201 (default). This applies to wildcard and/or recursive SENDs; if a
9202 single filename is given, and it happens to be a symbolic link,
9203 the file it points to is sent.
9206 (UNIX only) Follow (resolve) symbolic links. Watch out for
9207 circular links, endless loops, etc.
9209 SET SEND I-PACKETS { OFF, ON }
9210 When sending commands to a Kermit server, this tells whether
9211 command packets should be preceded by an I (information) packet,
9212 which is used to synchronize parameters prior to executing the
9213 command. Normally ON. The only reason to set this OFF is for
9214 communicating with buggy Kermit servers that misbehave when an I
9215 packet is sent to them. There is also a SET RECEIVE I-PACKETS
9216 command, but presently it has no effect.
9218 SET TRANSFER MESSAGE [ text ]
9219 Sets an initial message to be shown in the Last Message field of
9220 the fullscreen file-transfer display.
9222 SET TRANSFER TRANSLATION { ON, OFF }
9223 Inhibits or re-enables text-file transfer character-set
9224 translation globally.
9226 { SEND, MSEND, GET, RECEIVE } /TRANSPARENT
9227 Inhibits character-set translation for this transfer only.
9229 { GET, RECEIVE } /PIPES:{ON,OFF}
9230 Overrides global TRANSFER PIPES setting for this transfer only;
9231 ON allows incoming files with names like "!tar xf -" to be
9232 opened as pipelines rather than regular files.
9234 The following new "hot keys" are available when Kermit's file-transfer
9237 D: Turn on debugging, open "debug.log" if not already open.
9238 d: Turn off debugging but leave log open (if it was open).
9239 T: Turn on debug-log timestamps.
9240 t: Turn off debug-log timestamps.
9243 * SET FILE DOWNLOAD-DIRECTORY now works for external protocols (e.g.
9245 * Improved automatic per-file text/binary switching, described in
9247 * When sending a file group (e.g. "send *.*"), failure to open a file
9248 is no longer fatal; now C-Kermit simply goes ahead to the next
9250 * Transaction log entries are now made for external protocols too.
9252 [ [555]Top ] [ [556]Contents ] [ [557]C-Kermit Home ] [ [558]Kermit
9255 11. MODEMS AND DIALING
9257 In C-Kermit 8.0, the default modem type for dialing has changed from
9258 NONE (= DIRECT, meaning no modem) to GENERIC. This change should have
9259 no impact on direct connections. For dialing, it means that, unless you
9260 SET MODEM TYPE to a specific type, such as USROBOTICS or CONEXANT,
9263 1. The modem uses the Hayes AT command set.
9264 2. The modem supports error correction, data compression, and hardware
9265 flow control and is already configured to use them.
9267 In fact, Kermit assumes the modem is completely configured, and
9268 therefore does not send it an initialization string or any
9269 configuration commands. Instead, it sends only the simplest and most
9272 ATQ0V1 Give dial result codes.
9273 ATDTnumber Dial the number.
9275 (or ATD or ATDP, as appropriate).
9277 The new defaults work for direct connections and for most modern modems
9278 on most platforms, and they work much faster than "full-treatment"
9279 dialing. If the new defaults don't work for you, or if you need to
9280 perform explicit modem configurations or interactions, then set a
9281 specific modem type and use the SET MODEM and SET DIAL commands as
9282 documented in Using C-Kermit.
9284 WARNING: Don't use the generic modem on hosts that do not support
9285 RTS/CTS flow control. If Xon/Xoff is in use on the serial port,
9286 you'll need to select a particular modem type so Kermit knows what
9287 command to give it to enable Xon/Xoff flow control between itself
9288 and your serial port.
9290 The following new modem types were added in C-Kermit 8.0:
9292 lucent: Lucent Venus chipset
9293 pctel: PCTel V.90 chipset
9294 conexant: Conexant (ex-Rockwell) modem family
9295 zoom-v32bis: New name for "Zoom"
9297 zoom-v90 Zoom V.90 56K
9298 zoom-v92: Zoom V.92 with V.44 data compression
9299 zoltrix-v34: New name for "zoltrix"
9300 zoltrix-hsp-v90: Synonym for PCTel
9301 zoltrix-hcf-v90: Synonym for ITU-T-V250
9302 smartlink-v90: Synonym for usrobotics (same chipset)
9303 acer-v90: Synonym for Rockwell-v90
9305 New DIAL-related variables:
9307 \v(dm_hf): Dial modifier: Wait for Hook-Flash.
9308 \v(dm_wb): Dial modifier: Wait for Bong.
9310 Finally, if dialing fails, Kermit now prints a context-sensitive hint
9311 suggesting possible reasons and remedies.
9313 Added in C-Kermit 8.0.201: Rudimentary support for Caller ID, for use
9314 with the ANSWER command. If the modem reports Caller ID information,
9315 Kermit stores it in variables that you can access after the call is
9318 \v(callid_date) The date of the call
9319 \v(callid_time) The time of the call
9320 \v(callid_name) The name of the caller
9321 \v(callid_nmbr) The telephone number of the caller
9322 \v(callid_mesg) A message
9324 The format of these items depends on the originating and answering
9325 phone companies and the modems and their configuration.
9327 Not very many modems support Caller ID, and those that do (a) tend to
9328 have it disabled by default, and (b) use different commands to enable
9329 it. A quick survey shows of some current models shows:
9334 - Diamond Supra: #CID=1
9335 - Rockwell 56K: #CID=1
9340 To use Kermit's Caller ID feature, you have to set the modem to wait
9341 for at least two rings before answering, and you have to give the
9342 command to enable Caller ID; for example (after choosing a modem with
9345 set modem command autoanswer on ATS0=2#CID=1\{13}
9346 set modem command autoanswer on ATS0=2+VCID=1\{13}
9348 These commands can be undone with:
9350 set modem command autoanswer on ATS0=1#CID=0\{13}
9351 set modem command autoanswer on ATS0=1+VCID=0\{13}
9353 Kermit presently has no built-in knowledge of the Caller ID
9354 capabilities or commands of the modems in its database.
9356 Since the variables can be accessed only after the call is answered,
9357 the only way to refuse a call is to answer it, inspect the variables,
9358 and then hang it up if desired.
9360 [ [559]Top ] [ [560]Contents ] [ [561]C-Kermit Home ] [ [562]Kermit
9363 12. TERMINAL CONNECTION
9365 Now that 7-bit connections are no longer the norm, the default terminal
9366 bytesize (also called "data size" or "word size") in C-Kermit 8.0 is 8
9367 bits, rather than 7 bits as it was in C-Kermit 7.0 and earlier:
9369 SET ESCAPE character
9370 This command, which specifies your CONNECT-mode escape
9371 character, allows you to specify any ASCII control character in
9372 a variety of formats. C-Kermit 8.0.201 now also lets you specify
9373 any 8-bit value, 128-255, as the escape character. In the SET
9374 ESCAPE command, you can type the 8-bit character literally or
9375 you can enter its numeric code. Here are examples that you can
9376 enter from a terminal or console that uses the ISO Latin-1
9379 C-Kermit> set escape Ã
9380 C-Kermit> set escape 195
9381 C-Kermit> show escape
9382 Escape character: Code 195 (Ã): enabled
9385 Both of these commands set the escape character value to 195
9386 (decimal), which happens to be uppercase letter A with Tilde in
9387 Latin-1. SHOW ESCAPE and SHOW TERMINAL show the value, as does
9388 the CONNECT message.
9390 SET TERMINAL AUTODOWNLOAD ERROR { STOP, CONTINUE }
9391 When Kermit has a terminal connection to another computer, and a
9392 file transfer is initiated automatically because a Kermit packet
9393 was received in CONNECT mode (i.e. in the terminal screen), this
9394 command tells what Kermit should do if the transfer fails. The
9395 default is to STOP, which leaves Kermit in command mode with its
9396 file-transfer display showing, so you can see that the transfer
9397 failed and why. If you SET TERMINAL AUTODOWNLOAD ERROR CONTINUE,
9398 this causes Kermit to return automatically to its terminal
9399 screen (i.e. resume its CONNECT session) as if the transfer had
9400 succeeded; this can be desirable if the entire session is under
9401 control of a host-based script.
9403 SET TERMINAL BYTESIZE { 7, 8 }
9404 The byte size to use during CONNECT and INPUT command execution,
9405 which can be more restrictive than the bytesize implied by the
9406 current PARITY setting, but not less restrictive. In C-Kermit
9407 7.0 and earlier, the terminal bytesize was 7 by default to
9408 protect against the likelihood that parity was in use on the
9409 connection without the user's knowledge. When the terminal
9410 bytesize is 8 (as it is in C-Kermit 8.0 and later), the user
9411 will see garbage in this (increasingly unlikely) situation. Note
9412 that 8 data bits are required for most character sets other than
9413 ASCII: Latin-1, UTF-8, and so on.
9415 A new command has been added to produce timestamped session logs:
9417 SET TERMINAL SESSION-LOG TIMESTAMPED-TEXT
9418 Records the terminal session in text mode (like SET TERMINAL
9419 SESSION-LOG TEXT) but adds a timestamp at the beginning of each
9420 line. The timestamp format is hh:mm:ss.nnn, and indicates the
9421 time at which the first character of the line appeared.
9423 In most UNIX versions (those built with the select()-capable CONNECT
9424 module -- pretty much all the ones that have or could have TELNET
9425 included), an idle timeout feature has been added:
9427 SET TERMINAL IDLE-TIMEOUT number
9428 If the number is not 0, then Kermit is to take an action when
9429 the given amount of time passes with no activity during CONNECT
9430 mode. If the number is positive it is the maximum number of idle
9431 seconds; if number is negative it represents milliseconds
9432 (thousandths of seconds). If 0 is given as the number, there are
9433 no idle timeouts. Synonym: SET TERMINAL IDLE-LIMIT.
9435 SET TERMINAL IDLE-ACTION { RETURN, HANGUP, EXIT, OUTPUT [ string ] }
9436 The action to be taken upon an idle timeout in CONNECT mode.
9437 RETURN to the prompt, HANGUP the connection, EXIT from Kermit,
9438 or OUTPUT the given string (if no string is given, a NUL (ASCII
9439 0) character is sent).
9441 SET TERMINAL IDLE-ACTION { TELNET-NOP, TELNET-AYT }
9442 Actions that can be selected on Telnet connections only, that
9443 might be useful if idle limits are enforced by the Telnet server
9444 or in the TCP/IP protocol: TELNET-NOP sends a "NO Operation"
9445 (do-nothing) command, which causes no response from the server;
9446 TELNET-AYT sends an "Are You There" message to the server, which
9447 should make the server send back a message. Neither of these
9448 actions interferes with your remote session.
9450 SET TERMINAL IDLE-ACTION is useful for connections to hosts or services
9451 that automatically log you out after a certain amount of idle time,
9454 set term idle-timeout 300
9455 set term idle-action output \32
9457 sends a space (as if you had pressed the space bar) every 300 seconds
9458 (five minutes) while there is no activity (32 is the ASCII code for
9461 When C-Kermit returns from CONNECT to command mode, the reason for the
9462 transition is given in a new variable, \v(cx_status):
9464 0 No CONNECT command given yet.
9465 1 User escaped back manually.
9466 2 A trigger string was encountered.
9467 3 IKSD entered server mode.
9468 4 Application Program Command received from host.
9470 6 Telnet protocol error.
9472 8 Time limit exceeded.
9474 101 Carrier required by not detected.
9475 102 I/O error on connection.
9476 103 Disconnected by host.
9477 104 Disconnected by user.
9478 105 Session limit exceeded.
9479 106 Rejected due to Telnet policy.
9480 107 Received kill signal.
9482 Values 100 and above indicate there is no connection.
9484 [ [563]Top ] [ [564]Contents ] [ [565]C-Kermit Home ] [ [566]Kermit
9489 See the section on [567]file scanning above, and the section on
9490 character-set conversion in [568]FTP. Also:
9492 * True support for CP1252 (rather than treating it as Latin-1).
9493 * Proper handling of C1 values when converting ISO 8-bit text to
9495 * TYPE /CHARACTER-SET: /TRANSLATE-TO: allows specific translations.
9496 * The TRANSLATE command now works on multiple files.
9497 * K_CHARSET environment variable to set the file character-set.
9498 * SET TRANSFER TRANSLATION OFF.
9499 * FTP client character-set translation ([569]Section 3.7).
9501 [ [570]Top ] [ [571]Contents ] [ [572]C-Kermit Home ] [ [573]Kermit
9504 14. DIALOUT FROM TELNET TERMINAL SERVERS
9506 For years, C-Kermit has supported dialing out from Telnet modem servers
9507 (also called reverse terminal servers or access servers), but until now
9508 there was no way for Kermit to control the communication parameters
9509 (speed, parity, etc) on the serial port of the terminal server; it had
9510 to use whatever was there.
9512 But now, if you make a connection to a server that supports the Telnet
9513 Com Port Control Option, [574]RFC 2217, you have the same degree of
9514 control as you would have over a serial port on the computer where
9515 Kermit is running: SET SPEED, SET FLOW, SET PARITY, SET STOP-BITS, SHOW
9516 COMM, WAIT, SET CARRIER-WATCH, the modem-signal variables, sending
9517 Break, and so on, apply to the connection between the terminal server
9520 For example, using a Cisco Access Server 2509, where specifying a TCP
9521 port in the 6000's selects a serial port that can be used for dialing
9524 set host xxx 6001 ; xxx is the IP hostname or address of the server
9525 (log in if necessary) ; With a script or by hand
9526 set modem type usr ; Tell Kermit what kind of modem it has
9527 set speed 57600 ; This affects the server's port
9528 set flow rts/cts ; Ditto
9531 The modem server might or might not require a login sequence. It might
9532 also allow for automatic authentication, e.g. via Kerberos tickets.
9533 NOTE: If the modem server requires a login sequence, then REDIAL might
9534 not work as expected.
9536 When you have a Telnet Com Port connection, your SET SPEED and SET FLOW
9537 options change automatically to reflect the capabilities of the server,
9538 rather than those of your local computer.
9540 See the configuration manual for your server for additional
9541 information. For example, how to set up the server to drop the Telnet
9542 connection automatically when the telephone call is hung up (e.g.
9543 "autohangup" on Cisco models).
9545 For a Linux-based Telnet Com-Port server, click the Sredird link:
9547 [ [575]Top ] [ [576]Contents ] [ [577]Sredird ] [ [578]C-Kermit Home ]
9548 [ [579]Kermit Home ]
9550 15. COPING WITH BROKEN KERMIT PARTNERS
9552 There are lots of faulty Kermit protocol implementations out there,
9553 found mainly in 3rd-party products ranging from communications software
9554 packages to file-transfer functions embedded within devices. This topic
9555 is covered [580]HERE for C-Kermit 7.0, but C-Kermit 8.0 adds some
9558 SET ATTRIBUTE RECORD-FORMAT { ON, OFF }
9559 Allows control of the Kermit's Record-Format attribute. Set this
9560 to OFF in case incoming file are refused due to unknown or
9561 invalid record formats if you want to accept the file anyway.
9564 This is not a new trick, but it was recently discovered that the
9565 Kermit implementation embedded within a certain kind of
9566 punching/bending machine (Salvagnini if you must know) hangs
9567 upon reception of standard format Kermit attributes when
9568 receiving files. When sending files, it sends attributes of its
9569 own, one per A-packet, which is slightly unusual but legal. When
9570 receiving files from C-Kermit, K95, MS-DOS Kermit, Kermit-370,
9571 etc, it simply exits upon reception of the first A-packet;
9572 apparently it was not coded according to the protocol
9573 specification, which allows multiple attributes per A-packet.
9574 Solution: tell the file sender to SET ATTRIBUTES OFF.
9576 SET SEND I-PACKETS { ON, OFF }
9577 A Kermit server is supposed to accept I-packets; this is how the
9578 client lets the server know its capabilities and preferences
9579 before sending a command. Apparently there is at least one
9580 Kermit server implementation that does not accept I-packets, and
9581 does not properly respond with an Error packet if it gets one.
9582 To get around such situations in C-Kermit 8.0, you can use SET
9583 SEND I-PACKETS OFF to inhibit the sending of I packets. In this
9584 case, the client must be able to adjust to the server's
9585 configuration, rather than the other way around as we are used
9588 SET PROTOCOL KERMIT {} {} {}
9589 C-Kermit 6.0 and later automatically send "autoupload" and
9590 "autodownload" commands when in local mode and you give a file
9591 transfer command. For example, if you tell kermit to "send
9592 oofa.txt", Kermit sends "kermit -r" and a carriage return, in
9593 case you had forgotten to start Kermit on the far end and told
9594 it to receive a file. If a Kermit program had already been
9595 started on the far end, it should harmlessly absorb this string.
9596 However, some Kermit programs violate the Kermit protocol
9597 definition and treat such strings as Kermit packets even though
9598 they are not. In such cases, give this command to set the Kermit
9599 protocol autoupload and download strings to nothing, which tells
9600 Kermit not to send them. (This is not a new feature, but it was
9601 not previously included in the "Coping" section of the
9604 [ [581]Top ] [ [582]Contents ] [ [583]C-Kermit Home ] [ [584]Kermit
9607 16. NEW COMMAND-LINE OPTIONS
9609 kermit -h Now prints a complete listing of its command-line options,
9610 rather than an abbreviated list squeezed into a 24x80 space.
9612 -dd Debug, like -d but adds timestamps
9613 --version Shows C-Kermit version number.
9614 --noperms Equivalent to SET ATTRIBUTE PROTECTION OFF.
9616 Kermit now accepts a selection of URLs (Universal Resource Locators) as
9617 its first command-line argument. These are:
9620 Makes a Telnet connection to the given host (IP hostname or
9623 ftp://[user[:password]@]hostname[/path...]
9624 Makes an FTP connection to the given host (IP hostname or
9625 address). If a username is given, Kermit tries to log you in; if
9626 a password is given, it is used; if not, you are prompted for
9627 one. If no username is given, an anonymous login is performed.
9628 If a pathname is included, Kermit tries to GET the given file.
9629 See [585]Section 3.1.3 for details.
9631 ftps://[user[:password]@]hostname[/path...]
9632 Makes a secure FTP connection over SSL.
9634 telnets://[user[:password]@]hostname
9635 Makes a secure Telnet connection over SSL.
9637 kermit://[user[:password]@]hostname[/path...]
9638 Makes a connection to an [586]Internet Kermit Server.
9640 http://[user[:password]@]hostname[/path...]
9641 Makes a connection to Web server.
9643 https://[user[:password]@]hostname[/path...]
9644 Makes a connection to secure Web server.
9646 [ [587]Top ] [ [588]Contents ] [ [589]C-Kermit Home ] [ [590]Kermit
9651 In C-Kermit 8.0, we make an effort to keep passwords out of the debug
9652 log. This can never be 100% effective, but it's better than before,
9653 when there were no precautions at all. Whenever Kermit knows it's
9654 prompting for, parsing, or transmitting a password, it temporarily
9655 turns off logging and then turns it back on afterwards. This keeps the
9656 debug log password-free in most common cases, but there can be no
9659 As noted elsewhere, the new "-dd" command-line option selects a
9660 timestamped debug log (equivalent to "set debug timestamps on", "log
9663 C-Kermit 8.0 also supports a new timestamped session log via "set
9664 session-log timestamped-text", "log session".
9666 There have been requests for other kinds of logs, for example a command
9667 log. These might be added at some point. One person wanted to be able
9668 to log commands with timestamps, but only commands issued at the
9669 prompt, not commands from files or macros, and also wanted a header
9670 line at the beginning showing the date, user, and host. This can be
9673 .filename := \v(home)commands.log ; (for example)
9674 fopen /write \%c \m(filename)
9676 fwrite /line \%c \v(date): User=\v(user) Host=\v(host)
9678 set debug timestamps on
9679 log debug {| grep "CMD(P)" >> \m(filename)} append
9682 [ [591]Top ] [ [592]Contents ] [ [593]C-Kermit Home ] [ [594]Kermit
9684 __________________________________________________________________
9687 C-Kermit 8.0 Update Notes / [595]The Kermit Project / Columbia
9688 University / 15 Dec 2003 - 13 Sep 2010
9692 1. http://www.columbia.edu/
9693 2. mailto:kermit@columbia.edu
9694 3. http://www.columbia.edu/kermit/index.html
9695 4. http://www.columbia.edu/kermit/k95.html
9696 5. http://www.columbia.edu/kermit/ckermit.html
9697 6. http://www.columbia.edu/kermit/ckscripts.html
9698 7. http://www.columbia.edu/kermit/current.html
9699 8. http://www.columbia.edu/kermit/whatsnew.html
9700 9. http://www.columbia.edu/kermit/faq.html
9701 10. http://www.columbia.edu/kermit/support.html
9702 11. http://www.columbia.edu/kermit/ckermit80.html#contents
9703 12. http://www.columbia.edu/kermit/ckermit.html
9704 13. http://www.columbia.edu/kermit/index.html
9705 14. http://www.amazon.com/gp/product/1555581641?ie=UTF8&tag=aleidmoreldom-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=1555581641
9706 15. http://www.columbia.edu/kermit/ckermit80.html
9707 16. mailto:kermit-support@columbia.edu
9708 17. http://www.columbia.edu/kermit/
9709 18. http://www.kermit-project.org/
9710 19. http://www.columbia.nyc.ny.us/kermit/
9711 20. ftp://kermit.columbia.edu/kermit/f/COPYING.TXT
9712 21. ftp://kermit.columbia.edu/kermit/f/ckcmai.c
9713 22. http://www.columbia.edu/kermit/ckermit80.html#xv
9714 23. http://www.columbia.edu/kermit/ck60manual.html
9715 24. http://www.columbia.edu/kermit/ckermi70.html
9716 25. ftp://kermit.columbia.edu/kermit/f/ckermit70.txt
9717 26. http://www.columbia.edu/kermit/ckututor.html
9718 27. ftp://kermit.columbia.edu/kermit/f/ckuker.nr
9719 28. http://www.columbia.edu/kermit/security.htm
9720 29. http://www.columbia.edu/kermit/telnet.htm
9721 30. http://www.columbia.edu/kermit/ftpscripts.html
9722 31. http://www.columbia.edu/kermit/ckcbwr.html
9723 32. ftp://kermit.columbia.edu/kermit/f/ckcbwr.txt
9724 33. http://www.columbia.edu/kermit/ckubwr.html
9725 34. ftp://kermit.columbia.edu/kermit/f/ckubwr.txt
9726 35. http://www.columbia.edu/kermit/ckvbwr.html
9727 36. ftp://kermit.columbia.edu/kermit/f/ckvbwr.txt
9728 37. http://www.columbia.edu/kermit/ckuins.html
9729 38. ftp://kermit.columbia.edu/kermit/f/ckuins.txt
9730 39. http://www.columbia.edu/kermit/ckvins.html
9731 40. ftp://kermit.columbia.edu/kermit/f/ckvins.txt
9732 41. http://www.columbia.edu/kermit/ckccfg.html
9733 42. ftp://kermit.columbia.edu/kermit/f/ckccfg.txt
9734 43. http://www.columbia.edu/kermit/ckcplm.html
9735 44. ftp://kermit.columbia.edu/kermit/f/ckcplm.txt
9736 45. http://www.columbia.edu/kermit/iksd.html
9737 46. http://www.columbia.edu/kermit/skermit.html
9738 47. http://www.columbia.edu/kermit/ckermit80.html#top
9739 48. http://www.columbia.edu/kermit/ckermit.html
9740 49. http://www.columbia.edu/kermit/index.html
9741 50. http://www.columbia.edu/kermit/ckermit80.html#x0
9742 51. http://www.columbia.edu/kermit/ckermit80.html#x1
9743 52. http://www.columbia.edu/kermit/ckermit80.html#x2
9744 53. http://www.columbia.edu/kermit/ckermit80.html#x2.1
9745 54. http://www.columbia.edu/kermit/ckermit80.html#x2.2
9746 55. http://www.columbia.edu/kermit/ckermit80.html#x2.2.1
9747 56. http://www.columbia.edu/kermit/ckermit80.html#x2.2.2
9748 57. http://www.columbia.edu/kermit/ckermit80.html#x2.2.3
9749 58. http://www.columbia.edu/kermit/ckermit80.html#x2.2.4
9750 59. http://www.columbia.edu/kermit/ckermit80.html#x2.2.5
9751 60. http://www.columbia.edu/kermit/ckermit80.html#x2.2.6
9752 61. http://www.columbia.edu/kermit/ckermit80.html#x3
9753 62. http://www.columbia.edu/kermit/ckermit80.html#x3.1
9754 63. http://www.columbia.edu/kermit/ckermit80.html#x3.1.1
9755 64. http://www.columbia.edu/kermit/ckermit80.html#x3.1.2
9756 65. http://www.columbia.edu/kermit/ckermit80.html#x3.1.3
9757 66. http://www.columbia.edu/kermit/ckermit80.html#x3.1.4
9758 67. http://www.columbia.edu/kermit/ckermit80.html#x3.2
9759 68. http://www.columbia.edu/kermit/ckermit80.html#x3.3
9760 69. http://www.columbia.edu/kermit/ckermit80.html#x3.4
9761 70. http://www.columbia.edu/kermit/ckermit80.html#x3.5
9762 71. http://www.columbia.edu/kermit/ckermit80.html#x3.5.1
9763 72. http://www.columbia.edu/kermit/ckermit80.html#x3.5.2
9764 73. http://www.columbia.edu/kermit/ckermit80.html#x3.5.3
9765 74. http://www.columbia.edu/kermit/ckermit80.html#x3.6
9766 75. http://www.columbia.edu/kermit/ckermit80.html#x3.6.1
9767 76. http://www.columbia.edu/kermit/ckermit80.html#x3.6.2
9768 77. http://www.columbia.edu/kermit/ckermit80.html#x3.6.3
9769 78. http://www.columbia.edu/kermit/ckermit80.html#x3.7
9770 79. http://www.columbia.edu/kermit/ckermit80.html#x3.7.1
9771 80. http://www.columbia.edu/kermit/ckermit80.html#x3.7.2
9772 81. http://www.columbia.edu/kermit/ckermit80.html#x3.8
9773 82. http://www.columbia.edu/kermit/ckermit80.html#x3.9
9774 83. http://www.columbia.edu/kermit/ckermit80.html#x3.10
9775 84. http://www.columbia.edu/kermit/ckermit80.html#x3.10.1
9776 85. http://www.columbia.edu/kermit/ckermit80.html#x3.10.2
9777 86. http://www.columbia.edu/kermit/ckermit80.html#x3.10.3
9778 87. http://www.columbia.edu/kermit/ckermit80.html#x3.11
9779 88. http://www.columbia.edu/kermit/ckermit80.html#x4
9780 89. http://www.columbia.edu/kermit/ckermit80.html#x5
9781 90. http://www.columbia.edu/kermit/ckermit80.html#x6
9782 91. http://www.columbia.edu/kermit/ckermit80.html#x6.1
9783 92. http://www.columbia.edu/kermit/ckermit80.html#x6.2
9784 93. http://www.columbia.edu/kermit/ckermit80.html#x6.3
9785 94. http://www.columbia.edu/kermit/ckermit80.html#x6.4
9786 95. http://www.columbia.edu/kermit/ckermit80.html#x6.5
9787 96. http://www.columbia.edu/kermit/ckermit80.html#x6.6
9788 97. http://www.columbia.edu/kermit/ckermit80.html#x7
9789 98. http://www.columbia.edu/kermit/ckermit80.html#x8
9790 99. http://www.columbia.edu/kermit/ckermit80.html#x8.1
9791 100. http://www.columbia.edu/kermit/ckermit80.html#x8.2
9792 101. http://www.columbia.edu/kermit/ckermit80.html#x8.3
9793 102. http://www.columbia.edu/kermit/ckermit80.html#x8.4
9794 103. http://www.columbia.edu/kermit/ckermit80.html#x8.5
9795 104. http://www.columbia.edu/kermit/ckermit80.html#x8.6
9796 105. http://www.columbia.edu/kermit/ckermit80.html#x8.7
9797 106. http://www.columbia.edu/kermit/ckermit80.html#x8.8
9798 107. http://www.columbia.edu/kermit/ckermit80.html#x8.9
9799 108. http://www.columbia.edu/kermit/ckermit80.html#x8.10
9800 109. http://www.columbia.edu/kermit/ckermit80.html#x8.11
9801 110. http://www.columbia.edu/kermit/ckermit80.html#x8.12
9802 111. http://www.columbia.edu/kermit/ckermit80.html#x8.13
9803 112. http://www.columbia.edu/kermit/ckermit80.html#x8.14
9804 113. http://www.columbia.edu/kermit/ckermit80.html#x9
9805 114. http://www.columbia.edu/kermit/ckermit80.html#x9.1
9806 115. http://www.columbia.edu/kermit/ckermit80.html#x9.2
9807 116. http://www.columbia.edu/kermit/ckermit80.html#x9.3
9808 117. http://www.columbia.edu/kermit/ckermit80.html#x9.4
9809 118. http://www.columbia.edu/kermit/ckermit80.html#x9.5
9810 119. http://www.columbia.edu/kermit/ckermit80.html#x9.6
9811 120. http://www.columbia.edu/kermit/ckermit80.html#x9.7
9812 121. http://www.columbia.edu/kermit/ckermit80.html#x9.8
9813 122. http://www.columbia.edu/kermit/ckermit80.html#x9.9
9814 123. http://www.columbia.edu/kermit/ckermit80.html#x9.10
9815 124. http://www.columbia.edu/kermit/ckermit80.html#x9.11
9816 125. http://www.columbia.edu/kermit/ckermit80.html#x10
9817 126. http://www.columbia.edu/kermit/ckermit80.html#x11
9818 127. http://www.columbia.edu/kermit/ckermit80.html#x12
9819 128. http://www.columbia.edu/kermit/ckermit80.html#x13
9820 129. http://www.columbia.edu/kermit/ckermit80.html#x14
9821 130. http://www.columbia.edu/kermit/ckermit80.html#x15
9822 131. http://www.columbia.edu/kermit/ckermit80.html#x16
9823 132. http://www.columbia.edu/kermit/ckermit80.html#x17
9824 133. http://www.columbia.edu/kermit/ckermit80.html#top
9825 134. http://www.columbia.edu/kermit/ckermit.html
9826 135. http://www.columbia.edu/kermit/index.html
9827 136. http://www.columbia.edu/kermit/ckuins.html#x5
9828 137. http://www.columbia.edu/kermit/ckuins.html
9829 138. http://www.columbia.edu/kermit/ckermit80.html#x5
9830 139. http://www.columbia.edu/kermit/ckermit80.html#x2.2
9831 140. http://www.columbia.edu/kermit/ckermit80.html#contents
9832 141. http://www.columbia.edu/kermit/ckermit80.html#x15
9833 142. http://www.columbia.edu/kermit/ckermit80.html#x3.7
9834 143. http://www.columbia.edu/kermit/ckermit80.html#ftpdates
9835 144. http://www.columbia.edu/kermit/ckermit80.html#ftpcheck
9836 145. http://www.columbia.edu/kermit/ckermit80.html#ftpnamelist
9837 146. http://www.columbia.edu/kermit/ckermit80.html#srvrename
9838 147. http://www.columbia.edu/kermit/ckermit80.html#ftpvdir
9839 148. http://www.columbia.edu/kermit/ckermit80.html#setftptype
9840 149. http://www.columbia.edu/kermit/ckermit80.html#x3.6
9841 150. http://www.columbia.edu/kermit/ckermit80.html#x15
9842 151. http://www.columbia.edu/kermit/ckermit80.html#x8.7
9843 152. http://www.columbia.edu/kermit/ckermit80.html#x2.1
9844 153. http://www.columbia.edu/kermit/ckermit80.html#x2.2
9845 154. http://www.columbia.edu/kermit/ckermit80.html#x8.14
9846 155. http://www.columbia.edu/kermit/ckermit80.html#x8.13
9847 156. http://www.columbia.edu/kermit/ckermit80.html#x8.13
9848 157. http://www.columbia.edu/kermit/ckututor.html
9849 158. http://www.columbia.edu/kermit/ckuins.html
9850 159. http://www.columbia.edu/kermit/skermit.html
9851 160. http://www.columbia.edu/kermit/ckermit80.html#setlocus
9852 161. http://www.columbia.edu/kermit/ckermit80.html#lcommands
9853 162. http://www.columbia.edu/kermit/ckermit80.html#ftpuser
9854 163. http://www.columbia.edu/kermit/ckermit80.html#showvar
9855 164. http://www.columbia.edu/kermit/ckermit80.html#callerid
9856 165. http://www.columbia.edu/kermit/ckermit80.html#x6.6
9857 166. http://www.columbia.edu/kermit/ckermit80.html#x0
9858 167. http://www.columbia.edu/kermit/ckermit80.html#x3.11
9859 168. http://www.columbia.edu/kermit/ckermit80.html#top
9860 169. http://www.columbia.edu/kermit/ckermit80.html#contents
9861 170. http://www.columbia.edu/kermit/ckermit.html
9862 171. http://www.columbia.edu/kermit/index.html
9863 172. http://www.columbia.edu/kermit/ckermit80.html#x0
9864 173. http://www.columbia.edu/kermit/ckermit80.html#top
9865 174. http://www.columbia.edu/kermit/ckermit80.html#contents
9866 175. http://www.columbia.edu/kermit/ckermit.html
9867 176. http://www.columbia.edu/kermit/index.html
9868 177. http://www.columbia.edu/kermit/k95.html
9869 178. http://www.columbia.edu/kermit/sshclient.html
9870 179. http://www.columbia.edu/kermit/skermit.html
9871 180. http://www.columbia.edu/kermit/skermit.html
9872 181. http://www.columbia.edu/kermit/sshclien.htm
9873 182. http://www.columbia.edu/kermit/ckermit80.html#x3
9874 183. ftp://ftp.isi.edu/in-notes/rfc1738.txt
9875 184. http://www.columbia.edu/kermit/ckermit80.html#x2.2.2
9876 185. http://www.columbia.edu/kermit/ckermit80.html#x2.2.1
9877 186. ftp://ftp.isi.edu/in-notes/rfc2396.txt
9878 187. ftp://ftp.isi.edu/in-notes/rfc2616.txt
9879 188. http://www.columbia.edu/kermit/ckermit80.html#x2.2.3
9880 189. ftp://ftp.isi.edu/in-notes/rfc2616.txt
9881 190. http://www.columbia.edu/kermit/ckermit80.html#x8.13.7
9882 191. http://www.columbia.edu/kermit/security.htm#x5.4
9883 192. http://www.columbia.edu/kermit/security.htm#x15
9884 193. http://www.columbia.edu/kermit/security.htm#x6.2
9885 194. http://www.columbia.edu/kermit/security.html
9886 195. http://www.columbia.edu/kermit/ckermit80.html#x16
9887 196. http://www.columbia.edu/kermit/ckermit80.html#top
9888 197. http://www.columbia.edu/kermit/ckermit80.html#contents
9889 198. http://www.columbia.edu/kermit/ckermit.html
9890 199. http://www.columbia.edu/kermit/index.html
9891 200. http://www.columbia.edu/kermit/ckermit80.html#x3.1
9892 201. http://www.columbia.edu/kermit/ckermit80.html#x3.2
9893 202. http://www.columbia.edu/kermit/ckermit80.html#x3.3
9894 203. http://www.columbia.edu/kermit/ckermit80.html#x3.4
9895 204. http://www.columbia.edu/kermit/ckermit80.html#x3.5
9896 205. http://www.columbia.edu/kermit/ckermit80.html#x3.6
9897 206. http://www.columbia.edu/kermit/ckermit80.html#x3.7
9898 207. http://www.columbia.edu/kermit/ckermit80.html#x3.8
9899 208. http://www.columbia.edu/kermit/ckermit80.html#x3.9
9900 209. http://www.columbia.edu/kermit/ckermit80.html#x3.10
9901 210. http://www.columbia.edu/kermit/ckermit80.html#x3.11
9902 211. http://www.columbia.edu/kermit/security.htm
9903 212. http://www.columbia.edu/kermit/security.htm#servers
9904 213. http://www.columbia.edu/kermit/ckcsets.html
9905 214. http://www.columbia.edu/kermit/unicode.html
9906 215. http://www.columbia.edu/kermit/ckermi70.htm#x1.5.4
9907 216. http://www.columbia.edu/kermit/case10.html
9908 217. http://www.columbia.edu/kermit/ckermit80.html#x4
9909 218. http://www.columbia.edu/kermit/ckermit80.html#x3.11
9910 219. http://www.columbia.edu/kermit/ftpscripts.html
9911 220. http://www.columbia.edu/kermit/ckermit80.html#top
9912 221. http://www.columbia.edu/kermit/ckermit80.html#ftp
9913 222. http://www.columbia.edu/kermit/ftpclient.html
9914 223. http://www.columbia.edu/kermit/ftpscripts.html
9915 224. http://www.columbia.edu/kermit/ckermit.html
9916 225. http://www.columbia.edu/kermit/index.html
9917 226. http://www.columbia.edu/kermit/ckermit80.html#x3.1.1
9918 227. http://www.columbia.edu/kermit/ckermit80.html#x3.1.3
9919 228. http://www.columbia.edu/kermit/ckermit80.html#x3.1.4
9920 229. http://www.columbia.edu/kermit/ckermit80.html#x3.1.3
9921 230. http://www.columbia.edu/kermit/ckermit80.html#x3.1.3
9922 231. http://www.columbia.edu/kermit/ckermit80.html#x3.2
9923 232. http://www.columbia.edu/kermit/ckermit80.html#x3.5
9924 233. http://www.columbia.edu/kermit/ckermit80.html#x3.6
9925 234. http://www.columbia.edu/kermit/ftpscripts.html
9926 235. http://www.columbia.edu/kermit/ckb2.htm
9927 236. http://www.columbia.edu/kermit/ckermit80.html#ftpautolog
9928 237. http://www.columbia.edu/kermit/ckermit80.html#ftpuser
9929 238. http://www.columbia.edu/kermit/ckermit80.html#x3.8
9930 239. http://www.columbia.edu/kermit/ckermit80.html#x3.8
9931 240. http://www.columbia.edu/kermit/ckermit80.html#top
9932 241. http://www.columbia.edu/kermit/ckermit80.html#ftp
9933 242. http://www.columbia.edu/kermit/ckermit.html
9934 243. http://www.columbia.edu/kermit/index.html
9935 244. http://www.columbia.edu/kermit/ibm_ie.html
9936 245. http://www.columbia.edu/kermit/ckermit80.html#x3.10
9937 246. http://www.columbia.edu/kermit/ckermit80.html#top
9938 247. http://www.columbia.edu/kermit/ckermit80.html#ftp
9939 248. http://www.columbia.edu/kermit/ckermit.html
9940 249. http://www.columbia.edu/kermit/index.html
9941 250. http://www.columbia.edu/kermit/ck60manual.html
9942 251. http://www.columbia.edu/kermit/ckermit70.html#x4.17
9943 252. http://www.columbia.edu/kermit/ckermit70.html
9944 253. http://www.columbia.edu/kermit/ckermit80.html#x3.6
9945 254. http://www.columbia.edu/kermit/ckermit80.html#x3.11
9946 255. http://www.columbia.edu/kermit/ckermit80.html#x3.1.4
9947 256. http://www.columbia.edu/kermit/security.html
9948 257. http://www.columbia.edu/kermit/ckermit80.html#x3.7
9949 258. http://www.columbia.edu/kermit/ckermit80.html#x3.7
9950 259. http://www.columbia.edu/kermit/ckermit80.html#x8.13.4
9951 260. http://www.columbia.edu/kermit/ckermit80.html#permswitch
9952 261. http://www.columbia.edu/kermit/ckermit80.html#ftpchmod
9953 262. http://www.columbia.edu/kermit/ckermit80.html#x3.6.2
9954 263. http://www.columbia.edu/kermit/ckermit80.html#x4
9955 264. http://www.columbia.edu/kermit/ckermit80.html#top
9956 265. http://www.columbia.edu/kermit/ckermit80.html#ftp
9957 266. http://www.columbia.edu/kermit/ckermit.html
9958 267. http://www.columbia.edu/kermit/index.html
9959 268. http://www.columbia.edu/kermit/ckermit80.html#x7
9960 269. http://www.columbia.edu/kermit/ckermit80.html#x3.8
9961 270. http://www.columbia.edu/kermit/ckermit80.html#x3.8
9962 271. http://www.columbia.edu/kermit/ckb2.htm
9963 272. http://www.columbia.edu/kermit/ckermit80.html#x3.10
9964 273. http://www.columbia.edu/kermit/ckermit80.html#x3.10
9965 274. http://www.columbia.edu/kermit/ckermit80.html#x3.6
9966 275. http://www.columbia.edu/kermit/ckermit80.html#setftptype
9967 276. http://www.columbia.edu/kermit/ckermit80.html#top
9968 277. http://www.columbia.edu/kermit/ckermit80.html#ftp
9969 278. http://www.columbia.edu/kermit/ckermit.html
9970 279. http://www.columbia.edu/kermit/index.html
9971 280. http://www.columbia.edu/kermit/ckermit70.html#x4.9
9972 281. http://www.columbia.edu/kermit/ckermit80.html#x3.5.1
9973 282. http://www.columbia.edu/kermit/ckermit80.html#erroraction
9974 283. http://www.columbia.edu/kermit/ckermit70.html#x1.5
9975 284. http://www.columbia.edu/kermit/ckermit70.html#x4.7
9976 285. http://www.columbia.edu/kermit/ckermit70.html#x1.6
9977 286. http://www.columbia.edu/kermit/ckermit80.html#x8.13
9978 287. http://www.columbia.edu/kermit/ckermi70.htm#x1.5.4
9979 288. http://www.columbia.edu/kermit/ckermi70.htm
9980 289. http://www.columbia.edu/kermit/ckermit80.html#x4
9981 290. http://www.columbia.edu/kermit/ckermit80.html#x3.7
9982 291. http://www.columbia.edu/kermit/ckermit80.html#x3.5.2
9983 292. http://www.columbia.edu/kermit/ckermit80.html#x3.7
9984 293. http://www.columbia.edu/kermit/ckermit80.html#erroraction
9985 294. http://www.columbia.edu/kermit/ckermit80.html#x3.5.2
9986 295. http://www.columbia.edu/kermit/ckermit80.html#erroraction
9987 296. http://www.columbia.edu/kermit/ckermit80.html#ftpfilenames
9988 297. http://www.columbia.edu/kermit/ckermit80.html#ftpperms
9989 298. http://www.columbia.edu/kermit/ckermit80.html#ftpunique
9990 299. http://www.columbia.edu/kermit/ckermit80.html#ftpfilenames
9991 300. http://www.columbia.edu/kermit/ckermit80.html#note_utc
9992 301. http://www.columbia.edu/kermit/ckermit80.html#note_date
9993 302. http://www.columbia.edu/kermit/ckermit80.html#x3.6
9994 303. http://www.boulder.nist.gov/timefreq/faq/faq.htm#10:
9995 304. http://www.columbia.edu/kermit/ckermit80.html#x3.7
9996 305. http://www.columbia.edu/kermit/ckermit80.html#top
9997 306. http://www.columbia.edu/kermit/ckermit80.html#ftp
9998 307. http://www.columbia.edu/kermit/ckermit.html
9999 308. http://www.columbia.edu/kermit/index.html
10000 309. http://www.columbia.edu/kermit/ckermit80.html#x3.11
10001 310. http://www.columbia.edu/kermit/ckermi70.htm#x4.3
10002 311. http://www.columbia.edu/kermit/ckermit70.html
10003 312. http://www.columbia.edu/kermit/ckermit80.html#x5
10004 313. http://www.columbia.edu/kermit/ckermit80.html#x3.6.3
10005 314. http://www.columbia.edu/kermit/ckermit80.html#ftpfilenames
10006 315. http://www.columbia.edu/kermit/ckermi70.htm#x4.1
10007 316. http://www.columbia.edu/kermit/ckermi70.htm#x4.2.2
10008 317. http://www.columbia.edu/kermit/ckermi70.htm#x1.5.4
10009 318. http://www.columbia.edu/kermit/ckermit80.html#x3.6.2
10010 319. http://www.columbia.edu/kermit/ckermit80.html#x3.11
10011 320. http://www.columbia.edu/kermit/ckermit80.html#x3.11
10012 321. http://www.columbia.edu/kermit/ckermit80.html#srvrename
10013 322. http://www.columbia.edu/kermit/ckermi70.htm#x4.1
10014 323. http://www.columbia.edu/kermit/ckermi70.htm
10015 324. http://www.columbia.edu/kermit/ckb2.htm
10016 325. http://www.columbia.edu/kermit/ckermit80.html#ftpfilenames
10017 326. http://www.columbia.edu/kermit/ckermit80.html#x3.5.3
10018 327. http://www.proftpd.net/
10019 328. http://www.columbia.edu/kermit/ckermit80.html#top
10020 329. http://www.columbia.edu/kermit/ckermit80.html#ftp
10021 330. http://www.columbia.edu/kermit/ckermit.html
10022 331. http://www.columbia.edu/kermit/index.html
10023 332. http://www.columbia.edu/kermit/ckb2.htm
10024 333. http://www.columbia.edu/kermit/ckcsets.html
10025 334. http://www.columbia.edu/kermit/unicode.html
10026 335. http://www.columbia.edu/kermit/ckcsets.html
10027 336. http://www.columbia.edu/kermit/ckcsets.html
10028 337. http://www.columbia.edu/kermit/ckermit80.html#x4
10029 338. http://www.columbia.edu/kermit/utf8.html
10030 339. http://www.columbia.edu/kermit/ckcsets.html
10031 340. http://www.columbia.edu/kermit/ckermit80.html#x4
10032 341. ftp://ftp.isi.edu/in-notes/rfc2640.txt
10033 342. http://www.columbia.edu/kermit/ckermit80.html#top
10034 343. http://www.columbia.edu/kermit/ckermit80.html#ftp
10035 344. http://www.columbia.edu/kermit/ckermit.html
10036 345. http://www.columbia.edu/kermit/index.html
10037 346. http://www.columbia.edu/kermit/ckermit80.html#top
10038 347. http://www.columbia.edu/kermit/ckermit80.html#ftp
10039 348. http://www.columbia.edu/kermit/ckermit.html
10040 349. http://www.columbia.edu/kermit/index.html
10041 350. http://www.columbia.edu/kermit/ckermit80.html#top
10042 351. http://www.columbia.edu/kermit/ckermit80.html#ftp
10043 352. http://www.columbia.edu/kermit/ckermit.html
10044 353. http://www.columbia.edu/kermit/index.html
10045 354. http://www.columbia.edu/kermit/ftpscripts.html
10046 355. http://www.columbia.edu/kermit/ckermit80.html#x3.2
10047 356. http://www.columbia.edu/kermit/ckermit80.html#x3.2
10048 357. ftp://ftp.isi.edu/in-notes/rfc959.txt
10049 358. http://www.columbia.edu/kermit/ckscripts.html
10050 359. http://www.columbia.edu/kermit/ckermit80.html#top
10051 360. http://www.columbia.edu/kermit/ckermit80.html#ftp
10052 361. http://www.columbia.edu/kermit/ftpscript.html
10053 362. http://www.columbia.edu/kermit/ckermit.html
10054 363. http://www.columbia.edu/kermit/index.html
10055 364. http://www.columbia.edu/kermit/ckermit80.html#x3.11.1
10056 365. http://www.columbia.edu/kermit/ckermit80.html#x3.11.2
10057 366. http://www.columbia.edu/kermit/ckermit80.html#x3.11.3
10058 367. http://www.columbia.edu/kermit/ckermit80.html#x3.11.4
10059 368. http://www.columbia.edu/kermit/ckermit80.html#x3.11.5
10060 369. http://www.columbia.edu/kermit/ckermit.html
10061 370. http://www.columbia.edu/kermit/k95.html
10062 371. http://www.columbia.edu/kermit/ckermit80.html#x3.11.5
10063 372. ftp://ftp.isi.edu/in-notes/rfc959.txt
10064 373. ftp://ftp.isi.edu/in-notes/rfc2389.txt
10065 374. http://www.ietf.org/internet-drafts/draft-ietf-ftpext-mlst-16.txt
10066 375. http://www.columbia.edu/kermit/ftpclient.html
10067 376. http://www.columbia.edu/kermit/ckermit80.html#top
10068 377. http://www.columbia.edu/kermit/ckermit80.html#ftp
10069 378. http://www.columbia.edu/kermit/ckermit.html
10070 379. http://www.columbia.edu/kermit/index.html
10071 380. http://www.columbia.edu/kermit/ckermit80.html#x3
10072 381. http://www.columbia.edu/kermit/ckermit80.html#ucs2
10073 382. http://www.columbia.edu/kermit/ckermit80.html#top
10074 383. http://www.columbia.edu/kermit/ckermit80.html#contents
10075 384. http://www.columbia.edu/kermit/ckermit.html
10076 385. http://www.columbia.edu/kermit/index.html
10077 386. http://www.columbia.edu/kermit/ckermit80.html#top
10078 387. http://www.columbia.edu/kermit/ckermit80.html#contents
10079 388. http://www.columbia.edu/kermit/ckermit.html
10080 389. http://www.columbia.edu/kermit/index.html
10081 390. http://www.columbia.edu/kermit/ckb2.htm
10082 391. http://www.columbia.edu/kermit/ckermit80.html#top
10083 392. http://www.columbia.edu/kermit/ckermit80.html#contents
10084 393. http://www.columbia.edu/kermit/ckermit.html
10085 394. http://www.columbia.edu/kermit/index.html
10086 395. http://www.columbia.edu/kermit/ckermit80.html#x4
10087 396. http://www.columbia.edu/kermit/ckermit80.html#x4
10088 397. http://www.columbia.edu/kermit/ckermit80.html#x8.12
10089 398. http://www.columbia.edu/kermit/ckermit80.html#x8.1
10090 399. http://www.columbia.edu/kermit/ckermit80.html#x12
10091 400. http://www.columbia.edu/kermit/ckermit80.html#x8.12
10092 401. http://www.columbia.edu/kermit/ckermit80.html#top
10093 402. http://www.columbia.edu/kermit/ckermit80.html#contents
10094 403. http://www.columbia.edu/kermit/ckermit.html
10095 404. http://www.columbia.edu/kermit/index.html
10096 405. http://www.columbia.edu/kermit/ckermit80.html#x8.14
10097 406. http://www.columbia.edu/kermit/ckermit80.html#top
10098 407. http://www.columbia.edu/kermit/ckermit80.html#contents
10099 408. http://www.columbia.edu/kermit/ckermit.html
10100 409. http://www.columbia.edu/kermit/index.html
10101 410. http://www.columbia.edu/kermit/ckermit80.html#x9
10102 411. http://www.columbia.edu/kermit/ckermit80.html#top
10103 412. http://www.columbia.edu/kermit/ckermit80.html#contents
10104 413. http://www.columbia.edu/kermit/ckermit.html
10105 414. http://www.columbia.edu/kermit/index.html
10106 415. http://www.columbia.edu/kermit/ckermit80.html#x8.6
10107 416. http://www.columbia.edu/kermit/ckermit80.html#top
10108 417. http://www.columbia.edu/kermit/ckermit80.html#contents
10109 418. http://www.columbia.edu/kermit/ckermit.html
10110 419. http://www.columbia.edu/kermit/index.html
10111 420. http://www.columbia.edu/kermit/ckermit80.html#top
10112 421. http://www.columbia.edu/kermit/ckermit80.html#contents
10113 422. http://www.columbia.edu/kermit/ckermit.html
10114 423. http://www.columbia.edu/kermit/index.html
10115 424. http://www.columbia.edu/kermit/ckermit80.html#top
10116 425. http://www.columbia.edu/kermit/ckermit80.html#contents
10117 426. http://www.columbia.edu/kermit/ckermit.html
10118 427. http://www.columbia.edu/kermit/index.html
10119 428. http://www.columbia.edu/kermit/ckermit80.html#fjoin
10120 429. http://www.columbia.edu/kermit/ckermit80.html#fsplit
10121 430. http://www.columbia.edu/kermit/ckermit80.html#x8.10
10122 431. http://www.columbia.edu/kermit/ckermit80.html#top
10123 432. http://www.columbia.edu/kermit/ckermit80.html#contents
10124 433. http://www.columbia.edu/kermit/ckermit.html
10125 434. http://www.columbia.edu/kermit/index.html
10126 435. http://www.columbia.edu/kermit/ckermit80.html#x9
10127 436. http://www.columbia.edu/kermit/ckermit80.html#x9
10128 437. http://www.columbia.edu/kermit/ckermit80.html#x9
10129 438. http://www.columbia.edu/kermit/ckermit80.html#x3
10130 439. http://www.columbia.edu/kermit/ckermit80.html#x3
10131 440. http://www.columbia.edu/kermit/ckermit80.html#x3.2
10132 441. http://www.columbia.edu/kermit/ckermit80.html#x3.2
10133 442. http://www.columbia.edu/kermit/ckermit80.html#x3.8
10134 443. http://www.columbia.edu/kermit/ckermit80.html#x3
10135 444. http://www.columbia.edu/kermit/ckermit80.html#x3
10136 445. http://www.columbia.edu/kermit/ckermit80.html#x3
10137 446. http://www.columbia.edu/kermit/ckermit80.html#x3.2
10138 447. http://www.columbia.edu/kermit/ckermit80.html#x3
10139 448. http://www.columbia.edu/kermit/ckermit80.html#x8.13
10140 449. http://www.columbia.edu/kermit/ckermit80.html#x8.13
10141 450. http://www.columbia.edu/kermit/ckermit80.html#x9
10142 451. http://www.columbia.edu/kermit/ckermit80.html#x8.10
10143 452. http://www.columbia.edu/kermit/ckermit80.html#x8.7.4
10144 453. http://www.columbia.edu/kermit/ckermit80.html#top
10145 454. http://www.columbia.edu/kermit/ckermit80.html#contents
10146 455. http://www.columbia.edu/kermit/ckermit.html
10147 456. http://www.columbia.edu/kermit/index.html
10148 457. http://www.columbia.edu/kermit/ckermit80.html#top
10149 458. http://www.columbia.edu/kermit/ckermit80.html#contents
10150 459. http://www.columbia.edu/kermit/ckermit.html
10151 460. http://www.columbia.edu/kermit/index.html
10152 461. http://www.columbia.edu/kermit/ckermit80.html#top
10153 462. http://www.columbia.edu/kermit/ckermit80.html#contents
10154 463. http://www.columbia.edu/kermit/ckermit.html
10155 464. http://www.columbia.edu/kermit/index.html
10156 465. http://www.columbia.edu/kermit/ckermit80.html#x8.7
10157 466. http://www.columbia.edu/kermit/ckermit80.html#top
10158 467. http://www.columbia.edu/kermit/ckermit80.html#contents
10159 468. http://www.columbia.edu/kermit/ckermit.html
10160 469. http://www.columbia.edu/kermit/index.html
10161 470. http://www.columbia.edu/kermit/ckermit80.html#scriptedit
10162 471. http://www.columbia.edu/kermit/ckermit80.html#top
10163 472. http://www.columbia.edu/kermit/ckermit80.html#contents
10164 473. http://www.columbia.edu/kermit/ckermit.html
10165 474. http://www.columbia.edu/kermit/index.html
10166 475. http://www.columbia.edu/kermit/ckermit80.html#top
10167 476. http://www.columbia.edu/kermit/ckermit80.html#contents
10168 477. http://www.columbia.edu/kermit/ckermit.html
10169 478. http://www.columbia.edu/kermit/index.html
10170 479. ftp://ftp.isi.edu/in-notes/rfc2822.txt
10171 480. ftp://ftp.isi.edu/in-notes/rfc2822.txt
10172 481. ftp://ftp.isi.edu/in-notes/rfc2822.txt
10173 482. ftp://ftp.isi.edu/in-notes/rfc2822.txt
10174 483. http://www.columbia.edu/kermit/ckermit80.html#top
10175 484. http://www.columbia.edu/kermit/ckermit80.html#contents
10176 485. http://www.columbia.edu/kermit/ckermit.html
10177 486. http://www.columbia.edu/kermit/index.html
10178 487. http://www.columbia.edu/kermit/ckermit80.html#x8.1
10179 488. http://www.columbia.edu/kermit/ckermit80.html#top
10180 489. http://www.columbia.edu/kermit/ckermit80.html#contents
10181 490. http://www.columbia.edu/kermit/ckermit.html
10182 491. http://www.columbia.edu/kermit/index.html
10183 492. http://www.columbia.edu/kermit/ckermit80.html#x8.2
10184 493. http://www.columbia.edu/kermit/ckermit80.html#top
10185 494. http://www.columbia.edu/kermit/ckermit80.html#contents
10186 495. http://www.columbia.edu/kermit/ckermit.html
10187 496. http://www.columbia.edu/kermit/index.html
10188 497. http://www.columbia.edu/kermit/ckermit80.html#x9.8
10189 498. http://www.columbia.edu/kermit/ckermit80.html#x9.8
10190 499. http://www.columbia.edu/kermit/ckermit80.html#x8.2
10191 500. http://www.columbia.edu/kermit/ckermit80.html#top
10192 501. http://www.columbia.edu/kermit/ckermit80.html#contents
10193 502. http://www.columbia.edu/kermit/ckermit.html
10194 503. http://www.columbia.edu/kermit/index.html
10195 504. http://www.columbia.edu/kermit/ckermit80.html#top
10196 505. http://www.columbia.edu/kermit/ckermit80.html#contents
10197 506. http://www.columbia.edu/kermit/ckermit.html
10198 507. http://www.columbia.edu/kermit/index.html
10199 508. http://www.columbia.edu/kermit/ckermit80.html#x9.8
10200 509. http://www.columbia.edu/kermit/ckermit80.html#top
10201 510. http://www.columbia.edu/kermit/ckermit80.html#contents
10202 511. http://www.columbia.edu/kermit/ckermit.html
10203 512. http://www.columbia.edu/kermit/index.html
10204 513. http://www.columbia.edu/kermit/ckermit80.html#x9.8
10205 514. http://www.columbia.edu/kermit/ckermit80.html#x9.8
10206 515. http://www.columbia.edu/kermit/ckermit80.html#x9.6
10207 516. http://www.columbia.edu/kermit/ckermit80.html#top
10208 517. http://www.columbia.edu/kermit/ckermit80.html#contents
10209 518. http://www.columbia.edu/kermit/ckermit.html
10210 519. http://www.columbia.edu/kermit/index.html
10211 520. http://www.columbia.edu/kermit/ckermit80.html#x9.8
10212 521. http://www.columbia.edu/kermit/ckermit80.html#x9.8
10213 522. http://www.columbia.edu/kermit/ckermit80.html#top
10214 523. http://www.columbia.edu/kermit/ckermit80.html#contents
10215 524. http://www.columbia.edu/kermit/ckermit.html
10216 525. http://www.columbia.edu/kermit/index.html
10217 526. http://www.columbia.edu/kermit/ckermit80.html#top
10218 527. http://www.columbia.edu/kermit/ckermit80.html#contents
10219 528. http://www.columbia.edu/kermit/ckermit.html
10220 529. http://www.columbia.edu/kermit/index.html
10221 530. http://www.columbia.edu/kermit/ckermit80.html#top
10222 531. http://www.columbia.edu/kermit/ckermit80.html#contents
10223 532. http://www.columbia.edu/kermit/ckermit.html
10224 533. http://www.columbia.edu/kermit/index.html
10225 534. mailto:thucdat@hotmail.com
10226 535. http://www.columbia.edu/kermit/ckermit80.html#x9.9.2
10227 536. http://www.columbia.edu/kermit/ckermit80.html#top
10228 537. http://www.columbia.edu/kermit/ckermit80.html#contents
10229 538. http://www.columbia.edu/kermit/ckermit.html
10230 539. http://www.columbia.edu/kermit/index.html
10231 540. http://www.columbia.edu/kermit/ckermit80.html#top
10232 541. http://www.columbia.edu/kermit/ckermit80.html#contents
10233 542. http://www.columbia.edu/kermit/ckermit.html
10234 543. http://www.columbia.edu/kermit/index.html
10235 544. http://www.columbia.edu/kermit/ckermit80.html#top
10236 545. http://www.columbia.edu/kermit/ckermit80.html#contents
10237 546. http://www.columbia.edu/kermit/ckermit.html
10238 547. http://www.columbia.edu/kermit/index.html
10239 548. http://www.columbia.edu/kermit/ckermit80.html#x9.2
10240 549. http://www.columbia.edu/kermit/ckermit80.html#top
10241 550. http://www.columbia.edu/kermit/ckermit80.html#contents
10242 551. http://www.columbia.edu/kermit/ckermit.html
10243 552. http://www.columbia.edu/kermit/index.html
10244 553. http://www.columbia.edu/kermit/ckermit80.html#x4
10245 554. http://www.columbia.edu/kermit/ckermit80.html#x4
10246 555. http://www.columbia.edu/kermit/ckermit80.html#top
10247 556. http://www.columbia.edu/kermit/ckermit80.html#contents
10248 557. http://www.columbia.edu/kermit/ckermit.html
10249 558. http://www.columbia.edu/kermit/index.html
10250 559. http://www.columbia.edu/kermit/ckermit80.html#top
10251 560. http://www.columbia.edu/kermit/ckermit80.html#contents
10252 561. http://www.columbia.edu/kermit/ckermit.html
10253 562. http://www.columbia.edu/kermit/index.html
10254 563. http://www.columbia.edu/kermit/ckermit80.html#top
10255 564. http://www.columbia.edu/kermit/ckermit80.html#contents
10256 565. http://www.columbia.edu/kermit/ckermit.html
10257 566. http://www.columbia.edu/kermit/index.html
10258 567. http://www.columbia.edu/kermit/ckermit80.html#x4
10259 568. http://www.columbia.edu/kermit/ckermit80.html#x3.7
10260 569. http://www.columbia.edu/kermit/ckermit80.html#x3.7
10261 570. http://www.columbia.edu/kermit/ckermit80.html#top
10262 571. http://www.columbia.edu/kermit/ckermit80.html#contents
10263 572. http://www.columbia.edu/kermit/ckermit.html
10264 573. http://www.columbia.edu/kermit/index.html
10265 574. ftp://ftp.isi.edu/in-notes/rfc2217.txt
10266 575. http://www.columbia.edu/kermit/ckermit80.html#top
10267 576. http://www.columbia.edu/kermit/ckermit80.html#contents
10268 577. ftp://kermit.columbia.edu/kermit/sredird/
10269 578. http://www.columbia.edu/kermit/ckermit.html
10270 579. http://www.columbia.edu/kermit/index.html
10271 580. http://www.columbia.edu/kermit/ckermi70.htm#x4.22
10272 581. http://www.columbia.edu/kermit/ckermit80.html#top
10273 582. http://www.columbia.edu/kermit/ckermit80.html#contents
10274 583. http://www.columbia.edu/kermit/ckermit.html
10275 584. http://www.columbia.edu/kermit/index.html
10276 585. http://www.columbia.edu/kermit/ckermit80.html#x3.1.3
10277 586. http://www.columbia.edu/kermit/cuiksd.html
10278 587. http://www.columbia.edu/kermit/ckermit80.html#top
10279 588. http://www.columbia.edu/kermit/ckermit80.html#contents
10280 589. http://www.columbia.edu/kermit/ckermit.html
10281 590. http://www.columbia.edu/kermit/index.html
10282 591. http://www.columbia.edu/kermit/ckermit80.html#top
10283 592. http://www.columbia.edu/kermit/ckermit80.html#contents
10284 593. http://www.columbia.edu/kermit/ckermit.html
10285 594. http://www.columbia.edu/kermit/index.html
10286 595. http://www.columbia.edu/kermit/index.html