home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / TELECOM / ckermit.doc.Z / ckermit.doc
Text File  |  2009-11-06  |  96KB  |  2,010 lines

  1.  
  2. UNIX KERMIT
  3.  
  4. ********
  5. This document is formatted as an ordinary, plain text ASCII disk file.  Typeset
  6. copies are available  in  the  Kermit  User  Guide  from  Columbia  University.
  7. Changes should be made to CKUKER.MSS.
  8. ********
  9.  
  10. Program:    Frank  da  Cruz,  Bill Catchings, Jeff Damens, Columbia University;
  11.             Herm Fischer, Encino CA; contributions by many others.
  12. Language:   C
  13. Documentation:
  14.             Frank da Cruz, Herm Fischer
  15. Version:    4E(068)
  16. Date:       January 24, 1988
  17.  
  18. C-Kermit is an implementation of Kermit, written modularly and transportably in
  19. C. The protocol state transition table is written in wart, a  (non-proprietary)
  20. lex-like  preprocessor for C. System-dependent primitive functions are isolated
  21. into separately compiled modules so that the program should be easily  portable
  22. among  Unix systems and also to non-Unix systems that have C compilers, such as
  23. VAX/VMS, Data General AOS/VS, Apollo Aegis, the Apple Macintosh, and  the  Com-
  24. modore  Amiga.   This document applies to Unix implementations of C-Kermit, and
  25. in most ways also to the VMS, Data General, and other implementations.
  26.  
  27.  
  28. Unix Kermit Capabilities At A Glance:
  29.  
  30.   Local operation:                   Yes
  31.   Remote operation:                  Yes
  32.   Login scripts:                     Yes (UUCP style)
  33.   Transfer text files:               Yes
  34.   Transfer binary files:             Yes
  35.   Wildcard send:                     Yes
  36.   File transfer interruption:        Yes
  37.   Filename collision avoidance:      Yes
  38.   Can time out:                      Yes
  39.   8th-bit prefixing:                 Yes
  40.   Repeat count prefixing:            Yes
  41.   Alternate block checks:            Yes
  42.   Terminal emulation:                Yes
  43.   Communication settings:            Yes
  44.   Transmit BREAK:                    Yes (most versions)
  45.   Support for dialout modems:        Yes
  46.   IBM mainframe communication:       Yes
  47.   Transaction logging:               Yes
  48.   Session logging:                   Yes
  49.   Debug logging:                     Yes
  50.   Packet logging:                    Yes
  51.   Act as server:                     Yes
  52.   Talk to server:                    Yes
  53.   Advanced server functions:         Yes
  54.   Local file management:             Yes
  55.   Command/Init files:                Yes
  56.   UUCP and multiuser line locking:   Yes
  57.   Long packets:                      Yes
  58.   Sliding Windows:                   No
  59.   File attributes packets:           No
  60.   Command macros:                    No
  61.   Raw file transmit:                 No
  62.  
  63. All numbers in the C-Kermit documentation are decimal unless noted otherwise.
  64.  
  65. C-Kermit provides traditional Unix command line operation  as  well  as  inter-
  66. active  command  prompting and execution.  The command line options provide ac-
  67. cess to a basic subset of C-Kermit's capabilities; the interactive command  set
  68. is far richer.
  69.  
  70. On  systems  with  dialout  modems,  C-Kermit's  command  file and login script
  71. facilities provide a counterpart  to  UUCP  for  file  transfer  with  non-UNIX
  72. operating  systems, including the use of scheduled (e.g. late night) unattended
  73. operation.
  74.  
  75.  
  76. 1.1. The Unix File System
  77.  
  78. Consult your Unix manual for details about the file system under  your  version
  79. of  Unix.  In general, Unix files have lowercase names, possibly containing one
  80. or more dots or other special characters.   Unix  directories  are  tree-struc-
  81. tured.  Directory levels are separated by slash ("/") characters.  For example,
  82.  
  83.     /usr/foo/bar
  84.  
  85. denotes the file bar in the directory /usr/foo.  Alphabetic case is significant
  86. in  Unix  file and directory names, i.e. "a" is a different file (or directory)
  87. from "A".  Wildcard or "meta" characters allow groups of files to be specified.
  88. "*" matches any string; "?" matches any single character.
  89.  
  90. When  C-Kermit  is  invoked  with  file arguments specified on the Unix command
  91. line, the Unix shell (Bourne Shell, C-Shell, K-Shell,  etc)  expands  the  meta
  92. characters itself, and in this case a wider variety is available.  For example,
  93.  
  94.     kermit -s ~/ck[uvm]*.{upd,bwr}]
  95.  
  96. is expanded by the Berkeley C-Shell into a list of all the files in the  user's
  97. home  directory  (~/) that start with the characters "ck", followed by a single
  98. character "u", "v", or "m", followed by zero or more characters, followed by  a
  99. dot,  followed  by one of the strings "upd" or "bwr".  Internally, the C-Kermit
  100. program itself expands only the "*" and "?" meta characters.
  101.  
  102. Unix files are linear (sequential) streams of 8-bit bytes.  Text files  consist
  103. of 7-bit ASCII characters, with the high-order bit off (0), and lines separated
  104. by the Unix newline character, which is linefeed (LF, ASCII 10).  This  distin-
  105. guishes  Unix text files from those on most other ASCII systems, in which lines
  106. are separated by a carriage-return linefeed sequence (CRLF, ASCII 13,  followed
  107. by  linefeed,  ASCII  10).  Binary files are likely to contain data in the high
  108. bits of the file bytes, and have no particular line or record structure.
  109.  
  110. When transferring files, C-Kermit will convert between  upper  and  lower  case
  111. filenames  and  between LF and CRLF line terminators automatically, unless told
  112. to do otherwise.  When binary files must be transferred, the  program  must  be
  113. instructed  not  to  perform LF/CRLF conversion (-i on the command line or "set
  114. file type binary" interactively; see below).
  115.  
  116.  
  117. 1.2. File Transfer
  118.  
  119. If C-Kermit is in local mode, the screen (stdout)  is  continously  updated  to
  120. show  the  progress  of the file transer.  A dot is printed for every four data
  121. packets, other packets are shown by type:
  122.  
  123.     I Exchange Parameter Information
  124.     R Receive Initiate
  125.     S Send Initiate
  126.     F File Header
  127.     G Generic Server Command
  128.     C Remote Host Command
  129.     N Negative Acknowledgement (NAK)
  130.     E Fatal Error
  131.     T Indicates a timeout occurred
  132.     Q Indicates a damaged, undesired, or illegal packet was received
  133.     % Indicates a packet was retransmitted
  134.  
  135. You may type certain "interrupt" commands during file transfer:
  136.  
  137.     Control-F:  Interrupt the current File, and go on to the next (if any).
  138.     Control-B:  Interrupt the entire Batch of files, terminate the transaction.
  139.     Control-R:  Resend the current packet
  140.     Control-A:  Display a status report for the current transaction.
  141.  
  142. These interrupt characters differ from the ones used in other Kermit  implemen-
  143. tations  to  avoid conflict with commonly used Unix shell interrupt characters.
  144. With Version 7, System III, and System V  implementations  of  Unix,  interrupt
  145. commands must be preceeded by the 'connect' escape character (e.g. normally-\).
  146. Ctrl-F and Ctrl-B are effective only during the transfer of data  (D)  packets,
  147. and cannot be used to interrupt a transfer that has not yet reached that stage.
  148.  
  149.     CAUTION:  If Control-F or Control-B is used to cancel an incoming file,
  150.     and a file of the same name previously existed, and the "file  warning"
  151.     feature  is  not  enabled, then the previous copy of the file will dis-
  152.     appear.
  153.  
  154. EMERGENCY EXIT:  When running Unix Kermit in remote mode, if you have started a
  155. protocol operation (sending or receiving a file, server command wait, etc), you
  156. will not be able to communicate with the terminal in the normal way.   In  par-
  157. ticular,  you  cannot  stop  the  protocol  by typing the normal Unix interrupt
  158. characters, since the terminal has been put in "raw mode".    If  you  need  to
  159. regain  control  quickly  -- for instance, because the protocol is stuck -- you
  160. can type two Control-C's directly to the Unix Kermit program  ("connect"  first
  161. if necessary):  
  162.  
  163.     Control-C Control-C
  164.  
  165. This will cause the program to exit and restore the terminal to normal.
  166.  
  167.  
  168. 1.3. Command Line Operation
  169.  
  170. The  C-Kermit command line syntax conforms to the Proposed Syntax Standards for
  171. Unix System Commands put forth by Kathy Hemenway and Helene  Armitage  of  AT&T
  172. Bell Laboratories in Unix/World, Vol.1, No.3, 1984.  The rules that apply are:
  173.  
  174.    - Command names must be between 2 and 9 characters ("kermit" is 6).
  175.    - Command names must include lower case letters and digits only.
  176.    - An option name is a single character.
  177.    - Options are delimited by '-'.
  178.    - Options  with  no  arguments  may  be  grouped  (bundled)  behind one
  179.      delimiter.
  180.    - Option-arguments cannot be optional.
  181.    - Arguments immediately follow options, separated by whitespace.
  182.    - The order of options does not matter.
  183.    - '-' preceded and followed by whitespace means standard input.
  184.  
  185. A group of bundled options may end with an option that has an argument.
  186.  
  187. The following notation is used in command descriptions:
  188.  
  189. fn      A Unix file specification, possibly containing the  "wildcard"  charac-
  190.         ters  `*'  or  `?' (`*' matches all character strings, `?'  matches any
  191.         single character).
  192.  
  193. fn1     A Unix file specification which may not contain `*' or `?'.
  194.  
  195. rfn     A remote file specification in the remote system's  own  syntax,  which
  196.         may denote a single file or a group of files.
  197.  
  198. rfn1    A remote file specification which should denote only a single file.
  199.  
  200. n       A decimal number between 0 and 94.
  201.  
  202. c       A  decimal  number between 0 and 127 representing the value of an ASCII
  203.         character.
  204.  
  205. cc      A decimal number between 0 and 31, or else  exactly  127,  representing
  206.         the value of an ASCII control character.
  207.  
  208. [ ]     Any field in square braces is optional.
  209.  
  210. {x,y,z} Alternatives are listed in curly braces.
  211.  
  212. C-Kermit  command  line options may specify any combination of actions and set-
  213. tings.  If C-Kermit is invoked with a command line that specifies  no  actions,
  214. then  it  will  issue  a  prompt  and begin interactive dialog.  Action options
  215. specify either protocol transactions or terminal connection.
  216.  
  217. -s fn   Send the specified file or files.    If  fn  contains  wildcard  (meta)
  218.         characters,  the  Unix shell expands it into a list.  If fn is '-' then
  219.         kermit sends from standard input, which may come from a file:  
  220.  
  221.             kermit -s - < foo.bar
  222.  
  223.         or a parallel process:  
  224.  
  225.             ls -l | grep christin | kermit -s -
  226.  
  227.         You cannot use this mechanism to send terminal typein.  If you want  to
  228.         send  a  file  whose  actual name is "-" you can precede it with a path
  229.         name, as in 
  230.  
  231.             kermit -s ./-
  232.  
  233. -r      Receive a file or files.  Wait passively for files to arrive.
  234.  
  235. -k      Receive (passively) a file or files, sending them to  standard  output.
  236.         This option can be used in several ways:
  237.  
  238.         kermit -k
  239.             Displays the incoming files on your screen;  to  be  used  only  in
  240.             "local mode" (see below).
  241.  
  242.         kermit -k > fn1
  243.             Sends the incoming file or files to the named file, fn1.   If  more
  244.             than  one  file  arrives,  all  are  concatenated together into the
  245.             single file fn1.
  246.  
  247.         kermit -k | command
  248.             Pipes the incoming data (single or multiple files) to the indicated
  249.             command, as in 
  250.  
  251.                 kermit -k | sort > sorted.stuff
  252.  
  253. -a fn1  If you have specified a file transfer option, you may give an alternate
  254.         name for a single file with the -a ("as") option.  For example, 
  255.  
  256.             kermit -s foo -a bar
  257.  
  258.         sends  the file foo telling the receiver that its name is bar.  If more
  259.         than one file arrives or is sent, only the first file  is  affected  by
  260.         the -a option:  
  261.  
  262.             kermit -ra baz
  263.  
  264.         stores the first incoming file under the name baz.
  265.  
  266. -x      Begin server operation.  May be used in either local or remote mode.
  267.  
  268. Before  proceeding, a few words about remote and local operation are necessary.
  269. C-Kermit is "local" if it is running on PC or workstation that  you  are  using
  270. directly, or if it is running on a multiuser system and transferring files over
  271. an external communication line -- not your job's controlling terminal  or  con-
  272. sole.   C-Kermit is remote if it is running on a multiuser system and transfer-
  273. ring files over its own controlling  terminal's  communication  line  (normally
  274. /dev/tty), connected to your PC or workstation.
  275.  
  276. If  you  are  running C-Kermit on a PC, it is normally used in local mode, with
  277. the "back port" designated for file transfer and terminal connection.   If  you
  278. are  running C-Kermit on a multiuser (timesharing) system, it is in remote mode
  279. unless you explicitly point it at an external line for file  transfer  or  ter-
  280. minal connection.  The following command sets C-Kermit's "mode":
  281.  
  282. -l dev  Line  --  Specify a terminal line to use for file transfer and terminal
  283.         connection, as in 
  284.  
  285.             kermit -l /dev/ttyi5
  286.  
  287. When an external line is being used, you will also need some additional options
  288. for successful communication with the remote system:
  289.  
  290. -b n    Baud  --  Specify the baud rate for the line given in the -l option, as
  291.         in 
  292.  
  293.             kermit -l /dev/ttyi5 -b 9600
  294.  
  295.         This option should always be included with the  -l  option,  since  the
  296.         speed of an external line is not necessarily what you expect.
  297.  
  298. -p x    Parity  --  e,o,m,s,n  (even, odd, mark, space, or none).  If parity is
  299.         other than none, then the 8th-bit prefixing mechanism will be used  for
  300.         transferring  8-bit  binary  data, provided the opposite Kermit agrees.
  301.         The default parity is none.
  302.  
  303. -t      Specifies half duplex,  line  turnaround  with  XON  as  the  handshake
  304.         character.
  305.  
  306. The  following  commands may be used only with a C-Kermit which is local either
  307. by default or else because the -l option has been specified.
  308.  
  309. -g rfn  Actively request a remote server to send the named file or  files;  rfn
  310.         is a file specification in the remote host's own syntax.  If fn happens
  311.         to contain any special shell characters, like  space,  '*',  '[',  etc,
  312.         these must be quoted, as in 
  313.  
  314.             kermit -g x\*.\?
  315.  
  316.         or 
  317.  
  318.             kermit -g "profile exec"
  319.  
  320. -f      Send a 'finish' command to a remote server.
  321.  
  322. -c      Establish  a  terminal  connection  over  the specified or default com-
  323.         munication line, before any protocol transaction takes place.  Get back
  324.         to   the   local  system  by  typing  the  escape  character  (normally
  325.         Control-Backslash) followed by the letter 'c'.
  326.  
  327. -n      Like -c, but after a protocol transaction takes place; -c  and  -n  may
  328.         both  be used in the same command.  The use of -n and -c is illustrated
  329.         below.
  330.  
  331. If the other Kermit is on a remote system, the -l and -b options should also be
  332. included with the -r, -k, or -s options.
  333.  
  334. Several other command-line options are provided:
  335.  
  336. -i      Specifies that files should be sent or received exactly "as is" with no
  337.         conversions.  This option is necessary for transmitting  binary  files.
  338.         It may also be used in Unix-to-Unix transfers (it must be given to both
  339.         Unix Kermit programs), where it will improve performance by circumvent-
  340.         ing  the  normal  text-file conversions, and will allow mixture of text
  341.         and binary files in a single file group.
  342.  
  343. -w      Write-Protect -- Avoid filename collisions for incoming files.
  344.  
  345. -e n    Extended packet length -- Specify that C-Kermit is allowed  to  receive
  346.         packets  up  to length n, where n may be between 10 and some large num-
  347.         ber, like 1000, depending on the system.  The  default  maximum  length
  348.         for  received  packets is 90.  Packets longer than 94 will be used only
  349.         if the other Kermit supports, and agrees  to  use,  the  "long  packet"
  350.         protocol extension.
  351.  
  352. -q      Quiet  --  Suppress screen update during file transfer, for instance to
  353.         allow a file transfer to proceed in the background.
  354.  
  355. -d      Debug -- Record debugging information in the file debug.log in the cur-
  356.         rent  directory.    Use  this option if you believe the program is mis-
  357.         behaving, and show the resulting log to your local Kermit maintainer.
  358.  
  359. -h      Help -- Display a brief synopsis of the command line options.
  360.  
  361. The command line may contain no more than one protocol action option.
  362.  
  363. Files are sent with their own names, except that lowercase letters  are  raised
  364. to upper, pathnames are stripped off, certain special characters like (`~') and
  365. (`#') are changed to `X', and if the file name begins with a period, an `X'  is
  366. inserted  before  it.    Incoming files are stored under their own names except
  367. that uppercase letters are lowered, and, if -w  was  specified,  a  "generation
  368. number"  is  appended  to  the name if it has the same name as an existing file
  369. which would otherwise be overwritten.  If the -a option is included,  then  the
  370. same  rules  apply to its argument.  The file transfer display shows any trans-
  371. formations performed upon filenames.
  372.  
  373. During transmission, files are encoded as follows:
  374.  
  375.    - Control characters are converted to prefixed printables.
  376.  
  377.    - Sequences of repeated characters are collapsed via repeat counts,  if
  378.      the other Kermit is also capable of repeated-character compression.
  379.  
  380.    - If  parity  is  being used on the communication line, data characters
  381.      with the 8th (parity) bit on are  specially  prefixed,  provided  the
  382.      other  Kermit  is  capable of 8th-bit prefixing; if not, 8-bit binary
  383.      files cannot be successfully transferred.
  384.  
  385.    - Conversion is done between Unix newlines and carriage-return-linefeed
  386.      sequences unless the -i option was specified.
  387.  
  388.  
  389. Command Line Examples:
  390.  
  391.  
  392.     kermit -l /dev/ttyi5 -b 1200 -cn -r
  393.  
  394. This command connects you to the system on the other end of ttyi5 at 1200 baud,
  395. where you presumably log in and run Kermit with a 'send' command.    After  you
  396. escape  back,  C-Kermit  waits  for a file (or files) to arrive.  When the file
  397. transfer is completed, you are reconnected to the remote system so that you can
  398. logout.
  399.     kermit -l /dev/ttyi4 -b 1800 -cntp m -r -a foo
  400.  
  401. This  command  is like the preceding one, except the remote system in this case
  402. uses half duplex communication with mark parity.  The first file  that  arrives
  403. is stored under the name foo.
  404.  
  405.  
  406.     kermit -l /dev/ttyi6 -b 9600 -c | tek
  407.  
  408. This  example  uses  Kermit to connect your terminal to the system at the other
  409. end of ttyi6.  The C-Kermit terminal connection does not provide any particular
  410. terminal   emulation,   so   C-Kermit's   standard   i/o  is  piped  through  a
  411. (hypothetical) program called tek, which performs (say) Tektronix emulation.
  412.  
  413.  
  414.     kermit -l /dev/ttyi6 -b 9600 -nf
  415.  
  416. This command would be used to shut down a remote server and then connect to the
  417. remote system, in order to log out or to make further use of it.  The -n option
  418. is invoked after -f (-c would have been invoked before).
  419.  
  420.  
  421.     kermit -l /dev/ttyi6 -b 9600 -qg foo.\* &
  422.  
  423. This command causes C-Kermit to be invoked in the background, getting  a  group
  424. of files from a remote server (note the quoting of the `*' character).  No dis-
  425. play occurs on the screen, and the keyboard is  not  sampled  for  interruption
  426. commands.    This  allows other work to be done while file transfers proceed in
  427. the background.
  428.  
  429.  
  430.     kermit -l /dev/ttyi6 -b 9600 -g foo.\* > foo.log < /dev/null &
  431.  
  432. This command is like the previous one, except the  file  transfer  display  has
  433. been  redirected  to  the  file foo.log.  Standard input is also redirected, to
  434. prevent C-Kermit from sampling it for interruption commands.
  435.  
  436.  
  437.     kermit -iwx
  438.  
  439. This command starts up C-Kermit as a server.  Files  are  transmitted  with  no
  440. newline/carriage-return-linefeed conversion; the -i option is necessary for bi-
  441. nary file transfer and recommended for Unix-to-Unix transfers.  Incoming  files
  442. that have the same names as existing files are given new, unique names.
  443.  
  444.  
  445.     kermit -l /dev/ttyi6 -b 9600
  446.  
  447. This  command  sets  the  communication  line  and  speed.   Since no action is
  448. specified, C-Kermit issues a prompt and enters an interactive dialog with  you.
  449. Any  settings  given on the command line remain in force during the dialog, un-
  450. less explicitly changed.
  451.  
  452.  
  453.     kermit
  454.  
  455. This command starts up Kermit interactively with all default settings.
  456.  
  457. The next example shows how Unix Kermit might be used to send an  entire  direc-
  458. tory  tree  from  one Unix system to another, using the tar program as Kermit's
  459. standard input and output.  On the orginating system, in this case the  remote,
  460. type (for instance):
  461.  
  462.  
  463.     tar cf - /usr/fdc | kermit -is -
  464.  
  465. This  causes  tar to send the directory /usr/fdc (and all its files and all its
  466. subdirectories and all their files...) to standard output instead of to a tape;
  467. kermit  receives  this as standard input and sends it as a binary file.  On the
  468. receiving system, in this case the local one, type (for instance):
  469.  
  470.  
  471.     kermit -il /dev/ttyi5 -b 9600 -k | tar xf -
  472.  
  473. Kermit receives the tar archive, and sends it via standard output  to  its  own
  474. copy of tar, which extracts from it a replica of the original directory tree.
  475.  
  476. A  final example shows how a Unix compression utility might be used to speed up
  477. Kermit file transfers:
  478.  
  479.     compress file | kermit -is -     (sender)
  480.     kermit -ik | uncompress          (receiver)
  481.  
  482.  
  483. Exit Status Codes:
  484.  
  485. Unix Kermit returns an exit status of zero, except when a fatal  error  is  en-
  486. countered,  where  the  exit  status  is set to one.  With background operation
  487. (e.g., `&' at end of invoking command line) driven by scripted interactive com-
  488. mands  (redirected  standard  input  and/or take files), any failed interactive
  489. command (such as failed dial or script attempt) causes the fatal error exit.
  490.  
  491.  
  492. 1.4. Interactive Operation
  493.  
  494. C-Kermit's interactive command prompt is "C-Kermit>".    In  response  to  this
  495. prompt, you may type any valid interactive C-Kermit command.  C-Kermit executes
  496. the command and then prompts you for another command.   The  process  continues
  497. until you instruct the program to terminate.
  498.  
  499. Commands  begin  with a keyword, normally an English verb, such as "send".  You
  500. may omit trailing characters from any keyword, so  long  as  you  specify  suf-
  501. ficient  characters  to  distinguish  it  from  any other keyword valid in that
  502. field.  Certain commonly-used keywords (such as "send",  "receive",  "connect")
  503. also  have special non-unique abbreviations ("s" for "send", "r" for "receive",
  504. "c" for "connect").
  505.  
  506. Certain characters have special functions during  typein  of  interactive  com-
  507. mands:
  508.  
  509.     ?   Question  mark, typed at any point in a command, will produce a message
  510.         explaining what is possible or expected at that point.    Depending  on
  511.         the  context, the message may be a brief phrase, a menu of keywords, or
  512.         a list of files.
  513.  
  514.     ESC (The Escape or Altmode  key)  --  Request  completion  of  the  current
  515.         keyword  or filename, or insertion of a default value.  The result will
  516.         be a beep if the requested operation fails.
  517.  
  518.     DEL (The Delete or Rubout key) -- Delete the previous  character  from  the
  519.         command.  You may also use BS (Backspace, Control-H) for this function.
  520.  
  521.     ^W  (Control-W) -- Erase the rightmost word from the command line.
  522.  
  523.     ^U  (Control-U) -- Erase the entire command.
  524.  
  525.     ^R  (Control-R) -- Redisplay the current command.
  526.  
  527.     SP  (Space) -- Delimits fields (keywords, filenames, numbers) within a com-
  528.         mand.  HT (Horizontal Tab) may also be used for this purpose.
  529.  
  530.     CR  (Carriage Return) -- Enters the command for execution.   LF  (Linefeed)
  531.         or FF (formfeed) may also be used for this purpose.
  532.  
  533.     \   (Backslash)  --  Enter  any  of  the above characters into the command,
  534.         literally.  To enter a backslash, type two backslashes in a  row  (\\).
  535.         A  backslash  at  the  end of a command line causes the next line to be
  536.         treated as a continuation line; this is useful for readability in  com-
  537.         mand files, especially in the 'script' command.
  538.  
  539.     ^Z  (Control-Z)  --  On  systems (like Berkeley Unix, Ultrix) with job con-
  540.         trol, suspend Kermit, i.e. put it into the  background in  such  a  way
  541.         that  it  can  be  brought  back into the foreground (e.g. with an 'fg'
  542.         shell command) with all its settings intact.
  543.  
  544. You may type the editing characters (DEL, ^W, etc) repeatedly,  to  delete  all
  545. the  way  back to the prompt.  No action will be performed until the command is
  546. entered by typing carriage return, linefeed, or formfeed.  If you make any mis-
  547. takes,  you  will receive an informative error message and a new prompt -- make
  548. liberal use of `?' and ESC to feel your way through the commands.   One  impor-
  549. tant command is "help" -- you should use it the first time you run C-Kermit.
  550.  
  551. A command line beginning with a percent sign "%" is ignored.  Such lines may be
  552. used to include illustrative commentary in Kermit command dialogs.
  553.  
  554. Interactive C-Kermit accepts commands from files as well as from the  keyboard.
  555. When you start C-Kermit, the program looks for the file .kermrc in your home or
  556. current directory (first it looks in the home directory, then  in  the  current
  557. one)  and  executes any commands it finds there.  These commands must be in in-
  558. teractive format, not Unix command-line format (the initialization file is  not
  559. processed if you invoke Kermit with command-line action arguments, such that it
  560. does not enter interactive dialog).  A "take" command is also provided for  use
  561. at any time during an interactive session, to allow interactive-format commands
  562. to be executed from a file; command files  may  be  nested  to  any  reasonable
  563. depth.
  564.  
  565. Here is a brief list of C-Kermit interactive commands:
  566.               %  Comment
  567.               !  Execute a Unix shell command, or start a shell.
  568.             bye  Terminate and log out a remote Kermit server.
  569.           close  Close a log file.
  570.         connect  Establish a terminal connection to a remote system.
  571.             cwd  Change Working Directory.
  572.            dial  Dial a telephone number.
  573.       directory  Display a directory listing.
  574.            echo  Display arguments literally.
  575.            exit  Exit from the program, closing any open files.
  576.          finish  Instruct a remote Kermit server to exit, but not log out.
  577.             get  Get files from a remote Kermit server.
  578.            help  Display a help message for a given command.
  579.             log  Open a log file -- debugging, packet, session, transaction.
  580.            quit  Same as 'exit'.
  581.         receive  Passively wait for files to arrive.
  582.          remote  Issue file management commands to a remote Kermit server.
  583.          script  Execute a login script with a remote system.
  584.            send  Send files.
  585.          server  Begin server operation.
  586.             set  Set various parameters.
  587.            show  Display values of 'set' parameters.
  588.           space  Display current disk space usage.
  589.      statistics  Display statistics about most recent transaction.
  590.            take  Execute commands from a file.
  591.  
  592. The 'set' parameters are:
  593.     block-check  Level of packet error detection.
  594.           delay  How long to wait before sending first packet.
  595.          duplex  Specify which side echoes during 'connect'.
  596.     escape-character  Prefix for "escape commands" during 'connect'.
  597.            file  Set various file parameters.
  598.    flow-control  Communication line full-duplex flow control.
  599.       handshake  Communication line half-duplex turnaround character.
  600.      incomplete  Disposition for incompletely received files.
  601.            line  Communication line device name.
  602.    modem-dialer  Type of modem-dialer on communication line.
  603.          parity  Communication line character parity.
  604.          prompt  The C-Kermit program's interactive command prompt.
  605.         receive  Parameters for inbound packets.
  606.           retry  Packet retransmission limit.
  607.            send  Parameters for outbound packets.
  608.           speed  Communication line speed.
  609.        terminal  Terminal parameters.
  610.  
  611. The 'remote' commands are:
  612.             cwd  Change remote working directory.
  613.          delete  Delete remote files.
  614.       directory  Display a listing of remote file names.
  615.            help  Request help from a remote server.
  616.            host  A command to the remote host in its own command language.
  617.           space  Display current disk space usage on remote system.
  618.            type  Display a remote file on your screen.
  619.             who  Display who's logged in, or get information about a user.
  620.  
  621. Most of these commands are described adequately in the Kermit User Guide or the
  622. Kermit book.  Special aspects of certain Unix  Kermit  commands  are  described
  623. below.
  624.  
  625.  
  626.                               THE 'SEND' COMMAND
  627.  
  628. Syntax:  send fn  - or -  send fn1 rfn1
  629.  
  630. Send  the file or files denoted by fn to the other Kermit, which should be run-
  631. ning as a server, or which should be given the 'receive' command.  Each file is
  632. sent  under  its own name (as described above, or as specified by the 'set file
  633. names' command).  If the second form of the 'send' command is used, i.e.   with
  634. fn1 denoting a single Unix file, rfn1 may be specified as a name to send it un-
  635. der.  The 'send' command may be abbreviated to 's', even though 's'  is  not  a
  636. unique abbreviation for a top-level C-Kermit command.
  637.  
  638. The wildcard (meta) characters `*' and `?' are accepted in fn.  If `?' is to be
  639. included, it must be prefixed by `\' to override its normal function of provid-
  640. ing  help.    `*'  matches any string, `?' matches any single character.  Other
  641. notations for file groups, like `[a-z]og', are  not  available  in  interactive
  642. commands  (though  of  course they are available on the command line).  When fn
  643. contains `*' or `?' characters, there is a limit to the number  of  files  that
  644. can  be  matched,  which  varies from system to system.  If you get the message
  645. "Too many files match" then you'll have to make a more judicious selection.  If
  646. fn was of the form 
  647.  
  648.     usr/longname/anotherlongname/*
  649.  
  650. then  C-Kermit's  string  space  will  fill  up rapidly -- try doing a cwd (see
  651. below) to the path in question and reissuing the command.
  652.  
  653. Note -- C-Kermit sends only from the current or specified directory.   It  does
  654. not traverse directory trees.  If the source directory contains subdirectories,
  655. they will be skipped.  By the same token, C-Kermit does not create  directories
  656. when  receiving files.  If you have a need to do this, you can pipe tar through
  657. C-Kermit, as shown in the example on page 3, or under System III/V Unix you can
  658. use cpio.
  659.  
  660. Another  Note  --  The 'send' command does not skip over "invisible" files that
  661. match the file specification; Unix systems  usually  treat  files  whose  names
  662. start  with  a  dot (like .login, .cshrc, and .kermrc) as invisible.  Similarly
  663. for "temporary" files whose names start with "#".
  664.  
  665.  
  666.                              THE 'RECEIVE' COMMAND
  667.  
  668. Syntax:  receive  - or -  receive fn1
  669.  
  670. Passively wait for files to arrive from the other Kermit, which must  be  given
  671. the 'send' command -- the 'receive' command does not work in conjunction with a
  672. server (use 'get' for that).  If fn1 is specified,  store  the  first  incoming
  673. file under that name.  The 'receive' command may be abbreviated to 'r'.
  674.  
  675.  
  676.                               THE 'GET' COMMAND:
  677.  
  678. Syntax:  get rfn
  679.  
  680.         or: get
  681.                 rfn
  682.                 fn1
  683.  
  684. Request a remote Kermit server to send the named file or files.  Since a remote
  685. file specification (or list)  might  contain  spaces,  which  normally  delimit
  686. fields  of  a C-Kermit command, an alternate form of the command is provided to
  687. allow the inbound file to be given a new name: type 'get' alone on a line,  and
  688. you  will  be prompted separately for the remote and local file specifications,
  689. for example
  690.  
  691.     C-Kermit>get
  692.      Remote file specification: profile exec
  693.      Local name to store it under: profile.exec
  694.  
  695. As with 'receive', if more than one file arrives as a result of the 'get'  com-
  696. mand,  only the first will be stored under the alternate name given by fn1; the
  697. remaining files will be stored under their own names if possible.  If a `?'  is
  698. to be included in the remote file specification, you must prefix it with `\' to
  699. suppress its normal function of providing help.
  700.  
  701. If you have started a multiline 'get' command, you may escape from  its  lower-
  702. level prompts by typing a carriage return in response to the prompt, e.g.
  703.  
  704.     C-Kermit>get
  705.      Remote file specification: foo
  706.      Local name to store it under: (Type a carriage return here)
  707.     (cancelled)
  708.     C-Kermit>
  709.  
  710.  
  711.                              THE 'SERVER' COMMAND:
  712.  
  713. The 'server' command places C-Kermit in "server mode" on the currently selected
  714. communication line.  All further commands must arrive as valid  Kermit  packets
  715. from  the  Kermit  on  the  other  end of the line.  The Unix Kermit server can
  716. respond to the following commands:
  717.  
  718. Command                Server Response
  719.   get                    Sends files
  720.   send                   Receives files
  721.   bye                    Attempts to log itself out
  722.   finish                 Exits to level from which it was invoked
  723.   remote directory       Sends directory lising
  724.   remote delete          Removes files
  725.   remote cwd             Changes working directory
  726.   remote type            Sends files to your screen
  727.   remote space           Reports about its disk usage
  728.   remote who             Shows who's logged in
  729.   remote host            Executes a Unix shell command
  730.   remote help            Lists these capabilities
  731.  
  732. The Unix Kermit server cannot always respond properly to a  BYE  command.    It
  733. will  attempt to do so using "kill()", but this will not work on all systems or
  734. under all conditions because of the complicated process structures that can  be
  735. set up under Unix.
  736.  
  737. If  the  Kermit  server  is  directed at an external line (i.e. it is in "local
  738. mode") then the console may be used for other work if you have 'set  file  dis-
  739. play  off'; normally the program expects the console to be used to observe file
  740. transfers and enter status queries or interruption commands.  The  way  to  get
  741. C-Kermit  into  background operation from interactive command level varies from
  742. system to system (e.g. on Berkeley Unix you would halt the program with ^Z  and
  743. then  use the C-Shell 'bg' command to continue it in the background).  The more
  744. common method is to invoke the program with the desired command line arguments,
  745. including "-q", and with a terminating "&".
  746.  
  747. When  the  Unix  Kermit server is given a 'remote host' command, it executes it
  748. using the shell invoked upon login, e.g.  the  Bourne  shell  or  the  Berkeley
  749. C-Shell.
  750.  
  751.  
  752.                   THE 'REMOTE', 'BYE', AND 'FINISH' COMMANDS:
  753.  
  754. C-Kermit  may itself request services from a remote Kermit server.  In addition
  755. to 'send' and 'get', the following commands may also be sent from C-Kermit to a
  756. Kermit server:
  757.  
  758.     remote cwd [directory]
  759.         If the optional remote directory specification is included, you will be
  760.         prompted  on a separate line for a password, which will not echo as you
  761.         type it.  If the remote system does not require  a  password  for  this
  762.         operation, just type a carriage return.
  763.  
  764.     remote delete rfn       delete remote file or files.
  765.     remote directory [rfn]  directory listing of remote files.
  766.     remote host command     command in remote host's own command language.
  767.     remote space            disk usage report from remote host.
  768.     remote type [rfn]       display remote file or files on the screen.
  769.     remote who [user]       display information about who's logged in.
  770.     remote help             display remote server's capabilities.
  771.  
  772.     bye and finish:
  773.         When connected to a remote Kermit  server,  these  commands  cause  the
  774.         remote  server  to  terminate;  'finish' returns it to Kermit or system
  775.         command level (depending on the implementation or how the  program  was
  776.         invoked); 'bye' also requests it to log itself out.
  777.  
  778.  
  779.                         THE 'LOG' AND 'CLOSE' COMMANDS:
  780.  
  781. Syntax: log {debugging, packets, session, transactions} [ fn1 ]
  782.  
  783. C-Kermit's  progress  may be logged in various ways.  The 'log' command opens a
  784. log, the 'close' command closes it.  In addition, all open logs are  closed  by
  785. the 'exit' and 'quit' commands.  A name may be specified for a log file; if the
  786. name is omitted, the file is created with a default name as shown below.
  787.  
  788. log debugging
  789.     This produces a voluminous log of the internal workings of C-Kermit, of use
  790.     to Kermit developers or maintainers in tracking down suspected bugs in  the
  791.     C-Kermit  program.   Use of this feature dramatically slows down the Kermit
  792.     protocol.  Default name: debug.log.
  793.  
  794. log packets
  795.     This  produces  a  record of all the packets that go in and out of the com-
  796.     munication port.  This log is of use to Kermit maintainers who are tracking
  797.     down  protocol  problems  in either C-Kermit or any Kermit that C-Kermit is
  798.     connected to.  Default name:  packet.log.
  799.  
  800. log session
  801.     This  log  will  contain a copy of everything you see on your screen during
  802.     the 'connect' command, except for local messages or interaction with  local
  803.     escape commands.  Default name:  session.log.
  804.  
  805. log transactions
  806.     The transaction log is a record of all the files that were sent or received
  807.     while  transaction  logging  was  in  effect.   It includes time stamps and
  808.     statistics, filename transformations, and records of any  errors  that  may
  809.     have occurred.  The transaction log allows you to have long unattended file
  810.     transfer sessions without  fear  of  missing  some  vital  screen  message.
  811.     Default name:  transact.log.
  812.  
  813. The 'close' command explicitly closes a log, e.g. 'close debug'.
  814.  
  815. Note:    Debug  and Transaction logs are a compile-time option; C-Kermit may be
  816. compiled without these logs, in which case it will run faster, it will take  up
  817. less space on the disk, and the commands relating to them will not be present.
  818.  
  819.  
  820.                         LOCAL FILE MANAGEMENT COMMANDS:
  821.  
  822. Unix  Kermit  allows some degree of local file management from interactive com-
  823. mand level:
  824.  
  825. directory [fn]
  826.     Displays  a listing of the names, modes, sizes, and dates of files matching
  827.     fn (which defaults to `*').  Equivalent to `ls -l'.
  828.  
  829. cwd [directory-name]
  830.     Changes  Kermit's  working  directory  to  the one given, or to the default
  831.     directory if the directory name is omitted.  This command affects only  the
  832.     Kermit process and any processes it may subsequently create.
  833.  
  834. space
  835.     Display information about disk space and/or quota in the current  directory
  836.     and device.
  837.  
  838. ! [command]
  839.     The command is executed by the Unix shell.  If  no  command  is  specified,
  840.     then  an  interactive  shell  is  started;  exiting from the shell, e.g. by
  841.     typing Control-D or 'exit', will return you to C-Kermit command level.  Use
  842.     the  `!'  command  to  provide  file  management or other functions not ex-
  843.     plicitly provided by C-Kermit  commands.    The  `!'  command  has  certain
  844.     peculiarities:
  845.  
  846.        - C-Kermit attempts to use your preferred, customary (login) shell.
  847.        - At least one space must separate the '!' from the shell command.
  848.        - A  'cd'  (change  directory) command executed in this manner will
  849.          have no effect -- use the C-Kermit 'cwd' command instead.
  850.  
  851.  
  852.                         THE 'SET' AND 'SHOW' COMMANDS:
  853.  
  854. Since Kermit is designed to allow diverse systems to communicate, it  is  often
  855. necessary  to  issue  special  instructions  to  allow  the program to adapt to
  856. peculiarities of the another system or the communication path.  These  instruc-
  857. tions are accomplished by the 'set' command.  The 'show' command may be used to
  858. display current settings.  Here is a brief synopsis of  settings  available  in
  859. the current release of C-Kermit:
  860.  
  861. block-check {1, 2, 3}
  862.     Determines the level of per-packet error  detection.    "1"  is  a  single-
  863.     character  6-bit  checksum,  folded  to include the values of all bits from
  864.     each character.   "2"  is  a  2-character,  12-bit  checksum.    "3"  is  a
  865.     3-character,  16-bit  cyclic  redundancy check (CRC).  The higher the block
  866.     check, the better the error detection and correction  and  the  higher  the
  867.     resulting  overhead.   Type 1 is most commonly used; it is supported by all
  868.     Kermit implementations, and it has proven adequate in  most  circumstances.
  869.     Types  2  or  3  would  be used to advantage when transferring 8-bit binary
  870.     files over noisy lines.
  871.  
  872. delay n
  873.     How  many  seconds  to  wait before sending the first packet after a 'send'
  874.     command.  Used in remote mode to give you time to escape back to your local
  875.     Kermit and issue a 'receive' command.  Normally 5 seconds.
  876.  
  877. duplex {full, half}
  878.     For use during 'connect'.  Specifies  which  side  is  doing  the  echoing;
  879.     'full' means the other side, 'half' means C-Kermit must echo typein itself.
  880.  
  881. escape-character cc
  882.     For use during 'connect' to get C-Kermit's attention.  The escape character
  883.     acts  as a prefix to an 'escape command', for instance to close the connec-
  884.     tion and return to C-Kermit or Unix  command  level.    The  normal  escape
  885.     character  is Control-Backslash (28).  The escape character is also used in
  886.     System III/V implementations  to  prefix  interrupt  commands  during  file
  887.     transfers.
  888.  
  889. file {display, names, type, warning}
  890.     Establish various file-related parameters:
  891.  
  892.     display {on, off}
  893.         Normally  'on';  when in local mode, display progress of file transfers
  894.         on the screen (stdout), and listen to the keyboard (stdin)  for  inter-
  895.         ruptions.    If  off (-q on command line) none of this is done, and the
  896.         file transfer may proceed in the background oblivious to any other work
  897.         concurrently done at the console terminal.
  898.  
  899.     names {converted, literal}
  900.         Normally converted, which  means  that  outbound  filenames  have  path
  901.         specifications  stripped, lowercase letters raised to upper, tildes and
  902.         extra periods changed to X's, and an X inserted in front  of  any  name
  903.         that  starts  with  period.    Incoming  files  have  uppercase letters
  904.         lowered.  Literal means that none of these conversions are done; there-
  905.         fore,  any  directory  path  appearing in a received file specification
  906.         must exist and be write-accessible.  When literal naming is being used,
  907.         the  sender  should not use path names in the file specification unless
  908.         the same path exists on the target system and is writable.
  909.  
  910.     type {binary, text} [{7, 8}]
  911.         The file type is normally text, which means that conversion is done be-
  912.         tween Unix newline  characters  and  the  carriage-return/linefeed  se-
  913.         quences  required by the canonical Kermit file transmission format, and
  914.         in common use on non-Unix systems.  Binary means to transmit file  con-
  915.         tents  without  conversion.   Binary (`-i' in command line notation) is
  916.         necessary for binary files, and desirable in  all  Unix-to-Unix  trans-
  917.         actions to cut down on overhead.
  918.  
  919.         The  optional  trailing parameter tells the bytesize for file transfer.
  920.         It is 8 by default.  If you specify 7,  the  high  order  bit  will  be
  921.         stripped from each byte of sent and received files.  This is useful for
  922.         transferring text files that may have extraneous high order bits set in
  923.         their  disk  representation  (e.g.   Wordstar or similar word processor
  924.         files).
  925.  
  926.     warning {on, off}
  927.         Normally  off,  which means that incoming files will silently overwrite
  928.         existing files of the same name.  When on (`-w' on command line) Kermit
  929.         will check if an arriving file would overwrite an existing file; if so,
  930.         it will construct a new name for the arriving file, of the form  foo~n,
  931.         where foo is the name they share and n is a "generation number"; if foo
  932.         exists, then the new file will be called foo~1.  If foo and  foo~1  ex-
  933.         ist,  the  new file will be foo~2, and so on.  If the new name would be
  934.         longer than the maximum length for a filename, then characters would be
  935.         deleted  from  the  end first, for instance, thelongestname on a system
  936.         with a limit of 14 characters would become thelongestn~1.
  937.  
  938.             CAUTION:  If Control-F or Control-B is used to cancel an incom-
  939.             ing  file,  and a file of the same name previously existed, and
  940.             the "file warning" feature is not enabled,  then  the  previous
  941.             copy of the file will disappear.
  942.  
  943. flow-control {none, xon/xoff}
  944.     Normally xon/xoff for full duplex flow control.  Should be set to 'none' if
  945.     the  other  system cannot do xon/xoff flow control, or if you have issued a
  946.     'set handshake' command.  If set to xon/xoff, then handshake should be  set
  947.     to  none.    This  setting applies during both terminal connection and file
  948.     transfer.  Warning: This command may have no effect on  certain  Unix  sys-
  949.     tems,  where Kermit puts the communication line into 'rawmode', and rawmode
  950.     precludes flow control.
  951.  
  952. incomplete {discard, keep}
  953.     Disposition for incompletely received files.  If an incoming file is inter-
  954.     rupted or an error occurs during transfer, the part that  was  received  so
  955.     far  is  normally  discarded.   If you "set incomplete keep" then such file
  956.     fragments will be kept.
  957.  
  958. handshake {xon, xoff, cr, lf, bell, esc, none}
  959.     Normally  none.  Otherwise, half-duplex communication line turnaround hand-
  960.     shaking is done, which means Unix Kermit will not reply to a  packet  until
  961.     it  has received the indicated handshake character or has timed out waiting
  962.     for it; the handshake setting applies only during file transfer.    If  you
  963.     set handshake to other than none, then flow should be set to none.
  964.  
  965. line [device-name]
  966.     The device name for the communication line to be used for file transfer and
  967.     terminal connection, e.g. /dev/ttyi3.  If you specify a device name, Kermit
  968.     will be in local mode, and you should remember to issue any other necessary
  969.     'set'  commands,  such as 'set speed'.  If you omit the device name, Kermit
  970.     will revert to its default mode of operation.   If  you  specify  /dev/tty,
  971.     Kermit  will  enter  remote  mode  (useful when logged in through the "back
  972.     port" of a system normally used as a local-mode workstation).    When  Unix
  973.     Kermit  enters  local  mode, it attempts to synchronize with other programs
  974.     (like uucp) that use external communication lines  so  as  to  prevent  two
  975.     programs  using  the  same  line  at  once;  before  attempting to lock the
  976.     specified line, it will  close  and  unlock  any  external  line  that  was
  977.     previously  in  use.   The method used for locking is the "uucp lock file",
  978.     explained in more detail later.
  979.  
  980. modem-dialer {direct, hayes, racalvadic, ventel, ...}
  981.     The type of modem dialer on the communication line.  "Direct" indicates ei-
  982.     ther there is no dialout modem, or that if the line requires carrier detec-
  983.     tion  to  open,  then  'set  line'  will hang waiting for an incoming call.
  984.     "Hayes", "Ventel", and the others indicate  that  'set  line'  (or  the  -l
  985.     argument)  will  prepare  for  a  subsequent  'dial'  command for the given
  986.     dialer.  Support for new dialers is added from time to time, so  type  'set
  987.     modem  ?'  for  a  list of those supported in your copy of Kermit.  See the
  988.     description of the 'dial' command
  989.  
  990. parity {even, odd, mark, space, none}
  991.     Specify  character  parity for use in packets and terminal connection, nor-
  992.     mally none.  If other than none, C-Kermit will  seek  to  use  the  8th-bit
  993.     prefixing  mechanism  for transferring 8-bit binary data, which can be used
  994.     successfully only if the other Kermit agrees; if  not,  8-bit  binary  data
  995.     cannot be successfully transferred.
  996.  
  997. prompt [string]
  998.     The given string will be substituted  for  "C-Kermit>"  as  this  program's
  999.     prompt.    If the string is omitted, the prompt will revert to "C-Kermit>".
  1000.     If the string is enclosed in doublequotes, the quotes will be stripped  and
  1001.     any leading and trailing blanks will be retained.
  1002.  
  1003. send parameter
  1004.     Establish parameters to use when sending packets.  These will be in  effect
  1005.     only for the initial packet sent, since the other Kermit may override these
  1006.     parameters during the protocol parameter exchange (unless noted below).
  1007.  
  1008.     end-of-packet cc
  1009.         Specifies the control character needed by the other Kermit to recognize
  1010.         the end of a packet.  C-Kermit sends this character at the end of  each
  1011.         packet.    Normally  13  (carriage return), which most Kermit implemen-
  1012.         tations require.  Other Kermits require no  terminator  at  all,  still
  1013.         others may require a different terminator, like linefeed (10).
  1014.  
  1015.     packet-length n
  1016.         Specify the maximum packet length to  send.    Normally  90.    Shorter
  1017.         packet  lengths  can be useful on noisy lines, or with systems or front
  1018.         ends or networks that have small buffers.  The shorter the packet,  the
  1019.         higher  the  overhead,  but the lower the chance of a packet being cor-
  1020.         rupted by noise, and the less time  to  retransmit  corrupted  packets.
  1021.         This  command  overrides the value requested by the other Kermit during
  1022.         protocol initiation unless the other Kermit requests a shorter length.
  1023.  
  1024.     pad-character cc
  1025.         Designate  a  character  to send before each packet.  Normally, none is
  1026.         sent.  Outbound padding is sometimes necessary for  communicating  with
  1027.         slow half duplex systems that provide no other means of line turnaround
  1028.         control.  It can also be used to send special characters to  communica-
  1029.         tions  equipment  that  needs  to  be put in "transparent" or "no echo"
  1030.         mode, when this can be accomplished in by feeding it a certain  control
  1031.         character.
  1032.  
  1033.     padding n
  1034.         How many pad characters to send, normally 0.
  1035.  
  1036.     start-of-packet cc
  1037.         The  normal Kermit packet prefix is Control-A (1); this command changes
  1038.         the prefix C-Kermit puts on outbound packets.  The  only  reasons  this
  1039.         should  ever be changed would be: Some piece of equipment somewhere be-
  1040.         tween the two Kermit programs will not pass through  a  Control-A;  or,
  1041.         some  piece  of of equipment similarly placed is echoing its input.  In
  1042.         the latter case, the recipient of such an echo can  change  the  packet
  1043.         prefix for outbound packets to be different from that of arriving pack-
  1044.         ets, so that the echoed packets will be ignored.  The  opposite  Kermit
  1045.         must also be told to change the prefix for its inbound packets.
  1046.  
  1047.     timeout n
  1048.         Specifies the number of seconds you want the other Kermit to wait for a
  1049.         packet before timing it out and requesting retransmission.
  1050.  
  1051. receive parameter
  1052.     Establish parameters to request the other Kermit to use when sending  pack-
  1053.     ets.
  1054.  
  1055.     end-of-packet cc
  1056.         Requests the other Kermit to terminate its packets with  the  specified
  1057.         character.
  1058.  
  1059.     packet-length n
  1060.         Specify the maximum packet length to that you want the other Kermit  to
  1061.         send,  normally  90.  If you specify a length of 95 or greater, then it
  1062.         will be used if the other Kermit supports, and agrees to use, the  Ker-
  1063.         mit  protocol  extension  for  long packets.  In this case, the maximum
  1064.         length depends upon the systems involved, but there would  normally  be
  1065.         no  reason for packets to be more than about 1000 characters in length.
  1066.         The 'show parameters' command displays C-Kermit's current  and  maximum
  1067.         packet lengths.
  1068.  
  1069.     pad-character cc
  1070.         C-Kermit normally does not need to have incoming packets preceded  with
  1071.         pad characters.  This command allows C-Kermit to request the other Ker-
  1072.         mit to use cc as a pad character.  Default cc is NUL, ASCII 0.
  1073.  
  1074.     padding n
  1075.         How many pad characters to ask for, normally 0.
  1076.  
  1077.     start-of-packet cc
  1078.         Change the prefix C-Kermit looks for on inbound packets  to  correspond
  1079.         with what the other Kermit is sending.
  1080.  
  1081.     timeout n
  1082.         Normally, each Kermit partner sets its packet timeout interval based on
  1083.         what the opposite Kermit requests.  This command allows you to override
  1084.         the normal procedure and specify a timeout interval for Unix Kermit  to
  1085.         use  when waiting for packets from the other Kermit.  If you specify 0,
  1086.         then no timeouts will occur, and Unix Kermit will wait forever for  ex-
  1087.         pected packets to arrive.
  1088.  
  1089. speed {0, 110, 150, 300, 600, 1200, 1800, 2400, 4800, 9600}
  1090.     The baud rate for the external communication line.  This command cannot  be
  1091.     used  to  change the speed of your own console terminal.  Many Unix systems
  1092.     are set up in such a way that you must give this command after a 'set line'
  1093.     command  before  you  can  use  the line.  'set baud' is a synomym for 'set
  1094.     speed'.
  1095.  
  1096. terminal
  1097.     Used for specifying terminal parameters.  Currently, 'bytesize' is the only
  1098.     parameter provided, and it can be set to 7 or 8.  It's 7 by default.
  1099.  
  1100.  
  1101.                               THE 'SHOW' COMMAND:
  1102.  
  1103. Syntax: show {parameters, versions}
  1104.  
  1105. The "show" command with the  default  argument  of  "parameters"  displays  the
  1106. values  of  all  the  'set'  parameters  described  above.    If you type "show
  1107. versions", then C-Kermit will display the version numbers and dates of all  its
  1108. internal  modules.  You should use the "show versions" command to ascertain the
  1109. vintage of your Kermit program before reporting problems to Kermit maintainers.
  1110.  
  1111.  
  1112.                            THE 'STATISTICS' COMMAND:
  1113.  
  1114. The statistics command  displays  information  about  the  most  recent  Kermit
  1115. protocol transaction, including file and communication line i/o, timing and ef-
  1116. ficiency, as well as what encoding options were  in  effect  (such  as  8th-bit
  1117. prefixing, repeat-count compression).
  1118.  
  1119.  
  1120.                         THE 'TAKE' AND 'ECHO' COMMANDS:
  1121.  
  1122. Syntax: take fn1
  1123.      echo [text to be echoed]
  1124.  
  1125. The  'take' command instructs C-Kermit to execute commands from the named file.
  1126. The file may contain any interactive C-Kermit commands, including 'take';  com-
  1127. mand  files  may be nested to any reasonable depth, but it may not contain text
  1128. to be sent to a remote system during the 'connect' command.  This means that  a
  1129. command file like this:
  1130.  
  1131.     set line /dev/tty17
  1132.     set speed 9600
  1133.     connect
  1134.     login myuserid
  1135.     mypassword
  1136.     etc
  1137.  
  1138. will  not  send "login myserid" or any of the following text to the remote sys-
  1139. tem.  To carry on a canned dialog, use the 'script' command, described later.
  1140.  
  1141. The '%' command is useful for including comments in take-command files.  It may
  1142. only be used at the beginning of a line.
  1143.  
  1144. The  'echo'  command  may  be used within command files to issue greetings, an-
  1145. nounce progress, ring the terminal bell, etc.  The 'echo' command should not be
  1146. confused  with  the  Unix  'echo'  command,  which can be used to show how meta
  1147. characters would be expanded.  The Kermit echo command simply displays its text
  1148. argument (almost) literally at the terminal; the argument may contain octal es-
  1149. capes of the form "\ooo", where o is an octal digit (0-7), and there may be  1,
  1150. 2, or 3 such digits, whose value specify an ASCII character, such as "\007" (or
  1151. "\07" or just "\7") for beep, "\012" for newline, etc.  Of course,  each  back-
  1152. slash  must  be must be entered twice in order for it to be passed along to the
  1153. echo command by the Kermit command parser.
  1154.  
  1155. Take-command files are in exactly the  same  syntax  as  interactive  commands.
  1156. Note  that  this  implies  that  if you want to include special characters like
  1157. question mark or backslash that you would have to  quote  with  backslash  when
  1158. typing  interactive  commands,  you must quote these characters the same way in
  1159. command files.  Long lines may be continued by ending them with a single  back-
  1160. slash.
  1161.  
  1162. Command files may be used in lieu of command macros, which have not been imple-
  1163. mented in this version of C-Kermit.  For instance, if you commonly connect to a
  1164. system  called  'B' that is connected to ttyh7 at 4800 baud, you could create a
  1165. file called b containing the commands
  1166.  
  1167.     % C-Kermit command file to connect to System B thru /dev/ttyh7
  1168.     set line /dev/ttyh7
  1169.     set speed 4800
  1170.     % Beep and give message
  1171.     echo \\007Connecting to System B...
  1172.     connect
  1173.  
  1174. and then simply type 'take b' (or 't b' since no other commands begin with  the
  1175. letter  't')  whenever  you wish to connect to system B. Note the comment lines
  1176. and the beep inserted into the 'echo' command.
  1177.  
  1178. For connecting to IBM mainframes, a number  of  'set'  commands  are  required;
  1179. these, too, can be conveniently collected into a 'take' file like this one:
  1180.  
  1181.     % Sample C-Kermit command file to set up current line
  1182.     % for IBM mainframe communication
  1183.     %
  1184.     set parity mark
  1185.     set handshake xon
  1186.     set flow-control none
  1187.     set duplex half
  1188.  
  1189. Note  that no single command is available to wipe out all of these settings and
  1190. return C-Kermit to its default startup state; to do that, you can  either  res-
  1191. tart the program, or else make a command file that executes the necessary 'set'
  1192. commands:
  1193.  
  1194.     % Sample C-Kermit command file to restore normal settings
  1195.     %
  1196.     set parity none
  1197.     set handshake none
  1198.     set flow-control xon/xoff
  1199.     set duplex full
  1200.  
  1201. An implicit 'take' command is executed upon your  .kermrc  file  when  C-Kermit
  1202. starts  up,  upon  either  interactive or command-line invocation.  The .kermrc
  1203. file should contain 'set' or other commands you want to be  in  effect  at  all
  1204. times.   For instance, you might want override the default action when incoming
  1205. files have the same names as existing files -- in that case, put the command 
  1206.  
  1207.     set file warning on
  1208.  
  1209. in your .kermrc file.  On some non-Unix systems  that  run  C-Kermit,  the  in-
  1210. itialization file might have a different name, such as kermit.ini.
  1211.  
  1212. Errors  encountered during execution of take files (such as failure to complete
  1213. dial or script operations) cause termination of the current take file,  popping
  1214. to  the  level  that  invoked  it (take file, interactive level, or the shell).
  1215. When kermit is executed in the background, errors during execution  of  a  take
  1216. file are fatal.
  1217.  
  1218. Under  Unix,  you  may  also  use  the  shell's  redirection mechanism to cause
  1219. C-Kermit to execute commands from a file:  
  1220.  
  1221.     kermit < cmdfile
  1222.  
  1223. or you can even pipe commands in from another process:  
  1224.  
  1225.     cmdprocess | kermit
  1226.  
  1227.  
  1228.                             THE 'CONNECT' COMMAND:
  1229.  
  1230. The 'connect'  command  ('c'  is  an  acceptable  non-unique  abbreviation  for
  1231. 'connect')  links  your terminal to another computer as if it were a local ter-
  1232. minal to that computer, through the device specified in the  most  recent  'set
  1233. line' command, or through the default device if your system is a PC or worksta-
  1234. tion.  All characters you type at your keyboard are sent out the  communication
  1235. line  (and  if  you have 'set duplex half', also displayed on your screen), and
  1236. all characters arriving at the communication port are displayed on the  screen.
  1237. Current  settings  of  speed, parity, duplex, and flow-control are honored, and
  1238. the data connection is 7 bits wide unless you have given the command 'set  ter-
  1239. minal  bytesize 8'.  If you have issued a 'log session' command, everything you
  1240. see on your screen will also be recorded to your session log.  This provides  a
  1241. way  to  "capture"  files  from  remote systems that don't have Kermit programs
  1242. available.
  1243.  
  1244. To get back to your own system, you must type the escape  character,  which  is
  1245. Control-Backslash  (^\)  unless  you have changed it with the 'set escape' com-
  1246. mand,  followed  by  a  single-character  command,  such  as  'c'  for   "close
  1247. connection".  Single-character commands include:
  1248.  
  1249.   c     Close the connection
  1250.   b     Send a BREAK signal
  1251.   0     (zero) send a null
  1252.   s     Give a status report about the connection
  1253.   h     Hangup the phone
  1254.   ^\    Send  Control-Backslash  itself  (whatever  you have defined the escape
  1255.         character to be, typed twice in a row sends one copy of it).
  1256.  
  1257. Uppercase and control equivalents for (most of)  these  letters  are  also  ac-
  1258. cepted.    A  space  typed  after  the  escape character is ignored.  Any other
  1259. character will produce a beep.
  1260.  
  1261. The connect command simply displays incoming characters on the screen.   It  is
  1262. assumed  any  screen  control sequences sent by the host will be handled by the
  1263. firmware or emulation software in your terminal or PC.    If  special  terminal
  1264. emulation is desired, then the 'connect' command can invoked from the Unix com-
  1265. mand line (-c or -n), piped through a terminal emulation filter, e.g.  
  1266.  
  1267.     kermit -l /dev/acu -b 1200 -c | tek
  1268.  
  1269.  
  1270.                               THE 'DIAL' COMMAND:
  1271.  
  1272. Syntax: dial telephone-number-string
  1273.  
  1274. This command controls dialout modems; you should have  already  issued  a  "set
  1275. line"  and  "set  speed"  command  to  identify the terminal device, and a "set
  1276. modem" command to identify the type of modem to be used for dialing.    In  the
  1277. "dial"  command, you supply the phone number and the Kermit program feeds it to
  1278. the modem in the appropriate format and then interprets dialer return codes and
  1279. modem  signals  to  inform  you whether the call was completed.  The telephone-
  1280. number-string may contain imbedded modem-dialer commands,  such  as  comma  for
  1281. Hayes  pause, or `&' for Ventel dialtone wait and `%' for Ventel pause (consult
  1282. your modem manual for details).
  1283.  
  1284. At the time of this writing, support is included for the following modems:
  1285.  
  1286.    - AT&T 7300 Internal Modem
  1287.    - Cermetek Info-Mate 212A
  1288.    - Concord Condor CDS 220
  1289.    - DEC DF03-AC
  1290.    - DEC DF100 Series
  1291.    - DEC DF200 Series
  1292.    - General DataComm 212A/ED
  1293.    - Hayes Smartmodem 1200 and compatibles
  1294.    - Penril
  1295.    - Racal Vadic
  1296.    - US Robotics 212A
  1297.    - Ventel
  1298.  
  1299. Support for new modems is added to the program from time to time; you can check
  1300. the current list by typing "set modem ?".
  1301.  
  1302. The  device  used  for  dialing out is the one selected in the most recent "set
  1303. line" command (or on a workstation, the default line if no "set  line"  command
  1304. was  given).   The "dial" command calls locks the path (see the section on line
  1305. locking below) and establishes a call on an exclusive basis.  If it is  desired
  1306. to  dial  a  call and then return to the shell (such as to do kermit activities
  1307. depending on standard in/out redirection), it is necessary to place the  dialed
  1308. call  under  one  device  name  (say, "/dev/cua0") and then escape to the shell
  1309. within Kermit on a linked device which is separate from the dialed  line  (say,
  1310. "/dev/cul0").    This  is the same technique used by uucp (to allow locks to be
  1311. placed separately for dialing and conversing).
  1312.  
  1313. Because modem dialers have strict requirements to override  the  carrier-detect
  1314. signal most Unix implementations expect, the sequence for dialing is more rigid
  1315. than most other C-Kermit procedures.
  1316.  
  1317. Example one:
  1318.  
  1319.     kermit -l /dev/cul0 -b 1200
  1320.     C-Kermit>set modem-dialer hayes    hint: abbreviate set m h
  1321.     C-Kermit>dial 9,5551212
  1322.     Connected!
  1323.     C-Kermit>connect                   hint: abbreviate c
  1324.     logon, request remote server, etc.
  1325.     ^\c                                escape back
  1326.     C-Kermit> ...
  1327.     C-Kermit>quit                      hint: abbreviate q
  1328.  
  1329. this disconnects modem, and unlocks line.
  1330.  
  1331. Example two:
  1332.  
  1333.     kermit
  1334.     C-Kermit>set modem-dialer ventel
  1335.     C-Kermit>set line /dev/cul0
  1336.     C-Kermit>dial 9&5551212%
  1337.     Connected!
  1338.     C-Kermit> ...
  1339.  
  1340. Example three:
  1341.  
  1342.     kermit
  1343.     C-Kermit>take my-dial-procedure
  1344.     Connected!
  1345.  
  1346.     file my-dial-procedure:
  1347.     set modem hayes
  1348.     set line /dev/tty99
  1349.     dial 5551212
  1350.     connect
  1351.  
  1352. In general, C-Kermit requires that the modem provide the "carrier detect"  (CD)
  1353. signal  when  a  call is in progress, and remove that signal when the call com-
  1354. pletes or the line drops.  If a modem switch setting is available to force  CD,
  1355. it  should  normally  not  be in that setting.  C-Kermit also requires (on most
  1356. systems) that the modem track the computer's "data terminal ready"  (DTR)  sig-
  1357. nal.    If  a  switch  setting is available to simulate DTR asserted within the
  1358. modem, then it should normally not be in that setting.    Otherwise  the  modem
  1359. will  be unable to hang up at the end of a call or when interrupts are received
  1360. by Kermit.
  1361.  
  1362. For Hayes  dialers, two important switch settings are #1 and  #6.    Switch  #1
  1363. should be normally be UP so that the modem can act according to your computer's
  1364. DTR signal.  But if your computer, or particular implementation of Kermit, can-
  1365. not control DTR, then switch 1 should be DOWN.  Switch #6 should normally be UP
  1366. so carrier-detect functions properly (but put it DOWN if you have trouble  with
  1367. the  UP  position).    Switches  #2  (English versus digit result codes) and #4
  1368. (Hayes echoes modem commands) may be in either position.
  1369.  
  1370. If you want to interrupt a dial command in progress (for instance, because  you
  1371. just  realize  that you gave it the wrong number), type a Control-C to get back
  1372. to command level.
  1373.  
  1374.  
  1375.                              THE 'SCRIPT' COMMAND:
  1376.  
  1377. Syntax: script expect send [expect send] . . .
  1378.  
  1379. "expect" has the syntax: expect[-send-expect[-send-expect[...]]]
  1380.  
  1381. The 'script' command carries on a "canned dialog"  with  a  remote  system,  in
  1382. which data is sent according to the remote system's responses.  The typical use
  1383. is for logging in to a remote system automatically.
  1384.  
  1385. C-Kermit's script facility operates in a manner similar to that  commonly  used
  1386. by  the  Unix UUCP system's "L.sys" file entries.  A login script is a sequence
  1387. of the form:  
  1388.  
  1389.     expect send [expect send] . . .
  1390.  
  1391. where expect is a prompt or message to be issued by the remote site,  and  send
  1392. is  the  string (names, numbers, etc) to return, and expects are separated from
  1393. sends by spaces.  The send may also be the keyword EOT, to send  Control-D,  or
  1394. BREAK, to send a break signal.  Letters in sends may be prefixed by `~' to send
  1395. special characters, including:
  1396.  
  1397.     ~b  backspace
  1398.     ~s  space
  1399.     ~q  `?'(trapped by Kermit's command interpreter)
  1400.     ~n  linefeed
  1401.     ~r  carriage return
  1402.     ~t  tab
  1403.     ~'  single quote
  1404.     ~~  tilde
  1405.     ~"  double quote
  1406.     ~x  XON (Control-Q)
  1407.     ~c  don't append a carriage return
  1408.     ~o[o[o]]  an octal character
  1409.     ~d  delay approx 1/3 second during send
  1410.     ~w[d[d]]  wait specified interval during expect, then time out
  1411.  
  1412. As with some UUCP systems, sent strings are followed by ~r unless they  have  a
  1413. ~c.
  1414.  
  1415. Only  the last 7 characters in each expect are matched.  A null expect, e.g. ~0
  1416. or two adjacent dashes, causes a short delay before proceeding to the next send
  1417. sequence.  A null expect always succeeds.
  1418.  
  1419. As  with  UUCP, if the expect string does not arrive, the script attempt fails.
  1420. If you expect that a sequence might not arrive, as with UUCP,  conditional  se-
  1421. quences may be expressed in the form:  
  1422.  
  1423.     -send-expect[-send-expect[...]]
  1424.  
  1425. where dashed sequences are followed as long as previous expects fail.  Timeouts
  1426. for expects can be specified using ~w; ~w with no arguments waits 15 seconds.
  1427.  
  1428. Expect/send transactions can be easily be  debugged  by  logging  transactions.
  1429. This  records  all  exchanges,  both expected and actual.  The script execution
  1430. will also be logged in the session log, if that is activated.
  1431.  
  1432. Note that `\' characters in login scripts, as in any other C-Kermit interactive
  1433. commands,  must  be doubled up.  A line may be ended with a single `\' for con-
  1434. tinuation.
  1435.  
  1436. Example one:
  1437.  
  1438. Using a modem, dial a UNIX host site.   Expect  "login"  (...gin),  and  if  it
  1439. doesn't come, simply send a null string with a ~r.  (Some Unixes require either
  1440. an EOT or a BREAK instead of the null sequence,  depending  on  the  particular
  1441. site's "logger" program.)  After providing user id and password, respond "x" to
  1442. a question-mark prompt, expect the Bourne shell "$" prompt (and send return  if
  1443. it  doesn't  arrive).   Then cd to directory kermit, and run the program called
  1444. "wermit", entering the interactive connect state after wermit is loaded.
  1445.  
  1446.     set modem ventel
  1447.     set line /dev/tty77
  1448.     set baud 1200
  1449.     dial 9&5551212
  1450.     script gin:--gin:--gin: smith ssword: mysecret ~q x $--$ \
  1451.      cd~skermit $ wermit
  1452.     connect
  1453.  
  1454. Note that 'set line' is issued after 'set modem',  but  before  'set  baud'  or
  1455. other line-related parameters.
  1456.  
  1457. Example two:
  1458.  
  1459. Using  a  modem,  dial the Telenet network.  This network expects three returns
  1460. with slight delays between them.  These are sent following null expects.    The
  1461. single return is here sent as a null string, with a return appended by default.
  1462. Four returns are sent to be safe before looking  for  the  prompt.    Then  the
  1463. Telenet  id and password are entered.  Then Telenet is instructed to connect to
  1464. a host site (c 12345).  The host has a data switch that  asks  "which  system";
  1465. the  script responds "myhost" (if the "which system" prompt doesn't appear, the
  1466. Telenet connect command is reissued).  The script waits for an "@" prompt  from
  1467. the  host,  then  sends  the user ID ("joe") and password ("secret"), looks for
  1468. another "@" prompt, runs Kermit, and in response to the Kermit's prompt  (which
  1469. ends  in  ">"),  gives  the commands "set parity even" and "server".  Files are
  1470. then exchanged.  The commands are in a take file; note the continuation of  the
  1471. 'script' command onto several lines using the `\' terminator.
  1472.  
  1473.     set modem hayes
  1474.     set line /dev/acu
  1475.     set speed 1200
  1476.     set parity mark
  1477.     dial 9,5551212
  1478.     script ~0 ~0 ~0 ~0 ~0 ~0 ~0 ~0 @--@--@ id~saa001122 = 002211 @ \
  1479.         c~s12345 ystem-c~s12345-ystem myhost @ joe~ssecret @ kermit \
  1480.         > set~sparity~seven > server
  1481.     send some.stuff
  1482.     get some.otherstuff
  1483.     bye
  1484.     quit
  1485.  
  1486. Since  these  commands may be executed totally in the background, they can also
  1487. be scheduled.  A typical shell script, which might be scheduled by cron,  would
  1488. be as follows (csh used for this example):
  1489.  
  1490.     #
  1491.     #keep trying to dial and log onto remote host and exchange files
  1492.     #wait 10 minutes before retrying if dial or script fail.
  1493.     #
  1494.     cd someplace
  1495.     while ( 1 )
  1496.             kermit < /tonight.cmd >> nightly.log &
  1497.             if ( ! $status ) break
  1498.             sleep 600
  1499.     end
  1500.  
  1501. File  tonight.cmd  might  have two takes in it, for example, one to take a file
  1502. with the set modem, set line, set baud, dial, and script, and a second take  of
  1503. a  file  with  send/get  commands  for  the  remote  server.  The last lines of
  1504. tonight.cmd should be a bye and a quit.
  1505.  
  1506.  
  1507.                               THE 'HELP' COMMAND:
  1508.  
  1509. Syntax: help
  1510.    or: help keyword
  1511.    or: help {set, remote} keyword
  1512.  
  1513. Brief help messages or menus are always available at interactive command  level
  1514. by  typing  a question mark at any point.  A slightly more verbose form of help
  1515. is available through the 'help' command.  The 'help' command with no  arguments
  1516. prints  a  brief  summary of how to enter commands and how to get further help.
  1517. 'help' may be followed by one of the top-level C-Kermit command keywords,  such
  1518. as  'send', to request information about a command.  Commands such as 'set' and
  1519. 'remote' have a further level of help.  Thus you may type 'help',  'help  set',
  1520. or  'help  set parity'; each will provide a successively more detailed level of
  1521. help.
  1522.  
  1523.  
  1524.                         THE 'EXIT' AND 'QUIT' COMMANDS:
  1525.  
  1526. These two commands are identical.  Both of them do the following:
  1527.  
  1528.    - Attempt to insure that the terminal is returned to normal.
  1529.    - Relinquish access to any communication line assigned via 'set line'.
  1530.    - Relinquish any uucp and multiuser locks on the communications line.
  1531.    - Hang up the modem, if the communications line supports data  terminal
  1532.      ready.
  1533.    - Close any open logs or other files.
  1534.  
  1535. After  exit  from C-Kermit, your default directory will be the same as when you
  1536. started the program.  The 'exit' command is issued implicitly whenever C-Kermit
  1537. halts normally, e.g. after a command line invocation, or after certain kinds of
  1538. interruptions.
  1539.  
  1540.  
  1541. 1.5. UUCP Lock Files
  1542.  
  1543. Unix has no standard way of obtaining exclusive  access  to  an  external  com-
  1544. munication  line.    When you issue the 'set line' command to Unix Kermit, Unix
  1545. would normally grant you access to the line  even  if  some  other  process  is
  1546. making  use  of  it.    The  method adopted by most Unix systems to handle this
  1547. situation is the "UUCP lock  file".    UUCP,  the  Unix-to-Unix  Copy  program,
  1548. creates  a  file  in  its  directory  (usually /usr/spool/uucp, on some systems
  1549. /etc/locks) with a name like LCK..name, where name is the device name, for  in-
  1550. stance tty07.
  1551.  
  1552. Unix Kermit uses UUCP lock files in order to avoid conflicts with UUCP, tip, or
  1553. other programs that follow this convention.  Whenever you attempt to access  an
  1554. external  line using the 'set line' command or `-l' on the command line, Kermit
  1555. looks in the UUCP directory for a lock file corresponding to that device.   For
  1556. instance, if you 'set line /dev/ttyi6' then Kermit looks for the file 
  1557.  
  1558.     /usr/spool/uucp/LCK..ttyi6
  1559.  
  1560. If it finds this file, it gives you an error message and a directory listing of
  1561. the file so that you can see who is using it, e.g.
  1562.  
  1563.     -r--r--r--  1 fdc        4 May  7 13:02 /usr/spool/uucp/LCK..ttyi6
  1564.  
  1565. In this case, you would look up user fdc to find out how soon the line will be-
  1566. come free.
  1567.  
  1568. This  convention  requires  that  the  uucp  directory be publicly readable and
  1569. writable.  If it is not, the program will issue an appropriate warning message,
  1570. but will allow you to proceed at your own risk (and the risk of anyone else who
  1571. might also be using the same line).
  1572.  
  1573. If no lock file is found, Unix Kermit will attempt create one, thus  preventing
  1574. anyone  who subsequently tries to run Kermit, UUCP, tip, or similar programs on
  1575. the same line from gaining access until you release the line.  If Kermit  could
  1576. not  create  the  lock  file (for instance because the uucp directory is write-
  1577. protected), then you will receive a warning message  but  will  be  allowed  to
  1578. proceed  at  your  -- and everyone else's -- risk.  When Kermit terminates nor-
  1579. mally, your lock file is removed.
  1580.  
  1581. Even when the lock directory is writable and readable,  the  locking  mechanism
  1582. depends  upon  all  users using the same name for the same device.  If a device
  1583. has more than one path associated with it, then a lock can be  circumvented  by
  1584. using an alias.
  1585.  
  1586. When a lock-creating program abruptly terminates, e.g. because it crashes or is
  1587. killed via shell  command,  the  lock  file  remains  in  the  uucp  directory,
  1588. spuriously  indicating  that  the line is in use.  If the lock file is owned by
  1589. yourself, you may remove it.  Otherwise, you'll have to get the  owner  or  the
  1590. system manager to remove it, or else wait for a system task to do so; uucp sup-
  1591. ports a function (uuclean) which removes these files after a predetermined  age
  1592. -- uucp sites tend to run this function periodically via crontab.
  1593.  
  1594. Locking  is  not needed, or used, if communications occur over the user's login
  1595. terminal line (normally /dev/tty).
  1596.  
  1597. It may be seen that line locking is fraught with peril.  It is included in Unix
  1598. Kermit  only because other Unix communication programs rely on it.  While it is
  1599. naturally desirable to assure exclusive access  to  a  line,  it  is  also  un-
  1600. desirable  to  refuse  access  to a vacant line only because of a spurious lock
  1601. file, or because the uucp directory is not appropriately protected.
  1602.  
  1603.  
  1604. 1.6. C-Kermit under Berkeley or System III/V Unix:
  1605.  
  1606. C-Kermit may be interrupted at command level or during file transfer by  typing
  1607. Control-C.    The  program will perform its normal exit function, restoring the
  1608. terminal and releasing any lock.  If a protocol transaction was in progress, an
  1609. error  packet  will  be  sent  to  the opposite Kermit so that it can terminate
  1610. cleanly.
  1611.  
  1612. C-Kermit may be invoked in the background ("&" on shell commmand line).   If  a
  1613. background  process is "killed", the user will have to manually remove any lock
  1614. file and may need to restore the modem.    This  is  because  the  kill  signal
  1615. (kill(x,9)) cannot be trapped by Kermit.
  1616.  
  1617. During execution of a system command ('directory', 'cwd', or `!'), C-Kermit can
  1618. often be returned to command level by typing a single Control-C.  (With  System
  1619. III/V,  the  usual  interrupt  function  (often  the  DEL  key)  is replaced by
  1620. Control-C.)
  1621.  
  1622. Under Berkeley Unix only: C-Kermit may also be interrupted by  ^Z  to  put  the
  1623. process  in  the  background.   In this case the terminal is not restored.  You
  1624. will have to type Control-J followed by "reset" followed by  another  Control-J
  1625. to get your terminal back to normal.
  1626.  
  1627. Control-C, Control-Z, and Control-\ lose their normal functions during terminal
  1628. connection and also during file transfer when the controlling tty line is being
  1629. used for packet i/o.
  1630.  
  1631. If  you are running C-Kermit in "quiet mode" in the foreground, then interrupt-
  1632. ing the program with a console interrupt like Control-C will  not  restore  the
  1633. terminal  to  normal conversational operation.  This is because the system call
  1634. to enable console interrupt traps will cause the program to block if it's  run-
  1635. ning  in  the background, and the primary reason for quiet mode is to allow the
  1636. program to run in the background without blocking, so that  you  can  do  other
  1637. work in the foreground.
  1638.  
  1639. If C-Kermit is run in the background ("&" on shell commmand line), then the in-
  1640. terrupt signal (Control-C) (and System III/V quit signal) are  ignored.    This
  1641. prevents  an interrupt signal intended for a foreground job (say a compilation)
  1642. from being trapped by a background Kermit session.
  1643.  
  1644.  
  1645. 1.7. C-Kermit on the DEC Pro-3xx with Pro/Venix Version 1
  1646.  
  1647. The DEC Professional 300 series are PDP-11/23 based personal computers.   Venix
  1648. Version  1  is a Unix v7 derivative.  It should not be confused with Venix Ver-
  1649. sion 2, which is based on ATT System V; these comments apply to Venix Version 1
  1650. only.    C-Kermit  runs in local mode on the Pro-3xx when invoked from the con-
  1651. sole; the default device is /dev/com1.dout.  When connected to a remote  system
  1652. (using  C-Kermit's  'connect'  command), Pro/Venix itself (not Kermit) provides
  1653. VT52 terminal emulation.  Terminal operation at high speeds  (like  9600  baud)
  1654. requires  xon/xoff  flow  control, which unfortunately interferes with applica-
  1655. tions such as the EMACS that use Control-Q and Control-S as commands.
  1656.  
  1657. When logging in to a Pro-3xx (or any workstation) through the "back  port",  it
  1658. may  be  necessary  to  give  the  command  "set line /dev/tty" in order to get
  1659. C-Kermit to function correctly in remote mode (on a system in which it normally
  1660. expects to be operating in local mode).
  1661.  
  1662.  
  1663. 1.8. C-Kermit under VAX/VMS
  1664.  
  1665. C-Kermit  can  be  built using VAX-11 C to run under VMS.  Most of the descrip-
  1666. tions in this manual hold true, but it should be noted that as of this  writing
  1667. the  VMS  support  is not thoroughly tested, and no explicit support exists for
  1668. the various types of VMS files and their attributes.
  1669.  
  1670. The C-Kermit init file for VMS is called KERMIT.INI.
  1671.  
  1672.  
  1673. 1.9. C-Kermit on the Macintosh and other Systems
  1674.  
  1675. The "protocol kernel" of C-Kermit is also used by Columbia's Macintosh  Kermit.
  1676. The  user  and  system  interface  is  entirely  different, and is covered in a
  1677. separate document.
  1678.  
  1679. There is also a Kermit for the Commodore Amiga based on C-Kermit,  as  well  as
  1680. versions for MS-DOS, Data General operating systems, etc.
  1681.  
  1682.  
  1683. 1.10. C-Kermit Restrictions and Known Bugs
  1684.  
  1685.    1. Editing  characters:    The program's interactive command interrupt,
  1686.       delete, and kill characters are Control-C,  Delete  (or  Backspace),
  1687.       and  Control-U,  respectively.   There is currently no way to change
  1688.       them to suit your taste or match those used by your shell,  in  case
  1689.       those are different.
  1690.  
  1691.    2. Flow control:  C-Kermit attempts to use XON/XOFF flow control during
  1692.       protocol operations, but it also puts the  communication  line  into
  1693.       "rawmode".   On many systems, rawmode disables flow control, so even
  1694.       though you may have "set flow xon/xoff", no  flow  control  will  be
  1695.       done.  This is highly system and Unix-version dependent.
  1696.  
  1697.    3. High  baud  rates:  There's no way to specify baud rates higher than
  1698.       9600 baud.  Most Unix systems don't supply symbols for them  (unless
  1699.       you  use  EXTA, EXTB), and even when they do, the program has no way
  1700.       of knowing whether a specific port's serial i/o controller  supports
  1701.       those rates.
  1702.  
  1703.    4. Modem  controls:   If a connection is made over a communication line
  1704.       (rather than on the controlling terminal line), and  that  line  has
  1705.       modem  controls,  (e.g.  data  terminal  ready and carrier detection
  1706.       implementation), returning to the shell level  will  disconnect  the
  1707.       conversation.    In  that case, one should use interactive mode com-
  1708.       mands, and avoid use of piped shell-level operation (also  see  'set
  1709.       modem-dialer' and 'dial' commands.)
  1710.  
  1711.    5. Login Scripts:  The present login scripts implementation follows the
  1712.       Unix conventions of uucp's "L.sys" file, rather than the normal Ker-
  1713.       mit "INPUT/OUTPUT" style.
  1714.  
  1715.    6. Dial-out  vs  dial-in  communications  lines:    C-Kermit requires a
  1716.       dial-out or dedicated line for the "set line" or "-l" options.  Most
  1717.       systems  have  some  lines  dedicated  to dial-in, which they enable
  1718.       "loggers" on,  and  some  lines  available  for  dial-out.    Recent
  1719.       releases  of  Unix (ATT & Berkeley) have mechanisms for changing the
  1720.       directionality of a line.
  1721.  
  1722.    7. Using C-Kermit on Local Area Networks:   C-Kermit  can  successfully
  1723.       operate  at  speeds  up to 9600 baud over LANs, provided the network
  1724.       buffers are big enough to accommodate Kermit packets.
  1725.  
  1726.       When computers are connected to LAN's through asynchronous  terminal
  1727.       interfaces,  then the connection should be configured to do XON/XOFF
  1728.       flow control between the network interface and the computer,  rather
  1729.       than  passing  these  signals  through transparently.  This can help
  1730.       prevent Kermit from overrunning the LAN's buffers if they are  small
  1731.       (or if the LAN is congested), and will can also prevent the LAN from
  1732.       overrunning a slow Kermit's buffers.
  1733.  
  1734.       If the network hardware cannot accept 100 characters at a time,  and
  1735.       flow  control  cannot  be done between the network and the computer,
  1736.       then Kermit's "set send/receive packet-length" command can  be  used
  1737.       to shorten the packets.
  1738.  
  1739.    8. Resetting terminal after abnormal termination or kill: When C-Kermit
  1740.       terminates abnormally (say, for example, by a kill command issued by
  1741.       the  operator)  the  user  may need to reset the terminal state.  If
  1742.       commands do not seem  to  be  accepted  at  the  shell  prompt,  try
  1743.       Control-J  "stty  sane"  Control-J  (use  "reset" on Berkeley Unix).
  1744.       That should take the terminal out of "raw  mode"  if  it  was  stuck
  1745.       there.
  1746.  
  1747.    9. Remote  host  commands  may  time-out  on  lengthy  activity:  Using
  1748.       "remote host" to instruct the C-Kermit server to invoke  Unix  func-
  1749.       tions  (like  "make")  that might take a long time to produce output
  1750.       can cause timeout conditions.
  1751.  
  1752.   10. XOFF deadlocks:  When connecting back to  C-Kermit  after  a  trans-
  1753.       action, or after finishing the server, it may be necessary to type a
  1754.       Control-Q to clear up an  XOFF  deadlock.    There's  not  much  the
  1755.       program can do about this...
  1756.  
  1757.  
  1758. 1.11. How to Build C-Kermit for a Unix System
  1759.  
  1760. The  C-Kermit  files,  as  distributed from Columbia, all begin with the prefix
  1761. "ck".  You should make a directory for these files  and  then  cd  to  it.    A
  1762. makefile  is  provided  to  build  C-Kermit for various Unix systems (there are
  1763. separate makefiles for VMS and the Macintosh).  As  distributed,  the  makefile
  1764. has  the  name  "ckuker.mak".  You should rename it to "makefile" and then type
  1765. "make xxx", where xxx is the symbol for your system, for instance "make bsd" to
  1766. make  C-Kermit for 4.x BSD Unix.  The result will be a program called "wermit".
  1767. You should test this to make sure it works; if it does, then you can rename  it
  1768. to "kermit" and install it for general use.  See the makefile for a list of the
  1769. systems supported and the corresponding "make" arguments.
  1770.  
  1771.  
  1772. 1.12. Adapting C-Kermit to Other Systems
  1773.  
  1774. C-Kermit is designed for portability.  The level of portability is indicated in
  1775. parentheses  after  the module name: "C" means any system that has a C compiler
  1776. that conforms to the description in "The C Programming Language" by Kernighan &
  1777. Ritchie  (Prentice-Hall, 1978).  "Cf" is like "C", but also requires "standard"
  1778. features like printf and fprintf, argument passing via argv/argc, and so on, as
  1779. described in Kernighan & Ritchie.  "Unix" means the module should be useful un-
  1780. der any Unix implementation; it requires features such  as  fork()  and  pipes.
  1781. Anything  else  means  that  the  module is particular to the indicated system.
  1782. C-Kermit file names are of the form:
  1783.  
  1784. ck<system><what>.<type>
  1785.  
  1786. where the part before the dot is no more than 6 characters long, the part after
  1787. the dot no more than 3 characters long, and:
  1788.  
  1789. <type> is the file type:
  1790.  
  1791.   c:    C language source
  1792.   h:    Header file for C language source
  1793.   w:    Wart preprocessor source, converted by Wart (or Lex) to a C program
  1794.   nr:   Nroff/Troff text formatter source
  1795.   mss:  Scribe text formatter source
  1796.   doc:  Documentation
  1797.   hlp:  Help text
  1798.   bld:  Instructions for building the program
  1799.   bwr:  A "beware" file - list of known bugs
  1800.   upd:  Program update log
  1801.   mak:  Makefile
  1802.  
  1803. <system> is a single character to tell what system the file applies to:
  1804.  
  1805.   a:    Descriptive material, documentation
  1806.   c:    All systems with C compilers
  1807.   d:    Data General
  1808.   h:    Harris computers (reserved)
  1809.   i:    Commodore Amiga (Intuition)
  1810.   m:    Macintosh
  1811.   p:    IBM PC, PC-DOS (reserved)
  1812.   u:    Unix
  1813.   v:    VAX/VMS
  1814.   w:    Wart
  1815.  
  1816. <what> is mnemonic (up to 3 characters) for what's in the file:
  1817.  
  1818.   aaa:  A "read-me" file, like this one
  1819.   cmd:  Command parsing
  1820.   con:  Connect command
  1821.   deb:  Debug/Transaction Log formats, Typedefs
  1822.   dia:  Modem/Dialer control
  1823.   fio:  System-depdendent File I/O
  1824.   fns:  Protocol support functions
  1825.   fn2:  More protocol support functions
  1826.   ker:  General C-Kermit definitions, information, documentation
  1827.   mai:  Main program
  1828.   pro:  Protocol
  1829.   scr:  Script command
  1830.   tio:  System-dependent terminal i/o & control and interrupt handing
  1831.   usr:  User interface
  1832.   us2:  More user interface
  1833.   us3:  Still more user interface
  1834.  
  1835. Examples:
  1836.  
  1837. ckufio.c        File i/o for Unix
  1838. ckmtio.c        Terminal i/o for Macintosh
  1839. ckuker.mss      Scribe source for for Kermit User Guide chapter
  1840. ckuker.nr       Nroff source file for Unix C-Kermit man page
  1841.  
  1842. The following material discusses each of the C-Kermit modules briefly.
  1843.  
  1844. ckcmai.c, ckcker.h, ckcdeb.h (Cf):
  1845.     This is the main program.  It contains declarations  for  global  variables
  1846.     and a small amount of code to initialize some variables and invoke the com-
  1847.     mand parser.  In its distributed form, it assumes  that  command  line  ar-
  1848.     guments  are passed to it via argc and argv.  Since this portion of code is
  1849.     only several lines long, it should be easy to replace for systems that have
  1850.     different  styles of user interaction.  The header files define symbols and
  1851.     macros used by the various modules of  C-Kermit.    ckcdeb.h  is  the  only
  1852.     header  file  that  is included by all the C-Kermit modules, so it contains
  1853.     not only the debug format  definitions,  but  also  any  compiler-dependent
  1854.     typedefs.
  1855.  
  1856. ckwart.c (Cf), ckcpro.w (C):
  1857.     The ckcpro module embodies the Kermit protocol state table and the code  to
  1858.     accomplish  state switching.  It is written in "wart", a language which may
  1859.     be regarded as a subset of the Unix "lex" lexical analyzer generator.  Wart
  1860.     implements  enough  of lex to allow the ckprot module to function.  Lex it-
  1861.     self was not used because it is proprietary.  The protocol module  ckcpro.w
  1862.     is  read by wart, and a system-independent C program is produced.  The syn-
  1863.     tax of a Wart program is illustrated  by  ckcpro.w,  and  is  described  in
  1864.     ckwart.doc.
  1865.  
  1866. ckcfns.c (C):
  1867.     The module contains all the Kermit protocol  support  functions  --  packet
  1868.     formation,  encoding,  decoding, block check calculation, filename and data
  1869.     conversion, protocol parameter negotiation, and high-level interaction with
  1870.     the communication line and file system.  To accommodate small systems, this
  1871.     module has been split into two -- ckcfns.c and ckcfn2.c.
  1872.  
  1873. ckutio.c:
  1874.     This module contains the system-dependent primitives for communication line
  1875.     i/o, timers, and interrupts for the various versions of Unix.  Certain  im-
  1876.     portant  variables  are  defined  in  this  module, which determine whether
  1877.     C-Kermit is by default remote or  local,  what  the  default  communication
  1878.     device is, and so forth.  The tio module maintains its own private database
  1879.     of file descriptors and modes for the console terminal and the file  trans-
  1880.     fer  communication  line so that other modules (like ckcfns or the terminal
  1881.     connect module) need not be concerned with them.  The variations among Unix
  1882.     implementations  with  respect  to  terminal  control and timers are accom-
  1883.     modated via conditional compilation.
  1884.  
  1885. ckufio.c:
  1886.     This  module  contains  system-dependent  primitives for file i/o, wildcard
  1887.     (meta character) expansion, file existence and access checking, and  system
  1888.     command execution for the various versions of Unix.  It maintains an inter-
  1889.     nal database of i/o "channels" (file pointers in this case) for  the  files
  1890.     C-Kermit  cares about -- the input file (the file which is being sent), the
  1891.     output file (the file being received), the various logs, the screen, and so
  1892.     forth.  This module varies little among Unix implementations except for the
  1893.     wildcard expansion code; the directory structure of  4.2bsd  Unix  is  dif-
  1894.     ferent  from  that of other Unix systems.  Again, variation among Unix sys-
  1895.     tems is selected using conditional compilation.
  1896.  
  1897. ckuusr.h, ckuusr.c, ckuus2.c, ckuus3.c (Unix):
  1898.     This is the "user interface" for C-Kermit.  It includes the command parser,
  1899.     the screen output functions, and console input functions.  The command par-
  1900.     ser comes in two pieces -- the traditional Unix command line decoder (which
  1901.     is quite small and compact), and the interactive keyword parser  (which  is
  1902.     rather large).  This module is fully replacable; its interface to the other
  1903.     modules is very simple, and is explained at the  beginning  of  the  source
  1904.     file.    The  ckuusr  module  also  includes  code  to execute any commands
  1905.     directly which don't require the Kermit protocol -- local file  management,
  1906.     etc.    The  module  is rated "Unix" because it makes occasional use of the
  1907.     system() function.
  1908.  
  1909.     Note that while ckuusr is logically one module, it has been split  up  into
  1910.     three C source files, plus a header file for the symbols they share in com-
  1911.     mon.  This is to accommodate small systems that cannot handle big  modules.
  1912.     ckuusr.c  has  the  command  line and top-level interactive command parser;
  1913.     ckuus2.c has the help command and strings; ckuus3 has the  set  and  remote
  1914.     commands along with the logging, screen, and "interrupt" functions.
  1915.  
  1916. ckucmd.c, ckucmd.h (Cf):
  1917.     This is an interactive command parsing package developed for C-Kermit.   It
  1918.     is written portably enough to be usable on any system that has a C compiler
  1919.     that supports functions like printf.    The  file  name  parsing  functions
  1920.     depend  upon primitives defined in the fio module; if these primitives can-
  1921.     not be supplied for a certain system, then the filename  parsing  functions
  1922.     can  be deleted, and the package will still be useful for parsing keywords,
  1923.     numbers, arbitrary text strings, and so forth.  The style of interaction is
  1924.     the same as that found on the DECSYSTEM-20.
  1925.  
  1926. ckucon.c (Unix):
  1927.     This is the connect module.  As supplied, it should operate in any Unix en-
  1928.     vironment,  or  any  C-based environment that provides the fork() function.
  1929.     The module requires access to global variables  that  specify  line  speed,
  1930.     parity,  duplex,  flow  control,  etc,  and  invokes functions from the tio
  1931.     module to accomplish the desired settings and input/output,  and  functions
  1932.     from  the  fio module to perform session logging.  No terminal emulation is
  1933.     performed, but since standard i/o is used for  the  console,  this  may  be
  1934.     piped  through a terminal emulation filter.  The ckucon function may be en-
  1935.     tirely replaced, so long as the global settings are honored by its replace-
  1936.     ment.    PC implementations of C-Kermit may require the ck?con module to do
  1937.     screen control, escape sequence interpretation, etc, and may also  wish  to
  1938.     write special code to get the best possible performance.
  1939.  
  1940. ckudia.c (Unix):
  1941.     This is the dialer module.  As supplied, it handles Hayes, Ventel,  Penril,
  1942.     Racal-Vadic, and several other modems.
  1943.  
  1944. ckuscr.c (Unix):
  1945.     This is the login script  module.    As  supplied,  it  handles  uucp-style
  1946.     scripts.
  1947.  
  1948. Moving C-Kermit to a new system entails:
  1949.  
  1950.    1. Creating  a  new ck?tio module in C, assembler, or whatever language
  1951.       is most appropriate for system programming on the new  system.    If
  1952.       the  system  is  Unix-like,  then  support  may  be added within the
  1953.       ckutio.c module itself using conditional compilation.
  1954.  
  1955.    2. Creating a new ck?fio module, as above.
  1956.  
  1957.    3. If the system is not Unix-like, then a new ckuusr module may be  re-
  1958.       quired, as well as a different invocation of it from ckcmai.
  1959.  
  1960.    4. If  the  distributed connect module doesn't work or performs poorly,
  1961.       then it may be replaced.  For instance, interrupt-driven i/o may  be
  1962.       required, especially if the system doesn't have forks.
  1963.  
  1964. Those  who  favor  a  different  style  of  user/program  interaction from that
  1965. provided in ckuusr.c may replace the entire module, for instance with one  that
  1966. provides a mouse/window/icon environment, a menu/function-key environment, etc.
  1967.  
  1968. A few guidelines should be followed to maintain portability:
  1969.  
  1970.    - Keep  variable and function names to 6 characters or less.  Don't use
  1971.      identifiers that are distinguished  from  one  another  only  by  al-
  1972.      phabetic case.
  1973.  
  1974.    - Keep  modules  small.    For instance, on a PDP-11 it is necessary to
  1975.      keep the code segment of each module below 8K in order to  allow  the
  1976.      segment  mapping  to  occur which is necessary to run programs larger
  1977.      than 64K on a non-I-and-D-space machine.
  1978.  
  1979.    - Keep strings short; many compilers have restrictive maximum  lengths;
  1980.      128  is the smallest maximum string constant length we've encountered
  1981.      so far.
  1982.  
  1983.    - Keep (f,s)printf formats short.  If these exceed  some  compiler  de-
  1984.      pendent maximum (say, 128) memory will be overwritten and the program
  1985.      will probably core dump.
  1986.  
  1987.    - Do not introduce system dependencies into ckcpro.w or ckcfn*.c.
  1988.  
  1989.    - If a variable is a character, declare as CHAR, not  int,  to  prevent
  1990.      the  various sign extension and byte swapping foulups that occur when
  1991.      characters are placed in integer variables.
  1992.  
  1993.    - Remember that different systems may use different  length  words  for
  1994.      different  things.  Don't assume an integer can be used as a pointer,
  1995.      etc.
  1996.  
  1997.    - Don't declare static functions; these can wreak  havoc  with  systems
  1998.      that do segment mapping.
  1999.  
  2000.    - In  conditional  compilations expressions, use #ifdef and #ifndef and
  2001.      not #if, which is not supported by some compilers.  Also,  don't  use
  2002.      any  operators  in these expressions; many compilers will fail to un-
  2003.      derstand expressions like #ifdef FOO | BAR.  Also, don't put trailing
  2004.      tokens on #else's or #endif's (use /* comments */).
  2005.  
  2006.    - Don't define multiline macros.
  2007.  
  2008. In  general,  remember that this program will have to be compilable by old com-
  2009. pilers and runnable on small systems.
  2010.