.\" @(#) kermit.1 8.0.211 2004/04/10 Columbia University
.TH KERMIT 1 "APRIL 2004" "User Manuals"
.na
.SH NAME
kermit \-
.B C-Kermit 8.0:
transport- and platform-independent
interactive and scriptable communications software.
.IP

This document is intended to give the beginner sufficient information to make
basic (if not advanced) use of C-Kermit 8.0.  Although it might be rather long
for a Unix manual page, it's still far shorter than the C-Kermit manual, which
should be consulted for advanced topics such as customization, character-sets,
scripting, etc. We also attempt to provide a clear structural overview of
C-Kermit's many capabilities, functional areas, states, and modes and their
interrelation, that should be helpful to beginners and veterans alike, as well
as to those upgrading to version 8.0 from earlier releases.
.PP
This document is also available as a Web page at:
.IP
http://www.columbia.edu/kermit/ckututor.html
.SH DESCRIPTION
C-Kermit is an all-purpose communications software package from the Kermit
Project at Columbia University that:
.PP
.nf
\(bu	Is portable to many platforms, Unix and non-Unix alike.
.br
\(bu	Can make both serial and network connections.
.br
\(bu	Can conduct interactive terminal sessions over its connection.
.br
\(bu	Can transfer text or binary files over the same connection.
.br
\(bu	Can convert character sets in the terminal session.
.br
\(bu	Can convert character sets during text-file file transfer.
.br
\(bu	Is customizable in every aspect of its operation.
.fi
.PP
C-Kermit is a modem program, a Telnet client, an Rlogin client, an FTP
client, an HTTP client, and on selected platforms, also an X.25 client. It
can make its own secure Internet connections using IETF-approved security
methods including Kerberos IV, Kerberos V, SSL/TLS, and SRP and it can also
make SSH connections through your external SSH client application. It can
be the far-end file-transfer or client/server partner of your desktop
Kermit client. It can also accept incoming dialed and network connections.
It can even be installed as an Internet service on its own standard TCP
socket, 1649 [RFC2839, RFC2840].
.PP
And perhaps most important, everything you can do "by hand" (interactively)
with C-Kermit, can be "scripted" (automated) using its built-in
cross-platform transport-independent script programming language, which
happens to be identical to its interactive command language.
.PP
This manual page offers an overview of C-Kermit 8.0 for Unix ("Unix" is an
operating system family that includes AIX, DG/UX, FreeBSD, HP-UX, IRIX,
Linux, Mac OS X, NetBSD, OpenBSD, Open Server, Open Unix, QNX, Solaris,
SunOS, System V R3, System V R4, Tru64 Unix, Unixware, Xenix, and many
others). For thorough coverage, please consult the published C-Kermit
manual and supplements (see DOCUMENTATION below). For further information
about C-Kermit, Kermit software for other platforms, and Kermit manuals,
visit the Kermit Project website:
.PP
  http://www.columbia.edu/kermit/
.PP
This is a longer-than-average manual page, and yet it barely scratches the
surface. Don't be daunted. C-Kermit is a large and complex package,
evolving over decades of practice and experience, but that doesn't mean
it's hard to learn or use. Its most commonly used functions are explained
here with pointers to additional information elsewhere.
.SH SYNOPSIS
.B kermit [
.I filename
.B ] [
.I options
.B ] [ {=,--,+}
.I text
.B ] ]
.PP
or:
.PP
.B kermit 
.I URL
.PP
If the first command-line argument is the name of a file, interactive-mode
commands are executed from the file. The '=' (or "--") argument tells
Kermit not to parse the remainder of the command line, but to make the
words following '=' available as \e%1, \e%2, ... \e%9. The "+" argument is
like "=" but for use in "kerbang scripts" (explained below). A second
command-line format allows the one and only argument to be a Telnet, FTP,
HTTP, or IKSD URL.
.PP
Order of execution:
.TP
 1.
The command file (if any).
.TP
.nf
 2.
The initialization file, if any, unless suppressed with -Y.
.fi
.TP
 3.
The customization file (if it is executed by the initialization file).
.TP
 4.
The command-line URL (if any, and if so, execution stops here).
.TP
 5.
Command-line options (if any).
.TP
 6.
Interactive commands.
.PP
Some command-line options can cause actions (such as -s to send a file);
others just set parameters. If any action options are included on the
command line, Kermit exits when finished unless also given the -S ("stay")
option. If no action options are given, no initialization or command files
contained an EXIT or QUIT command, and no fatal errors occurred, Kermit
issues its prompt and waits for you to type commands.
.IP
Bear in mind that C-Kermit can be built with selected features
disabled, and also that certain features are not available on all
platforms. For example, C-Kermit can't be built with TCP/IP
support on a platform that does not have TCP/IP header files and
libraries (and even if Kermit does include TCP/IP support, it
can't be used to make TCP/IP connections on a computer that does
not have a TCP/IP stack installed). If your version of lacks
C-Kermit a feature mentioned here, use its SHOW FEATURES command to
see what might have been excluded.
.PP
C-Kermit has three kinds of commands: regular single-letter command-line
options, extended-format command-line options, and interactive commands.
.PP
Like most Unix commands, C-Kermit can be be given options on the command
line. But C-Kermit also can be used interactively by giving it commands
composed of words, which are more intuitive than cryptic command-line
options, and more flexible too. In other words, you don't have to use
C-Kermit's command-line options, but they are available if you want to. (By
the same token, you don't have to use its interactive commands either --
you can use either or both in any combination.)
.PP
C-Kermit is generally installed in the PATH as "kermit", and therefore is
invoked by typing the word "kermit" (lowercase) at the shell prompt, and
then pressing the Return or Enter key. If you wish to include command-line
options, put them after the word "kermit" but before pressing Return or
Enter, separated by spaces, for example:
.PP
  $ kermit -s ckermit.tar.gz
.PP
('$' is the shell prompt; "kermit -s ckermit.tar.gz" is what you type,
followed by Return or Enter.)
.SH OPTIONS
Here is a list of C-Kermit's single-letter command-line options, which
start with a single dash (-), in ASCII ("alphabetical") order. Alphabetic
case is significant (-A is not the same as -a).  Action options are 
tagged "ACTION".
.TP
-0
(digit zero)  100% transparent Connect state for
"in-the-middle" operation: 8 bits, no parity, no
escape character, everything passes through.
.TP
-8
(digit eight)  Connection is 8-bit clean (this is the
default in C-Kermit 8.0). Equivalent to the EIGHTBIT
command, which in turn is a shortcut for SET TERMINAL
BYTESIZE 8, SET COMMAND BYTESIZE 8, SET PARITY NONE.
.TP
-9 arg
(digit nine)  Make a connection to an FTP server.
Equivalent to the FTP OPEN command.
Argument: IP-address-or-hostname[:optional-TCP-port].
NOTE: C-Kermit also has a separate FTP command-line
personality, with regular FTP-like command-line
syntax. More about this below.
.TP
-A
Kermit is to be started as an Internet service (IKSD)
(only from inetd.conf).
.TP
-B
Kermit is running in Batch or Background (no
controlling terminal). To be used in case Kermit
doesn't automatically sense its background status.
Equivalent to the SET BACKGROUND ON command.
.TP
-C arg
Interactive-mode Commands to be executed.
Argument: Commands separated by commas, list in
doublequotes.
.TP
-D arg
Delay before starting to send in Remote mode.
Equivalent to the SET DELAY command.
Argument: Number of seconds.
.TP
-E
Exit automatically when connection closes. Equivalent
to SET EXIT ON-DISCONNECT ON.
.TP
-F arg
Use an open TCP connection.
Argument: Numeric file descriptor of open TCP
connection.
Also see: -j, -J.
.TP
-G arg
(ACTION) Get file(s) from server, send contents to standard
output, which normally would be piped to another
process.
Argument: Remote file specification, in quotes if it
contains metacharacters.
Also see: -g, -k.
.TP
-H
Suppress program startup Herald and greeting.
.TP
-I
Tell Kermit it has a reliable connection, to force streaming to be used where
it normally would not be.  Equivalent to the SET RELIABLE ON command.
.TP
-J arg
(ACTION) "Be like Telnet." Like -j but implies -E.  Argument: IP
hostname/address optionally followed by service.  NOTE: C-Kermit also has a
separate Telnet command-line personality, with regular Telnet-like
command-line syntax. More about this below.
.TP
-L
Recursive directory descent for files in -s option.
.TP
-M arg
My user name (for use with Telnet, Rlogin, FTP, etc).
Equivalent to the SET LOGIN USER command.
Argument: Username string.
.TP
-O
(ACTION) (Uppercase letter O) Be a server for One command only.
Also see: -x.
.TP
-P
Don't convert file (Path) names of transferred files.
Equivalent to SET FILE NAMES LITERAL.
.TP
-Q
Quick Kermit protocol settings. Equivalent to the FAST
command. This is the default in C-Kermit 7.0 and later.
.TP
-R
Remote-only (this just makes IF REMOTE true).
.TP
-S
Stay (enter command parser after action options).
.TP
-T
Force Text mode for file transfer; implies -V.
Equivalent to SET TRANSFER MODE MANUAL, SET FILE TYPE TEXT.
.TP
-V
Disable automatic per-file text/binary switching.
Equivalent to SET TRANSFER MODE MANUAL.
.TP
-Y
Skip (don't execute) the initialization file.
.TP
-a arg
As-name for file(s) in -s, -r, or -g.
Argument: As-name string (alternative filename). When
receiving files, this can be a directory name.
.TP
-b arg
Speed for serial device. Equivalent to SET SPEED.
Argument: Numeric Bits per second for serial
connections.
.TP
-c
(ACTION) Enter Connect state before transferring files.
.TP
-d
Create a debug.log file with detailed debugging
information (a second -d adds timestamps). Equivalent
to LOG DEBUG but takes effect sooner.
.TP
-e arg
Maximum length for incoming Kermit file-transfer
packets. Equivalent to SET RECEIVE PACKET-LENGTH.
Argument: Length in bytes.
.TP
-f
(ACTION) Send a FINISH command to a Kermit server.
.TP
-g arg
Get file(s) from a Kermit server.
Argument: File specification on other computer, in
quotes if it contains metacharacters. Equivalent to
GET. Also see: -a, -G, -r.
.TP
-h
(ACTION) Print Help text for single-letter command-line options
(pipe thru 'more' to prevent scrolling).
.TP
-i
Force binary (Image) mode for file transfer; implies
-V. Equivalent to SET TRANSFER MODE MANUAL, SET FILE
TYPE BINARY.
.TP
-j arg
Make a TCP/IP connection.
Argument: IP host name/address and optional service
name or number. Equivalent to the TELNET command.
Also see: -J, -F.
.TP
-k
(ACTION) Receive file(s) to standard output, which normally 
would be piped to another process.
Also see: -r, -G.
.TP
-l arg
(Lowercase letter L) Make a connection on the given
serial communications device. Equivalent to the SET
LINE (SET PORT) command.
Argument: Serial device name, e.g. /dev/ttyS0.
.TP
-m arg
Modem type for use with the -l device. Equivalent to
the SET MODEM TYPE command.
Argument: Modem name as in SET MODEM TYPE command,
e.g. "usrobotics".
.TP
-n
(ACTION) Enter Connect state after transferring files (historical).
.TP
-p arg
Parity. Equivalent to the SET PARITY command.
Argument: One of the following: e(ven), o(dd), m(ark),
n(one), s(pace).
.TP
-q
Quiet (suppress most messages). Equivalent to SET QUIET ON.
.TP
-r
(ACTION) Receive file(s). Equivalent to the RECEIVE command.
Argument: (none, but see -a)
.TP
-s arg
Send file(s).
Argument: One or more local file specifications.
Equivalent to the SEND command.
Also see: -a.
.TP
-t
(Historical) Xon (Ctrl-Q) Turnaround character for
half-duplex connections (used on serial linemode
connections to old mainframes). Equivalent to SET
DUPLEX HALF, SET HANDSHAKE XON.
.TP
-v arg
Window size for Kermit protocol (ignored when
streaming). Equivalanet to SET WINDOW-SIZE.
Argument: Number, 1 to 32.
.TP
-w
Incoming files Write over existing files. Equivalent
to SET FILE COLLISION OVERWRITE.
.TP
-x
(ACTION) Enter server mode. Equivalent to the SERVER command.
Also see: -O.
.TP
-y arg
Alternative initialization file.
Argument: Filename.
.TP
-z
Force foreground behavior. To be used in case Kermit
doesn't automatically sense its foreground status.
Equivalent to the SET BACKGROUND OFF command.
.PP
Extended command-line options (necessary because single-letter ones are
about used up) start with two dashes (--), with words rather than single
letters as option names. If an extended option takes an argument, it is
separated from the option word by a colon (:). Extended options include:

.TP
 --bannerfile:filename
File to display upon startup or IKSD login.
.TP
 --cdfile:filename
File to be sent for display to the client when
server changes directory (filename is relative to
the changed-to directory).
.TP
 --cdmessage:{on,off}
Enable/disable the server CD message feature.
.TP
 --help
Prints usage message for extended options.
.TP
 --helpfile:filename
Designates a file containing custom text to
replace the top-level HELP command.
.TP
 --nointerrupts
Disables keyboard interrupts.
.TP
 --noperms
Disables the Kermit protocol file Permissions
attribute, to prevent transmission of file
permissions (protection) from sender to receiver.
.TP
 --version
(ACTION) C-Kermit prints its version number.
.PP
Plus several other IKSD-Only options described at:
.PP
  http://www.columbia.edu/kermit/iksd.html
.PP
See the file-transfer section for examples of command-line invocation.
.SH COMMAND LANGUAGE
C-Kermit's interactive command language is the subject of a 622-page book
and another several hundred pages of updates, far too much for a manual
page. But it's not hard to get started. At the shell prompt, just type
"kermit" to get C-Kermit's interactive command prompt:
.PP
.nf
  $ kermit
  (/current/directory) C-Kermit>
.fi
.PP
Begin by typing "help" (and then press the Return or Enter key) for a
top-level overview, read it, and go from there. Your second command should
probably be "intro" (introduction). Note the prompt shows your current
directory (unless you tell Kermit to prompt you with something else).
.PP
Interactive commands are composed mainly of regular English words, usually
in the form of imperative sentences, such as:
.PP
  send oofa.txt
.PP
which tells Kermit to send (transfer) the file whose name is oofa.txt, or:
.PP
  set transfer mode automatic
.PP
which sets Kermit's "transfer mode" to "automatic" (whatever that means).
.PP
While typing commands, you can abbreviate, ask for help (by pressing the
"?" key anywhere in a command), complete keywords or filenames (with the
Tab or Esc key), and edit your typing with Backspace or Delete, Ctrl-W,
Ctrl-U, etc. You can also recall previous commands, save your command
history, and who knows what else. Give the INTRO command for details.
.PP
C-Kermit has hundreds of commands, and they can be issued in infinite
variety and combinations, including commands for:
.nf
.PP
\(bu	Making connections (SET LINE, DIAL, TELNET, SSH, FTP, ...)
.br
\(bu	Breaking connections (HANGUP, CLOSE)
.br
\(bu	Transferring files (SEND, GET, RECEIVE, MOVE, RESEND, ...)
.br
\(bu	Establishing preferences (SET)
.br
\(bu	Displaying preferences (SHOW)
.br
\(bu	Managing local files (CD, DELETE, MKDIR, DIR, RENAME, TYPE, ...)
.br
\(bu	Managing remote files (RCD, RDEL, RMKDIR, RDIR, ...)
.br
\(bu	Using local files (FOPEN, FCLOSE, FREAD, FWRITE)
.br
\(bu	Programming (TAKE, DEFINE, IF, FOR, WHILE, SWITCH, DECLARE, ...)
.br
\(bu	Interacting with the user (ECHO, ASK, ...)
.br
\(bu	Interacting with a remote computer (INPUT, OUTPUT, ...)
.br
\(bu	Interacting with local programs (RUN, EXEC, PTY, ...)
.br
\(bu	Logging things (LOG SESSION, LOG PACKETS, LOG DEBUG, ...)
.PP
.fi
And of course QUIT or EXIT to get out and HELP to get help, and for
programmers: loops, decision making, variables, arrays, associative arrays,
integer and floating point arithmetic, macros, built-in and user-defined
functions, string manipulation, pattern matching, block structure, scoping,
recursion, and all the rest. To get a list of all C-Kermit's commands, type
a question mark (?) at the prompt. To get a description of any command,
type HELP followed by the name of the command, for example:
.PP
  help send
.PP
The command interruption character is Ctrl-C (hold down the Ctrl key and
press the C key).
.PP
The command language "escape character", used to introduce variable names,
function invocations, and so on, is backslash (\). If you need to include a
literal backslash in a command, type two of them, e.g.:
.PP
  get c:\ek95\ek95custom.ini
.SS Command Files, Macros, and Scripts
A file containing Kermit commands is called a Kermit command file or Kermit
script. It can be executed with Kermit's TAKE command:
.PP
  (/current/dir) C-Kermit> take commandfile
.PP
(where "commandfile" is the name of the command file). Please don't pipe a
command file into Kermit's standard input (which might or might not work);
if you have Kermit commands in a file, tell Kermit to TAKE the file.
.PP
In Unix only, a Kermit command file can also be executed directly by
including a "kerbang" line as the first line of the file:
.PP
  #!/usr/local/bin/kermit +
.PP
That is, a top line that starts with "#!", followed immediately by the full
path of the Kermit executable, and then, if the Kermit script is to be
given arguments on the command line, a space and a plus sign. The script
file must also have execute permission:
.PP
  chmod +x commandfile
.PP
Except for the " +" part, this is exactly the same as you would do for a
shell script, a Perl script, etc. Here's a simple but useless example
script that regurgitates its arguments (up to three of them):
.PP
  #!/usr/local/bin/kermit +
  if defined \e%1 echo "Argument 1: \e%1"
  if defined \e%2 echo "Argument 2: \e%2"
  if defined \e%3 echo "Argument 3: \e%3"
  if defined \e%4 echo "etc..."
  exit
.PP
If this file is stored in your current directory as "commandfile", then:
.PP
  ./commandfile one two three four five
.PP
prints:
.PP
  Argument 1: one
  Argument 2: two
  Argument 3: three
  etc...
.PP
This illustrates the basic structure of a standalone Kermit script: the
"kerbang line", then some commands. It should end with "exit" unless you
want the Kermit prompt to appear when it is finished. \e%1 is the first
argument, \e%2 the second, and so on.
.PP
You can also create your own commands by defining named macros composed of
other Kermit commands (or macros). For example:
.PP
.nf
  define mydelete {
      local trash
      assign trash \ev(home)trashcan/
      if not defined \e%1 end 1 "Delete what?"
      if wild \e%1 {
          end 1 "Deleting multiple files is too scary"
      }
      if not exist \e%1 end 1 "I can't find \e%1"
      if not directory \em(trash) {
          mkdir \em(trash)
          if fail end 1 "No trash can"
      }
      rename /list \e%1 \em(trash)
  }
  define myundelete {
      local trash
      assign trash \ev(home)trashcan/
      if not defined \e%1 end 1 "Undelete what?"
      if wild \e%1 {
          end 1 "Undeleting multiple files is too hard"
      }
      if not directory \em(trash) end 1 "No trash can"
      if not exist \em(trash)\e%1 {
          end 1 "I can't find \e%1 in trash can"
      }
      rename /list \em(trash)\e%1 .
  }
.PP
.fi
These sample macros are not exactly production quality (they don't handle
filenames that include path segments, they don't handle multiple files,
etc), but you get the idea: you can pass arguments to macros, and they can
check them and make other kinds of decisions. If you put the above lines
into your initialization or customization file (explained below), you'll
have MYDELETE and MYUNDELETE commands available every time you start
Kermit, at least as long as you don't suppress execution of the
initialization file. (Exercise for the reader: Make these macros generally
useful: remove limitations, add trashcan display, browsing, emptying, etc.)
.PP
Kerbang scripts execute without the initialization file. This to keep them
portable and also to make them start faster. If you want to write Kerbang
scripts that depend on the initialization file, include the command
.PP
  take \ev(home).kermrc
.PP
at the desired spot in the script. By the way, \ev(xxx) is a built-in
variable (xxx is the variable name, "home" in this case). To see what
built-in variables are available, type "show variables" at the C-Kermit
prompt. To see what else you can show, type "show ?". \em(xxx) is a user
defined variable (strictly speaking, it is a macro used as a variable).
.SS Command List
C-Kermit has more than 200 top-level commands, and some of these, such as
SET, branch off into hundreds of subcommands of their own, so it's not
practical to describe them all here. Instead, here's a concise list of the
most commonly used top-level commands, grouped by category. To learn about
each command, type "help" followed by the command name, e.g. "help set".
Terms such as Command state and Connect state are explained in subsequent
sections.
.PP
Optional fields are shown in [ brackets ].  "filename" means the
name of a single file. filespec means a file specification that is allowed
to contain wildcard characters like '*' to match groups of files. options
are (optional) switches like /PAGE, /NOPAGE, /QUIET, etc, listed in the
HELP text for each command. Example:
.PP
.nf
  send /recursive /larger:10000 /after:-1week /except:*.txt *
.fi
.PP
which can be read as "send all the files in this directory and all the ones
underneath it that are larger than 10000 bytes, no more than one week old,
and whose names don't end with ".txt".
.SS
Basic Commands
.RS
.TP
HELP
Requests top-level help.
.TP
HELP command
Requests help about the given command.
.TP
INTRODUCTION
Requests a brief introduction to C-Kermit.
.TP
LICENSE
Displays the C-Kermit software copyright and license.
.TP
VERSION
Displays C-Kermit's version number.
.TP
EXIT [ number ]
Exits from Kermit with the given
status code. Synonyms: QUIT, E, Q.
.TP
TAKE filename [ parameters... ]
Executes commands from the given
.TP
LOG item [ filename ]
Keeps a log of the given item in the given file.
.TP
[ DO ] macro [ parameters... ]
Executes commands from the given macro.
.TP
SET parameter value
Sets the given parameter to the given value.
.TP
SHOW category
Shows settings in a given category.
.TP
STATUS
Tells whether previous command succeeded or failed.
.TP
DATE [ date-and/or-time ]
Shows current date-time or interprets given date-time.
.TP
RUN [ extern-command [ parameters... ]                 
Runs the given external command. Synonym: !.
.TP
EXEC [ extern-command [ params... ]
Kermit overlays itself with the given command.
.TP
SUSPEND
Stops Kermit and puts it in the background. Synonym: Z.
.RE
.SS
Local File Management
.RS
.TP
TYPE [ options ] filename
Displays the contents of the given file.
.TP
MORE [ options ] filename     
Equivalent to TYPE /PAGE (pause after each screenful).
.TP
CAT [ options ] filename      
Equivalent to TYPE /NOPAGE.
.TP
HEAD [ options ] filename     
Displays the first few lines of a given file.
.TP
TAIL [ options ] filename     
Displays the last few lines of a given file.
.TP
GREP [ options ] pattern filespec
Displays lines from files that match
the pattern. Synonym: FIND.
.TP
DIRECTORY [ options ] [filespec ]
Lists files (built-in, many options).
.TP
LS [ options ] [ filespec ]   
Lists files (runs external "ls" command).
.TP
DELETE [ options ] [ filespec ]
Deletes files. Synonym: RM.
.TP
PURGE [ options ] [ filespec ]
Removes backup (*.~n~) files.
.TP
COPY [ options ] [ filespecs... ]
Copies files. Synonym: CP.
.TP
RENAME [ options ] [ filespecs... ]
Renames files. Synonym: MV.
.TP
CHMOD [ options ] [ filespecs... ]
Changes permissions of files.
.TP
TRANSLATE filename charsets [ filename ]
Converts file's character set. Synonym: XLATE.
.TP
CD
Changes your working directory to your home directory.
.TP
CD directory
Changes your working directory to the one given.
.TP
CDUP
Changes your working directory one level up.
.TP
PWD
Displays your working directory.
.TP
BACK
Returns to your previous working directory.
.TP
MKDIR [ directory ]
Creates a directory.
.TP
RMDIR [ directory ]
Removes a directory.
.RE
.SS
Making Connections
.RS
.TP
SET LINE [ options ] devicename                      
Opens the named serial port. Synonym: SET PORT.
.TP
OPEN LINE [ options ] devicename
Same as SET LINE. Synonym: OPEN PORT.
.TP
SET MODEM TYPE [ name ]
Tells Kermit what kind of modem is on the port.
.TP
DIAL [ number ]
Tells Kermit to dial the given phone number with the modem.
.TP
REDIAL
Redials the most recently dialed phone number.
.TP
ANSWER
Waits for and answers an incoming call on the modem.
.TP
AUTHENTICATE [ parameters... ]
Performs secure authentication on a TCP/IP connection.
.TP
SET NETWORK TYPE { TCP/IP, X.25, ... }
Selects network type for subsequent SET HOST commands.
.TP
SET HOST [ options ] host [ port ]                          
Opens a network connection to the given host and port.
.TP
SET HOST * port
Waits for an incoming TCP/IP connection on the given port.
.TP
TELNET [ options ] host
Opens a Telnet connection to the host and enters Connect state.
.TP
RLOGIN [ options ] host
Opens an Rlogin connection to the host and enters Connect state.
.TP
IKSD [ options ] host
Opens a connection to an Internet Kermit Service.
.TP
SSH [ options ] host
Opens an SSH connection to the host and enters Connect state.
.TP
FTP OPEN host [ options ]
Opens an FTP connection to the host.
.TP
HTTP [ options ] OPEN host
Opens an HTTP connection to the host.
.TP
PTY external-command
Runs the command on a pseudoterminal as if it were a connection.
.TP
PIPE external-command
Runs the command through a pipe as if it were a connection.
.RE
.SS
Using Connections
.RS
.TP
CONNECT [ options ]
Enters Connect (terminal) state.  Synonym: C.
.TP
REDIRECT command
Redirects the given external command over the connection.
.TP
TELOPT command
Sends a Telnet protocol command (Telnet connections only).
.TP
Ctrl-\eC
"Escapes back" from Connect state to Command state.
.TP
Ctrl-\eB
(In Connect state) Sends a BREAK signal (serial or Telnet).
.TP
Ctrl-\e!
(In Connect state) Enters inferior shell; "exit" to return.
.TP
Ctrl-\e?
(In Connect state) Shows a menu of other escape-level options.
.TP
Ctrl-\eCtrl-\e
(In Connect state) Type two
Ctrl-Backslashes to send one of them.
.TP
SET ESCAPE [ character ]
Changes Kermit's Connect-state escape character.
.RE
.SS
Closing Connections
.RS
.TP
HANGUP
Hangs up the currently open
serial-port or network connection.
.TP
CLOSE
Closes the currently open
serial-port or network connection.
.TP
SET LINE (with no devicename)
Closes the currently open
serial-port or network connection.
.TP
SET HOST (with no hostname)
Closes the currently open serial-port or network connection.
.TP
FTP CLOSE
Closes the currently open FTP connection.
.TP
HTTP CLOSE
Closes the currently open HTTP connection.
.TP
EXIT 
Also closes all connections. Synonym: QUIT.
.TP
SET EXIT WARNING OFF
Suppresses warning about open connections on exit or close.
.RE
.SS
File Transfer
.RS
.TP
SEND [ options ] filename [ as-name ]
Sends the given file. Synonym: S.
.TP
SEND [ options ] filespec
Sends all files that match.
.TP
RESEND [ options ] filespec
Resumes an interupted SEND from the point of failure.
.TP
RECEIVE [ options ] [ as-name ]                    
Waits passively for files to arrive. Synonym: R.
.TP
LOG TRANSACTIONS [ filename ]
Keeps a record of file transfers.
.TP
FAST
Use fast file-transfer settings (default).
.TP
CAUTIOUS
Use cautious and less fast file-transfer settings.
.TP
ROBUST
Use ultra-conservative and slow file-transfer settings.
.TP
STATISTICS [ options ] 
Gives statistics about the most recent file transfer.
.TP
WHERE
After transfer: "Where did my files go?".
.TP
TRANSMIT [ options ] [ofilename ]
Sends file without protocol. Synonym: XMIT.
.TP
LOG SESSION [ filename ]
Captures remote text or files without protocol.
.TP
SET PROTOCOL [ name... ]
Tells Kermit to use an external file-transfer protocol.
.TP
FTP { PUT, MPUT, GET, MGET, ... }
FTP client commands.
.TP
HTTP { PUT, GET, HEAD, POST, ... }
HTTP client commands.
.RE
.SS
Kermit Server
.RS
.TP
ENABLE, DISABLE
Controls which server features can be used by clients.
.TP
SET SERVER
Sets parameters prior to entering Server state.
.TP
SERVER
Enters Server state.
.RE
.SS
Client of Kermit or FTP Server
.RS
.TP
[ REMOTE ] LOGIN [ user password ]         
Logs in to a Kermit server or IKSD that requires it.
.TP
[ REMOTE ] LOGOUT
Logs out from a Kermit server or IKSD.
.TP
SEND [ options ] filename [ as-name ]                   
Sends the given file to the server. Synonyms: S, PUT.
.TP
SEND [ options ] filespec
Sends all files that match.
.TP
RESEND [ options ] filespec
Resumes an interupted SEND from the point of failure.
.TP
GET [ options ] remote-filespec
Asks the server to send the given files. Synonym: G.
.TP
REGET [ options ] remote-filespec
Resumes an interrupted GET from the point of failure.
.TP
REMOTE CD [ directory ]
Asks server to change its working
directory. Synonym: RCD.
.TP
REMOTE PWD [ directory ]
Asks server to display its working directory. Synonym: RPWD.
.TP
REMOTE DIRECTORY [ filespec... ]
Asks server to send a directory listing. Synonym: RDIR.
.TP
REMOTE DELETE [ filespec... ]
Asks server to delete files. Synonym: RDEL.
.TP
REMOTE [ command... ]
(Many other commands: "remote ?" for a list).
.TP
MAIL [ options ] filespec
Sends file(s) to be delivered as e-mail (Kermit only).
.TP
FINISH
Asks the server to exit server state (Kermit only).
.TP
BYE
Asks the server to log out and close the connection.
.RE
.SS
Script Programming
.PP
.RS
DEFINE, DECLARE, UNDEFINE, UNDECLARE, ASSIGN, EVALUATE, SEXPRESSION,
ARRAY, SORT, INPUT, OUTPUT, IF, FOR, WHILE, SWITCH, GOTO, ECHO, ASK,
GETC, GETOK, ASSERT, WAIT, SLEEP, FOPEN, FREAD, FWRITE, FCLOSE, STOP,
END, RETURN, LEARN, SHIFT, TRACE, VOID, INCREMENT, DECREMENT, ... For
these and many more you'll need to consult the manual and supplements,
and/or visit the Kermit Script Library, which also includes a brief
tutorial. Hint: HELP LEARN to find out how to get Kermit to write
simple scripts for you.
.RE
.PP
Many of Kermit's commands have synonyms, variants, relatives, and so on.
For example, MSEND is a version of SEND that accepts a list of file
specifications to be sent, rather than just one file specification, and
MPUT is a synonym of MSEND. MOVE means to SEND and then DELETE the source
file if successful. MMOVE is like MOVE, but accepts a list of filespecs,
and so on. These are described in the full documentation.
.PP
Use question mark to feel your way through an unfamiliar command, as in
this example:
.PP
.nf
  C-Kermit> remote ? One of the following:
   assign     directory  kermit     print      rmdir
   cd         exit       login      pwd        set
   copy       help       logout     query      space
   delete     host       mkdir      rename     type
  C-Kermit> remote set ? One of the following:
   attributes   file         retry        transfer
   block-check  receive      server       window
  C-Kermit> remote set file ? One of the following:
   character-set  incomplete     record-length
   collision      names          type
  C-Kermit> remote set file names ? One of the following:
   converted  literal
  C-Kermit> remote set file names literal
  C-Kermit>
.PP
.fi
This is called menu on demand: you get a menu when you want one, but menus
are not forced on you even when know what you're doing. Note that you can
also abbreviate most keywords, and you can complete them with the Tab or
Esc key. Also note that ? works for filenames too, and that you can use it
in the middle of a keyword or filename, not just at the beginning. For
example, "send x?" lists all the files in the current directory whose names
start with 'x'.
.SH INITIALIZATION FILE
In its default configuration, C-Kermit executes commands from a file 
called .kermrc in your home directory when it starts, unless it is given the
-Y or -y command-line option. Custom configurations might substitute a shared
system-wide initialization file. The SHOW FILE command tells what
initialization file, if any, was used. The standard initialization file
"chains" to an individual customization file, .mykermc, in the home directory,
in which each user can establish her/his own preferences, define macros, and
so on.
.PP
Since execution of the initialization file (at least the standard one)
makes C-Kermit take longer to start, it might be better not to have an
initialization file, especially now that Kermit's default startup
configuration is well attuned to modern computing and networking -- in
other words, you no longer have do anything special to make Kermit
transfers go fast. So instead of having an initialization file that is
executed every time Kermit starts, you might consider making one or more
kerbang scripts (with names other that .kermrc) that do NOT include an
"exit" command, and invoke those when you need the settings, macro
definitions, and/or scripted actions they contain, and invoke C-Kermit
directly when you don't.
.PP
To put it another way... We still distribute the standard initialization
file since it's featured in the manual and backwards compatibility is
important to us. But there's no harm in not using it if you don't need the
stuff that's in it (services directory, dialing directory, network
directory, and associated macro definitions). On the other hand, if there
are settings or macros you want in effect EVERY time you use Kermit, the
initialization file (or the customization file it chains to) is the place
to put them, because that's the only place Kermit looks for them
automatically each time you start it.
.SH MODES OF OPERATION
Kermit is said to be in Local mode if it has made a connection to another
computer, e.g. by dialing it or establishing a Telnet connection to it. The
other computer is remote, so if you start another copy of Kermit on the
remote computer, it is said to be in Remote mode (as long as it has not
made any connections of its own). The local Kermit communicates over the
communications device or network connection, acting as a conduit between
the the remote computer and your keyboard and screen. The remote Kermit is
the file-transfer partner to the local Kermit and communicates only through
its standard input and output.
.PP
At any moment, a Kermit program can be in any of the following states. It's
important to know what they are and how to change from one to the other.
.TP
Command state
In this state, Kermit reads commands from:
.sp
\(bu	Your keyboard; or:
.br
\(bu	A file, or:
.br
\(bu	A macro definition.
.sp
You can exit from Command state back to Unix with the EXIT or QUIT
command (same thing). You can enter Connect state with any of various
commands (CONNECT, DIAL, TELNET, etc). You can enter file transfer
state with commands like SEND, RECEIVE, and GET. You can enter Server
state with the SERVER command. The TAKE command tells Kermit to read
and execute commands from a file. The (perhaps implied) DO command
tells Kermit to read and execute commands from a macro definition.
While in Command state, you can interrupt any command, macro, or
command file by typing Ctrl-C (hold down the Ctrl key and press the C
key); this normally brings you back to the prompt.
.TP
Shell state
You can invoke an inferior shell or external command from the Kermit
command prompt by using the PUSH, RUN (!), EDIT, or BROWSE command.
While the inferior shell or command is active, Kermit is suspended and
does nothing. Return to Kermit Command state by exiting from the
inferior shell or application.
.TP
Connect state
In this state, which can be entered only when in Local mode (i.e. when
Kermit has made a connection to another computer), Kermit is acting as
a terminal to the remote computer. Your keystrokes are sent to the
remote computer and characters that arrive over the communication
connection are displayed on your screen. This state is entered when
you give a CONNECT, DIAL, TELNET, RLOGIN, or IKSD command. You can
return to command state by logging out of the remote computer, or by
typing:
.sp
  Ctrl-\ec
.sp
That is: Hold down the Ctrl key and press the backslash key, then let
go of the Ctrl key and press the C key. This is called escaping back.
Certain other escape-level commands are also provided; type Ctrl-\e?
for a list. For example, you can enter Shell state with:
.sp
  Ctrl-\e!
.sp
To send a Ctrl-\e to the host while in Connect state, type two of them
in a row. See HELP CONNECT and HELP SET ESCAPE for more info.
.TP
Local file-transfer state
In this state, Kermit is sending packets back and forth with the other
computer in order to transfer a file or accomplish some other
file-related task. And at the same time, it is displaying its progress
on your screen and watching your keyboard for interruptions. In this
state, the following single-keystroke commands are accepted:
.sp
.RS
.TP
X
Interrupt the current file and go on to the next (if any).
.TP
Z
Interrupt the current file and skip all the rest.
.TP
E
Like Z but uses a "stronger" protocol (use if X or Z don't work).
.TP
Ctrl-C
Interrupt file-transfer mode (use if Z or E don't work).
.sp
.RE
Kermit returns to its previous state (Command or Connect) when the
transfer is complete or when interrupted successfully by X, Z, E, or
Ctrl-C (hold down the Ctrl key and press the C key).
.TP
Remote file-transfer state
In this state, Kermit is exchanging file-transfer packets with its
local partner over its standard i/o. It leaves this state
automatically when the transfer is complete. In case you find your
local Kermit in Connect state and the remote one in File-transfer
state (in which it seems to ignore your keystrokes), you can usually
return it to command state by typing three Ctrl-C's in a row. If that
doesn't work, return your local Kermit to Command state (Ctrl-\e C) and
type "e-packet" and then press the Return or Enter key; this forces a
fatal Kermit protocol error.
.TP
Remote Server state
This is like Remote File-transfer state, except it never returns
automatically to Command state. Rather, it awaits further instructions
from the client program; that is, from your Local Kermit program. You
can return the Remote Server to its previous state by issuing a
"finish" command to the client, or if you are in Connect state, by
typing three Ctrl-C's in a row. You can tell the server job to log out
and break the connection by issuing a "bye" command to the client.
.TP
Local Server state
Like Remote-Server state, but in local mode, and therefore with its
file-transfer display showing, and listening for single-key commands,
as in Local File-transfer state. Usually this state is entered
automatically when a remote Kermit program gives a GET command.
.sp
C-Kermit, Kermit 95, and MS-DOS Kermit all can switch automatically from
Connect state to Local File-transfer state when you initiate a file
transfer from the remote computer by starting Kermit and telling it to send
or get a file, in which case, Connect state is automatically resumed after
the file transfer is finished.
.sp
Note that C-Kermit is not a terminal emulator. It is a communications
application that you run in a terminal window (e.g. console or Xterm). The
specific emulation, such as VT100, VT220, Linux Console, or Xterm, is
provided by the terminal window in which you are running C-Kermit. Kermit
95 and MS-DOS Kermit, on the other hand, are true terminal emulators. Why
is C-Kermit not a terminal emulator? CLICK HERE to read about it.
.SH MAKING CONNECTIONS
Here is how to make different kinds of connections using interactive Kermit
commands (as noted above, you can also make connections with command-line
options). Note that you don't have to make connections with Kermit. It can
also be used on the far end of a connection as the remote file transfer and
management partner of your local communications software.
.TP
Making a Telnet Connection
At the C-Kermit command prompt, simply type:
.sp
.nf
  telnet foo.bar.com
.fi
.sp
(substituting desired hostname or address).  
You can also include a port number:
.sp
.nf
  telnet xyzcorp.com 3000 ; 
.fi
.sp
If the connection is successful, Kermit automically enters Connect
state. When you logout from the remote host, Kermit automatically
returns to its prompt. More info: HELP TELNET, HELP SET TELNET, HELP
SET TELOPT. Also see the IKSD section below.
.TP
Making an Rlogin connection
This is just like Telnet, except you have to be root to do it because
Rlogin uses a privileged TCP port:
.sp
.nf
  rlogin foo.bar.com
.fi
.sp
More info: HELP RLOGIN.
.TP
Making an SSH Connection
Unlike Telnet and Rlogin, SSH connections are not built-in, but
handled by running your external SSH client through a pseudoterminal.
Using C-Kermit to control the SSH client gives you all of Kermit's
features (file transfer, character-set conversion, scripting, etc)
over SSH.
.sp
  ssh foo.bar.com
.sp
More info: HELP SSH, HELP SET SSH.
.TP
Dialing with a Modem
If it's an external modem, make sure it is connected to a usable
serial port on your computer with a regular (straight-through) modem
cable, and to the telephone jack with a telephone cable, and that it's
turned on. Then use these commands:
.sp
.nf
  set modem type usrobotics  ; Or other supported type
  set line /dev/ttyS0        ; Specify device name
  set speed 57600            ; Or other desired speed
  set flow rts/cts           ; Most modern modems support this
  set dial method tone       ; (or pulse)
  dial 7654321               ; Dial the desired number
.fi
.sp
Type "set modem type ?" for a list of supported modem types. If you
omit the SET MODEM TYPE command, the default type is
"generic-high-speed", which should work for most modern AT-command-set
modems. If the line is busy, Kermit redials automatically. If the call
does not succeed, use "set dial display on" and try it again to watch
what happens. If the call succeeds, Kermit enters Connect state
automatically and returns to its prompt automatically when you log out
from the remote computer or the connection is otherwise lost.
.sp
You can also dial from a modem that is accessible by Telnet, e.g. to a
reverse terminal server. In this case the command sequence is:
.sp
.nf
  set host ts.xxx.com 2000   ; Terminal-server and port
  set modem type usrobotics  ; Or other supported type
  set dial method tone       ; (or pulse)
  dial 7654321               ; Dial the desired number
.fi
.sp
If the terminal server supports the Telnet Com Port Option, RFC 2217,
you can also give serial-port related commands such as SET SPEED, SET
PARITY, and so on, and Kermit relays them to the terminal server using
the protocol specified in the RFC.
.sp
More info: HELP SET MODEM, HELP SET LINE, HELP SET SPEED, HELP SET
FLOW, HELP DIAL, HELP SET DIAL, HELP SET MODEM, HELP SET 
CARRIER-WATCH, SHOW COMMUNICATIONS, SHOW MODEM, SHOW DIAL.
.TP
Direct Serial Port
Connect the two computers, A and B, with a null modem cable (or two
modem cables interconnected with a null-modem adapter or modem
eliminator). From Computer A:
.sp
.nf
  set modem type none   ; There is no modem
  set line /dev/ttyS0   ; Specify device name
  set carrier-watch off ; If DTR CD are not cross-connected
  set speed 57600       ; Or other desired speed
  set flow rts/cts      ; If RTS and CTS are cross-connected
  set parity even       ; (or "mark" or "space", if necessary)
  set stop-bits 2       ; (rarely necessary)
  set flow xon/xoff     ; If you can't use RTS/CTS
  connect               ; Enter Connect (terminal) state
.fi
.sp
This assumes Computer B is set up to let you log in. If it isn't, you 
can run a copy of Kermit on Computer B and follow approximately the
same directions. More info: As above plus HELP CONNECT.
.PP
With modems or direct serial connections, you might also have to "set
parity even" (or "mark" or "space") if it's a 7-bit connection.
.PP
Of the connection types listed above, only one can be open at a time.
However, any one of these can be open concurrently with an FTP or HTTP
session. Each connection type can be customized to any desired degree,
scripted, logged, you name it. See the manual.
.PP
NOTE: On selected platforms, C-Kermit also can make X.25 connections. See
the manual for details.
.SH TRANSFERRING FILES WITH KERMIT
There is a widespread and persistent belief that Kermit is a slow protocol.
This is because, until recently, it used conservative tuning by default to
make sure file transfers succeeded, rather than failing because they
overloaded the connection. Some extra commands (or command-line options,
like -Q) were needed to make it go fast, but nobody bothered to find out
about them. Also, it takes two to tango: most non-Kermit-Project Kermit
protocol implementations really ARE slow. The best file-transfer partners
for C-Kermit are: another copy of C-Kermit (7.0 or later) and Kermit 95.
These combinations work well and they work fast by default. MS-DOS Kermit
is good too, but you have to tell it to go fast (by giving it the FAST
command).
.PP
Furthermore, all three of these Kermit programs support "autodownload" and
"autoupload", meaning that when they are in Connect state and a Kermit
packet comes in from the remote, they automatically switch into file
transfer mode.
.PP
And plus, C-Kermit and K95 also switch automatically between text and
binary mode for each file, so there is no need to "set file type binary" or
"set file type text", or to worry about files being corrupted because they
were transferred in the wrong mode.
.PP
What all of these words add up to is that now, when you use up-to-date
Kermit software from the Kermit Project, file transfer is not only fast,
it's ridiculously easy. You barely have to give any commands at all.
.TP
Downloading Files
Let's say you have Kermit 95, C-Kermit, or MS-DOS Kermit on your
desktop computer, with a connection to a Unix computer that has
C-Kermit installed as "kermit". To download a file (send it from Unix
to your desktop computer), just type the following command at your
Unix shell prompt:
.sp
  kermit -s oofa.txt
.sp
(where oofa.txt is the filename). If you want to send more than one
file, you can put as many filenames as you want on the command line,
and they can be any combination of text and binary:
.sp
  kermit -s oofa.txt oofa.zip oofa.html oofa.tar.gz
.sp
and/or you can use wildcards to send groups of files:
.sp
  kermit -s oofa.*
.sp
If you want to send a file under an assumed name, use:
.sp
  kermit -s friday.txt -a today.txt
.sp
This sends the file friday.txt but tells the receiving Kermit that its
name is today.txt. In all cases, as noted, when the file transfer is
finished, your desktop Kermit returns automatically to Connect state.
No worries about escaping back, re-connecting, text/binary mode
switching. Almost too easy, right?
.TP
Uploading Files
To upload files (send them from your desktop computer to the remote
Unix computer) do the same thing, but use the -g (GET) option instead
of -s:
.sp
  kermit -g oofa.txt
.sp
This causes your local Kermit to enter server mode; then the remote
Kermit program requests the named file and the local Kermit sends it
and returns automatically to Connect state when done.
.sp
If you want to upload multiple files, you have have use shell quoting
rules, since these aren't local files:
.sp
.nf
  kermit -g "oofa.txt oofa.zip oofa.html oofa.tar.gz"
  kermit -g "oofa.*"
.fi
.sp
If you want to upload a file but store it under a different name, use:
.sp
  kermit -g friday.txt -a today.txt
.TP
Kermit Transfers the Old-Fashioned Way
If your desktop communications software does not support autoupload or
autodownload, or it does not include Kermit server mode, the procedure
requires more steps.
.sp
To download a file, type:
.sp
  kermit -s filename
.sp
on the host as before, but if nothing happens automatically in
response to this command, you have to switch your desktop
communications software into Kermit Receive state. This might be done
by escaping back using keyboard characters or hot keys (Alt-x is
typical) and/or with a command (like RECEIVE) or a menu. When the file
transfer is complete, you have to go back to Connect state, Terminal
emulation, or whatever terminology applies to your desktop
communications software.
.sp
To upload a file, type:
.sp
  kermit -r
.sp
on the host (rather than "kermit -g"). This tells C-Kermit to wait
passively for a file to start arriving. Then regain the attention of
your desktop software (Alt-x or whatever) and instruct it to send the
desired file(s) with Kermit protocol. When the transfer is finished,
return to the Connect or Terminal screen.
.TP
If File Transfer Fails
Although every aspect of Kermit's operation can be finely tuned, there
are also three short and simple "omnibus tuning" commands you can use
for troubleshooting:
.RS
.TP
FAST
Use fast file-transfer settings. This has been the default since
C-Kermit 7.0 now that most modern computers and connections
support it. If transfers fail with fast settings, try . . .
.TP
CAUTIOUS
Use cautious but not paranoid settings. File transfers, if they
work, will go at medium speed. If not, try . . .
.TP
ROBUST
Use the most robust, resilient, conservative, safe, and reliable
settings. File transfers will almost certainly work, but they
will be quite slow (of course this is a classic tradeoff; ROBUST
was C-Kermit's default tuning in versions 6.0 and earlier, which
made everybody think Kermit protocol was slow). If ROBUST doesn't
do the trick, try again with SET PARITY SPACE first in case it's
not an 8-bit connection.
.RE
.sp
Obviously the success and performance of a file transfer also depends
on C-Kermit's file transfer partner. Up-to-date, real Kermit Project
partners are recommended because they contain the best Kermit protocol
implementations and because we can support them in case of trouble.
.sp
If you still have trouble, consult Chapter 10 of Using C-Kermit, or
send email to kermit-support@columbia.edu.
.TP
Advanced Kermit File-Transfer Features
Obviously there is a lot more to Kermit file transfer, including all
sorts of interactive commands, preferences, options, logging,
debugging, troubleshooting, and anything else you can imagine but
that's what the manual and updates are for. Here are a few topics you
can explore if you're interested by Typing HELP for the listed
commands:
.RS
.TP
Logging transfers:
LOG TRANSACTIONS (HELP LOG)
.TP
Automatic per-file text/binary mode switching:
SET TRANSFER MODE { AUTOMATIC, MANUAL } (HELP SET TRANSFER).
.TP
Cross-platform recursive directory tree transfer:
SEND /RECURSIVE, GET /RECURSIVE (HELP SEND, HELP GET).
.TP
File collision options:
SET FILE COLLISION { OVERWRITE, BACKUP, DISCARD, ... } (HELP SET FILE).
.TP
Update: Transfer only files that changed since last time:
SET FILE COLLISION UPDATE (HELP SET FILE).
.TP
Filename selection patterns:
(HELP WILDCARD).
.TP
Flexible file selection:
SEND (or GET) /BEFORE /AFTER /LARGER /SMALLER /TYPE /EXCEPT, ...
.TP
Character-set conversion:
SET { FILE, TRANSFER } CHARACTER-SET, ASSOCIATE, ...
.TP
File/Pathname control:
SET { SEND, RECEIVE } PATHNAMES, SET FILE NAMES.
.TP
Atomic file movement:
SEND (or GET) /DELETE /RENAME /MOVE-TO
.TP
Transferring to/from standard i/o of other commands:
SEND (or GET) /COMMAND
.TP
Recovery of interrupted transfer from point of failure:
RESEND, REGET (HELP RESEND, HELP REGET).
.RE
.TP
Non-Kermit File Transfer
You can also use C-Kermit to transfer files with FTP or HTTP Internet
protocols; see below.
.sp
On a regular serial or Telnet connection where the other computer
doesn't support Kermit protocol at all, you have several options. For
example, if your desktop communications software supports Zmodem, use
"rz" and "sz" on the host rather than Kermit. But if Kermit is your
desktop software, and you are using it to make calls or network
connections to other computers that don't support Kermit protocol (or
that don't have a good implementation of it), then if your computer
also has external X, Y, or Zmodem programs that are redirectable,
Kermit can use them as external protocols. HELP SET PROTOCOL for
details.
.sp
You can also capture "raw" data streams from the other computer with
LOG SESSION (HELP LOG and HELP SET SESSION-LOG for details), and you
can upload files without any protocol at all with TRANSMIT (HELP
TRANSMIT, HELP SET TRANSMIT).
.SH KERMIT'S BUILT-IN FTP AND HTTP CLIENTS
Kermit's FTP client is like the regular Unix FTP client that you're used
to, but with some differences:
.TP
\(bu
It has lots more commands and features.
.TP
\(bu
Each FTP command must be prefixed with "ftp", for example "ftp open",
"ftp get", "ftp bye", etc (this is not strictly true, but until you're
more familiar with it, it's best to follow this rule).
.TP
\(bu
Commands like "cd", "directory", etc, execute locally, not on the
server. Use "ftp cd", "ftp dir", etc, to have them act on the server.
.TP
\(bu
You can have an FTP session and a regular Kermit serial or Telnet
session open at the same time.
.TP
\(bu
FTP sessions can be fully automated.
.PP
Pending publication of the next edition of the manual, the Kermit FTP
client is thoroughly documented at the Kermit Project website:
.sp
  http://www.columbia.edu/kermit/ftpclient.html
.sp
You also can use HELP FTP and HELP SET FTP to get descriptions of Kermit's
FTP-related commands.
.PP
The HTTP client is similar to the FTP one, except you prefix each command
with HTTP instead of FTP: HTTP OPEN, HTTP GET, HTTP PUT, HTTP CLOSE, etc.
Type HELP HTTP for details, or visit the to view the manual supplements.
HTTP connections can be open at the same time as regular serial or Telnet
connections and FTP connections. So Kermit can manage up to three types
connections simultaneously.
.SH INTERNET KERMIT SERVICE
C-Kermit can be configured and run as an Internet service (called IKSD),
similar to an FTP server (FTPD) except you can (but need not) interact with
it directly, plus it does a lot more than an FTP server can do. The TCP
port for IKSD is 1649. It uses Telnet protocol. C-Kermit can be an Internet
Kermit Server, or it can be a client of an IKSD. You can make connections
from C-Kermit to an IKSD with any of the following commands:
.sp
.nf
  telnet foo.bar.edu 1649
  telnet foo.bar.edu kermit   ; if "kermit" is listed in /etc/services
  iksd foo.bar.edu
.fi
.sp
The IKSD command is equivalent to a TELNET command specifying port 1649.
For more information about making and using connections to an IKSD, see:
.sp
  http://www.columbia.edu/kermit/cuiksd.html
.sp
You can run an Internet Kermit Service on your own computer too (if you are
the system administrator). For instructions, see:
.sp
  http://www.columbia.edu/kermit/iksd.html
.SH SECURITY
All of C-Kermit's built-in TCP/IP networking methods (Telnet, Rlogin, IKSD,
FTP, and HTTP) can be secured by one or more of the following IETF-approved
methods:
.PP
\(bu	MIT Kerberos IV
.br
\(bu	MIT Kerberos V
.br
\(bu	SSL/TLS
.br
\(bu	Stanford SRP
.PP
For complete instructions see:
.PP
  http://www.columbia.edu/kermit/security.html
.PP
And as noted previously, you can also make SSH connections with C-Kermit if
you already have an SSH client installed.
.SH ALTERNATIVE COMMAND-LINE PERSONALITIES
When invoked as "kermit" or any other name besides "ftp" or "telnet",
C-Kermit has the command-line options described above in the OPTIONS
section. However, if you invoke C-Kermit as "telnet" or "ftp", it changes
its command-line personality to match. This can be done (among other ways)
with symbolic links (symlinks). For example, if you want C-Kermit to be
your regular Telnet client, or the Telnet helper of your Web browser, you
can create a link like the following in a directory that lies in your PATH
ahead of the regular telnet program:
.sp
  ln -s /usr/local/bin/kermit telnet
.sp
Now when you give a "telnet" command, you are invoking Kermit instead, but
with its Telnet command-line personality so, for example:
.sp
  telnet xyzcorp.com
.sp
Makes a Telnet connection to xyzcorp.com, and Kermit exits automatically
when the connection is closed (just like the regular Telnet client). Type
"telnet -h" to get a list of Kermit's Telnet-personality command-line
options, which are intended to be as compatible as possible with the
regular Telnet client.
.PP
Similarly for FTP:
.sp
  ln -s /usr/local/bin/kermit ftp
.sp
And now type "ftp -h" to see its command-line options, and command lines
just like you would give your regular FTP client:
.sp
  ftp xyzcorp.com
.sp
but with additional options allowing an entire session to be specified on
the command line. Finally, if Kermit's
first command-line option is a Telnet, FTP, IKSD, or HTTP URL, Kermit
automatically makes the appropriate kind of connection and, if indicated by
the URL, takes the desired action:
.TP
kermit telnet:xyzcorp.com
Opens a Telnet session
.TP
kermit telnet://olga@xyzcorp.com
Ditto for user olga
.TP
kermit ftp://olga@xyzcorp.com/public/oofa.zip
Downloads a file
.TP
kermit kermit://kermit.columbia.edu/kermit/f/READ.ME
Ditto for IKSD
.TP
kermit iksd://kermit.columbia.edu/kermit/f/READ.ME
(This works too)
.TP
kermit http://www.columbia.edu/kermit/index.html
Grabs a web page
.fi
.SH LICENSE
C-Kermit has an unusual license, but a fair and sensible one since the
Kermit Project must support itself out of revenue: it's not a BSD license,
not GPL, not Artistic, not commercial, not shareware, not freeware. It can
be summed up like this: if you want C-Kermit for your own use, you can
download and use it without cost or license (but we'd appreciate it if you
would purchase the manual). But if you want to sell C-Kermit or bundle it
with a product or otherwise distribute it in a commercial setting EXCEPT
WITH AN OPEN-SOURCE OPERATING SYSTEM DISTRIBUTION such as Linux, FreeBSD,
NetBSD, or OpenBSD, you must license it. To see the complete license, give
the LICENSE command at the prompt, or see the COPYING.TXT file distributed
with C-Kermit 7.0 or later, or download it from
.sp
  ftp://kermit.columbia.edu/kermit/c-kermit/COPYING.TXT
.sp
Send licensing inquiries to kermit@columbia.edu.
.SH BUGS
See the following files for listings of known bugs, limitations,
workarounds, hints and tips:
.TP
ckcbwr.txt
General C-Kermit bugs, hints, tips.
.TP
ckubwr.txt
Unix-specific C-Kermit bugs, hints, tips.
.PP
Report bugs and problems by email to:
.sp
   kermit-support@columbia.edu.
.sp
Before requesting technical support, please read the hints here:
.sp
  http://www.columbia.edu/kermit/support.html
.sp
and also read the C-Kermit Frequently Asked Questions:
.sp
  http://www.columbia.edu/kermit/ckfaq.html
.SH OTHER TOPICS
There's way more to C-Kermit than we've touched on here -- troubleshooting,
customization, character sets, dialing directories, sending pages, script
writing, and on and on, all of which are covered in the manual and updates
and supplements. For the most up-to-date information on documentation (or
updated documentation itself) visit the Kermit Project website:
.sp
  http://www.columbia.edu/kermit/
.PP
There you will also find Kermit software packages for other platforms:
different Unix varieties, Windows, DOS, VMS, IBM mainframes, and many
others: 20+ years' worth.
.SH DOCUMENTATION AND UPDATES
The manual for C-Kermit is:
.TP
.I
Using C-Kermit
Frank da Cruz and Christine M. Gianone,
Second Edition, Digital Press / Butterworth-Heinemann, Woburn, MA, 1997, 622
pages, ISBN 1-55558-164-1. This is a printed book. It covers C-Kermit 6.0.
.TP
The C-Kermit 7.0 Supplement
http://www.columbia.edu/kermit/ckermit2.html
.TP
The C-Kermit 8.0 Supplement
http://www.columbia.edu/kermit/ckermit3.html
.PP
Visit C-Kermit home page:
.sp
  http://www.columbia.edu/kermit/ckermit.html
.sp
to learn about new versions, Beta tests, and other news; to
read case studies and tutorials; to download source code, install packages,
and prebuilt binaries for many platforms. Also visit:
.TP
http://www.columbia.edu/kermit/scriptlib.html
The Kermit script library and tutorial
.TP
http://www.columbia.edu/kermit/newfaq.html
The Kermit FAQ (Frequently Asked Questions about Kermit)
.TP
http://www.columbia.edu/kermit/ckfaq.html
The C-Kermit FAQ (Frequently Asked Questions about C-Kermit)
.TP
http://www.columbia.edu/kermit/telnet.html
C-Kermit Telnet client documentation
.TP
http://www.columbia.edu/kermit/security.html
C-Kermit security documentation (Kerberos, SSL/TLS, etc)
.TP
http://www.columbia.edu/kermit/cuiksd.html
Internet Kermit Service user documentation
.TP
http://www.columbia.edu/kermit/iksd.html
Internet Kermit Service administrator documentation
.TP
http://www.columbia.edu/kermit/studies.html
Case studies.
.TP
http://www.columbia.edu/kermit/support.html
Technical support.
.TP
http://www.columbia.edu/kermit/k95tutorial.html
Kermit 95 tutorial.
.TP
comp.protocols.kermit.misc
The Kermit newsgroup (unmoderated).
.SH FILES
.TP
COPYING.TXT
C-Kermit license.
.TP
~/.kermrc
Initialization file.
.TP
~/.mykermrc
Customization file.
.TP
~/.kdd
Kermit dialing directory (see manual).
.TP
~/.knd
Kermit network directory (see manual).
.TP
~/.ksd
Kermit services directory (see manual).
.TP
ca_certs.pem
Certificate Authority certifcates used for SSL connections.
.TP
ckuins.txt
Installation instructions for Unix.  Also at
http://www.columbia.edu/kermit/ckuins.html.
.TP
ckcbwr.txt
General C-Kermit bugs, hints, tips.
.TP
ckubwr.txt
Unix-specific C-Kermit bugs, hints, tips.
.TP
ckcplm.txt
C-Kermit program logic manual.
.TP
ckccfg.txt
C-Kermit compile-time configuration options.
.TP
ssh
(in your PATH) SSH connection helper.
.TP
rz, sz, etc.
(in your PATH) external protocols for XYZmodem.
.TP
/var/spool/locks (or whatever)
UUCP lockfile for dialing out (see installation instructions).
.SH AUTHORS
.TP
Software
Frank da Cruz and Jeffrey E Altman,
.br
1985-present, with contributions from hundreds of others all over the
world.
.TP
Documentation
Frank da Cruz and Christine M Gianone
.TP
Address
.nf
The Kermit Project - Columbia Univerity
612 West 115th Street
New York NY 10025-7799
USA
.fi
.TP
E-Mail
kermit@columbia.edu
.TP
Web
http://www.columbia.edu/kermit/
.fi
.br
