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

通讯/手机编程

开发平台:

Windows_Unix

  1. 4.6. Starting the Remote Kermit Server Automatically
  2. As noted on pages 275-276 of "Using C-Kermit" 2nd edition, you can have Kermit
  3. send "kermit receive" commands automatically when it is in local mode and you
  4. give a SEND or similar command, to start the remote Kermit receiver in case it
  5. is not already started.  The "kermit receive" commands are specified by:
  6.   SET PROTOCOL KERMIT <binary-receive-command> <text-receive-command>
  7. As of version 7.0, a Kermit protocol option has been added to send a string
  8. to the host in advance of any Kermit packets when you give a GET-class or
  9. REMOTE command.  This will switch the remote C-Kermit into the appropriate
  10. mode or, if the remote system is at a system command (shell) prompt,
  11. execute the string on the remote system.  The new syntax of the SET PROTOCOL
  12. KERMIT command is:
  13.   SET PROTOCOL KERMIT [ <s1> [ <s2> [ <s3> ] ] ]
  14. where:
  15.        Default         Meaning
  16.   s1  {kermit -ir}     Remote "kermit receive in binary mode" command.
  17.   s2  {kermit -r}      Remote "kermit receive in text mode" command.
  18.   s3  {kermit -x}      Remote "start kermit server" command.
  19. NOTE: If the remote Kermit is 6.0, the following are recommended for fast
  20. startup and high-performance file transfer (see Appendix I in "Using
  21. C-Kermit", second Edition, for command-line options):
  22.   s1   kermit -YQir   (Kermit receive binary, skip init file, fast.)
  23.   s2   kermit -YQTr   (Kermit receive text, skip init file, fast.)
  24.   s3   kermit -YQx    (Kermit server, skip init file, fast.)
  25. If the remote is C-Kermit 7.0 or later, change the -x option (enter server
  26. mode) to -O (uppercase letter O), which means "enter server mode for One
  27. transaction only); this way, it is not stuck in server after the transfer.
  28. Also note that the Q is redundant in version 7.0, since fast Kermit protocol
  29. settings are now the default.
  30. Note that in case the C-Kermit executable is called "wermit" or "ckermit"
  31. you can change "kermit" in the strings above to "wermit" or "ckermit" and
  32. C-Kermit 7.0 or later will recognize these as synonyms for "kermit", in case
  33. it is at its command prompt when one of these strings is sent to it.
  34. 4.7. File-Transfer Command Switches
  35. Over the years, various new methods of transferring a file have accumulated,
  36. until we had, in addition to the SEND command, also MOVE (send and then
  37. delete), MAIL (send as email), REMOTE PRINT (send to be printed), CSEND (send
  38. the output of a command), PSEND (send a part of a file), BSEND (send in binary
  39. mode), RESEND (resume an interrupted SEND), etc etc.  Similarly: GET, REGET,
  40. CGET, RETRIEVE, and so on.
  41. Not only is it confusing to have different names for these commands, many of
  42. which are not real words, but this also does not allow all combinations, like
  43. "send a file as mail, then delete it".
  44. In C-Kermit 7.0, the SEND, GET, and RECEIVE commands were restructured to
  45. accept modifier switches (switches are explained in Section 1.5).
  46. 4.7.1. SEND Command Switches
  47. Without switches, the SEND command still works exactly as before:
  48.   send oofa.txt      ; send a single file
  49.   send oofa.*        ; send multiple files
  50.   send oofa.txt x.x  ; send oofa.txt as x.x (tell receiver its name is x.x)
  51.   send               ; send from SEND-LIST
  52. But now the following modifier switches may be included between "send" and the
  53. filename.  Zero, one, two, or more switches may be included in any combination
  54. that makes sense.  Switch names (such as /BINARY) can be abbreviated, just
  55. like any other keywords.  Most of these switches work only when using Kermit
  56. protocol (/TEXT and /BINARY are the exceptions).
  57.   /AFTER:date-time
  58.     Specifies that only those files modified (or, in VMS, created) after
  59.     the given date-time (see section 1.6) are to be sent.  Examples:
  60.       send /text /after:{2-Feb-1997 10:28:30} *.txt
  61.       send /text /after:fdate(oofa.txt) *.txt
  62.     Synonym: /SINCE.
  63.   /ARRAY:arrayname
  64.     Specifies that instead of sending a file, C-Kermit is to send the
  65.     contents of the given array.  Since an array does not have a filename,
  66.     you should include an /AS-NAME switch to specify the name under which
  67.     the array is to be sent (if you do not, the name "_array_x_" is used,
  68.     where 'x' is replaced by the array designator).  See section 7.10 for
  69.     array-name syntax.  As noted in that section, you can also include a
  70.     range to have a segment of the array sent, rather than the whole
  71.     thing; for example: "send /array:&a[100:199]".  It is strongly
  72.     recommended that you accompany the /ARRAY switch with a /TEXT or
  73.     /BINARY switch to force the desired transfer mode, since otherwise the
  74.     various automatic mechanisms might switch to binary mode when you
  75.     really wanted text, or vice versa.  In text mode a line terminator is
  76.     added to the end of each array element, but not in binary mode.  For
  77.     details and examples see Section 7.10.11.
  78.   /AS-NAME:text
  79.     Specifies "text" as the name to send the file under.
  80.     You can also still specify the as-name as the second filename on the
  81.     SEND command line.  The following two commands are equivalent:
  82.       send oofa.txt oofa.new
  83.       send /as:oofa.new oofa.txt
  84.   /BEFORE:date-time
  85.     Specifies that only those files modified (or, in VMS, created)
  86.     before the given date-time (section 1.6) are to be sent.
  87.   /BINARY
  88.     Performs this transfer in binary mode without affecting the global
  89.     transfer mode, overriding not only the FILE TYPE and TRANSFER MODE
  90.     settings, but also the FILE PATTERN setting, but for this SEND command
  91.     only.  In other words, SEND /BINARY means what it says: send the file
  92.     in binary mode, regardless of any other settings.  Example:
  93.       set file type text      ; Set global transfer mode to text
  94.       send /binary oofa.zip   ; Send a file in binary
  95.       send oofa.txt           ; This one is sent in text mode
  96.   /COMMAND
  97.     SEND /COMMAND is equivalent to CSEND (section 4.2.2) -- it says to send
  98.     the output from a command, rather than the contents of a file.
  99.     The first "filename" on the SEND command line is interpreted as the name
  100.     of a command; the second (if any) is the as-name.  Examples:
  101.       send /command {grep Sunday oofa.txt} sunday.txt
  102.       send /as-name:sunday.txt /command {grep Sunday oofa.txt}
  103.       send /bin /command {tar cf - . | gzip -c} {!gunzip -c | tar xf -}
  104.   /DELETE
  105.     Deletes the file (or each file in the group) after it has been sent
  106.     successfully (but does not delete it if it was not sent successfully).
  107.     SEND /DELETE is equivalent to MOVE.  Has no effect when used with
  108.     /COMMAND.  Example:
  109.       send /delete *.log
  110.   /DOTFILES
  111.     (UNIX and OS-9 only)  Normally files whose names begin with "." are
  112.     skipped when matching wildcards that do not also beging with ".".
  113.     Include /DOTFILES to force these files to be included too.
  114.   /RECURSIVE
  115.     Descend the through the directory tree when locating files to send.
  116.     Automatically sets /PATHNAMES:RELATIVE.  Explained in section 4.11.
  117.   /EXCEPT:<pattern>
  118.     See Section 1.5.4.
  119.   /NOBACKUP
  120.     This means to skip backup files when sending, even if they match the
  121.     SEND file specification.  This is equivalent to using SEND /EXCEPT and
  122.     including *.~[0-9]*~ in the exception list (or *.~*~ if Kermit was built
  123.     without pattern-matching support; see Section 4.9.1).  Including this
  124.     switch is equivalent to giving SET SEND BACKUP OFF (Section 4.0.6) prior
  125.     to SEND, except its effect is local to the SEND command with which it was
  126.     given.
  127.   /NODOTFILES
  128.     The opposite of /DOTFILES (q.v.)
  129.   /FILENAMES:{CONVERTED,LITERAL}
  130.     Use this switch to override the current global SET FILE NAMES setting
  131.     for this transfer only.
  132.   /FILTER:<command>
  133.     This specifies a filter to pass the file through before sending it.
  134.     See the section on file-transfer pipes and filters.  The /FILTER switch
  135.     applies only to the file-transfer command it is given with; it does not
  136.     affect the global SEND FILTER setting, if any.
  137.   /IMAGE
  138.     VMS: Sends in image mode.  Non-VMS: same as /BINARY.
  139.   /LABELED
  140.     VMS and OS/2 only: Sends in labeled mode.
  141.   /LARGER-THAN:number
  142.     Specifies that only those files that are longer than the given number
  143.     of bytes are to be sent.
  144.   /LISTFILE:filename
  145.     Specifies that the files to be sent are listed in a file with the given
  146.     filename.  The file contains one filename per line.  These filenames are
  147.     not checked in any way; each filename is taken and does not use or
  148.     depend on any Kermit-specific syntax.  In particular, backslashes are
  149.     not treated specially, leading and trailing spaces are not stripped,
  150.     etc.  However, if a filename contains wildcards, they are expanded.
  151.     Example: If a file named files.txt contains the following lines:
  152.       blah.txt
  153.       oofa*
  154.       x.x
  155.     (but without leading or trailing spaces), then the C-Kermit command
  156.     "send /listfile:files.txt" will send the files blah.txt, x.x, and all
  157.     files whose names start with "oofa", assuming the files exist and are
  158.     readable.  The /LISTFILE switch, can, of course, be used with other
  159.     switches when it makes sense, for example, /EXCEPT, /BINARY, /AFTER,
  160.     /SMALLER, /MOVE-TO, /DELETE, /AS-NAME with a template, etc.
  161.   /MAIL:address
  162.     Sends the file as e-mail to the given address or addresses.
  163.     "send /mail:address filename" is equivalent to "mail filename address".
  164.     You can include multiple addresses separated by commas.  Examples:
  165.       send /mail:kermit-support@columbia.edu packet.log
  166.       send /mail:cmg,fdc,jrd oofa.txt
  167.     As with any switch argument, if the address or address list contains any
  168.     spaces, you must enclose it in braces.  The format of the addresses must
  169.     agree with that understood by the mail-sending program on the receiver's
  170.     computer.
  171.   /MOVE-TO:directory-name
  172.     Specifies that after each (or the only) source file is sent successfully,
  173.     and ONLY if it is sent successfully, it should be moved to the named
  174.     directory.  If the directory name contains spaces, enclose it in braces.
  175.     If the directory does not exist, it is created if possible; if it can't be
  176.     created, the command fails and an error message is printed.  Example:
  177.       send /text /move-to:/users/olga/backup/ *.txt
  178.   /NOT-AFTER:date-time
  179.     Specifies that only those files modified at or before the given date and
  180.     time are to be sent.
  181.   /NOT-BEFORE:date-time
  182.     Specifies that only those files modified at or after the given date and
  183.     time are to be sent.
  184.   /PATHNAMES:{OFF,ABSOLUTE,RELATIVE}
  185.     Use this switch to override the current global SET SEND PATHNAMES setting
  186.     for this transfer only.  /PATHNAMES:ABSOLUTE or RELATIVE also sets
  187.     /FILENAMES:LITERAL (also for this transfer only) since pathnames are not
  188.     sent otherwise.
  189.   /RENAME-TO:text
  190.     Specifies that after the (or each) source file is sent successfully, and
  191.     ONLY if it is sent successfully, it should be renamed to the name given.
  192.     If the name contains spaces, enclose it in braces.  If a file group is
  193.     being sent, then the "text" must contain a variable reference such as
  194.     v(filename) (see section 4.1).  Example:
  195.       send /rename-to:ok_v(filename) *.*
  196.     This sends each file in the current directory and if it was sent
  197.     successfully, changes its name to begin with "ok_".
  198.   /SMALLER-THAN:number
  199.     Specifies that only those files that are smaller than the given number
  200.     of bytes are to be sent.
  201.   /SUBJECT:text
  202.     Subject for email.  Actually, this is just a synonym for /AS-NAME.  If the
  203.     text includes spaces, you must enclose it in braces.  If you don't specify
  204.     a subject (or as-name), the name of the file is used as the subject.
  205.     Example:
  206.       send /mail:kermit-support@columbia.edu /subj:{As requested} packet.log
  207.   /PRINT:options
  208.     Sends the file to be printed, optionally specifying options for the
  209.     printer.  Equivalent to REMOTE PRINT filename options.  Examples:
  210.       send /print oofa.txt              ; No options.
  211.       send /print:/copies=3 oofa.txt    ; "/copies=3" is a VMS PRINT switch.
  212.       send /print:-#3 oofa.txt          ; "-#3" is a UNIX lpr switch.
  213.   /PROTOCOL:name
  214.     Uses the given protocol to send the file (Kermit, Zmodem, etc) for this
  215.     transfer without changing global protocol.  Only available in Kermit 95,
  216.     UNIX, and OS-9.  Example:
  217.       set protocol kermit               ; Set global protocol
  218.       send /proto:zmodem /bin oofa.zip  ; Send just this file with Zmodem
  219.       send oofa.txt                     ; This file is sent with Kermit
  220.   /QUIET
  221.     When sending in local mode, this suppresses the file-transfer display.
  222.   /RECOVER
  223.     Used to recover from a previously interrupted transfer; SEND /RECOVER is
  224.     equivalent to RESEND.  Recovery only works in binary mode; SEND /RECOVER
  225.     and RESEND include an implied /BINARY switch.  Even then, recovery will
  226.     successful only if (a) the original (interrupted) transfer was also in
  227.     binary mode, or (b) if it was in text mode, the two Kermit programs run on
  228.     platforms where text-mode transfers are not length-changing.
  229.   /STARTING:number
  230.     Starts sending the file from the given byte position.
  231.     SEND /STARTING:n filename is equivalent to PSEND filename n.
  232.   /TEXT
  233.     Performs this transfer in text mode without affecting the global
  234.     transfer mode, overriding not only the FILE TYPE and TRANSFER MODE
  235.     settings, but also the FILE PATTERN setting, for this SEND command
  236.     only.  In other words, SEND /TEXT really send the file in text mode,
  237.     regardless of any other settings or negotiations.
  238. About mail...  Refer to section 4.7.1.  The same rules apply as for file
  239. transfer.  If you are mailing multiple files, you can't use an as-name (in
  240. this case, a subject) unless it contains replacement variables like
  241. v(filenum).  For example, if you:
  242.   send /mail:somebody@xyz.com *.txt
  243. Then each file will arrive as a separate email message with its name as the
  244. subject.  But if you:
  245.   send /mail:somebody@xyz.com /subject:{Here is a file} *.txt
  246. Then each file message will have the same subject, which is probably not what
  247. you want.  You can get around this with constructions like:
  248.   send /mail:somebody@xyz.com /subject:{Here is v(filename)} *.txt
  249. which embed the filename in the subject.
  250. The MOVE, CSEND, MAIL, and RESEND commands now also accept the same switches.
  251. And the switches are also operative when sending from a SEND-LIST (see "Using
  252. C-Kermit", 2nd Ed, pp.191-192), so, for example, it is now possible to SEND
  253. /PRINT or SEND /MAIL from a SEND-LIST.
  254. The MSEND and MMOVE commands also take switches, but not all of them.  With
  255. these commands, which take an arbitrary list of filespecs, you can use
  256. /BINARY, /DELETE, /MAIL, /PRINT, /PROTOCOL, /QUIET, /RECOVER, and /TEXT (and
  257. /IMAGE or /LABELED, depending on the platform).  MMOVE is equivalent to MSEND
  258. /DELETE.  (If you want to send a group of files, but in mixed transfer modes
  259. with per-file as-names, use ADD SEND-LIST and then SEND.)
  260. The MSEND/MMOVE switches come before the filenames, and apply to all of them:
  261.   msend /print /text *.log oofa.txt /etc/motd
  262. If you type any of these commands (SEND, CSEND, MSEND, etc) followed by a
  263. question mark (?), you will see a list of the switches you can use.  If you
  264. want to see a list of filenames, you'll need to type something like "send ./?"
  265. (UNIX, OS/2, Windows, etc), or "send []?" (VMS), etc.  Of course, you can also
  266. type pieces of a filename (anything that does not start with "/") and then "?"
  267. to get a list of filenames that start that way; e.g. "send x.?"  still works
  268. as before.
  269. In UNIX, where "/" is also the directory separator, there is usually no
  270. ambiguity between a fully-specified pathname and a switch, except when a file
  271. in the root directory has the same name as a switch (as noted in section 1.5):
  272.   send /etc/motd                        ; Works as expected
  273.   send /command                         ; ???
  274. The second example interprets "/command" as a switch, not a filename.  To
  275. actually send a file called "command" in the root directory, use:
  276.   send {/command}
  277. or other system-dependent forms such as //command, /./command, c:/command,
  278. etc, or cd to / and then "send command".
  279. 4.7.2. GET Command Switches
  280. Without switches, the GET command still works about the same as before:
  281.   get oofa.txt                          ; GET a single file
  282.   get oofa.*                            ; GET multiple files
  283. However, the mechanism for including an "as-name" has changed.  Previously,
  284. in order to include an as-name, you were required to use the "multiline" form
  285. of GET:
  286.   get
  287.   <remote-filespec>
  288.   <local-name>
  289. This was because the remote filespec might contain spaces, and so there would
  290. be no good way of telling where it ended and where the local name began, e.g:
  291.   get profile exec a foo
  292. But now since we can use {braces} for grouping, we don't need the multiline
  293. GET form any more, and in fact, support for it has been removed.  If you give
  294. a GET command by itself on a line, it fails and an error message is printed.
  295. The new form is:
  296.   GET [ switches... ] remote-name [ local-name ]
  297. If the remote-name or local-name contains spaces, they must be enclosed in
  298. braces:
  299.   get {profile exec a} foo
  300.   get oofa.txt {~/My Files/Oofa text}
  301. If you want to give a list of remote file specifications, use the MGET
  302. command:
  303.   MGET [ switches... ] remote-name [ remote-name [ remote-name ... ] ]
  304. Now you can also include modifier switches between "get" or "mget" and the
  305. remote-name; most of the same switches as SEND:
  306.   /AS-NAME:text
  307.     Specifies "text" as the name to store the incoming file under.  (This
  308.     switch is not available for MGET.)  You can also still specify the
  309.     as-name as the second filename on the GET command line.  The following
  310.     two commands are equivalent:
  311.       get oofa.txt oofa.new
  312.       get /as:oofa.new oofa.txt
  313.   /BINARY
  314.     Tells the server to send the given file(s) in binary mode without
  315.     affecting the global transfer mode.  Example:
  316.       set file type text      ; Set global transfer mode to text
  317.       get /binary oofa.zip    ; get a file in binary mode
  318.       get oofa.txt            ; This one is transferred in text mode
  319.     Or, perhaps more to the point:
  320.       get /binary foo.txt     ; where "*.txt" is a text-pattern
  321.     This works only if the server is C-Kermit 7.0 or later or K95 1.1.18
  322.     or later.
  323.   /COMMAND
  324.     GET /COMMAND is equivalent to CGET (section 4.2.2) -- it says to receive
  325.     the file into the standard input of a command, rather than saving it on
  326.     disk.  The /AS-NAME or the second "filename" on the GET command line is
  327.     interpreted as the name of a command.  Examples:
  328.       get /command sunday.txt {grep Sunday oofa.txt}
  329.       get /command /as-name:{grep Sunday oofa.txt} sunday.txt
  330.       get /bin /command {!gunzip -c | tar xf -} {tar cf - . | gzip -c}
  331.   /DELETE
  332.     Asks the Kermit server to delete the file (or each file in the group)
  333.     after it has been transferred successfully (but not to delete it if it
  334.     was not sent successfully).  GET /DELETE is equivalent to RETRIEVE.
  335.     Example:
  336.       get /delete *.log
  337.   /EXCEPT:pattern
  338.     Specifies that any files whose names match the pattern, which can be a
  339.     regular filename, or may contain "*" and/or "?" metacharacters,
  340.     are to be refused upon arrival.  To specify multiple patterns (up to 8),
  341.     use outer braces around the group, and inner braces around each pattern:
  342.       /EXCEPT:{{pattern1}{pattern2}...}
  343.     See the description of SEND /EXCEPT in Section 4.7.1 for examples, etc.
  344.     Refusal is accomplished using the Attribute Rejection mechanism (reason
  345.     "name"), which works only when Attribute packets have been successfully
  346.     negotiated.
  347.   /FILENAMES:{CONVERTED,LITERAL}
  348.     Use this switch to override the current global SET FILE NAMES setting
  349.     for this transfer only.
  350.   /FILTER:<command>
  351.     This specifies a filter to pass the incoming file through before writing
  352.     to disk.  See the section on file-transfer pipes and filters.  The /FILTER
  353.     switch applies only to the file-transfer command it is given with; it does
  354.     not affect the global RECEIVE FILTER setting, if any.
  355.   /IMAGE
  356.     VMS: Transfer in image mode.  Non-VMS: same as /BINARY.
  357.   /LABELED
  358.     VMS and OS/2 only: Specifies labeled transfer mode.
  359.   /MOVE-TO:<directory>
  360.     This tells C-Kermit to move each file that is successfully received to
  361.     the given directory.  Files that are not successfully received are not
  362.     moved.  By default, files are not moved.
  363.   /PATHNAMES:{OFF,ABSOLUTE,RELATIVE,AUTO}
  364.     Use this switch to override the current global SET RECEIVE PATHNAMES
  365.     setting for this transfer only.  /PATHNAMES:ABSOLUTE or RELATIVE also sets
  366.     /FILENAMES:LITERAL (also for this transfer only) since incoming pathnames
  367.     would not be treated as pathnames otherwise.  See Section 4.10.
  368.   /QUIET
  369.     When sending in local mode, this suppresses the file-transfer display.
  370.   /RECOVER
  371.     Used to recover from a previously interrupted transfer; GET /RECOVER
  372.     is equivalent to REGET.  Recovery only works in binary mode; SEND /RECOVER
  373.     and RESEND include an implied /BINARY switch.  Even then, recovery will
  374.     successful only if (a) the original (interrupted) transfer was also in
  375.     binary mode, or (b) if it was in text mode, the two Kermit programs run
  376.     on platforms where text-mode transfers are not length-changing.
  377.   /RECURSIVE
  378.     Tells the server that the GET file specification applies recursively.
  379.     This switch also automatically sets /PATHNAMES:RELATIVE in both the server
  380.     AND the client.  When used in conjunction with /DELETE, this "moves" a
  381.     directory tree from the server's computer to the client's computer (except
  382.     that only regular files are deleted from the server's computer, not
  383.     directories; thus the original directories will be left, but will contain
  384.     no files).  Note that all servers that support /RECURSIVE do not
  385.     necessarily do so in combination with other switches, such as /RECOVER.
  386.     (Servers that do include C-Kermit 7.0 and later, K95 1.1.18 and later.)
  387.   /RENAME-TO:<string>
  388.     This tells C-Kermit to rename each file that is successfully received to
  389.     the given string.  Files that are not successfully received are not
  390.     renamed.  By default, files are not renamed.  The <string> can be a
  391.     literal string, which is appropriate when only one file is being received,
  392.     or it can contain one or more variables that are to be evaluated at the
  393.     time each file is received, such as v(filename), v(filenumber),
  394.     v(ntime), v(pid), v(user), etc.  WARNING: if you give a literal string
  395.     and more than one file arrives, each incoming file will be given the same
  396.     name (but SET FILE COLLISION BACKUP or RENAME can be used to keep the
  397.     incoming files from overwriting each other).
  398.   /TEXT
  399.     Tells the server to perform this transfer in text mode without affecting
  400.     its global transfer mode.  See /BINARY for additional info.
  401. The /MAIL and /PRINT options are not available, but you can use /COMMAND
  402. to achieve the same effect, as in these UNIX examples:
  403.   get /command oofa.txt {mail kermit@columbia.edu}
  404.   get /command oofa.txt lpr
  405. In OS/2 or Windows, you can GET and print like this:
  406.   get oofa.txt prn
  407. The CGET, REGET, RETRIEVE commands also accept the same switches as GET.  CGET
  408. automatically sets /COMMAND; REGET automatically sets /RECOVER and /BINARY,
  409. and RETRIEVE automatically sets /DELETE.
  410. 4.7.3. RECEIVE Command Switches
  411. Without switches, the RECEIVE command still works as before:
  412.   receive            ; Receives files under their own names
  413.   receive /tmp       ; Ditto, but into the /tmp directory
  414.   r                  ; Same as "receive"
  415.   receive foo.txt    ; Receives a file and renames to foo.txt
  416. Now you can also include modifier switches may be included between "receive"
  417. and the as-name; most of the same switches as GET:
  418.   /AS-NAME:text
  419.     Specifies "text" as the name to store the incoming file under.
  420.     You can also still specify the as-name as a filename on the
  421.     command line.  The following two commands are equivalent:
  422.       r oofa.new
  423.       r /as:oofa.new
  424.   /BINARY
  425.     Performs this transfer in binary mode without affecting the global
  426.     transfer mode.  NOTE: This does not override the incoming filetype (as
  427.     it does with GET), so this switch is useful only if ATTRIBUTE TYPE is
  428.     OFF, or if the other Kermit does not send a TYPE (text or binary)
  429.     attribute.  In any case, it has no affect whatsoever on the file sender.
  430.   /COMMAND
  431.     RECEIVE /COMMAND is equivalent to CRECEIVE (section 4.2.2) -- it says to
  432.     receive the file into the standard input of a command, rather than saving
  433.     it on disk.  The /AS-NAME or the "filename" on the RECEIVE command line
  434.     is interpreted as the name of a command.
  435.       r /command {grep Sunday oofa.txt}
  436.       r /command /as-name:{grep Sunday oofa.txt}
  437.       r /bin /command {tar cf - . | gzip -c}
  438.   /EXCEPT:pattern
  439.     Specifies that any files whose names match the pattern, which can be a
  440.     regular filename, or may contain "*" and/or "?" metacharacters,
  441.     are to be refused upon arrival.  To specify multiple patterns (up to 8),
  442.     use outer braces around the group, and inner braces around each pattern:
  443.       /EXCEPT:{{pattern1}{pattern2}...}
  444.     See the description of SEND /EXCEPT in Section 4.7.1 for examples, etc.
  445.     Refusal is accomplished using the Attribute Rejection mechanism (reason
  446.     "name"), which works only when Attribute packets have been successfully
  447.     negotiated.
  448.   /FILENAMES:{CONVERTED,LITERAL}
  449.     Use this switch to override the current global SET FILE NAMES setting
  450.     for this transfer only.
  451.   /FILENAMES:{CONVERTED,LITERAL}
  452.     Use this switch to override the current global SET FILE NAMES setting
  453.     for this transfer only.
  454.   /FILTER:<command>
  455.     This specifies a filter to pass the incoming file through before writing
  456.     to disk.  See the section on file-transfer pipes and filters.  The /FILTER
  457.     switch applies only to the file-transfer command it is given with; it does
  458.     not affect the global RECEIVE FILTER setting, if any.
  459.   /IMAGE
  460.     VMS: Transfer in image mode.  Non-VMS: same as /BINARY.
  461.     See comments under RECEIVE /BINARY.
  462.   /LABELED
  463.     VMS and OS/2 only: Specifies labeled transfer mode.
  464.     See comments under RECEIVE /BINARY.
  465.   /MOVE-TO:<directory>
  466.     This tells C-Kermit to move each file that is successfully received to
  467.     the given directory.  Files that are not successfully received are not
  468.     moved.  By default, files are not moved.
  469.   /PATHNAMES:{ABSOLUTE,RELATIVE,OFF,AUTO}
  470.     Use this switch to override the current global SET RECEIVE PATHNAMES
  471.     setting for this transfer only.  See Section 4.10.
  472.   /RECURSIVE
  473.     When used with the RECEIVE command, /RECURSIVE is simply a synonym
  474.     for /PATHNAMES:RELATIVE.
  475.   /RENAME-TO:<string>
  476.     This tells C-Kermit to rename each file that is successfully received to
  477.     the given string.  Files that are not successfully received are not
  478.     renamed.  By default, files are not renamed.  The <string> can be a
  479.     literal string, which is appropriate when only one file is being received,
  480.     or it can contain one or more variables that are to be evaluated at the
  481.     time each file is received, such as v(filename), v(filenumber),
  482.     v(ntime), v(pid), v(user), etc.  WARNING: if you give a literal string
  483.     and more than one file arrives, each incoming file will be given the same
  484.     name (but SET FILE COLLISION BACKUP or RENAME can be used to keep the
  485.     incoming files from overwriting each other).
  486.   /QUIET
  487.     When receiving in local mode, this suppresses the file-transfer display.
  488.   /TEXT
  489.     Receives in text mode without affecting the global transfer mode.  See
  490.     comments under RECEIVE /BINARY.
  491. The /MAIL and /PRINT options are not available, but you can use /COMMAND
  492. to achieve the same effect, as in these UNIX examples:
  493.   r /command {mail kermit@columbia.edu}
  494.   r /command lpr
  495. In OS/2 or Windows, you can RECEIVE and print like this:
  496.   receive prn
  497. The CRECEIVE command now also accepts the same switches.
  498. 4.8. Kermit Protocol Improvements
  499. 4.8.1. Multiple Attribute Packets
  500. C-Kermit 7.0 now sends more than one Attribute packet if a file's attributes
  501. do not fit into a single packet of the negotiated length.  If a particular
  502. attribute (such as file creation date-time) does not fit within the negotiated
  503. length (which will only happen when the negotiated length is around 20 or
  504. less), that attribute is not sent at all.
  505. 4.8.2. Very Short Packets
  506. There are certain situations where extremely short packets must be used;
  507. 20 or 30 bytes at most.  This can happen when one or more devices along the
  508. communication path have very small buffers and lack an effective means of
  509. flow control.  Examples are sometimes cited involving radio modems.
  510. When the maximum packet length is shorter than certain packets that would be
  511. sent, those packets are either truncated or else broken up into multiple
  512. packets.  Specifically:
  513.  1. Parameter negotiation packets (I, S, and their ACKs) are truncated to
  514.     the negotiated length.  Any parameters that do not fit are reset to
  515.     their default values.  There is no provision in the Kermit protocol for
  516.     fragmentation and reassembly of parameter strings.
  517.  2. File header packets (containing the filename) are simply truncated.
  518.     There is no provision in the Kermit protocol for fragmentation and
  519.     reassembly of filenames.
  520.  3. Attribute packets are fragmented and reassembled as described in 4.8.1
  521.     without loss of data, except in case a field will not fit at all in
  522.     the negotiated length (the longest attribute is usually the date and
  523.     time of file creation/modification) because of the rule that attributes
  524.     may not be broken across packets.
  525.  4. Data packets and other packets are unaffected -- they can be as short
  526.     as they need to be, within reason.
  527. 4.9. Wildcard / File Group Expansion
  528. "Wildcard" refers to the notation used in filenames to specify a group of
  529. files by pattern matching.
  530. 4.9.1. In UNIX C-Kermit
  531. Prior to C-Kermit 7.0, C-Kermit was capable of expanding wildcard strings
  532. containing only the "metacharacters" '*' and '?':
  533. * Matches any sequence of zero or more characters.  For example: "ck*.c"
  534.   matches all files whose names start with "ck" and end with ".c", including
  535.   "ck.c".
  536. ? Matches any single character.  For example, "ck?.c" matches all files whose
  537.   names are exactly 5 characters long and start with "ck" and end with ".c".
  538.   When typing commands at the prompt, you must precede any question mark to
  539.   be used for matching by a backslash () to override the normal function of
  540.   question mark, which is providing menus and file lists.
  541. C-Kermit 7.0 adds the additional features that users of ksh, csh, and bash
  542. are accustomed to:
  543. [abc]
  544.   Square brackets enclosing a list of characters matches any single
  545.   character in the list.  Example: ckuusr.[ch] matches ckuusr.c and ckuusr.h.
  546. [a-z]
  547.   Square brackets enclosing a range of characters; the hyphen separates the
  548.   low and high elements of the range.  For example, [a-z] matches any
  549.   character from a to z.
  550. [acdm-z]
  551.   Lists and ranges may be combined.  This example matches a, c, d, or m
  552.   through z.
  553. {string1,string2,...}
  554.   Braces enclose a list of strings to be matched.  For example:
  555.   ck{ufio,vcon,cmai}.c matches ckufio.c, ckvcon.c, or ckcmai.c.  The strings
  556.   may themselves contain metacharacters, bracket lists, or indeed, other
  557.   lists of strings, but (when matching filenames) they may not contain
  558.   directory separators.
  559. Thus, the metacharacters in filenames (and in any other field that can be a
  560. pattern, such as the IF MATCH pattern, SEND or GET exception lists, etc) are:
  561.  * ? [ {
  562. And within braces only, comma (,) is a metacharacter.
  563. To include a metacharacter in a pattern literally, precede it with a backslash
  564. '' (or two if you are passing the pattern to a macro).  Examples:
  565.   send a*b      ; Send all files whose names start with 'a' and end with 'b'.
  566.   send a?b      ; Ditto, but the name must be exactly three characters long.
  567.   send a[a-z]b  ; Ditto, but the second character must be a lowercase letter.
  568.   send a[x-z]b ; Ditto, except the second character must be 'x', '-', or 'y'.
  569.   send a[ghi]b  ; Ditto, except the second character must be 'g', 'h', or 'i'.
  570.   send a[?*]b   ; Ditto, except the second character must be '?' or '*'.
  571.   send a[?*]b ; Same as previous.
  572.   send *?[a-z]* ; All files with names containing at least one character
  573.                 ; that is followed by a lowercase letter.
  574. Or, more practically:
  575.   send ck[cuw]*.[cwh]  ; Send the UNIX C-Kermit source files.
  576. To refer to the C-Kermit sources files and makefile all in one filespec:
  577.   {{makefile,ck[cuw]*.[cwh]}}
  578. (NOTE: if the entire pattern is a {stringlist}, you must enclose it it TWO
  579. pairs of braces, since the SEND command strips the outer brace pair, because
  580. of the "enclose in braces if the filename contains spaces" rule).
  581. If the makefile is called ckuker.mak:
  582.   ck[cuw]*.{[cwh],mak}
  583. (NOTE: double braces are not needed here since the pattern does not both
  584. begin and end with a brace.)
  585. To add in all the C-Kermit text files:
  586.   ck[cuw]*.{[cwh],mak,txt}
  587. All of these features can be used anywhere you would type a filename that
  588. is allowed to contain wildcards.
  589. When you are typing at the command prompt, an extra level of quoting is
  590. required for the '?' character to defeat its regular function of producing a
  591. list of files that match what you have typed so far, for example:
  592.   send ck[cu]?
  593. lists all the files whose names start with ckc and cku.  If you quote the
  594. question mark, it is used as a pattern-matching character, for example:
  595.   send ck?[ft]io.c
  596. sends all the file and communications i/o modules for all the platforms:
  597. ckufio.c, ckutio.c, ckvfio.c, ckvtio.c, etc.
  598. If, however, a filename actually contains a question mark and you need to
  599. refer to it on the command line, you must use three (3) backslashes.  For
  600. example, if the file is actually called ck?fio.c, you would use:
  601.   send ck\?fio.c
  602. Further notes on quoting:
  603.  . A single backslash is sufficient for quoting a special character at the
  604.    command prompt or in a command file.  However, when passing patterns to
  605.    macros you'll need double backslashes, and when referring to these
  606.    patterns within the macro, you'll need to use fcontents(%1) (see
  607.    Section 1.11.5).  You should enclose macro argument references in
  608.    braces in case grouped arguments were passed.  Example:
  609.      define ismatch {
  610.          xif match {fcont(%1)} {fcont(%2)} {
  611.              end 0 MATCH
  612.          } else {
  613.              end 1 NO MATCH
  614.          }
  615.      }
  616.      ismatch ab*yz a*\**z           ; Backslash must be doubled
  617.      ismatch {abc def xyz} *b*e*y*   ; Braces must be used for grouping
  618.  . Watch out for possible conflicts between {} in filename patterns and
  619.    {} used for grouping multiple words into a single field, when the pattern
  620.    has outer braces.  For example, in:
  621.      if match {abc xyz} {a* *z} echo THEY MATCH
  622.    braces must be used to group "abc xyz" into a single string.  Kermit strips
  623.    off the braces before comparing the string with the pattern.  Therefore:
  624.      if match makefile {makefile,Makefile} echo THEY MATCH
  625.    does not work, but:
  626.      if match makefile {{makefile,Makefile}} echo THEY MATCH
  627.    does.
  628.  . If you use a pattern that has outer braces, like {*.txt,*.doc},
  629.    in a field that accepts a pattern list (like SEND /EXCEPT:xxx), you'll
  630.    need to add two extra sets of outer braces:
  631.      send /except:{{{*.txt,*.doc}}} *.*
  632. C-Kermit's new pattern matching capabilities are also used when C-Kermit is
  633. in server mode, so now you can send requests such as:
  634.   get ck[cuw]*.[cwh]
  635. to a C-Kermit server without having to tell it to SET WILD SHELL first.
  636. Previously this would have required:
  637.   mget ckc*.c ckc*.w ckc*.h cku*.c cku*.w cku*.h ckw*.c ckw*.w ckw*.h
  638. The new pattern matching features make SET WILD SHELL redundant, and barring
  639. any objections, it will eventually be phased out.  (One possible reason for
  640. retaining it would be as an escape mechanism when Kermit does not understand
  641. the underlying file system.)
  642. By the way, patterns such as these are sometimes referred to as "regular
  643. expressions", but they are not quite the same.  In a true regular expression
  644. (for example), "*" means "zero or more repetitions of the previous item", so
  645. (for example), "([0-9]*)" would match zero or more digits in parentheses.  In
  646. Kermit (and in most shells), this matches one digit followed by zero or more
  647. characters, within parentheses.  Here are some hints:
  648.  . Although you can't match any sequence of digits (or letters, etc), you
  649.    can match (say) 1, 2, or 3 of them in row.  For example, the following
  650.    pattern matches Kermit backup files (with backup numbers from 1 to 999):
  651.      *.~{[1-9],[1-9][0-9],[1-9][0-9][0-9]}~
  652.  . There is presently no NOT operator, so no way to match any character or
  653.    string EXCEPT the one(s) shown.
  654. In other wildcarding news...
  655.  . You may now "send xxx" where "xxx" is a directory name, and this will send
  656.    all the files from the directory xxx, as if you had typed "send xxx/*".
  657.    You can also use the special shorthand "send ." to send all the files from
  658.    the current directory.
  659.  . To easily skip over backup files (the ones whose names end like .~22~)
  660.    when sending, you can use SEND /NOBACKUP (see Section 4.0.6 for details).
  661.  . When choosing Kermit to expand wildcards, rather than the shell, you can
  662.    choose whether "dot files" -- files whose names begin with ".", which are
  663.    normally "invisible" -- should be matched:
  664.      SET WILD KERMIT /NO-MATCH-DOT-FILES (this is the default)
  665.      SET WILD KERMIT /MATCH-DOT-FILES    (this allows matching of "." files)
  666.    or include the /DOTFILES or /NODOTFILES switch on the command you are
  667.    using, such as SEND or DIRECTORY.
  668.  . Commands such as DIRECTORY and SEND allow recursive directory traversal.
  669.    There are also new functions for this to use in scripts.  See Section
  670.    4.11 for details.
  671. When building file lists in UNIX, C-Kermit follows symbolic links.  Because of
  672. this, you might encounter any or all of the following phenomena:
  673.  . Multiple copies of the same file; e.g. one from its real directory and
  674.    others from links to its real directory, if both the real directory and
  675.    the links to it are in the wildcard expansion list.
  676.  . A command might unexpectedly "hang" for a long time because an NFS link
  677.    might not be responding, or the directory you are looking at contains
  678.    a link to a huge directory tree (example: "directory /recursive /etc"
  679.    when /etc/spool is a symlink to /var/spool, which is a large organization's
  680.    incoming email directory, containing tens of thousands of subdirectories).
  681. The size of the file list that Kermit can build is limited in most C-Kermit
  682. implementations.  The limit, if any, depends on the implementation.  Use the
  683. SHOW FEATURES command and look in the alphabetized options list for MAXWLD to
  684. see the value.
  685. 4.9.2. In Kermit 95
  686. Kermit 95 1.1.18 and later uses the same pattern matching syntax as in UNIX,
  687. but (as always) you will encounter numerous difficulties if you use backslash
  688. () as the directory separator.  In any command where K95 parses filenames
  689. itself (that is, practically any file-oriented command except RUN), you can
  690. use forward slash (/) as the directory separator to avoid all the nasty
  691. conflicts.
  692. 4.9.3. In VMS, AOS/VS, OS-9, VOS, etc.
  693. Platforms other than UNIX, Windows 95/98/NT, and OS/2 have their own
  694. filename matching capabilities that are, in general, different from Kermit's
  695. built-in ones and in any case might conflict with them.  For example, []
  696. encloses directory names in VMS.
  697. Nevertheless you can still use all the pattern-matching capabilities described
  698. in Section 4.9.1 by loading a file list into an array (e.g. with
  699. ffiles(*,&a), see Section 4.11.3) and then using IF MATCH on the members.
  700. 4.10. Additional Pathname Controls
  701. In version 6.0 and earlier, C-Kermit's SET { SEND, RECEIVE } PATHNAMES command
  702. had only ON and OFF as options.  In version 7.0, there are more choices:
  703. SET SEND PATHNAMES OFF
  704.   When sending a file, strip all disk/directory information from the name.
  705.   Example: "send /usr/olga/letters/oofa.txt" sends the file as "oofa.txt".
  706.   This applies to actual filenames, not to any as-name you might specify.
  707. SET SEND PATHNAMES RELATIVE
  708.   When sending a file, leave the pathname on as given.  For example, if your
  709.   current directory is /usr/olga, "send letters/oofa.txt" sends the file as
  710.   "letters/oofa.txt", not "/usr/olga/letters/oofa.txt" or "letters.txt".
  711. SET SEND PATHNAMES ABSOLUTE
  712.   When sending a file, convert its name to the full, absolute local pathname.
  713.   For example, if your current directory is /usr/olga, "send letters/oofa.txt"
  714.   sends the file as "/usr/olga/letters/oofa.txt".  NOTE: Even with this
  715.   setting, device and/or node names are not included.  For example, in VMS,
  716.   any node or device name is stripped; in Windows or OS/2, any disk letter
  717.   is stripped.
  718. SET RECEIVE PATHNAMES OFF
  719.   When receiving a file, strip all disk/directory information from the name
  720.   before attempting to store it.  This applies to incoming filename, not to
  721.   any as-name you might specify.  Example: If a file arrives under the name
  722.   "/usr/olga/letters/oofa.txt" it is stored simply as "oofa.txt" in your
  723.   download directory or, if no download directory has been specified, in your
  724.   current directory.
  725. SET RECEIVE PATHNAMES RELATIVE
  726.   When receiving a file, leave the pathname on as it appears in the incoming
  727.   name, but if the incoming name appears to be absolute, make it relative to
  728.   your current or download directory.  Examples:
  729.     "oofa.txt" is stored as "oofa.txt".
  730.     "letters/oofa.txt" is stored as "letters/oofa.txt"; the "letters"
  731.     subdirectory is created if it does not already exist.
  732.     "/usr/olga/letters/oofa.txt" is stored as "usr/olga/letters/oofa.txt"
  733.     in your current or download directory, and the "usr", "usr/olga", etc,
  734.     directories are created if they do not exist.
  735. SET RECEIVE PATHNAMES ABSOLUTE
  736.   The incoming filename is used as given.  Thus it cannot be stored unless the
  737.   given path (if any) already exists or can be created.  In this case, node,
  738.   device, or disk designations are NOT stripped, since they most likely
  739.   were given explicitly by the user as an as-name, meant to be used as given.
  740. SET RECEIVE PATHNAMES AUTO
  741.   This is the default, and means RELATIVE if the sender tells me it is a
  742.   recursive transfer, OFF otherwise.
  743. Set FILE NAMES CONVERTED now also affects pathnames too.  When PATHNAMES are
  744. RELATIVE or ABSOLUTE and FILE NAMES are CONVERTED, the file sender converts
  745. its native directory-name format to UNIX format, and the file receiver
  746. converts from UNIX format to its native one; thus UNIX format is the common
  747. intermediate representation for directory hierarchies, as it is in the
  748. ZIP/UNZIP programs (which is why ZIP archives are transportable among, UNIX,
  749. DOS, and VMS).
  750. Here's an example in which a file is sent from Windows to UNIX with relative
  751. pathnames and FILE NAMES CONVERTED:
  752.   Source name                Intermediate name      Destination Name
  753.   C:K95TMPOOFA.TXT        K95/TMP/OOFA.TXT       k95/tmp/oofa.txt
  754. In a more complicated example, we send the same file from Windows to VMS:
  755.   Source name                Intermediate name      Destination Name
  756.   C:K95TMPOOFA.TXT        K95/TMP/OOFA.TXT       [.K95.TMP]OOFA.TXT
  757. (Note that disk letters and device designations are always stripped when
  758. pathnames are relative).
  759. As you can imagine, as more and more directory formats are considered, this
  760. approach keeps matters simple: on each platform, Kermit must know only its
  761. own local format and the common intermediate one.  In most cases, the receiver
  762. can detect which format is used automatically.
  763. 4.11. Recursive SEND and GET: Transferring Directory Trees
  764. C-Kermit 7.0 in selected versions (UNIX, VMS, VOS, AOS/VS, Windows, and OS/2
  765. at this writing) now permits the SEND command to traverse directories
  766. "recursively" if you ask it to; that is, to send files from the current or
  767. specified directory and all of its subdirectories too, and their
  768. subdirectories, etc.  (Some other commands can do this too, including
  769. DIRECTORY.)
  770. This feature is new to UNIX, Windows, VOS, and OS/2.  VMS and AOS/VS have
  771. always included "wildcard" or "template" characters that allow this, and in
  772. this case, recursive directory traversal could happen behind Kermit's back,
  773. i.e. Kermit does not have to do it itself (in VMS, the notation is "[...]"  or
  774. "[directory...]"; in AOS/VS is "#").  In C-Kermit 7.0, however, SEND
  775. /RECURSIVE is supported by C-Kermit itself for VMS.
  776. 4.11.1. Command-Line Options
  777. To descend a directory tree when sending files, use the -L command-line option
  778. to indicate that the send operation is to be recursive, and include a name or
  779. pattern to be sent.  When giving a pattern, you should enclose it in quotes to
  780. prevent the shell from expanding it.  Examples:
  781.   $ kermit -Ls "/usr/olga/*" # send all of Olga's files in all her directories
  782.   $ kermit -Ls foo.txt       # send all foo.txt files in this directory tree
  783.   $ kermit -Ls "*.txt"       # send all .txt files in this directory tree
  784.   $ kermit -Ls "letters/*"   # send all files in the letters directory tree
  785.   $ kermit -Ls letters       # send all files in the letters directory tree
  786.   $ kermit -Ls "*"           # send all files in this directory tree
  787.   $ kermit -Ls .             # UNIX only: send all files in this directory tree
  788.   $ kermit -s .              # UNIX only: a filename of . implies -L
  789. If you let the shell expand wildcards, Kermit only sends files whose names
  790. match files in the current or given directory, because the shell replaces an
  791. unquoted wildcard expression with the list of matching files -- and the shell
  792. does not build recursive lists.  Note that the "." notation for the tree
  793. rooted at the current directory is allowed only in UNIX, since in Windows and
  794. OS/2, it means "*.*" (nonrecursive).
  795. 4.11.2. The SEND /RECURSIVE Command
  796. If you include the /RECURSIVE switch in a SEND (or MOVE, or similar) command,
  797. it means to descend the current or specified directory tree searching for
  798. files whose names match the given name or pattern.  Since this is not terribly
  799. useful unless you also include pathnames with the outbound files, the
  800. /RECURSIVE switch also includes an implicit /PATHNAMES:RELATIVE switch (which
  801. you can undo by including an explicit /PATHNAMES switch after the /RECURSIVE
  802. switch).
  803. Examples:
  804. SEND /RECURSIVE *
  805.   Sends all of the files in the current directory and all the files in
  806.   all of its subdirectories, and all of their subdirectories, etc, including
  807.   their relative pathnames.  Empty directories are not sent.
  808. SEND /RECURSIVE /PATHNAMES:ABSOLUTE *
  809.   Sends all of the files in the current directory and all the files in
  810.   all of its subdirectories, and all of their subdirectories, etc, including
  811.   their absolute pathnames.
  812. SEND /RECURSIVE /PATHNAMES:OFF *
  813.   Sends all of the files in the current directory and all the files in
  814.   all of its subdirectories, and all of their subdirectories, etc, without
  815.   pathnames.
  816. SEND /RECURSIVE /usr/olga/*
  817.   Sends all of the files in the /usr/olga directory and all the files in
  818.   all of its subdirectories, and all of their subdirectories, etc.
  819. SEND /RECURSIVE /usr/olga  (or /usr/olga/)
  820.   Same as above.  If the name is a directory name (with or without a
  821.   trailing slash), its files are sent, and those of its subdirectories,
  822.   and their subdirectories, etc (see section 4.9).
  823. SEND /RECURSIVE /TEXT /usr/olga/*.txt
  824.   As above, but only files whose names end with ".txt" are sent, and they
  825.   are sent in text mode (as they would be by default anyway if SET FILE
  826.   PATTERNS is ON or AUTO).
  827. SEND .
  828.   UNIX only: Send all the files in the current directory.
  829. SEND /RECURSIVE .
  830.   UNIX only: Sends all of the files in the current directory and all of its
  831.   subdirectories, etc (section 4.9).
  832. The /RECURSIVE switch is different from most other switches in that its effect
  833. is immediate (but still local to the command in which it is given), because it
  834. determines how filenames are to be parsed.  For example, "send *.txt" fails
  835. with a parse error ("No files match") if there are no *.txt files in the
  836. current directory, but "send /recursive *.txt" succeeds if there are ".txt"
  837. files anywhere in the tree rooted at the current directory.
  838. The /RECURSIVE switch also affects the file lists displayed if you type "?"
  839. in a filename field.  "send ./?" lists the regular files in the current
  840. directory, but "send /recursive ./?" lists the entire directory tree rooted
  841. at the current directory.
  842. 4.11.3. The GET /RECURSIVE Command
  843. In a client/server setting, the client can also request a recursive
  844. transfer with:
  845.   GET /RECURSIVE [ other switches ] <remote-filespec> [ <local-spec> ]
  846. In which remote file specification can be a directory name, a filename, a
  847. wildcard, or any combination.  If the <local-spec> is not given (and PATHNAMES
  848. are RELATIVE), incoming files and directories go into the current local
  849. directory.  If <local-spec> is given and is a directory, it becomes the root
  850. of the tree into which the incoming files and directories are placed.  If
  851. <local-spec> has the syntax of a directory name (e.g. in UNIX it ends with /),
  852. C-Kermit creates the directory and then places the incoming files into it.
  853. If <local-spec> is a filename (not recommended), then all incoming files are
  854. stored with that name with collisions handled according to the FILE COLLISION
  855. setting.
  856. Again, the normal method for transferring directory trees uses relative
  857. pathnames, and this is the default when the sender has been given the
  858. /RECURSIVE switch.  The action at the receiver depends on its RECEIVE
  859. PATHNAMES setting.  The default is AUTO, meaning that if the sender tells
  860. it to expect a recursive transfer, then it should automatically switch to
  861. relative pathnames for this transfer only; otherwise it obeys the RECEIVE
  862. PATHNAMES setting of OFF, ABSOLUTE, or RELATIVE.
  863. What happens if a file arrives that has an absolute pathname, when the
  864. receiver has been told to use only relative pathnames?  As a security
  865. precaution, in this case the receiver treats the name as if it was relative.
  866. For example, if a file arrives as:
  867.   /usr/olga/oofa.txt
  868. The receiver creates a "usr" subdirectory in its current directory, and
  869. then an "olga" subdirectory under the "usr" subdirectory in which to store
  870. the incoming file.
  871. Suppose, however there is a sequence of directories:
  872.   /usr/olga/a/b/c/d/
  873. in which "a" contains nothing but a subdirectory "b", which in turn contains
  874. nothing but a subdirectory "c", which in turn contains nothing but a
  875. subdirectory "d", which contains nothing at all.  Thus there are no files in
  876. the "/usr/olga/a/" tree, and so it is not sent, and therefore it is not
  877. reproduced on the target computer.
  878. 4.11.4. New and Changed Functions
  879. C-Kermit 7.0 adds the following functions:
  880. ffiles(pattern[,&a])
  881.   This function has been changed to match only regular files in the current
  882.   or given directory, and to take an optional array name as a second argument
  883.   (explained below).
  884. fdirectories(pattern[,&a])
  885.   Returns the number of directories that match the given pattern.
  886.   If the pattern does not include a directory, then the search is performed
  887.   in the current directory.
  888. frfiles(pattern[,&a])
  889.   Returns the number of files in the current or given directory and all of
  890.   its subdirectories, and their subdirectories, etc, that match the given
  891.   pattern.  Warning -- this one can take quite some time if performed at the
  892.   root of a large directory tree.
  893. frdirectories(pattern[,&a])
  894.   Returns the number of directories in the current or given directory and all
  895.   of its subdirectories, and their subdirectories, etc, that match the given
  896.   pattern.
  897. Each of these functions builds up a list of files to be returned by the
  898. fnextfile() function, just as ffiles() always has done.  (This can also
  899. be done with the /ARRAY switch of the DIRECTORY command; see Sections 4.5.1
  900. and 7.10).
  901. Each of these functions can be given an array name as an optional second
  902. argument.  If an array name is supplied, the array will contain the number of
  903. files as its 0th element, and the filenames in elements 1 through last.  If
  904. the array already existed, its previous contents are lost.  For example, if
  905. the current directory contains two files, oofa.txt and foo.bar, then
  906. "ffiles(*,&a)" creates an array &a[] with a dimension of 2, containing the
  907. following elements:
  908.  &a[0] = 2
  909.  &a[1] = oofa.txt
  910.  &a[2] = foo.bar
  911. If no files match the specification given in the first argument, the array
  912. gets a dimension of 0, which is the same as undeclaring the array.
  913. Note that the order in which the array is filled (and in which fnextfile()
  914. returns filenames) is indeterminate (but see Section 7.10.5).
  915. Here's an example that builds and prints a list of all the file whose names
  916. end in .txt in the current directory and all its descendents:
  917.   asg %n frfiles(*.txt)
  918.   declare &a[%n]
  919.   for %i 1 %n 1 {
  920.       asg &a[%i] fnextfile()
  921.       echo flpad(%i,4). "&a[%i]"
  922.   }
  923. Alternatively, using the array method, and then printing the filenames in
  924. alphabetic order (see Sections 7.10.3 and 7.10.5):
  925.   asg %n frfiles(*.txt,&a)
  926.   sort &a
  927.   for %i 1 %n 1 {
  928.       echo flpad(%i,4). "&a[%i]"
  929.   }
  930. Or even more simply:
  931.   asg %n frfiles(*.txt,&a)
  932.   sort &a
  933.   show array &a
  934. As noted elsewhere, the file lists built by ffiles(), frfiles(), etc, are
  935. now "safe" in the sense that SEND and other file-related commands can
  936. reference fnextfile() without resetting the list:
  937.   set send pathnames relative
  938.   for %i 1 frfiles(*.txt) 1 {
  939.       asg %a fnextfile()
  940.       echo Sending %a...
  941.       send %a
  942.       if fail break
  943.   }
  944. Copying to an array (as shown on p.398 of "Using C-Kermit" 2nd Ed) is no
  945. longer necessary.
  946. 4.11.5. Moving Directory Trees Between Like Systems
  947. 4.11.5.1. UNIX to UNIX
  948. Transferring a directory tree from one computer to another replicates the file
  949. sender's arrangement of files and directories on the file receiver's computer.
  950. Normally this is done using relative pathnames, since the user IDs might not
  951. be identical on the two computers.  Let's say both computers are UNIX based,
  952. running C-Kermit 7.0 or later.  On the sending computer (leaving out the
  953. connection details, etc):
  954.   C-Kermit> cd /usr/olga
  955.   C-Kermit> send /recursive .
  956. The /RECURSIVE switch tells C-Kermit to descend through the directory tree
  957. and to include relative pathnames on outbound filenames.
  958. On the receiving computer:
  959.   C-Kermit> mkdir olgas-files           ; Make a new directory.
  960.   C-Kermit> cd olgas-files              ; CD to it.
  961.   C-Kermit> receive /recursive          ; = /PATHNAMES:RELATIVE
  962. Each Kermit program recognizes that the other is running under UNIX and
  963. switches to binary mode and literal filenames automatically.  Directories
  964. are automatically created on the receiving system as needed.  File dates
  965. and permissions are automatically reproduced from source to destination.
  966. 4.11.5.2. VMS to VMS
  967. To send recursively from VMS, simply include the /RECURSIVE switch, for
  968. example at the sender:
  969.   $ kermit
  970.   C-Kermit> cd [olga]
  971.   C-Kermit> send /recursive *.*;0
  972. And at the receiver:
  973.   C-Kermit> cd [.olga]
  974.   C-Kermit> receive /recursive
  975. The notation "..." within directory brackets in VMS means "this directory
  976. and all directories below it"; the /RECURSIVE switch, when given to the
  977. sender, implies the use of "..." in the file specification so you don't have
  978. to include "..."; but it makes no difference if you do:
  979.   $ kermit
  980.   C-Kermit> send /recursive [olga...]*.*;0
  981. And at the receiver:
  982.   C-Kermit> cd [.olga]
  983.   C-Kermit> receive /recursive
  984. In either case, since both systems recognize each other as VMS, they switch
  985. into LABELED transfer mode automatically.
  986. 4.11.6. Moving Directory Trees Between Unlike Systems
  987. There are several difficulties with recursive transfers between unlike
  988. systems:
  989.  . File formats can be different, especially text files character sets and
  990.    record formats.  This can now be handled by using SET FILE PATTERN,
  991.    SET FILE TEXT-PATTERNS, and SET FILE BINARY-PATTERNS (Section 4.3).
  992.  . File naming conventions are different.  For example, one system might allow
  993.    (and use) longer filenames than the other.  You can tell Kermit how to
  994.    handle file names with the normal "set file names" and "set file
  995.    collision" mechanisms.  Most modern Kermits are fairly tolerant of illegal
  996.    filenames and should not fail simply because of an incoming filename;
  997.    rather, it will do its best to convert it to a recognizable and unique
  998.    legal filename.
  999.  . Directory notations can be different, e.g. backslashes instead of slashes,
  1000.    brackets, parentheses, spaces, etc.  But this is now handled by converting
  1001.    pathnames to a standard format during transfer (Section 4.10).
  1002. So now, for the first time, it is possible to send directory trees among
  1003. any combination of UNIX, DOS, Windows, OS/2, VMS, AOS/VS, etc.  Here's an
  1004. example sending files from an HP-UX system (where text files are encoded in
  1005. the HP Roman8 character set) to a PC with K95 (where text files are encoded
  1006. in CP850):
  1007.  Sender:
  1008.   cd xxx                           ; CD to root of source tree
  1009.   set file type binary             ; Default transfer mode
  1010.   set file character-set hp-roman8 ; Local character set for text files
  1011.   set xfer character-set latin1    ; Transfer character set
  1012.   set file patterns on             ; Enable automatic file-type switching...
  1013.   set file binary-patterns *.Z *.gz *.o  ; based on these patterns...
  1014.   set file text-patterns *.txt *.c *.h   ; for binary and text files.
  1015.   send /recursive *                ; Send all the file in this directory tree
  1016.  Receiver:
  1017.   cd yyy                           ; CD to root of destination tree
  1018.   set file character-set cp850     ; Local character set for text files
  1019.   receive /pathnames:relative      ; Receive with pathnames
  1020.  Notes:
  1021.  . Replace "xxx" and "yyy" with the desired directories.
  1022.  . Replace the file character sets appropriately.
  1023.  . Change the patterns as needed (or just use the built-in default lists).
  1024.  . SEND /RECURSIVE also implies /PATHNAMES:RELATIVE.
  1025.  . The file sender tells the file receiver the transfer mode of each file.
  1026.  . The file sender tells the file receiver the transfer character set.
  1027.  . By default, destination file dates will be the same as on the source.
  1028.  . Many of the settings shown might already be set by default.
  1029.  . See sections 4.3, 4.10, and 4.15 for additional explanation.
  1030. If you are refreshing an existing directory on the destination computer,
  1031. use "set file collision update" or other appropriate file collision option
  1032. to handle filename collisions.
  1033. 4.12. Where Did My File Go?
  1034. Now that Kermit can be started by clicking on desktop icons (thus obscuring
  1035. the concept of "current directory"), and can have a download directory, and
  1036. can create directories for incoming files on the fly, etc, sometimes it is
  1037. easy to lose a file after transfer.  Of course, if you keep a transaction log:
  1038.   LOG TRANSACTIONS
  1039. it will record the fate and final resting place of each file.  But in case
  1040. you did not keep a log, the new command:
  1041.   WHERE
  1042. added in C-Kermit 7.0, gives you as much information as it has about the
  1043. location of the last files transferred, including the pathname reported by
  1044. the receiving Kermit, if any, when C-Kermit is the sender.  This information
  1045. was also added to SHOW FILE in somewhat less detail.
  1046. 4.13. File Output Buffer Control
  1047. (UNIX only).  The new command SET FILE OUTPUT lets you control how incoming
  1048. files are written to disk:
  1049. SET FILE OUTPUT BUFFERED [ <size> ]
  1050.   Chooses buffered file output; this is the default.  UNIX does its normal
  1051.   sort of disk buffering.  The optional <size> specifies Kermit's own file
  1052.   output buffer size, and therefore the frequency of disk accesses (write()
  1053.   system calls) -- the bigger the size, the fewer the disk accesses.
  1054. SET FILE OUTPUT UNBUFFERED [ <size> ]
  1055.   This forces each file output write() call to actually commit the data to
  1056.   disk immediately.  Choosing this option will usually slow file reception
  1057.   down.
  1058. SET FILE OUTPUT BLOCKING
  1059.   Write() calls should not return until they are complete.  This is the normal
  1060.   setting, and it lets Kermit detect disk-write errors immediately.
  1061. SET FILE OUTPUT NONBLOCKING
  1062.   Write() calls should return immediately.  This can speed up file reception,
  1063.   but also delay the detection of disk-write errors.
  1064. Experimentation with these parameters should be harmless, and might (or might
  1065. not) have a perceptible, even dramatic, effect on performance.
  1066. 4.14. Improved Responsiveness
  1067. In version 7.0, C-Kermit's file-transfer protocol engine has been tuned
  1068. for additional speed and responsiveness.
  1069.  . Binary-mode transfers over 8-bit connections, a very common case, are
  1070.    now handled in a special way that minimizes overhead.
  1071.  . SET TRANSFER CRC-CALCULATION is now OFF by default, rather than ON.
  1072.    (This affects only the overall per-transfer CRC, v(crc16), not the
  1073.    per-packet CRCs)
  1074.  . Connection loss during file transfer is now detected immediately in most
  1075.    cases on Internet connections and on serial connections when CARRIER-WATCH
  1076.    is not set to OFF.
  1077. 4.15. DOUBLING AND IGNORING CHARACTERS FOR TRANSPARENCY
  1078. The following commands were added in 7.0, primarily to allow successful
  1079. file transfer through ARPAnet TACs and with Honeywell DPS6 systems, but can
  1080. be used in any setting where they might be needed:
  1081. SET SEND DOUBLE-CHAR { [ <char> [ <char> [ ... ] ] ], NONE }
  1082.   Tells C-Kermit to double the specified characters (use decimal notation)
  1083.   in packets that it sends.  For example, if you are sending files through
  1084.   a device that uses @ as an escape character, but allows you to send a
  1085.   single copy of @ through by doubling it, use "set send double 64".
  1086. SET RECEIVE IGNORE-CHAR [ <char> [ <char> [ ... ] ] ]
  1087.   Tells C-Kermit to ignore the specified character(s) in incoming packets.
  1088.   Use this, for example, when something between the sender and receiver is
  1089.   inserting linefeeds for wrapping, NULs for padding, etc.
  1090. 4.16. New File-Transfer Display Formats
  1091. SET TRANSFER DISPLAY { BRIEF, CRT, FULLSCREEN, NONE, SERIAL }
  1092. BRIEF is the new one.  This writes one line to the screen per file, showing
  1093. the file's name, transfer mode, size, the status of the transfer, and when the
  1094. transfer is successful, the effective data rate in characters per second (CPS).
  1095. Example:
  1096.  SEND ckcfn3.o (binary) (59216 bytes): OK (0.104 sec, 570206 cps)
  1097.  SEND ckcfns.o (binary) (114436 bytes): OK (0.148 sec, 772006 cps)
  1098.  SEND ckcmai.c (text) (79147 bytes): OK (0.180 sec, 438543 cps)
  1099.  SEND ckcmai.o (binary) (35396 bytes): OK (0.060 sec, 587494 cps)
  1100.  SEND ckcnet.o (binary) (62772 bytes): REFUSED
  1101.  SEND ckcpro.o (binary) (121448 bytes): OK (0.173 sec, 703928 cps)
  1102.  SEND ckcpro.w (text) (63687 bytes): OK (0.141 sec, 453059 cps)
  1103.  SEND makefile (text) (186636 bytes): OK (0.444 sec, 420471 cps)
  1104.  SEND wermit (binary) (1064960 bytes): OK (2.207 sec, 482477 cps)
  1105. Note that transfer times are now obtained in fractional seconds, rather than
  1106. whole seconds, so the CPS figures are more accurate (the display shows 3
  1107. decimal places, but internally the figure is generally precise to the
  1108. microsecond).
  1109. 4.17. New Transaction Log Formats
  1110. The new command:
  1111.   SET TRANSACTION-LOG { VERBOSE, FTP, BRIEF [ <separator> ] }
  1112. lets you choose the format of the transaction log.  VERBOSE (the default)
  1113. indicates the traditional format described in the book.  BRIEF and FTP are
  1114. new.  This command must be given prior to the LOG TRANSACTION command if a
  1115. non-VERBOSE type is desired.
  1116. 4.17.1. The BRIEF Format
  1117. BRIEF chooses a one-line per file format suitable for direct importation into
  1118. databases like Informix, Oracle, or Sybase, in which:
  1119.  . Each record has 8 fields.
  1120.  . Fields are separated by a non-alphanumeric separator character.
  1121.  . The default separator character is comma (,).
  1122.  . Any field containing the separator character is enclosed in doublequotes.
  1123.  . The final field is enclosed in doublequotes.
  1124. The fields are:
  1125.   1. Date in yyyymmdd format
  1126.   2. Time in hh:mm:ss format
  1127.   3. Action: SEND or RECV
  1128.   4. The local filename
  1129.   5. The size of the file
  1130.   6. The transfer mode (text, binary, image, labeled)
  1131.   7. The status of the transfer: OK or FAILED
  1132.   8. Additional status-dependent info, in doublequotes.
  1133. Examples:
  1134.   20000208,12:08:52,RECV,/u/olga/oofa.txt,5246,text,OK,"0.284sec 18443cps"
  1135.   20000208,12:09:31,SEND,/u/olga/oofa.exe,32768,binary,OK,"1.243sec 26362cps"
  1136.   20000208,12:10:02,SEND,"/u/olga/a,b",10130,text,FAILED,"Refused: date"
  1137. Note how the filename is enclosed in doublequotes in the final example,
  1138. because it contains a comma.
  1139. To obtain BRIEF format, you must give the SET TRANSACTION-LOG BRIEF command
  1140. before the LOG TRANSACTIONS command.  (If you give them in the opposite order,
  1141. a heading is written to the log by the LOG command.)
  1142. 4.17.2. The FTP Format
  1143. SET TRANSACTION-LOG FTP (available only in UNIX) chooses a format that is
  1144. compatible with the WU-FTPD (Washington University FTP daemon) log, and so can
  1145. be processed by any software that processes the WU-FTPD log.  It logs only
  1146. transfers in and out, both successful and failed (but success or failure is
  1147. not indicated, due to lack of a field in the WU-FTPD log format for this
  1148. purpose).  Non-transfer events are not recorded.
  1149. Unlike other logs, the FTP-format transaction log is opened in append mode
  1150. by default.  This allows you to easily keep a record of all your kermit
  1151. transfers, and it also allows the same log to be shared by multiple
  1152. simultaneous Kermit processes or (permissions permitting) users.  You can, of
  1153. course, force creation of a new logfile by specifying the NEW keyword after
  1154. the filename, e.g.
  1155.   log transactions oofa.log new
  1156. All records in the FTP-style log are in a consistent format.  The first field
  1157. is fixed-length and contains spaces; subsequent fields are variable length,
  1158. contain no spaces, and are separated by one or more spaces.  The fields are:
  1159. Timestamp
  1160.   This is an asctime-style timestamp, example: "Wed Sep 16 20:19:05 1999"
  1161.   It is always exactly 24 characters long, and the subfields are always in
  1162.   fixed positions.
  1163. Elapsed time
  1164.   The whole number of seconds required to transfer the file, as a string
  1165.   of decimal digits, e.g. "24".
  1166. Connection
  1167.   The name of the network host to which C-Kermit is connected, or the name
  1168.   of the serial device through which it has dialed (or has a direct
  1169.   connection), or "/dev/tty" for transfers in remote mode.
  1170. Bytes transferred
  1171.   The number of bytes transferred, decimal digits, e.g. "1537904".
  1172. Filename
  1173.   The name of the file that was transferred, e.g.
  1174.   "/pub/ftp/kermit/a/README.TXT".  If the filename contains any spaces or
  1175.   control characters, each such character is replaced by an underscore ('_')
  1176.   character.
  1177. Mode
  1178.   The letter 'b' if the file was transferred in binary mode, or 'a'
  1179.   if it was transferred in text (ASCII) mode.
  1180. Options
  1181.   This field always contains an underscore ('_') character.
  1182. Direction
  1183.   The letter 'o' if the file was transferred Out, and 'i' if the file was
  1184.   transferred In.
  1185. User class
  1186.   The letter 'r' indicates the file was transferred by a Real user.
  1187. User identification
  1188.   The ID of the user who transferred the file.
  1189. Server identification
  1190.   The string "kermit".  This distinguishes a Kermit transfer log
  1191.   record from a WU-FTPD record, which contains "ftp" in this field.
  1192. Authentication class
  1193.   The digit '1' if we know the user's ID on the client system,
  1194.   otherwise '0'.  Currently, always '0'.
  1195. Authenticated user
  1196.   If the authentication class is '1', this is the user's ID on the client
  1197.   system.  Otherwise it is an asterisk ('*').  Currently it is always an
  1198.   asterisk.
  1199. Examples:
  1200.   Thu Oct 22 17:42:48 1998 0 * 94 /usr/olga/new.x a _ i r olga kermit 0 *
  1201.   Thu Oct 22 17:51:29 1998 1 * 147899 /usr/olga/test.c a _ o r olga kermit 0 *
  1202.   Thu Oct 22 17:51:44 1998 1 * 235 /usr/olga/test.o b _ i r olga kermit 0 *
  1203.   Fri Oct 23 12:10:25 1998 0 * 235 /usr/olga/x.ksc a _ o r olga kermit 0 *
  1204. Note that an ftp-format transaction log can also be selected on the Kermit
  1205. command line as follows:
  1206.   kermit --xferfile:<filespec>
  1207. This is equivalent to:
  1208.   SET TRANSACTION-LOG FTP
  1209.   LOG TRANSACTIONS <filespec> APPEND
  1210. Conceivably it could be possible to have a system-wide shared Kermit log,
  1211. except that UNIX lacks any notion of an append-only file; thus any user who
  1212. could append to the log could also delete it (or alter it).  This problem
  1213. could be worked around using setuid/setgid tricks, but these would most likely
  1214. interfere with the other setuid/setgid tricks C-Kermit must use for getting
  1215. at dialout devices and UUCP logfiles.
  1216. 4.18. Unprefixing NUL
  1217. As of 6.1.193 Alpha.10, C-Kermit can finally send and receive file-transfer
  1218. packets in which NUL (ASCII 0) is unprefixed (no more NUL-terminated
  1219. packets!).  NUL is, of course, extremely prevalent in binary files such as
  1220. executables, and this has been a significant source of packet overhead.  For
  1221. example, when transferring itself (the SunOS C-Kermit executable) with minimal
  1222. prefixing and 9000-byte packets, we see:
  1223.   File size:                       1064960
  1224.   Packet chars with 0 prefixed:    1199629  overhead = 12.65%
  1225.   Packet chars with 0 unprefixed:  1062393  overhead = -0.03%
  1226. Transfer rates go up accordingly, not only because of the reduced amount of
  1227. i/o, but also because less computation is required on each end.
  1228. 4.19. Clear-Channel Protocol
  1229. Now that C-Kermit itself is capable of sending and receiving any byte at all
  1230. on a clear channel (section 4.18), it is, for the first time, in a position to
  1231. negotiate a clear channel with the other Kermit, giving it permission (but not
  1232. requiring it) to unprefix any and all characters that it knows are safe.  In
  1233. general this means all but the Kermit start-of-packet character (normally
  1234. Ctrl-A), Carriage Return (not only Kermit's end-of-packet character, but also
  1235. treated specially on Telnet NVT links), and IAC (255, also special to Telnet).
  1236. By default, C-Kermit will say it has a clear channel only if it has opened a
  1237. TCP socket.  Since the Kermit program on the far end of a TCP/IP connection
  1238. generally does not know it has a TCP/IP connection, it will not announce a
  1239. clear channel unless it has been told to do so.  The command is:
  1240.   SET CLEAR-CHANNEL { ON, OFF, AUTO }
  1241. AUTO is the default, meaning that the clear-channel status is determined
  1242. automatically from the type of connection.  ON means to announce a clear
  1243. channel, OFF means not to announce it.  Use SHOW STREAMING (Section 4.20)
  1244. to see the current CLEAR-CHANNEL status.  Synonym: SET CLEARCHANNEL.
  1245. CLEAR-CHANNEL is also set if you start C-Kermit with the -I switch (see
  1246. Section 4.20).
  1247. Whenever a clear channel is negotiated, the resulting control-character
  1248. unprefixing is "sticky"; that is, it remains in effect after the transfer so
  1249. you can use SHOW CONTROL to see what was negotiated.
  1250. You can also see whether a clear channel was negotiated in the STATISTICS
  1251. /VERBOSE Display.
  1252. The advantage of the clear channel feature is that it can make file transfers
  1253. go faster automatically.  The disadvantage would be file-transfer failures if
  1254. the channel is not truly clear, for example if C-Kermit made a Telnet
  1255. connection to a terminal server, and then dialed out from there; or if
  1256. C-Kermit made an Rlogin connection to host and then made a Telnet connection
  1257. from there to another host.  If a file transfer fails on a TCP/IP connection,
  1258. use SHOW CONTROL to check whether control characters became unprefixed as a
  1259. result of protocol negotiations, and/or SHOW STREAMING (Section 4.20) to see
  1260. if "clear-channel" was negotiated.  If this happened, use SET CLEAR-CHANNEL
  1261. OFF and SET PREFIXING CAUTIOUS (or whatever) to prevent it from happening
  1262. again.
  1263. 4.20. Streaming Protocol
  1264. A new Kermit protocol option called "streaming" was added in C-Kermit 7.0.
  1265. The idea is that if the two Kermit partners have a reliable transport (such as
  1266. TCP/IP or X.25) between them, then there is no need to send ACKs for Data
  1267. packets, or NAKs, since a reliable transport will, by definition, deliver all
  1268. packets in order and undamaged.  On such a connection, streaming cuts down not
  1269. only on Kermit program overhead (switching back and forth between reading and
  1270. sending packets), but also tends to make the underlying transport use itself
  1271. more efficiently (e.g. by defeating the Nagle algorithm and/or Delayed ACK
  1272. stratagem of the TCP layer).  Furthermore, it allows transfers to work
  1273. smoothly on extremely slow network congestions that would otherwise cause
  1274. timeouts and retransmissions, and even failure when the retry limit was
  1275. exceeded.
  1276. The trick is knowing when we can stream:
  1277.  a. If C-Kermit has opened a TCP socket or X.25 connection, it offers stream.
  1278.  b. If C-Kermit has been started with the -I (uppercase) option, or if it
  1279.     has been told to SET RELIABLE ON, it offers to stream.
  1280.  c. If C-Kermit is in remote mode, and has been told to SET RELIABLE AUTO
  1281.     (or ON), it always offers to stream, and also always agrees to stream,
  1282.     if the other Kermit offers.  Unless you take explicit actions to override
  1283.     the defaults, this allows the local Kermit (the one that made the
  1284.     connection, and so knows whether it's reliable) to control streaming.
  1285. (Note that an offer to stream also results in a Clear-Channel announcement if
  1286. CLEAR-CHANNEL is set to AUTO; see Section 4.19.)
  1287. When BOTH Kermits offer to stream, then they stream; otherwise they don't.
  1288. Thus streaming-capable Kermit programs interoperate automatically and
  1289. transparently with nonstreaming ones.  If the two Kermits do agree to stream,
  1290. you'll see the word "STREAMING" on the fullscreen file-transfer display in the
  1291. Window Slots field.  You can also find out afterwards with the STATISTICS or
  1292. SHOW STREAMING commands.
  1293.   WARNING: Automatic choice of streaming is based on the assumption of a
  1294.   "direct" end-to-end network connection; for example, a Telnet or Rlogin
  1295.   connection from host A to host B, and transferring files between A and
  1296.   B.  However, if your connection has additional components -- something
  1297.   "in the middle" (B) that you have made a network connection to, which
  1298.   makes a separate connection to the destination host (C), then you don't
  1299.   really have a reliable connection, but C-Kermit has no way of knowing
  1300.   this; transferring files between A and C will probably fail.  In such
  1301.   cases, you'll need to tell the *local* C-Kermit to "set reliable off"
  1302.   before transferring files (it does no good to give this command to the
  1303.   remote Kermit since the local one controls the RELIABLE setting).
  1304. Streaming is like using an infinite window size, with no timeouts and no
  1305. tolerance for transmission errors (since there shouldn't be any).  It relies
  1306. on the underlying transport for flow control, error correction, timeouts, and
  1307. retransmission.  Thus it is very suitable for use on TCP/IP connections,
  1308. especially slow or bursty ones, since Kermit's packet timeouts won't interfere
  1309. with the transfer -- each packet takes as long to reach its destination as it
  1310. takes TCP to deliver it.  If TCP can't deliver the packet within its own
  1311. timeout period (over which Kermit has no control), it signals a fatal error.
  1312. Just like FTP.
  1313. Streaming goes much faster than non-streaming when a relatively small packet
  1314. length is used, and it tends to go faster than non-streaming with even the
  1315. longest packet lengths.  The Kermit window size is irrelevant to streaming
  1316. protocol, but still might affect performance in small ways since it can result
  1317. in different paths through the code.
  1318. The definition of "reliable transport" does not necessarily demand 8-bit and
  1319. control-character transparency.  Streaming can work with parity and/or
  1320. control-character prefixing just as well (but not as fast) as without them;
  1321. in such cases you can leave RELIABLE set to ON, but set CLEARCHANNEL and/or
  1322. PARITY appropriately.
  1323. Maximum performance -- comparable to and often exceeding FTP -- is achieved on
  1324. socket-to-socket connections (in which the considerable overhead of the
  1325. terminal driver and Telnet or Rlogin server is eliminated) with long packets
  1326. and the new "brief" file-transfer display (Section 4.16).
  1327. 4.20.1. Commands for Streaming
  1328. SET RELIABLE { ON, OFF, AUTO }
  1329.   SET RELIABLE ON tells Kermit that it has a reliable transport.
  1330.   SET RELIABLE OFF tells Kermit the transport is not reliable.
  1331.   SET RELIABLE AUTO tells Kermit that it should SET RELIABLE ON whenever
  1332.   it makes a reliable connection (e.g. TELNET or SET HOST on a TCP/IP or
  1333.   X.25 network), and when in remote mode it should believe the transport is
  1334.   reliable if the other Kermit says it is during Kermit protocol negotiation.
  1335. AUTO is the default; the Kermit program that makes the connection knows
  1336. whether it is reliable, and tells the remote Kermit.
  1337. The RELIABLE setting has several effects, including:
  1338.  . It can affect the timeouts used during normal ACK/NAK protocol.
  1339.  . It can affect the clear-channel announcement.
  1340.  . It can affect streaming.
  1341. If you TELNET or SET HOST somewhere, this includes an implicit SET RELIABLE ON
  1342. command.  The -I command-line option is equivalent to SET RELIABLE ON.
  1343. Since SET RELIABLE ON (and -I) also implies SET CLEAR CHANNEL ON, you might
  1344. find that in certain cases you need to tell Kermit that even though the
  1345. connection is reliable, it doesn't have a clear channel after all:
  1346.   SET CLEAR-CHANNEL OFF
  1347.   SET PREFIXING CAUTIOUS ; or whatever...
  1348. You can control streaming without affecting the other items with:
  1349.   SET STREAMING { ON, OFF, AUTO }
  1350. AUTO is the default, meaning streaming will occur if Kermit has made a TCP/IP
  1351. connection or if RELIABLE is ON (or it was started with the -I command line
  1352. option).  OFF means don't stream; ON means offer to stream no matter what.
  1353. 4.20.2. Examples of Streaming
  1354. Here we look at the use and behavior of streaming on several different kinds
  1355. of connections, and compare its performance with non-streaming transfers.
  1356. 4.20.2.1. Streaming on Socket-to-Socket Connections
  1357. Here we get streaming automatically when both Kermit programs are capable of
  1358. it, since they both make socket connections.  For example, on the far end:
  1359.   C-Kermit> set host * 3000
  1360.   C-Kermit> server
  1361. and on the near end:
  1362.   C-Kermit> set host foo.bar.xyz.com 3000
  1363.   (now give SEND and GET command)
  1364. All subsequent file transfers use streaming automatically.
  1365. Here are the results from 84 trials, run on a production network,
  1366. disk-to-disk, in which a 1-MB binary file (the SunOS C-Kermit Sparc
  1367. executable) was sent from a Sun Sparc-10 with SunOS 4.1.3 to an IBM Power
  1368. Server 850 with AIX 4.1, socket-to-socket, over a 10Mbps 10BaseT Ethernet,
  1369. using minimal control-character unprefixing, window sizes from 10 to 32, and
  1370. packet sizes from 1450 to 9010:
  1371.                 Streaming    Nonstreaming
  1372.   Max CPS         748955        683354
  1373.   Min CPS         221522        172491
  1374.   Mean CPS        646134        558680
  1375.   Median CPS      678043        595874
  1376.   Std Dev         101424        111493
  1377. Correlations:
  1378.   CPS and window size:   -0.036
  1379.   CPS and packet length:  0.254
  1380.   CPS and streaming:      0.382
  1381. Note that the relationship between streaming and throughput is significantly
  1382. stronger than that between CPS and window size or packet length.
  1383. Also note that this and all other performance measurements in this section
  1384. are snapshots in time; the results could be much different at other times when
  1385. the load on the systems and/or the network is higher or lower.
  1386. In a similar socket-to-socket trial, but this time over a wide-area TCP/IP
  1387. connection (from New York City to Logan, Utah, about 2000 miles), the
  1388. following results were obtained:
  1389.                 Streaming    Nonstreaming
  1390.   Max CPS         338226        318203
  1391.   Min CPS         191659        132314
  1392.   Mean CPS        293744        259240
  1393.   Median CPS      300845        273271
  1394.   Std Dev          41914         52351
  1395. Correlations:
  1396.   CPS and window size:    0.164
  1397.   CPS and packet length:  0.123
  1398.   CPS and streaming:      0.346
  1399. 4.20.2.2. Streaming on Telnet Connections
  1400. In this case the local copy of Kermit is told to TELNET or SET HOST, and so it
  1401. knows it has a reliable connection and -- unless it has been told not to --
  1402. will offer to stream, and the other Kermit program, since it has STREAMING set
  1403. to AUTO, agrees.
  1404. Since we have a reliable connection, we'll also get control-character
  1405. unprefixing automatically because of the new clear-channel protocol (Section
  1406. 4.19).
  1407. Any errors that occur during streaming are fatal to the transfer.  The
  1408. message is "Transmission error on reliable link".  Should this happen:
  1409.  a. Check the remote Kermit's flow control setting (SHOW COMMUNICATIONS).
  1410.     If it is NONE, change it to XON/XOFF, or vice versa.  If it is XON/XOFF
  1411.     (or you just changed it to XOFF/XOFF), make sure the file sender is
  1412.     prefixing the XON and XOFF characters.  In the most drastic case, use
  1413.     "set prefix all" to force prefixing of all control characters.
  1414.  b. The remote Telnet server might chop off the 8th bit.  In that case, tell
  1415.     C-Kermit to "set parity space".  Or, you might be able to force the
  1416.     Telnet to allow eight-bit data by telling C-Kermit to "set telopt binary
  1417.     request accept" -- that is, request the Telnet server to enter binary
  1418.     mode, and accept binary-mode bids from the server.
  1419.  c. The remote Telnet server might have a buffering limitation.  If a and b
  1420.     don't cure the problem, tell the file receiver to "set receive
  1421.     packet-length 1000" (or other number -- use the largest one that works).
  1422.     This too, is no different from the non-streaming case (more about this
  1423.     in Section 4.20.2.3).
  1424. And remember you can continue interrupted binary-mode transfers where they
  1425. left off with the RESEND (= SEND /RECOVER) command.
  1426. Here are the figures for the same 84 trials between the same Sun and IBM
  1427. hosts as in 4.20.2.1, on the same network, but over a Telnet connection rather
  1428. than socket-to-socket:
  1429.                   Streaming    Nonstreaming
  1430.   Max CPS         350088        322523
  1431.   Min CPS          95547        173152
  1432.   Mean CPS        321372        281830
  1433.   Median CPS      342604        291469
  1434.   Std Dev          40503         29948
  1435. Correlations:
  1436.   CPS and window size:    0.001
  1437.   CPS and packet length:  0.152
  1438.   CPS and streaming:      0.128
  1439. Here the effect is not as emphatic as in the socket-to-socket case, yet on
  1440. the whole streaming tends to be beneficial.
  1441. Additional measurements on HP-UX using C-Kermit 7.0 Beta.06:
  1442.                   Windowing     Streaming
  1443.   HP-UX 8->8      not tested       14Kcps
  1444.   HP-UX 8->9      not tested       76Kcps
  1445.   HP-UX 8->10      36Kcps          66Kcps
  1446.   HP-UX 9->9      not tested      190Kcps
  1447.   HP-UX 9->10     160Kcps         378Kcps
  1448. 4.20.2.3. Streaming with Limited Packet Length
  1449. The IRIX telnet server (at least the ones observed in IRIX 5.3 and 6.2) does
  1450. not allow Kermit to send packets longer than 4096 bytes.  Thus when sending
  1451. from IRIX C-Kermit when it is on the remote end of a Telnet connection, the
  1452. packet length must be 4K or less.  Trials in this case (in which packet
  1453. lengths range from 1450 to 4000) show a strong advantage for streaming, which
  1454. would be evident in any other case where the packet length is restricted, and
  1455. stronger the shorter the maximum packet length.
  1456.                   Streaming    Nonstreaming
  1457.   Max CPS         426187        366870
  1458.   Min CPS         407500        276517
  1459.   Mean CPS        415226        339168
  1460.   Median CPS      414139        343803
  1461.   Std Dev           6094         25851
  1462. Correlations:
  1463.   CPS and window size:    0.116
  1464.   CPS and packet length:  0.241
  1465.   CPS and streaming:      0.901
  1466. 4.20.2.4. Streaming on Dialup Connections
  1467. Here "dialup" refers to a "direct" dialup connection, not a SLIP or PPP
  1468. connection, which is only a particular kind of TCP/IP connection.
  1469. Attempt this at your own risk, and then only if (a) you have error-correcting
  1470. modems, and (b) the connections between the modems and computers are also
  1471. error-free, perfectly flow-controlled, and free of interrupt conflicts.
  1472. Streaming can be used effectively and to fairly good advantage on such
  1473. connections, but remember that the transfer is fatal if even one error is
  1474. detected (also remember that should a binary-mode transfer fail, it can be
  1475. recovered from the point of failure with RESEND).
  1476. To use streaming on an unreliable connection, you must tell both Kermits that
  1477. the connection is reliable:
  1478.   kermit -I
  1479. or:
  1480.   C-Kermit> set reliable on
  1481. In this case, it will probably be necessary to prefix some control characters,
  1482. for example if your connection is through a terminal server that has an escape
  1483. character.  Most Cisco terminal servers, for example, require Ctrl-^ (30, as
  1484. well as its high-bit equivalent, 158) to be prefixed.  To unprefix these,
  1485. you'll need to defeat the "clear channel" feature:
  1486.   C-Kermit> set reliable on
  1487.   C-Kermit> set clear-channel off
  1488.   C-Kermit> set prefixing none
  1489.   C-Kermit> set control prefix 1 13 30 158 ; and whatever else is necessary
  1490. Dialup trials were done using fixed large window and packet sizes.  They
  1491. compare uploading and downloading of two common types of files, with and
  1492. without streaming.  Configuration:
  1493.   HP-9000/715/33 -- 57600bps, RTS/CTS -- USR Courier V.34 -- V.34+V.42,
  1494.   31200bps -- USR V.34+ Rackmount -- 57600bps, RTS/CTS -- Cisco terminal
  1495.   server -- Solaris 2.5.1.  Packet size = 8000, Window Size = 30, Control
  1496.   Character Unprefixing Minimal (but including the Cisco escape character).
  1497. Since this is not a truly reliable connection, a few trials failed when a bad
  1498. packet was received (most likely due to UART overruns); the failure was
  1499. graceful and immediate, and the message was informative.  The results of ten
  1500. successful trials uploading and downloading the two files with and without
  1501. streaming are:
  1502.             Streaming..
  1503.             Off    On
  1504.    Upload   5194   5565   txt (= C source code, 78K)
  1505.             3135   3406   gz  (= gzip file, compressed, 85K)
  1506.  Download   5194   5565   txt
  1507.             3041   3406   gz
  1508. Each CPS figure is the mean of 10 results.
  1509. A brief test was also performed on a LAT-based dialout connection from a VAX
  1510. 3100 with VMS 5.5 to a USR Courier V.34 connected to a DECserver 700 at 19200
  1511. bps.  The 1-MB Sparc executable downloaded from a Sun to the VAX at 1100cps
  1512. without streaming and 1900cps with streaming, using 8000-byte packets, 30
  1513. window slots, and minimal prefixing in both cases.
  1514. 4.20.2.5. Streaming on X.25 Connections
  1515. We have only limited access to X.25 networks.  One trial was performed in
  1516. which the 1MB Solaris 2.4 Sparc executable was transferred over a SunLink X.25
  1517. connection; nothing is known about the actual physical connection.  With a
  1518. packet length of 8000 and a window size of 30, the file transferred at 6400
  1519. cps (using a maximum of 6 window slots).  With the same packet length, but
  1520. with streaming, it transferred without mishap at 6710 cps, about 5% faster.
  1521. 4.20.3. Streaming - Preliminary Conclusions
  1522. The results vary with the particular connection, but are good overall.
  1523. Although numerous lower-level tricks can be used to improve performance on
  1524. specific platforms or connection methods, streaming occurs at a high,
  1525. system-independent level of the Kermit protocol and therefore can apply to all
  1526. types of platforms and (reliable) connections transparently.
  1527. 4.21. The TRANSMIT Command
  1528. Prior to C-Kermit 7.0, the TRANSMIT command transmitted in text or binary
  1529. mode according to SET FILE TYPE { TEXT, BINARY }.  But now that binary mode
  1530. is likely to be the default for protocol transfers, it is evident that this
  1531. not also an appropriate default for TRANSMIT, since binary-mode TRANSMIT is
  1532. a rather specialized and tricky operation.  Therefore, TRANSMIT defaults to
  1533. text mode always, regardless of the FILE TYPE setting.
  1534. C-Kermit 7.0 expands the capabilities of the TRANSMIT command by adding the
  1535. following switches (see Section 1.5).  The new syntax is:
  1536.   TRANSMIT [ switches... ] filename
  1537. Zero or more switches may be included:
  1538. /PIPE
  1539.   When /PIPE is included, "filename" is interpreted as a system command
  1540.   or program whose output is to be sent.  Synonym: /COMMAND.  Example:
  1541.     transmit /pipe finger
  1542.   You may enclose the command in braces, but you don't have to:
  1543.     xmit /pipe {ls -l | sort -r +0.22 -0.32 | head}
  1544. /BINARY
  1545.   Transmits the file (or pipe output) in binary mode.
  1546. /TEXT
  1547.   Transmits the file (or pipe output) in line-oriented text mode.
  1548.   Current FILE CHARACTER-SET and TERMINAL CHARACTER-SET selections govern
  1549.   translation.  Default.
  1550. /TRANSPARENT
  1551.   Specifies text mode without character-set translation, no matter what the
  1552.   FILE and TERMINAL CHARACTER-SET selections are.
  1553. /NOWAIT
  1554.   This is equivalent to SET TRANSMIT PROMPT 0, but for this TRANSMIT command
  1555.   only.  Applies only to text mode; it means to not wait for any kind of
  1556.   echo or turnaround character after sending a line before sending the next
  1557.   line.  (Normally Kermit waits for a linefeed.)
  1558. When TRANSMIT ECHO is ON, C-Kermit tries to read back the echo of each
  1559. character that is sent.  Prior to C-Kermit 7.0, 1 second was allowed for each
  1560. echo to appear; if it didn't show up in a second, the TRANSMIT command would
  1561. fail.  Similarly for the TRANSMIT PROMPT character.  However, with today's
  1562. congested Internet connections, etc, more time is often needed:
  1563. SET TRANSMIT TIMEOUT <number>
  1564.   Specifies the number of seconds to wait for an echo or the prompt character
  1565.   when TRANSMIT PROMPT is nonzero; the default wait is 1 second.  If you
  1566.   specify 0, the wait is indefinite.  When a timeout interval of 0 is
  1567.   specified, and a desired echo or prompt does not show up, the TRANSMIT
  1568.   command will not terminate until or unless you interrupt it with Ctrl-C;
  1569.   use SET TRANSMIT TIMEOUT 0 with caution.
  1570. Note: to blast a file out the communications connection without any kind of
  1571. synchronization or timeouts or other manner of checking, use:
  1572.   SET TRANSMIT ECHO OFF
  1573.   SET TRANSMIT PROMPT 0 (or include the /NOWAIT switch)
  1574.   SET TRANSMIT PAUSE 0
  1575.   TRANSMIT [ switches ] <filename>
  1576. In this case, text-file transmission is not-line oriented and large blocks
  1577. can be sent, resulting in a significant performance improvement over
  1578. line-at-at-time transmission.  Successful operation depends (even more than
  1579. usual for the TRANSMIT command!) on a clean connection with effective flow
  1580. control.
  1581. For details on TRANSMIT and character sets, see Section 6.6.5.4.
  1582. 4.22. Coping with Faulty Kermit Implementations
  1583. Kermit protocol has been implemented in quite a few third-party commercial,
  1584. shareware, and freeware software packages, with varying degrees of success.
  1585. In most cases operation is satisfactory but slow -- only the bare minimum
  1586. subset of the protocol is available -- short packets, no sliding windows,
  1587. no attributes, etc.  In other cases, the implementation is incorrect,
  1588. resulting in failures at the initial negotiation stage or corrupted files.
  1589. C-Kermit 7.0 and Kermit 95 1.1.18 include some new defense mechanisms to
  1590. help cope with the most common situations.  However, bear in mind there is
  1591. only so much we can do in such cases -- the responsibility for fixing the
  1592. problem lies with the maker of the faulty software.
  1593. 4.22.1. Failure to Accept Modern Negotiation Strings
  1594. The published Kermit protocol specification states that new fields can be
  1595. added to the parameter negotiation string.  These are to be ignored by any
  1596. Kermit implementation that does not understand them; this is what makes the
  1597. Kermit protocol extensible.  Unfortunately, some Kermit implementations become
  1598. confused (or worse) when receiving a negotiation string longer than the one
  1599. they expect.  You can try working around such problems by telling Kermit to
  1600. shorten its negotiation string (and thus disable the corresponding new
  1601. features):
  1602.   SET SEND NEGOTIATION-STRING-MAX-LENGTH number
  1603. Try a number like 10.  If that doesn't work, try 9, 8, 7, 6, and so on.
  1604. 4.22.2. Failure to Negotiate 8th-bit Prefixing
  1605. The published Kermit protocol specification states that 8th-bit prefixing
  1606. (which allows transfer of 8-bit data over a 7-bit connection) occurs if the
  1607. file sender puts a valid prefix character (normally "&") in the 8th-bit-prefix
  1608. field of the negotiation string, and the receiver puts either a letter "Y" or
  1609. the same prefix character.  At least one faulty Kermit implementation exists
  1610. that does not accept the letter "Y".  To force C-Kermit / K-95 to reply with
  1611. the other Kermit's prefix character rather than a "Y", give the following
  1612. (invisible) command:
  1613.   SET Q8FLAG ON
  1614. Use SET Q8FLAG OFF to restore the normal behavior.
  1615. 4.22.3. Corrupt Files
  1616. Refer to Section 4.22.2.  Some Kermit implementations mistakenly interpret the
  1617. "Y" as a prefix character.  Then, whenever a letter Y appears in the data, the
  1618. Y and the character that follows it are replaced by a garbage character.  At
  1619. this writing, we are not sure if there is any solution, but try "set send
  1620. negotiation-string-max-length 6" and/or "set q8flag on".
  1621. File corruption can also occur when control characters within the file data
  1622. are sent without prefixing, as at least some are by default in C-Kermit 7.0
  1623. and K-95.  Some Kermit implementations do not handle incoming "bare" control
  1624. characters.  To work around, "set prefixing all".
  1625. 4.22.4. Spurious Cancellations
  1626. The Kermit protocol specification states that if an ACK to a Data packet
  1627. contains X in its data field, the transfer of the current file is canceled,
  1628. and if it contains a Z, the entire transfer is canceled.  At least one
  1629. overzealous Kermit implementation applies this rule to non-Data packets as
  1630. well, the typical symptom being that any attempt to transfer a file whose name
  1631. begins with X or Z results in cancellation.  This is because the file receiver
  1632. typically sends back the name under which it stored the file (which might not
  1633. be the same as the name it was sent with) in the ACK to the File Header
  1634. packet.  This is information only and should not cause cancellation.  To work
  1635. around the problem, use:
  1636.   SET F-ACK-BUG { ON, OFF }
  1637. ON tells Kermit not to send back the filename in the ACK to the file header
  1638. packet as it normally would do (OFF puts Kermit back to normal after using ON).
  1639. A variation on the this bug occurs in an obscure Kermit program for MUMPS:
  1640. When this Kermit program sends a file called (say) FOO.BAR, it requires that
  1641. the ACK to its F packet contain exactly the same name, FOO.BAR.  However,
  1642. C-Kermit likes to send back the full pathname, causing the MUMPS Kermit to
  1643. fail.  SET F-ACK-BUG ON doesn't help here.  So a separate command has been
  1644. added to handle this situation:
  1645.   SET F-ACK-PATH { ON, OFF }
  1646. Normally it is ON (regardless of the SET SEND PATHNAMES setting).  Use
  1647. SET F-ACK-PATH OFF to instruct Kermit to send back only the filename without
  1648. the path in the ACK to the F packet.
  1649. 4.22.5. Spurious Refusals
  1650. Some Kermit implementations, notably PDP-11 Kermit 3.60 and earlier, have bugs
  1651. in their handling of Attribute packets that can cause unwarranted refusal of
  1652. incoming files, e.g. based on date or size.  This can be worked around by
  1653. telling one or both of the Kermit partners to:
  1654.   SET ATTRIBUTES OFF
  1655. 4.22.6. Failures during the Data Transfer Phase
  1656. This can be caused by control-character unprefixing (Section 4.22.3), and
  1657. fixed by:
  1658.   SET PREFIXING ALL
  1659. It can also have numerous other causes, explained in Chapter 10 of "Using
  1660. C-Kermit": the connection is not 8-bit transparent (so use "set parity space"
  1661. or somesuch), inadequate flow control, etc.  Consult the manual.
  1662. 4.22.7. Fractured Filenames
  1663. At least one well-known PC-based communications package negotiates data
  1664. compression, which (according to the protocol specification) applies to both
  1665. the filename and the file data, but then fails to decompress the filename.
  1666. Example: C-Kermit sends a file called R000101.DAT (where 000101 might be
  1667. non-Y2K-wise YYMMDD notation), and the package in question stores the files
  1668. as R~#0101.DAT.  Workaround: Tell C-Kermit to SET REPEAT COUNTS OFF.
  1669. 4.22.8. Bad File Dates
  1670. At least one well-known PC-based communications package negotiates the
  1671. passing of file timestamps from sender to receiver, but when it is sending
  1672. files, it always gives them a timestamp of 1 February 1970.  Workaround:
  1673. tell C-Kermit to SET ATTRIBUTE DATE OFF.  You don't get the file's real date,
  1674. but you also don't get 1 Feb 1970; instead the file gets the current date
  1675. and time.
  1676. 4.23. File Transfer Recovery
  1677. Prior to C-Kermit 7.0, RESEND (SEND /RECOVER) and REGET (GET /RECOVER) refused
  1678. to work if FILE TYPE was not BINARY or the /BINARY switch was not included.
  1679. Now these commands include an implied /BINARY switch, meaning they set the
  1680. file type to binary for the duration of the command automatically.
  1681. In the client/server arrangement, this also forces the server into binary
  1682. mode (if it is C-Kermit 7.0 or greater, or K95 1.1.18 or greater) so the
  1683. recovery operation proceeds, just as you asked and expected.
  1684. BUT...  Just as before, the results are correct only under the following
  1685. conditions:
  1686.  . If the prior interrupted transfer was also in binary mode; or:
  1687.  . If the prior transfer was in text mode and the other computer was
  1688.    a "like platform" (e.g. UNIX-to-UNIX, Windows-to-Windows, DOS-to-Windows)
  1689.    AND there was no character-set translation (i.e. TRANSFER CHARACTER-SET
  1690.    was TRANSPARENT).
  1691. Note that these circumstances are more likely to obtain in C-Kermit 7.0,
  1692. in which:
  1693.  . The default FILE TYPE in C-Kermit 7.0 is BINARY.
  1694.  . The default FILE INCOMPLETE setting is AUTO, which means KEEP if the
  1695.    transfer is in binary mode, DISCARD otherwise.
  1696.  . C-Kermit 7.0, Kermit 95 1.1.17, and MS-DOS Kermit 3.15 and later can
  1697.    recognize "like platforms" and switch into binary mode automatically.
  1698.    Transfers between like platforms are always binary unless character-set
  1699.    translation has been requested, and then is still binary for all files
  1700.    whose names match a binary pattern, unless the automatic mechanisms
  1701.    have been disabled (with a /TEXT switch, or with SET TRANSFER MODE
  1702.    MANUAL).
  1703.  . SEND /BINARY and GET /BINARY always force binary-mode transfers,
  1704.    even when FILE TYPE is TEXT, even when TRANSFER MODE is AUTOMATIC,
  1705.    even when PATTERNS are ON and the file's name matches a text pattern.
  1706. But also note that the automatic client/server transfer-mode adjustments
  1707. do not work with versions of C-Kermit prior to 7.0 or K95 prior to 1.1.16.
  1708. If the prior transfer was in text mode:
  1709.  . If text-mode transfers between the two platforms are "length-changing"
  1710.    (as they are between UNIX -- which terminates text lines with LF -- and
  1711.    DOS or Windows -- which terminates text lines with CRLF), the recovered
  1712.    file will be corrupt.
  1713.  . If text-mode transfers between the two platforms are not length-changing,
  1714.    but character-set translation was active in the prior transfer, the result
  1715.    will be a file in which the first part has translated characters and the
  1716.    second part does not.
  1717. But in C-Kermit 7.0 and K95 1.1.18 and later, incompletely transferred text
  1718. files are not kept unless you change the default.  But if you have done this,
  1719. and you have an incompletely transferred text file, you'll need to:
  1720.  . Transfer the whole file again in text mode, or:
  1721.  . Use SEND /STARTING-AT: to recover the transfer at the correct point;
  1722.    but you have to find out what that point is, as described in the
  1723.    manual.
  1724. Kermit has no way of knowing whether the previous transfer was in text or
  1725. binary mode so it is your responsibility to choose the appropriate recovery
  1726. method.
  1727. If you use C-Kermit to maintain parallel directories on different computers,
  1728. using SET FILE COLLISION to transfer only those files that changed since last
  1729. time, and the files are big enough (or the connection slow enough) to require
  1730. SEND /RECOVER to resume interrupted transfers, you should remember that SEND
  1731. /RECOVER (RESEND) overrides all FILE COLLISION settings.  Therefore you
  1732. should use SEND /RECOVER (RESEND) only on the file that was interrupted, not
  1733. the file group.  For example, if the original transfer was initiated with:
  1734.   SEND *
  1735. and was interrupted, then after reestablishing your connection and starting
  1736. the Kermit receiver with SET FILE COLLISION UPDATE on the remote end, use the
  1737. following sequence at the sender to resume the transfer:
  1738.   SEND /RECOVER <name-of-interrupted-file>
  1739. and then:
  1740.   SEND *
  1741. (In C-Kermit 7.0 and later, v(filename) contains the name of the file
  1742. most recently transferred, as long you have not EXITed from Kermit or
  1743. changed directory, etc.
  1744. 4.24. FILE COLLISION UPDATE Clarification
  1745. In UNIX, file modification dates are used when comparing the file date with
  1746. the date in the attribute packet.  In VMS, however, the file creation date
  1747. is used.  These two policies reflect the preferences of the two user
  1748. communities.
  1749. Also, remember that the file date/time given in the attribute packet is the
  1750. local time at the file sender.  At present, no timezone conversions are
  1751. defined in or performed by the Kermit protocol.  This is primarily because
  1752. this feature was designed at a time when many of the systems where Kermit runs
  1753. had no concept of timezone, and therefore would be unable to convert (say,
  1754. to/from GMT or UTC or Zulu time).
  1755. As a consequence, some unexpected results might occur when transferring files
  1756. across timezones; e.g. commands on the target system that are sensitive to
  1757. file dates might work (UNIX "make", backups, etc).
  1758. Timezone handling is deferred for a future release.
  1759. 4.25. Autodownload Improvements
  1760. Refer to pages 164-165 of "Using C-Kermit" about the hazards of autodownload
  1761. when C-Kermit is "in the middle".  As of C-Kermit 7.0, no more hazards.  If
  1762. C-Kermit has TERMINAL AUTODOWNLOAD ON and it detects a packet of the current
  1763. protocol type (Kermit or Zmodem), it "erases" the visual aspect of the packet
  1764. that would be seen by the terminal (or, more to the point, the emulator, such
  1765. as K95).  This way, only C-Kermit goes into RECEIVE mode, and not also the
  1766. terminal emulator through which C-Kermit is accessed.  And therefore, it is no
  1767. longer necessary to SET TERMINAL AUTODOWNLOAD OFF to prevent multiple Kermits
  1768. from going into receive mode at once, but of course it is still necessary to
  1769. ensure that, when you have multiple Kermits in a chain, that the desired one
  1770. receives the autodownload.
  1771. The defaults have not been changed; Kermit 95 still has autodownload ON by
  1772. default, and C-Kermit has it OFF by default.
  1773. (5) CLIENT/SERVER
  1774. 5.0. Hints
  1775. If you use SET SERVER GET-PATH to set up your server, and the GET-PATH does
  1776. not include the server's current directory, clients can become quite confused.
  1777. For example, "remote dir oofa.txt" shows a file named oofa.txt, but "get
  1778. oofa.txt" fails.  In this situation, you should either DISABLE DIR or make
  1779. your GET-PATH include the current directory.
  1780. 5.1. New Command-Line Options
  1781. The -G command-line option is like -g (GET), except the incoming file is
  1782. sent to standard output rather than written to disk.
  1783. The -I option ("Internet") is used to tell a remote C-Kermit program that you
  1784. are coming in  via Internet Telnet or Rlogin and therefore have a reliable
  1785. connection.  The -I option is equivalent to SET RELIABLE ON and SET FLOW
  1786. NONE.
  1787. The -O option ("Only One") tells C-Kermit to enter server mode but then exit
  1788. after the first client operation.
  1789. See section 9.3 for details.
  1790. 5.2. New Client Commands
  1791. BYE and FINISH no longer try to do anything if a connection is not active.
  1792. Thus a sequence like "hangup" followed by "bye" or "finish" will no longer get
  1793. stuck in a long timeout-and-retransmission cycle, nor will it try to open a
  1794. new connection.
  1795. REMOTE EXIT
  1796.   Similar to FINISH, except it ensures that the Kermit server program exits
  1797.   back to the operating system or shell prompt.  (FINISH would return it to
  1798.   its interactive prompt if it was started in interactive mode, and would
  1799.   cause it to exit if it entered server mode via command-line option.)  When
  1800.   C-Kermit is to be the server, you can use { ENABLE, DISABLE } EXIT to
  1801.   control the client's access to this feature.
  1802. REMOTE MKDIR <directory-name>
  1803.   Tells the client to ask the server to create a directory with the given
  1804.   name, which can be absolute or relative.  The syntax of the directory name
  1805.   depends on the Kermit server (see next section); in all cases, it can be in
  1806.   the syntax of the system where the server is running (UNIX, VMS, DOS, etc)
  1807.   but newer servers also accept UNIX syntax, no matter what the underlying
  1808.   platform.  The server will not execute this command if (a) it does not
  1809.   understand it, (b) a DISABLE MKDIR command has been given, or (c) a DISABLE
  1810.   CWD command has been given; otherwise, the command is executed, but will
  1811.   fail if the directory can not be created, in which cases most servers will
  1812.   attempt to return a message giving the reason for failure.  The REMOTE MKDIR
  1813.   command succeeds if the remote directory is created, or if it already exists
  1814.   and therefore does not need to be created, and fails otherwise.
  1815. REMOTE RMDIR <directory-name>
  1816.   Tells the client to ask the server to remove (delete) a directory with the
  1817.   given name.  The same considerations apply as for REMOTE MKDIR.
  1818. REMOTE SET FILE INCOMPLETE { DISCARD, KEEP, AUTO }
  1819.   Previously this was only available in its earlier form, REMOTE SET
  1820.   INCOMPLETE (no FILE).  The earlier form is still available, but invisible.
  1821.   Also, AUTO was added, meaning KEEP if in binary mode, DISCARD otherwise.
  1822. REMOTE SET TRANSFER MODE { AUTOMATIC, MANUAL }
  1823.   Tells the client to ask the server to set the given file-transfer mode.
  1824.   Automatic means (roughly): if the client and the server are running on the
  1825.   same kind of computer (e.g. both are on UNIX), then use binary mode
  1826.   automatically; if the system types are different, use some other method
  1827.   to automatically determine text or binary mode, such as filename pattern
  1828.   matching.  MANUAL means, in this context, obey the client's FILE TYPE
  1829.   setting (TEXT or BINARY).  Synonym: REMOTE SET XFER MODE ...
  1830. [ REMOTE ] QUERY KERMIT function(args...)
  1831.   Prior to C-Kermit 7.0, the arguments were not evaluated locally.  Thus it
  1832.   was not possible to have the server run the function with client-side
  1833.   variables as arguments.  Now:
  1834.     define %a oofa.*
  1835.     remote query kermit files(%a)    ; Client's %a
  1836.     remote query kermit files(\%a)   ; Server's %a
  1837. [ REMOTE ] LOGIN [ <user> [ <password ] ]
  1838.   LOGIN is now a synonym for REMOTE LOGIN.
  1839. LOGOUT
  1840.   This command, when given in local mode, is equivalent to REMOTE LOGOUT.
  1841.   When given at the IKSD prompt, it logs out the IKSD.  When given at the
  1842.   C-Kermit prompt when it has no connection, it does nothing.
  1843. Note that in C-Kermit 7.0, the REMOTE (or R) prefix is not required for QUERY,
  1844. since there is no local QUERY command.  The new top-level QUERY command does
  1845. exactly what REMOTE QUERY (RQUERY) does.
  1846. All REMOTE commands now have single-word shortcuts:
  1847.  Shortcut   Full Form
  1848.   RASG       REMOTE ASSIGN
  1849.   RCD        REMOTE CD
  1850.   RCOPY      REMOTE COPY
  1851.   RDEL       REMOTE DELETE
  1852.   RDIR       REMOTE DIRECTORY
  1853.   REXIT      REMOTE EXIT
  1854.   RHELP      REMOTE HELP
  1855.   RHOST      REMOTE HOST
  1856.   RPWD       REMOTE PWD
  1857.   RSET       REMOTE SET
  1858.   etc.
  1859. The R prefix is not applied to LOGIN because there is already an RLOGIN
  1860. command with a different meaning.  It is not applied to LOGOUT either, since
  1861. LOGOUT knows what to do in each case, and for symmetry with LOGIN.
  1862. 5.2.1. Remote Procedure Definitions and Calls
  1863. This is nothing new, but it might not be obvious...  REMOTE ASSIGN and REMOTE
  1864. QUERY may be used to achieve remote procedure execution.  The remote procedure
  1865. can be defined locally or remotely.
  1866. A remote procedure call is accomplished as noted in the previous section:
  1867.   [ remote ] query kermit function-name(args...)
  1868. This invokes any function that is built in to the Kermit server, e.g.:
  1869.   [ remote ] query kermit size(foo.bar)
  1870. returns the size of the remote file, foo.bar.
  1871. Now note that C-Kermit includes an fexecute() function, allowing it to
  1872. execute any macro as if it were a built-in function.  So suppose MYMACRO
  1873. is the name of a macro defined in the server.  You can execute it from
  1874. the client as follows (the redundant "remote" prefix is omitted in the
  1875. remaining examples):
  1876.   query kermit execute(mymacro arg1 arg2...)
  1877. The return value, if any, is the value of the RETURN command that terminated
  1878. execution of the macro, for example:
  1879.   define addtwonumbers return feval(%1+%2)
  1880. The client invocation would be:
  1881.   query kermit execute(addtwonumbers 3 4)
  1882.   7
  1883. The result ("7" in this case) is also assigned to the client's v(query)
  1884. variable.
  1885. To execute a remote system command or command procedure (shell script, etc)
  1886. use:
  1887.   query kermit command(name args...)
  1888. Finally, suppose you want the client to send a macro to the server to be
  1889. executed on the server end.  This is done as follows:
  1890.   remote assign macroname definition
  1891.   query kermit execute(macroname arg1 arg2...)
  1892. Quoting is required if the definition contains formal parameters.
  1893. 5.3. New Server Capabilities
  1894. 5.3.1. Creating and Removing Directories
  1895. The C-Kermit 7.0 server responds to REMOTE MKDIR and REMOTE RMDIR commands.
  1896. The directory name may be in either the native format of the server's
  1897. computer, or in UNIX format.  For example, a server running on VMS with a
  1898. current directory of [IVAN] can accept commands from the client like:
  1899.   remote mkdir olga         ; Makes [IVAN.OLGA] (nonspecific format)
  1900.   remote mkdir .olga        ; Makes [IVAN.OLGA] (VMS format without brackets)
  1901.   remote mkdir olga/        ; Makes [IVAN.OLGA] (UNIX relative format)
  1902.   remote mkdir /ivan/olga   ; Makes [IVAN.OLGA] (UNIX absolute format)
  1903.   remote mkdir [ivan.olga]  ; Makes [IVAN.OLGA] (VMS absolute format)
  1904.   remote mkdir [.olga]      ; Makes [IVAN.OLGA] (VMS relative format)
  1905. 5.3.1.1. Creating Directories
  1906. If a directory name is given that contains more than one segment that does not
  1907. exist, the server attempts to create all the segments.  For example, if the
  1908. client says:
  1909.   REMOTE MKDIR letters/angry
  1910. a "letters" subdirectory is created in the server's current directory if it
  1911. does not already exist, and then an "angry" subdirectory is created beneath
  1912. it, if it does not already have one.  This can repeated to any reasonable
  1913. depth:
  1914.   REMOTE MKDIR a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/z/y/z
  1915. 5.3.1.2. Removing Directories
  1916. When attempting to execute a REMOTE RMDIR, the server can remove only a single
  1917. directory, not an entire sequence or tree.  The system service that is called
  1918. to remove the directory generally requires not only that the server process
  1919. has write delete access, but also that the directory contain no files.
  1920. In the future, a REMOTE RMDIR /RECURSIVE command (and the accompanying
  1921. protocol) might be added.  For now, use the equivalent REMOTE HOST command(s),
  1922. if any.
  1923. 5.3.2. Directory Listings
  1924. Directory listings are generated by C-Kermit itself, rather than by running
  1925. the underlying system's directory command.  Some control over the listing
  1926. format can be obtained with the SET OPTIONS DIRECTORY command (Section 4.5.1).
  1927. The following options affect listings sent by the server: /[NO]HEADING,
  1928. /[NO]DOTFILES, and /[NO]BACKUP.  In UNIX and VMS, the listing is always sorted
  1929. by filename.  There is, at present, no protocol defined for the client to
  1930. request listing options of the server; this might be added in the future.
  1931. The server's directory listings are in the following format:
  1932. Protection or permissions:
  1933.   In UNIX and OS-9, this is a 10-character field, left adjusted.  In VMS it
  1934.   is a 22-character field, left-adjusted.  In each case, the protection /
  1935.   permission codes are shown in the server platform's native format.  In
  1936.   other operating systems, this field is not shown.
  1937. Size in bytes:
  1938.   This is always a 10-character field.  The file's size is shown as a decimal
  1939.   number, right adjusted in the field.  If the file is a directory and its
  1940.   size can not be obtained, the size is shown as "<DIR>".  Two blanks follow
  1941.   this field.
  1942. Date:
  1943.   Always in yyyy-mm-dd hh:mm:ss numeric format, and therefore 19 characters
  1944.   long.   If the file's date/time can't be obtained, zeros (0) are shown for
  1945.   all the digits.  This field is followed by two blanks.
  1946. Filename:
  1947.   This field extends to the end of the line.  Filenames are shown relative
  1948.   to the server's current directory.  In UNIX, symbolic links are shown as
  1949.   they are in an "ls -l" listing as "linkname -> filename".
  1950. In UNIX and VMS, listings are returned by the server in alphabetical order of
  1951. filename.  There are presently no other sort or selection options.
  1952. However, since these are fixed-field listings, all fields can be used as
  1953. sort keys by external sort programs.  Note, in particular, that the format
  1954. used for the date allows a normal lexical on that field to achieve the date
  1955. ordering.  For example, let's assume we have a UNIX client and a UNIX server.
  1956. In this case, the server's listing has the date in columns 22-40, and thus
  1957. could be sorted by the UNIX sort program using "sort +0.22 -0.40" or in
  1958. reverse order by "sort +0.22 -0.40r".
  1959. Since the UNIX client can pipe responses to REMOTE commands through filters,
  1960. any desired sorting can be accomplished this way, for example:
  1961.   C-Kermit> remote directory | sort +0.22 -0.40
  1962. You can also sort by size:
  1963.   C-Kermit> remote directory | sort +0.11 -0.19
  1964. You can use sort options to select reverse or ascending order.  "man sort"
  1965. (in UNIX) for more information.  And of course, you can pipe these listings
  1966. through any other filter of your choice, such as grep to skip unwanted lines.
  1967. 5.4. Syntax for Remote Filenames with Embedded Spaces
  1968. C-Kermit and K95, when in server mode, assume that any spaces in the file
  1969. specification in an incoming GET command are filename separators.  Thus if
  1970. the client gives a command like:
  1971.   get {oofa.txt oofa.bin}
  1972. or, equivalently:
  1973.   mget oofa.txt oofa.bin
  1974. the server tries to send the two files, oofa.txt and oofa.bin.  But what if
  1975. you want the server to send you a file named, say:
  1976.   D:HP OfficeJet 500ImagesMy Pretty Picture Dot PCL
  1977. How does the server know this is supposed to be one file and not seven?
  1978. In this case, you need to the send file name to the server enclosed in either
  1979. curly braces:
  1980.   {D:HP OfficeJet 500ImagesMy Pretty Picture Dot PCL}
  1981. or ASCII doublequotes:
  1982.   "D:HP OfficeJet 500ImagesMy Pretty Picture Dot PCL"
  1983. The method for doing this depends on your client.  If your client is C-Kermit
  1984. 7.0, any recent version of Kermit 95, or MS-DOS Kermit 3.16, then you have
  1985. to enclose the name in braces just so the client can parse it, so to send
  1986. braces or doublequotes to the server, you must put them inside the first,
  1987. outside pair of braces.  And you also need to double the backslashes to
  1988. prevent them from being interpreted:
  1989.   get {{D:\HP OfficeJet 500\Images\My Pretty Picture Dot PCL}}
  1990.   get {"D:\HP OfficeJet 500\Images\My Pretty Picture Dot PCL"}
  1991. To get around the requirement to double backslashes in literal filenames,
  1992. of course you can also use:
  1993.   set command quoting off
  1994.   get {{D:HP OfficeJet 500ImagesMy Pretty Picture Dot PCL}}
  1995.   get {"D:HP OfficeJet 500ImagesMy Pretty Picture Dot PCL"}
  1996.   set command quoting on
  1997. If you are giving a "kermit" command to the UNIX shell, you have to observe
  1998. the shell's quoting rules, something like this:
  1999.   kermit -ig "{D:HP OfficeJet 500ImagesMy Pretty Picture Dot PCL}"
  2000. Here, the quotes go on the outside so UNIX will pass the entire filename,
  2001. spaces, braces, and all, as a single argument to Kermit, and the backslashes
  2002. are not doubled because (a) the UNIX shell ignores them since they are in a
  2003. quoted string, and (b) Kermit ignores them since the interactive command parser
  2004. is not activated in this case.
  2005. 5.5. Automatic Orientation Messages upon Directory Change
  2006. C-Kermit 7.0, when acting as a server, can send an orientation message to
  2007. the client whenever the server directory changes.  For example, when the
  2008. client gives a REMOTE CD command, the server sends the contents of the
  2009. new directory's "Read Me" file to the client's screen.  The following commands
  2010. govern this feature:
  2011. SET SERVER CD-MESSAGE FILE <name>
  2012.   Given to the servr, allows the message-file name to be specified at runtime.
  2013.   A list of names to look for can be given in the following format:
  2014.     {{name1}{name2}{name3}{...}}