BSD 4_3 development
[unix-history] / usr / contrib / kermit / ckuker.doc
CommitLineData
ee2abe03
C
1
2
3
49. UNIX KERMIT
5
6Program: Frank da Cruz, Bill Catchings, Jeff Damens, Columbia University;
7 Herm Fischer, Encino CA; contributions by many others.
8Language: C
9Documentation: Frank da Cruz, Herm Fischer
10Version: 4C(057)
11Date: July 26, 1985
12
13C-Kermit is a completely new implementation of Kermit, written modularly and
14transportably in C. The protocol state transition table is written in wart, a
15(non-proprietary) lex-like preprocessor for C. System-dependent primitive func-
16tions are isolated into separately compiled modules so that the program should
17be easily portable among Unix systems and also to non-Unix systems that have C
18compilers. This document applies to Unix implementations of C-Kermit, and in
19most ways also to the VMS implementation.
20
21
22Unix 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
55C-Kermit provides traditional Unix command line operation as well as inter-
56active command prompting and execution. The command line options provide ac-
57cess to a minimal subset of C-Kermit's capabilities; the interactive command
58set is far richer.
59\f
60
61
62On systems with dialout modems, C-Kermit can use its command file and login
63script facilities to replicate the file transfer functionality of UUCP among
64heterogeneous operating systems, including the use of scheduled (e.g. late
65night) unattended operation.
66
67
689.1. The Unix File System
69
70Consult your Unix manual for details about the file system under your version
71of Unix. For the purposes of Kermit, several things are worth briefly noting.
72Unix files generally have lowercase names, possibly containing one or more dots
73or other special characters. Unix directories are tree-structured. Directory
74levels are separated by slash ("/") characters. For example,
75
76 /usr/foo/bar
77
78denotes the file bar in the directory /usr/foo. Wildcard or "meta" characters
79allow groups of files to be specified. "*" matches any string; "?" matches any
80single character.
81
82When C-Kermit is invoked with file arguments specified on the Unix command
83line, the Unix shell (Bourne Shell, C-Shell, etc) expands the meta characters
84itself, and in this case a wider variety is available. For example,
85
86 kermit -s ~/ck[uvm]*.{upd,bwr}]
87
88is expanded by the Berkeley C-Shell into a list of all the files in the user's
89home directory (~/) that start with the characters "ck", followed by a single
90character "u", "v", or "m", followed by zero or more characters, followed by a
91dot, followed by one of the strings "upd" or "bwr". Internally, the C-Kermit
92program itself expands only the "*" and "?" meta characters.
93
94Unix files are linear streams of 8-bit bytes. Text files consist of 7-bit AS-
95CII characters, with the high-order bit off (0), and lines separated by the
96Unix newline character, which is linefeed (LF, ASCII 10). This distinguishes
97Unix text files from those on most other ASCII systems, in which lines are
98separated by a carriage-return linefeed sequence (CRLF, ASCII 13 followed by
99ASCII 10). Binary files are likely to contain data in the high bits of the
100file bytes, and have no particular line or record structure.
101
102When transferring files, C-Kermit will convert between upper and lower case
103filenames and between LF and CRLF line terminators automatically, unless told
104to do otherwise. When binary files must be transferred, the program must be
105instructed not to perform LF/CRLF conversion (-i on the command line or "set
106file type binary" interactively; see below).
107
108
1099.2. File Transfer
110
111If C-Kermit is in local mode, the screen (stdout) is continously updated to
112show the progress of the file transer. A dot is printed for every four data
113packets, other packets are shown by type:
114
115 I Exchange Parameter Information
116 R Receive Initiate
117 S Send Initiate
118\f
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
130You 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
137These interrupt characters differ from the ones used in other Kermit implemen-
138tations to avoid conflict with commonly used Unix shell interrupt characters.
139With Version 7, System III, and System V implementations of Unix, interrupt
140commands 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
147EMERGENCY EXIT: When running Unix Kermit in remote mode, if you have started a
148protocol operation (sending or receiving a file, server command wait, etc), you
149will not be able to regain control of the terminal until the protocol operation
150has run its course (completed or timed out). In particular, you cannot stop
151the protocol by typing the normal Unix interrupt characters, since the terminal
152has been put in "raw mode". If you need to regain control quickly -- for in-
153stance, because the protocol is stuck -- you can type the following sequence of
154four characters directly to the Unix Kermit program ("connect" first if
155necessary):
156
157 Control-A Control-C Control-C Carriage-Return
158
159This will cause the program to exit and restore the terminal to normal.
160
161
1629.3. Command Line Operation
163
164The C-Kermit command line syntax has been changed from that of earlier releases
165of Unix Kermit to conform to the Proposed Syntax Standards for Unix System Com-
166mands put forth by Kathy Hemenway and Helene Armitage of AT&T Bell Laboratories
167in 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\f
178
179
180 - The order of options does not matter.
181 - '-' preceded and followed by whitespace means standard input.
182
183A group of bundled options may end with an option that has an argument.
184
185The following notation is used in command descriptions:
186
187fn A Unix file specification, possibly containing the "wildcard" charac-
188 ters `*' or `?' (`*' matches all character strings, `?' matches any
189 single character).
190
191fn1 A Unix file specification which may not contain `*' or `?'.
192
193rfn A remote file specification in the remote system's own syntax, which
194 may denote a single file or a group of files.
195
196rfn1 A remote file specification which should denote only a single file.
197
198n A decimal number between 0 and 94.
199
200c A decimal number between 0 and 127 representing the value of an ASCII
201 character.
202
203cc 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
210C-Kermit command line options may specify either actions or settings. If
211C-Kermit is invoked with a command line that specifies no actions, then it will
212issue a prompt and begin interactive dialog. Action options specify either
213protocol 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\f
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
268Before proceeding, a few words about remote and local operation are necessary.
269C-Kermit is "local" if it is running on PC or workstation that you are using
270directly, or if it is running on a multiuser system and transferring files over
271an external communication line -- not your job's controlling terminal or con-
272sole. C-Kermit is remote if it is running on a multiuser system and transfer-
273ring files over its own controlling terminal's communication line, connected to
274your PC or workstation.
275
276If 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
278running C-Kermit on a multiuser (timesharing) system, it is in remote mode un-
279less you explicitly point it at an external line for file transfer or terminal
280connection. 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
287When an external line is being used, you might also need some additional op-
288tions 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\f
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
308The following commands may be used only with a C-Kermit which is local -- ei-
309ther 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
329On a timesharing system, the -l and -b options will also have to be included
330with the -r, -k, or -s options if the other Kermit is on a remote system.
331
332Several 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
350The command line may contain no more than one protocol action option.
351
352Files are sent with their own names, except that lowercase letters are raised
353\f
354
355
356to 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
358inserted before it. Incoming files are stored under their own names except
359that uppercase letters are lowered, and, if -w was specified, a "generation
360number" is appended to the name if it has the same name as an existing file
361which would otherwise be overwritten. If the -a option is included, then the
362same rules apply to its argument. The file transfer display shows any trans-
363formations performed upon filenames.
364
365During 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
381Command Line Examples:
382
383
384 kermit -l /dev/ttyi5 -b 1200 -cn -r
385
386This command connects you to the system on the other end of ttyi5 at 1200 baud,
387where you presumably log in and run Kermit with a 'send' command. After you
388escape back, C-Kermit waits for a file (or files) to arrive. When the file
389transfer is completed, you are again connected to the remote system so that you
390can logout.
391
392
393 kermit -l /dev/ttyi4 -b 1800 -cntp m -r -a foo
394
395This command is like the preceding one, except the remote system in this case
396uses half duplex communication with mark parity. The first file that arrives
397is stored under the name foo.
398
399
400 kermit -l /dev/ttyi6 -b 9600 -c | tek
401
402This example uses Kermit to connect your terminal to the system at the other
403end of ttyi6. The C-Kermit terminal connection does not provide any particular
404terminal 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
410This command would be used to shut down a remote server and then connect to the
411remote system, in order to log out or to make further use of it. The -n option
412\f
413
414
415is invoked after -f (-c would have been invoked before).
416
417
418 kermit -l /dev/ttyi6 -b 9600 -qg foo.\* &
419
420This command causes C-Kermit to be invoked in the background, getting a group
421of files from a remote server (note the quoting of the `*' character). No dis-
422play occurs on the screen, and the keyboard is not sampled for interruption
423commands. This allows other work to be done while file transfers proceed in
424the background.
425
426
427 kermit -l /dev/ttyi6 -b 9600 -g foo.\* > foo.log < /dev/null &
428
429This command is like the previous one, except the file transfer display has
430been redirected to the file foo.log. Standard input is also redirected, to
431prevent C-Kermit from sampling it for interruption commands.
432
433
434 kermit -iwx
435
436This command starts up C-Kermit as a server. Files are transmitted with no
437newline/carriage-return-linefeed conversion; the -i option is necessary for bi-
438nary file transfer and useful for Unix-to-Unix transfers. Incoming files that
439have the same names as existing files are given new, unique names.
440
441
442 kermit -l /dev/ttyi6 -b 9600
443
444This command sets the communication line and speed. Since no action is
445specified, C-Kermit issues a prompt and enters an interactive dialog with you.
446Any settings given on the command line remain in force during the dialog, un-
447less explicitly changed.
448
449
450 kermit
451
452This command starts up Kermit interactively with all default settings.
453
454The next example shows how Unix Kermit might be used to send an entire direc-
455tory tree from one Unix system to another, using the tar program as Kermit's
456standard input and output. On the orginating system, in this case the remote,
457type (for instance):
458
459
460 tar cf - /usr/fdc | kermit -is -
461
462This causes tar to send the directory /usr/fdc (and all its files and all its
463subdirectories and all their files...) to standard output instead of to a tape;
464kermit receives this as standard input and sends it as a binary file. On the
465receiving system, in this case the local one, type (for instance):
466
467
468 kermit -il /dev/ttyi5 -b 9600 -k | tar xf -
469
470Kermit receives the tar archive, and sends it via standard output to its own
471\f
472
473
474copy of tar, which extracts from it a replica of the original directory tree.
475
476A final example shows how a Unix compression utility might be used to speed up
477Kermit file transfers:
478
479 compress file | kermit -is - (sender)
480 kermit -ik | uncompress (receiver)
481
482
483Exit Status Codes:
484
485Unix Kermit returns an exit status of zero, except when a fatal error is en-
486countered, 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-
488mands (redirected standard input and/or take files), any failed interactive
489command (such as failed dial or script attempt) causes the fatal error exit.
490
491
4929.4. Interactive Operation
493
494C-Kermit's interactive command prompt is "C-Kermit>". In response to this
495prompt, you may type any valid command. C-Kermit executes the command and then
496prompts you for another command. The process continues until you instruct the
497program to terminate.
498
499Commands begin with a keyword, normally an English verb, such as "send". You
500may omit trailing characters from any keyword, so long as you specify suf-
501ficient characters to distinguish it from any other keyword valid in that
502field. Certain commonly-used keywords (such as "send", "receive", "connect")
503have special non-unique abbreviations ("s" for "send", "r" for "receive", "c"
504for "connect").
505
506Certain characters have special functions during typein of interactive com-
507mands:
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\f
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
541You may type the editing characters (DEL, ^W, etc) repeatedly, to delete all
542the way back to the prompt. No action will be performed until the command is
543entered by typing carriage return, linefeed, or formfeed. If you make any mis-
544takes, you will receive an informative error message and a new prompt -- make
545liberal use of `?' and ESC to feel your way through the commands. One impor-
546tant command is "help" -- you should use it the first time you run C-Kermit.
547
548A command line beginning with a percent sign "%" is ignored. Such lines may be
549used to include illustrative commentary in Kermit command dialogs.
550
551Interactive C-Kermit accepts commands from files as well as from the keyboard.
552When you enter interactive dialog, C-Kermit looks for the file .kermrc in your
553home or current directory (first it looks in the home directory, then in the
554current one) and executes any commands it finds there. These commands must be
555in interactive format, not Unix command-line format. A "take" command is also
556provided for use at any time during an interactive session. Command files may
557be nested to any reasonable depth.
558
559Here 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
586The 'set' parameters are:
587\f
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
606The '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
617Most of these commands are described adequately in the Kermit User Guide. Spe-
618cial aspects of certain Unix Kermit commands are described below.
619
620
621 THE 'SEND' COMMAND
622
623Syntax: send fn - or - send fn1 rfn1
624
625Send the file or files denoted by fn to the other Kermit, which should be run-
626ning as a server, or which should be given the 'receive' command. Each file is
627sent under its own name (as described above, or as specified by the 'set file
628names' command). If the second form of the 'send' command is used, i.e. with
629fn1 denoting a single Unix file, rfn1 may be specified as a name to send it un-
630der. The 'send' command may be abbreviated to 's', even though 's' is not a
631unique abbreviation for a top-level C-Kermit command.
632
633The wildcard (meta) characters `*' and `?' are accepted in fn. If `?' is to be
634included, it must be prefixed by `\' to override its normal function of provid-
635ing help. `*' matches any string, `?' matches any single character. Other
636notations for file groups, like `[a-z]og', are not available in interactive
637commands (though of course they are available on the command line). When fn
638contains `*' or `?' characters, there is a limit to the number of files that
639can 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
641fn was of the form
642
643 usr/longname/anotherlongname/*
644
645then C-Kermit's string space will fill up rapidly -- try doing a cwd (see
646\f
647
648
649below) to the path in question and reissuing the command.
650
651Note -- C-Kermit sends only from the current or specified directory. It does
652not traverse directory trees. If the source directory contains subdirectories,
653they will be skipped. Conversely, C-Kermit does not create directories when
654receiving files. If you have a need to do this, you can pipe tar through
655C-Kermit, as shown in the example on page 125, or under System III/V Unix you
656can use cpio.
657
658Another Note -- C-Kermit does not skip over "invisible" files that match the
659file specification; Unix systems usually treat files whose names start with a
660dot (like .login, .cshrc, and .kermrc) as invisible. Similarly for "temporary"
661files whose names start with "#".
662
663
664 THE 'RECEIVE' COMMAND
665
666Syntax: receive - or - receive fn1
667
668Passively wait for files to arrive from the other Kermit, which must be given
669the 'send' command -- the 'receive' command does not work in conjunction with a
670server (use 'get' for that). If fn1 is specified, store the first incoming
671file under that name. The 'receive' command may be abbreviated to 'r'.
672
673
674 THE 'GET' COMMAND:
675
676Syntax: get rfn
677
678 or: get
679 rfn
680 fn1
681
682Request a remote Kermit server to send the named file or files. Since a remote
683file specification (or list) might contain spaces, which normally delimit
684fields of a C-Kermit command, an alternate form of the command is provided to
685allow the inbound file to be given a new name: type 'get' alone on a line, and
686you will be prompted separately for the remote and local file specifications,
687for example
688
689 C-Kermit>get
690 Remote file specification: profile exec
691 Local name to store it under: profile.exec
692
693As with 'receive', if more than one file arrives as a result of the 'get' com-
694mand, only the first will be stored under the alternate name given by fn1; the
695remaining files will be stored under their own names if possible. If a `?' is
696to be included in the remote file specification, you must prefix it with `\' to
697suppress its normal function of providing help.
698
699If you have started a multiline 'get' command, you may escape from its lower-
700level prompts by typing a carriage return in response to the prompt, e.g.
701\f
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
713The 'server' command places C-Kermit in "server mode" on the currently selected
714communication line. All further commands must arrive as valid Kermit packets
715from the Kermit on the other end of the line. The Unix Kermit server can
716respond to the following commands:
717
718Command 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
732Note that the Unix Kermit server cannot always respond to a BYE command. It
733will attempt to do so using "kill()", but this will not work on all systems or
734under all conditions.
735
736If the Kermit server is directed at an external line (i.e. it is in "local
737mode") then the console may be used for other work if you have 'set file dis-
738play off'; normally the program expects the console to be used to observe file
739transfers and enter status queries or interruption commands. The way to get
740C-Kermit into background operation from interactive command level varies from
741system to system (e.g. on Berkeley Unix you would halt the program with ^Z and
742then use the C-Shell 'bg' command to continue it in the background). The more
743common method is to invoke the program with the desired command line arguments,
744including "-q", and with a terminating "&".
745
746When the Unix Kermit server is given a 'remote host' command, it executes it
747using the shell invoked upon login, e.g. the Bourne shell or the Berkeley
748C-Shell.
749
750
751 THE 'REMOTE', 'BYE', AND 'FINISH' COMMANDS:
752
753C-Kermit may itself request services from a remote Kermit server. In addition
754to 'send' and 'get', the following commands may also be sent from C-Kermit to a
755Kermit 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\f
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
782Syntax: log {debugging, packets, session, transactions} [ fn1 ]
783
784C-Kermit's progress may be logged in various ways. The 'log' command opens a
785log, the 'close' command closes it. In addition, all open logs are closed by
786the 'exit' and 'quit' commands. A name may be specified for a log file; if the
787name is omitted, the file is created with a default name as shown below.
788
789log 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
795log 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
801log 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
806log 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
814The 'close' command explicitly closes a log, e.g. 'close debug'.
815
816Note: Debug and Transaction logs are a compile-time option; C-Kermit may be
817compiled without these logs, in which case it will run faster, it will take up
818less space on the disk, and the commands relating to them will not be present.
819\f
820
821
822 LOCAL FILE MANAGEMENT COMMANDS:
823
824Unix Kermit allows some degree of local file management from interactive com-
825mand level:
826
827directory [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
831cwd [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
836space
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
855Since Kermit is designed to allow diverse systems to communicate, it is often
856necessary to issue special instructions to allow the program to adapt to
857peculiarities of the another system or the communication path. These instruc-
858tions are accomplished by the 'set' command. The 'show' command may be used to
859display current settings. Here is a brief synopsis of settings available in
860the current release of C-Kermit:
861
862block-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
873delay 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\f
878
879
880duplex {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
884escape-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
892file {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\f
937
938
939 the "file warning" feature is not enabled, then the previous
940 copy of the file will disappear.
941
942flow-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
949incomplete {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
955handshake {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
962line [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
977modem-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
987parity {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
994prompt [string]
995\f
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
1003send 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
1051receive parameter
1052 Establish parameters to request the other Kermit to use when sending pack-
1053 ets.
1054\f
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
1085speed {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
1095Syntax: show {parameters, versions}
1096
1097The "show" command with the default argument of "parameters" displays the
1098values of all the 'set' parameters described above. If you type "show
1099versions", then C-Kermit will display the version numbers and dates of all its
1100internal modules. You should use the "show versions" command to ascertain the
1101vintage of your Kermit program before reporting problems to Kermit maintainers.
1102
1103
1104 THE 'STATISTICS' COMMAND:
1105
1106The statistics command displays information about the most recent Kermit
1107protocol transaction, including file and communication line i/o, timing and ef-
1108ficiency, as well as what encoding options were in effect (such as 8th-bit
1109prefixing, repeat-count compression).
1110\f
1111
1112
1113 THE 'TAKE' AND 'ECHO' COMMANDS:
1114
1115Syntax: take fn1
1116 echo [text to be echoed]
1117
1118The 'take' command instructs C-Kermit to execute commands from the named file.
1119The file may contain any interactive C-Kermit commands, including 'take'; com-
1120mand files may be nested to any reasonable depth. The 'echo' command may be
1121used within command files to issue greetings, announce progress, ring the ter-
1122minal bell, etc.
1123
1124The 'echo' command should not be confused with the Unix 'echo' command, which
1125can be used to show how meta characters would be expanded. The Kermit echo
1126command simply displays its text argument (almost) literally at the terminal;
1127the argument may contain octal escapes of the form "\ooo", where o is an octal
1128digit (0-7), and there may be 1, 2, or 3 such digits, whose value specify an
1129ASCII character, such as "\007" (or "\07" or just "\7") for beep, "\012" for
1130newline, etc. Of course, each backslash must be must be entered twice in order
1131for it to be passed along to the echo command by the Kermit command parser.
1132
1133Take-command files are in exactly the same syntax as interactive commands.
1134Note that this implies that if you want to include special characters like
1135question mark or backslash that you would have to quote with backslash when
1136typing interactive commands, you must quote these characters the same way in
1137command files. Long lines may be continued by ending them with a single back-
1138slash.
1139
1140Command files may be used in lieu of command macros, which have not been imple-
1141mented in this version of C-Kermit. For instance, if you commonly connect to a
1142system called 'B' that is connected to ttyh7 at 4800 baud, you could create a
1143file 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
1152and then simply type 'take b' (or 't b' since no other commands begin with the
1153letter 't') whenever you wish to connect to system B. Note the comment lines
1154and the beep inserted into the 'echo' command.
1155
1156For connecting to IBM mainframes, a number of 'set' commands are required;
1157these, 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
1167Note that no single command is available to wipe out all of these settings and
1168return C-Kermit to its default startup state; to do that, you can either res-
1169\f
1170
1171
1172tart the program, or else make a command file that executes the necessary 'set'
1173commands:
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
1182An implicit 'take' command is executed upon your .kermrc file upon C-Kermit's
1183initial entry into interactive dialog. The .kermrc file should contain 'set'
1184or other commands you want to be in effect at all times. For instance, you
1185might want override the default action when incoming files have the same names
1186as existing files -- in that case, put the command
1187
1188 set file warning on
1189
1190in your .kermrc file. On some non-Unix systems that run C-Kermit, this file
1191might 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
1198Commands executed from take files are not echoed at the terminal. If you want
1199to see the commands as well as their output, you could feed the command file to
1200C-Kermit via redirected stdin, as in
1201
1202 'kermit < cmdfile'
1203
1204Errors encountered during execution of take files (such as failure to complete
1205dial or script operations) cause termination of the current take file, popping
1206to the level that invoked it (take file, interactive level, or the shell).
1207When kermit is executed in the background, errors during execution of a take
1208file are fatal.
1209
1210
1211 THE 'CONNECT' COMMAND:
1212
1213The connect command links your terminal to another computer as if it were a lo-
1214cal 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
1216workstation. All characters you type at your keyboard are sent out the com-
1217munication line, all characters arriving at the communication port are dis-
1218played on your screen. Current settings of speed, parity, duplex, and flow-
1219control are honored. If you have issued a 'log session' command, everything
1220you see on your screen will also be recorded to your session log. This
1221provides a way to "capture" files from systems that don't have Kermit programs
1222available.
1223
1224To get back to your own system, you must type the escape character, which is
1225Control-Backslash (^\) unless you have changed it with the 'set escape' com-
1226mand, followed by a single-character command, such as 'c' for "close
1227connection". Single-character commands include:
1228\f
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
1239Uppercase and control equivalents for these letters are also accepted. A space
1240typed after the escape character is ignored. Any other character will produce
1241a beep.
1242
1243The connect command simply displays incoming characters on the screen. It is
1244assumed any screen control sequences sent by the host will be handled by the
1245firmware in your terminal or PC. If terminal emulation is desired, then the
1246connect command can invoked from the Unix command line (-c or -n), piped
1247through 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
1256Syntax: dial telephone-number-string
1257
1258This command controls dialout modems; you should have already issued a "set
1259line" and "set speed" command to identify the terminal device, and a "set
1260modem" 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
1262the modem in the appropriate format and then interprets dialer return codes and
1263modem signals to inform you whether the call was completed. The telephone-
1264number-string may contain imbedded modem-dialer commands, such as comma for
1265Hayes pause, or `&' for Ventel dialtone wait and `%' for Ventel pause (consult
1266your modem manual for details).
1267
1268At 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
1281Support for new modems is added to the program from time to time; you can check
1282the current list by typing "set modem ?".
1283
1284The device used for dialing out is the one selected in the most recent "set
1285line" command (or on a workstation, the default line if no "set line" command
1286was given). The "dial" command calls locks the path (see the section on line
1287\f
1288
1289
1290locking below) and establishes a call on an exclusive basis. If it is desired
1291to dial a call and then return to the shell (such as to do kermit activities
1292depending on standard in/out redirection), it is necessary to place the dialed
1293call under one device name (say, "/dev/cua0") and then escape to the shell
1294within 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
1296placed separately for dialing and conversing).
1297
1298Because modem dialers have strict requirements to override the carrier-detect
1299signal most Unix implementations expect, the sequence for dialing is more rigid
1300than most other C-Kermit procedures.
1301
1302Example 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
1313this disconnects modem, and unlocks line.
1314
1315Example 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
1324Example 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
1336For Hayes dialers, two important switch settings are #1 and #6. #1 should be
1337up so that the DTR is only asserted when the line is 'open'. #6 should be up
1338so carrier-detect functions properly. Switches #2 (English versus digit result
1339codes) and #4 (Hayes echoes modem commands) may be in either position.
1340
1341For any dialers in general, this Kermit program requires that the modem provide
1342the "carrier detect" signal when a call is in progress, and remove that signal
1343when the call completes or the line drops. If a switch setting is available to
1344force carrier detect, it should not be in that setting. Secondly, this Kermit
1345program requires that the modem track the computer's "data terminal ready" sig-
1346\f
1347
1348
1349nal (DTR). If a switch setting is available to simulate DTR asserted within
1350the modem, then it should not be in that setting. Otherwise the modem will be
1351unable to hang up at the end of a call or when interrupts are received by Ker-
1352mit.
1353
1354If you want to interrupt a dial command in progress (for instance, because you
1355just realize that you gave it the wrong number), type a Control-C to get back
1356to command level.
1357
1358
1359 THE 'SCRIPT' COMMAND:
1360
1361Syntax: script expect send [expect send] . . .
1362
1363"expect" has the syntax: expect[-send-expect[-send-expect[...]]]
1364
1365This command facilitates logging into a remote system and/or invoking programs
1366or other facilities after login on a remote system.
1367
1368This login script facility operates in a manner similar to that commonly used
1369by the Unix uucp System's "L.sys" file entries. A login script is a sequence
1370of the form:
1371
1372 expect send [expect send] . . .
1373
1374where expect is a prompt or message to be issued by the remote site, and send
1375is the string (names, numbers, etc) to return. The send may also be the
1376keyword EOT, to send Control-D, or BREAK, to send a break signal. Letters in
1377send 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
1394As with some uucp systems, sent strings are followed by ~r unless they have a
1395~c.
1396
1397Only the last 7 characters in each expect are matched. A null expect, e.g. ~0
1398or two adjacent dashes, causes a short delay before proceeding to the next send
1399sequence. A null expect always succeeds.
1400
1401As with uucp, if the expect string does not arrive, the script attempt fails.
1402If you expect that a sequence might not arrive, as with uucp, conditional se-
1403quences may be expressed in the form:
1404\f
1405
1406
1407 -send-expect[-send-expect[...]]
1408
1409where dashed sequences are followed as long as previous expects fail. Timeouts
1410for expects can be specified using ~w; ~w with no arguments waits 15 seconds.
1411
1412Expect/send transactions can be easily be debugged by logging transactions.
1413This records all exchanges, both expected and actual.
1414
1415Note that `\' characters in login scripts, as in any other C-Kermit interactive
1416commands, must be doubled up. A line may be ended with a single `\' for con-
1417tinuation.
1418
1419Example one:
1420
1421Using a modem, dial a UNIX host site. Expect "login" (...gin), and if it
1422doesn't come, simply send a null string with a ~r. (Some Unixes require either
1423an EOT or a BREAK instead of the null sequence, depending on the particular
1424site's "logger" program.) After providing user id and password, respond "x" to
1425a question-mark prompt, expect the Bourne shell "$" prompt (and send return if
1426it 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
1437Example two:
1438
1439Using a modem, dial the Telenet network. This network expects three returns
1440with slight delays between them. These are sent following null expects. The
1441single return is here sent as a null string, with a return appended by default.
1442Four returns are sent to be safe before looking for the prompt. Then the
1443Telenet id and password are entered. Then telenet is instructed to connect to
1444a host site (c 12345). The host has a data switch, and to "which system" it
1445responds "myhost". This is followed by a TOPS-20 logon, and a request to load
1446Kermit, set even parity, and enter the server mode. Files are then exchanged.
1447The commands are in a take file; note the continuation of the 'script' command
1448onto 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\f
1463
1464
1465Since these commands may be executed totally in the background, they can also
1466be scheduled. A typical shell script, which might be scheduled by cron, would
1467be 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
1480File tonight.cmd might have two takes in it, for example, one to take a file
1481with the set modem, set line, set baud, dial, and script, and a second take of
1482a file with send/get commands for the remote server. The last lines of
1483tonight.cmd should be a bye and a quit.
1484
1485
1486 THE 'HELP' COMMAND:
1487
1488Syntax: help
1489 or: help keyword
1490 or: help {set, remote} keyword
1491
1492Brief help messages or menus are always available at interactive command level
1493by typing a question mark at any point. A slightly more verbose form of help
1494is available through the 'help' command. The 'help' command with no arguments
1495prints 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
1497as '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',
1499or 'help set parity'; each will provide a successively more detailed level of
1500help.
1501
1502
1503 THE 'EXIT' AND 'QUIT' COMMANDS:
1504
1505These 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
1514After exit from C-Kermit, your default directory will be the same as when you
1515started the program. The 'exit' command is issued implicitly whenever C-Kermit
1516halts normally, e.g. after a command line invocation, or after certain kinds of
1517interruptions.
1518\f
1519
1520
15219.5. UUCP Lock Files
1522
1523Unix has no standard way of obtaining exclusive access to an external com-
1524munication line. When you issue the 'set line' command to Unix Kermit, Unix
1525would normally grant you access to the line even if some other process is
1526making use of it. The method adopted by most Unix systems to handle this
1527situation is the "UUCP lock file". UUCP, the Unix-to-Unix Copy program,
1528creates 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-
1530stance tty07.
1531
1532Unix Kermit uses UUCP lock files in order to avoid conflicts with UUCP, tip, or
1533other programs that follow this convention. Whenever you attempt to access an
1534external line using the 'set line' command or `-l' on the command line, Kermit
1535looks in the UUCP directory for a lock file corresponding to that device. For
1536instance, if you 'set line /dev/ttyi6' then Kermit looks for the file
1537
1538 /usr/spool/uucp/LCK..ttyi6
1539
1540If it finds this file, it gives you an error message and a directory listing of
1541the 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
1545In this case, you would look up user fdc to find out how soon the line will be-
1546come free.
1547
1548This convention requires that the uucp directory be publicly readable and
1549writable. If it is not, the program will issue an appropriate warning message,
1550but will allow you to proceed at your own risk (and the risk of anyone else who
1551might also be using the same line).
1552
1553If no lock file is found, Unix Kermit will attempt create one, thus preventing
1554anyone who subsequently tries to run Kermit, UUCP, tip, or similar programs on
1555the same line from gaining access until you release the line. If Kermit could
1556not create the lock file (for instance because the uucp directory is write-
1557protected), then you will receive a warning message but will be allowed to
1558proceed at your -- and everyone else's -- risk. When Kermit terminates nor-
1559mally, your lock file is removed.
1560
1561Even when the lock directory is writable and readable, the locking mechanism
1562depends upon all users using the same name for the same device. If a device
1563has more than one path associated with it, then a lock can be circumvented by
1564using an alias.
1565
1566When a lock-creating program abruptly terminates, e.g. because it crashes or is
1567killed via shell command, the lock file remains in the uucp directory,
1568spuriously indicating that the line is in use. If the lock file is owned by
1569yourself, you may remove it. Otherwise, you'll have to get the owner or the
1570system manager to remove it, or else wait for a system task to do so; uucp sup-
1571ports a function (uuclean) which removes these files after a predetermined age
1572-- uucp sites tend to run this function periodically via crontab.
1573
1574Locking is not needed, or used, if communications occur over the user's login
1575terminal line (normally /dev/tty).
1576\f
1577
1578
1579It may be seen that line locking is fraught with peril. It is included in Unix
1580Kermit only because other Unix communication programs rely on it. While it is
1581naturally desirable to assure exclusive access to a line, it is also un-
1582desirable to refuse access to a vacant line only because of a spurious lock
1583file, or because the uucp directory is not appropriately protected.
1584
1585
15869.6. C-Kermit under Berkeley or System III/V Unix:
1587
1588C-Kermit may be interrupted at command level or during file transfer by typing
1589Control-C. The program will perform its normal exit function, restoring the
1590terminal and releasing any lock. If a protocol transaction was in progress, an
1591error packet will be sent to the opposite Kermit so that it can terminate
1592cleanly.
1593
1594C-Kermit may be invoked in the background ("&" on shell commmand line). If a
1595background process is "killed", the user will have to manually remove any lock
1596file and may need to restore the modem. This is because the kill signal
1597(kill(x,9)) cannot be trapped by Kermit.
1598
1599During execution of a system command ('directory', 'cwd', or `!'), C-Kermit can
1600often be returned to command level by typing a single Control-C. (With System
1601III/V, the usual interrupt function (often the DEL key) is replaced by
1602Control-C.)
1603
1604Under Berkeley Unix only: C-Kermit may also be interrupted by ^Z to put the
1605process in the background. In this case the terminal is not restored. You
1606will have to type Control-J followed by "reset" followed by another Control-J
1607to get your terminal back to normal.
1608
1609Control-C, Control-Z, and Control-\ lose their normal functions during terminal
1610connection and also during file transfer when the controlling tty line is being
1611used for packet i/o.
1612
1613If you are running C-Kermit in "quiet mode" in the foreground, then interrupt-
1614ing the program with a console interrupt like Control-C will not restore the
1615terminal to normal conversational operation. This is because the system call
1616to enable console interrupt traps will cause the program to block if it's run-
1617ning in the background, and the primary reason for quiet mode is to allow the
1618program to run in the background without blocking, so that you can do other
1619work in the foreground.
1620
1621If C-Kermit is run in the background ("&" on shell commmand line), then the in-
1622terrupt signal (Control-C) (and System III/V quit signal) are ignored. This
1623prevents an interrupt signal intended for a foreground job (say a compilation)
1624from being trapped by a background Kermit session.
1625
1626
16279.7. C-Kermit on the DEC Pro-3xx with Pro/Venix Version 1
1628
1629The DEC Professional 300 series are PDP-11/23 based personal computers. Venix
1630Version 1 is a Unix v7 derivative. It should not be confused with Venix Ver-
1631sion 2, which is based on ATT System V; these comments apply to Venix Version 1
1632only. C-Kermit runs in local mode on the Pro-3xx when invoked from the con-
1633sole; 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\f
1636
1637
1638VT52 terminal emulation. Terminal operation at high speeds (like 9600 baud)
1639requires xon/xoff flow control, which unfortunately interferes with applica-
1640tions such as the EMACS that use Control-Q and Control-S as commands.
1641
1642When logging in to a Pro-3xx (or any workstation) through the "back port", it
1643may be necessary to give the command "set line /dev/tty" in order to get
1644C-Kermit to function correctly in remote mode (on a system in which it normally
1645expects to be operating in local mode).
1646
1647
16489.8. C-Kermit under VAX/VMS
1649
1650Version 4C of C-Kermit can be built using VAX-11 C to run under VMS. Most of
1651the descriptions in this manual hold true, but it should be noted that as of
1652this writing the VMS support is not thoroughly tested, and no explicit support
1653exists for the various types of VMS files and their attributes.
1654
1655The C-Kermit init file for VMS is called KERMIT.INI.
1656
1657
16589.9. C-Kermit on the Macintosh
1659
1660The "protocol kernel" of C-Kermit is also used by Columbia's Macintosh Kermit.
1661The user and system interface is entirely different, and is covered in a
1662separate document.
1663
1664
16659.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\f
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\f
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
17699.11. How to Build C-Kermit for a Unix System
1770
1771The 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
1773makefile is provided to build C-Kermit for various Unix systems (there are
1774separate makefiles for VMS and the Macintosh). As distributed, the makefile
1775has 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
1777make C-Kermit for 4.x BSD Unix. The result will be a program called "wermit".
1778You should test this to make sure it works; if it does, then you can rename it
1779to "kermit" and install it for general use. See the makefile for a list of the
1780systems supported and the corresponding "make" arguments.
1781
1782
17839.12. Adapting C-Kermit to Other Systems
1784
1785C-Kermit is designed for portability. The level of portability is indicated in
1786parentheses after the module name: "C" means any system that has a C compiler
1787that conforms to the description in "The C Programming Language" by Kernighan &
1788Ritchie (Prentice-Hall, 1978). "Cf" is like "C", but also requires "standard"
1789features like printf and fprintf, argument passing via argv/argc, and so on, as
1790described in Kernighan & Ritchie. "Unix" means the module should be useful un-
1791der any Unix implementation; it requires features such as fork() and pipes.
1792Anything else means that the module is particular to the indicated system.
1793C-Kermit file names are of the form:
1794
1795ck<system><what>.<type>
1796
1797where the part before the dot is no more than 6 characters long, the part after
1798the 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\f
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
1846Examples:
1847
1848ckufio.c File i/o for Unix
1849ckmtio.c Terminal i/o for Macintosh
1850ckuker.mss Scribe source for for Kermit User Guide chapter
1851ckuker.nr Nroff source file for Unix C-Kermit man page
1852
1853The following material discusses each of the C-Kermit modules briefly.
1854
1855ckcmai.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
1867ckwart.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\f
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
1880ckcfns.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
1887ckutio.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
1899ckufio.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
1911ckuusr.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\f
1930
1931
1932ckucmd.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
1942ckucon.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
1956ckudia.c (Unix):
1957 This is the dialer module. As supplied, it handles Hayes, Ventel, Penril,
1958 Racal-Vadic, and several other modems.
1959
1960ckuscr.c (Unix):
1961 This is the login script module. As supplied, it handles uucp-style
1962 scripts.
1963
1964Moving 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
1980Those who favor a different style of user/program interaction from that
1981provided in ckuusr.c may replace the entire module, for instance with one that
1982provides a mouse/window/icon environment, a menu/function-key environment, etc.
1983
1984A 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\f
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
2026In general, remember that this program will have to be compilable by old com-
2027pilers and runnable on small systems.