Annotation of 43BSDReno/contrib/kermit/ckuker.doc, revision 1.1

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