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