Annotation of researchv10dc/lbin/kermit/ckuker.doc, revision 1.1.1.1

1.1       root        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.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.