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