
                        C-Kermit Configuration Options

     Frank da Cruz
     [1]The Kermit Project
     [2]Columbia University

   As of: C-Kermit 8.0.211, 10 April 2004
   This page last updated: Sun Apr 11 16:45:55 2004 (New York USA Time)

     IF YOU ARE READING A PLAIN-TEXT version of this document, note that
     this file is a plain-text dump of a Web page. You can visit the
     original (and possibly more up-to-date) Web page here:

  [3]http://www.columbia.edu/kermit/ckccfg.html

   [ [4]C-Kermit Home ] [ [5]Kermit Home ]
    ________________________________________________________________________

  CONTENTS

  1. [6]FILE TRANSFER
  2. [7]SERIAL COMMUNICATION SPEEDS
  3. [8]FULLSCREEN FILE TRANSFER DISPLAY
  4. [9]CHARACTER SETS
  5. [10]APC EXECUTION
  6. [11]PROGRAM SIZE
  7. [12]MODEM DIALING
  8. [13]NETWORK SUPPORT
  9. [14]EXCEPTION HANDLING
 10. [15]SECURITY FEATURES
 11. [16]ENABLING SELECT()
 12. [17]I/O REDIRECTION
 13. [18]FLOATING-POINT NUMBERS, TIMERS, AND ARITHMETIC
 14. [19]SPECIAL CONFIGURATIONS
  I. [20]SUMMARY OF COMPILE-TIME OPTIONS
    ________________________________________________________________________

  OVERVIEW

   This document describes configuration options for C-Kermit (5A and
   later). The major topics covered include program size (and how to
   reduce it), how to include or exclude particular features, notes on
   serial-port, modem, and network support, and a list of C-Kermit's
   compile-time options.

   For details about your particular operating system, also see the
   system-specific installation instructions file, such as the
   [21]C-Kermit Installation Instructions for Unix.

   [ [22]C-Kermit Home ] [ [23]Kermit Home ]
    ________________________________________________________________________

  1. FILE TRANSFER

   [ [24]Top ] [ [25]Contents ] [ [26]Next ] [ [27]Previous ]

   Prior to version 7.0, C-Kermit was always built with the most
   conservative Kermit file-transfer protocol defaults on every platform:
   no control-character prefixing, 94-byte packets, and a window size of
   1.

   Starting in version 7.0, fast settings are the default. To override
   these at compile time, include:

  -DNOFAST

   in the C compiler CFLAGS. Even with the fast defaults, C-Kermit
   automatically drops down to whatever window and packet sizes requested
   by the other Kermit, if these are smaller, when sending files (except
   for control-character unprefixing, which is not negotiated, and which
   is now set to CAUTIOUS rather than NONE at startup). C-Kermit's
   settings prevail when it is receiving.

   [ [28]C-Kermit Home ] [ [29]Kermit Home ]
    ________________________________________________________________________

  2. SERIAL COMMUNICATION SPEEDS

   [ [30]Top ] [ [31]Contents ] [ [32]Next ] [ [33]Previous ]

   As of 6 September 1997, a new simplified mechanism for obtaining the
   list of legal serial interface speeds is in place:

     * If the symbol TTSPDLIST is defined, the system-dependent routine
       ttspdlist() is called at program initialization to obtain the
       list.
     * This symbol should be defined only for C-Kermit implementations
       that have implemented the ttspdlist() function, typically in the
       ck?tio.c module. See [34]ckutio.c for an example.
     * TTSPDLIST is automatically defined in [35]ckcdeb.h for UNIX. Add
       the appropriate #ifdefs for other platforms when the corresponding
       ttspdlist() functions are filled in.
     * If TTSPDLIST is (or normally would be) defined, the old code
       (described below) can still be selected by defining NOTTSPDLIST.

   The ttspdlist() function can obtain the speeds in any way that works.
   For example, based simply on #ifdef Bnnnn..#endif (in UNIX). Although
   it might be better to actually check each speed against the currently
   selected hardware interface before allowing it in the array, there is
   usually no passive and/or reliable and safe way to do this, and so
   it's better to let some speeds into the array that might not work,
   than it is to erroneously exclude others. Speeds that don't work are
   caught when the SET SPEED command is actually given.

   Note that this scheme does not necessarily rule out split speed
   operation, but effectively it does in C-Kermit as presently
   constituted since there are no commands to set input and output speed
   separately (except the special case "set speed 75/1200").

   Note that some platforms, notably AIX 4.2 and 4.3, implement high
   serial speeds transparently to the application, e.g. by mapping 50 bps
   to 57600 bps, and so on.

   That's the whole deal. When TTSPDLIST is not defined, the following
   applies:

   Speeds are defined in two places: the SET SPEED keyword list in the
   command parser (as of this writing, in the [36]ckuus3.c source file),
   and in the system- dependent communications i/o module, ck?tio.c,
   functions ttsspd() (set speed) and ttgspd() (get speed). The following
   speeds are assumed to be available in all versions:

  0, 110, 300, 600, 1200, 2400, 4800, 9600

   If one or more of these speeds is not supported by your system, you'll
   need to change the source code (this has never happened so far). Other
   speeds that are not common to all systems have Kermit-specific
   symbols:

               Symbol       Symbol
  Speed (bps)  to enable    to disable
       50       BPS_50       NOB_50
       75       BPS_75       NOB_75
       75/1200  BPS_7512     NOB_7512
      134.5     BPS_134      NOB_134
      150       BPS_150      NOB_150
      200       BPS_200      NOB_200
     1800       BPS_1800     NOB_1800
     3600       BPS_3600     NOB_3600
     7200       BPS_7200     NOB_7200
    14400       BPS_14K      NOB_14K
    19200       BPS_19K      NOB_19K
    28800       BPS_28K      NOB_28K
    38400       BPS_38K      NOB_38K
    57600       BPS_57K      NOB_57K
    76800       BPS_76K      NOB_76K
   115200       BPS_115K     NOB_155K
   230400       BPS_230K     NOB_230K
   460800       BPS_460K     NOB_460K
   921600       BPS_921K     NOB_921K

   The [37]ckcdeb.h header file contains default speed configurations for
   the many systems that C-Kermit supports. You can override these
   defaults by (a) editing ckcdeb.h, or (b) defining the appropriate
   enabling and/or disabling symbols on the CC command line, for example:

  -DBPS_14400 -DNOB_115200

   or the "make" command line, e.g.:

  make blah "KFLAGS=-DBPS_14400 -DNOB_115200"

   Note: some speeds have no symbols defined for them, because they have
   never been needed: 12.5bps, 45.5bps, 20000bps, etc. These can easily
   be added if required (but they will work only if the OS supports
   them).

   IMPORTANT: Adding one of these flags at compile time does not
   necessarily mean that you will be able to use that speed. A particular
   speed is usable only if your underlying operating system supports it.
   In particular, it needs to be defined in the appropriate system header
   file (e.g. in UNIX, cd to /usr/include and grep for B9600 in *.h and
   sys/*.h to find the header file that contains the definitions for the
   supported speeds), and supported by the serial device driver, and of
   course by the physical device itself.

   ALSO IMPORTANT: The list of available speeds is independent of how
   they are set. The many UNIXes, for example, offer a wide variety of
   APIs that are BSD-based, SYSV-based, POSIX-based, and purely made up.
   See the ttsspd(), ttgspd(), and ttspdlist() routines in [38]ckutio.c
   for illustrations.

   The latest entries in this horserace are the tcgetspeed() and
   ttsetspeed() routines found in UnixWare 7. Unlike other methods, they
   accept the entire range of integers (longs really) as speed values,
   rather than certain codes, and return an error if the number is not,
   in fact, a legal speed for the device/driver in question. In this
   case, there is no way to build a list of legal speeds at compile time,
   since no Bnnnn symbols are defined (except for "depracated, legacy"
   interfaces like ioctl()) and so the legal speed list must be
   enumerated in the code -- see ttspdlist() in [39]ckutio.c.

   [ [40]C-Kermit Home ] [ [41]Kermit Home ]
    ________________________________________________________________________

  3. FULLSCREEN FILE TRANSFER DISPLAY

   [ [42]Top ] [ [43]Contents ] [ [44]Next ] [ [45]Previous ]

   New to edit 180 is support for an MS-DOS-Kermit-like local-mode full
   screen file transfer display, accomplished using the curses library,
   or something equivalent (for example, the Screen Manager on DEC VMS).
   To enable this feature, include the following in your CFLAGS:

  -DCK_CURSES

   and then change your build procedure (if necessary) to include the
   necessary libraries. For example, in Unix these are usually "curses"
   or "ncurses" (and more recenlty, "ncursesw" and "slang"), perhaps also
   "termcap", "termlib", or "tinfo":

  "LIBS= -lcurses -ltermcap"
  "LIBS= -lcurses -ltermlib"
  "LIBS= -lncurses"
  "LIBS= -ltermlib"
  "LIBS= -ltinfo"

   "man curses" for further information, and search through the Unix
   [46]makefile for "CK_CURSES" to see many examples, and also see the
   relevant sections of the [47]Unix C-Kermit Installation Instructions,
   particularly Sections [48]4 and [49]9.2.

   There might still be a complication. Some implementations of curses
   reserve the right to alter the buffering on the output file without
   restoring it afterwards, which can leave Kermit's command processing
   in a mess when the prompt comes back after a fullscreen file transfer
   display. The typical symptom is that characters you type at the prompt
   after a local-mode file transfer (i.e. after seeing the curses
   file-transfer display) do not echo until you press the Return (Enter)
   key. If this happens to you, try adding

  -DCK_NEWTERM

   to your makefile target (see comments in screenc() in [50]ckuusx.c for
   an explanation).

   If that doesn't fix the problem, then use a bigger hammer and replace
   -DCK_NEWTERM with:

  -DNONOSETBUF

   which tells Kermit to force stdout to be unbuffered so CBREAK mode can
   work.

   In SCO Xenix and SCO UNIX, there are two separate curses libraries,
   one based on termcap and the other based on terminfo. The default
   library, usually terminfo, is established when the development system
   is installed. To manually select terminfo (at compile time):

  compile -DM_TERMINFO and link -ltinfo

   and to manually select termcap:

  compile -DM_TERMCAP and link -ltcap -ltermlib

   <curses.h> looks at M_TERMINFO and M_TERMCAP to decide which header
   files to use. /usr/lib/libcurses.a is a link to either libtinfo.a or
   libtcap.a. The C-Kermit compilation options must agree with the
   version of the curses library that is actually installed.

   NOTE: If you are doing an ANSI-C compilation and you get compile time
   warnings like the following:

  Warning: function not declared in ckuusx.c: wmove, printw, wclrtoeol,
  wclear, wrefresh, endwin, etc...

   it means that your <curses.h> file does not contain prototypes for
   these functions. The warnings should be harmless.

   New to edit 190 is the ability to refresh a messed-up full-screen
   display, e.g. after receiving a broadcast message. This depends on the
   curses package including the wrefresh() and clearok() functions and
   the curscr variable. If your version has these, or has code to
   simulate them, then add:

  -DCK_WREFRESH

   The curses and termcap libraries add considerable size to the program
   image (e.g. about 20K on a SUN-4, 40K on a 386). On some small
   systems, such as the AT&T 6300 PLUS, curses can push Kermit over the
   edge... even though it compiles, loads, and runs correctly, its
   increased size apparently makes it swap constantly, slowing it down to
   a crawl, even when the curses display is not in use. Some new makefile
   targets have been added to take care of this (e.g. sys3upcshcc), but
   similar tricks might be necessary in other cases too.

   On the curses file-transfer display, just below the "thermometer", is
   a running display of the transfer rate, as a flat quotient of file
   characters per elapsed seconds so far. You can change this to an
   average that gives greater weight to recent history (0.25 *
   instantaneous cps + 0.75 * historical cps) by adding -DCPS_WEIGHTED to
   your CFLAGS (sorry folks, this one is not worth a SET command). You
   can choose a second type of weighted average in which the weighting
   smooths out progressively as the transfer progresses by adding
   -DCPS_VINCE to -DCPS_WEIGHTED.

   An alternative to curses is also available at compile time, but should
   be selected if your version of Kermit is to be run in local mode only
   in an ANSI terminal environment, for example on a desktop workstation
   that has an ANSI console driver. To select this option in place of
   curses, define the symbol MYCURSES:

  -DMYCURSES

   instead of CK_CURSES. The MYCURSES option uses built-in ANSI (VT100)
   escape sequences, and depends upon your terminal or console driver to
   interpret them correctly.

   In some C-Kermit builds, we replace printf() via #define printf...
   However, this can cause conflicts with the [n]curses header files.
   Various hacks are required to get around this -- see [51]ckutio.c,
   [52]ckufio.c, [53]ckuusx.c, [54]ckucmd.c, etc.

   [ [55]C-Kermit Home ] [ [56]Kermit Home ]
    ________________________________________________________________________

  4. CHARACTER SETS

   [ [57]Top ] [ [58]Contents ] [ [59]Next ] [ [60]Previous ]

   Since version 5A, C-Kermit has included support for conversion of
   character sets for Western European languages (i.e. languages that
   originated in Western Europe, but are now also spoken in the Western
   Hemisphere and other parts of the world), via ISO 8859-1 Latin
   Alphabet 1, for Eastern European languages (ISO Latin-2), Hebrew (and
   Yiddish), Greek, and Cyrillic-alphabet languages (ISO Latin/Cyrillic).
   Many file (local) character sets are supported: ISO 646 7-bit national
   sets, IBM code pages, Apple, DEC, DG, NeXT, etc.

   To build Kermit with no character-set translation at all, include
   -DNOCSETS in the CFLAGS. To build with no Latin-2, add -DNOLATIN2. To
   build with no Cyrillic, add -DNOCYRIL. To omit Hebrew, add -DNOHEBREW.
   If -DNOCSETS is *not* included, you'll always get LATIN1. To build
   with no KANJI include -DNOKANJI. There is presently no way to include
   Latin-2, Cyrillic, Hebrew, or Kanji without also including Latin-1.

   [61]Unicode support was added in C-Kermit 7.0, and it adds a fair
   amount of tables and code (and this is only a "Level 1" implementation
   -- a higher level would also require building in the entire Unicode
   database). On a PC with RH 5.2 Linux, building C-Kermit 7.0, we get
   the following sizes:

  NOCSETS NOUNICODE NOKANJI   Before    After                  
   [   ]    [   ]    [   ]    1329014   (Full)
   [   ]    [   ]    [ X ]    1325686   (Unicode but no Kanji)
   [   ]    [ X ]    [   ]    1158837   (All charsets except Unicode)
   [ X ]    [ x ]    [ x ]    1090845   (NOCSETS implies the other two)

   Note, by the way, that NOKANJI without NOUNICODE only removes the
   non-Unicode Kanji sets (Shift-JIS, EUC-JP, JIS-7, etc). Kanji is still
   representable in UCS-2 and UTF-8.

   [ [62]C-Kermit Home ] [ [63]Kermit Home ]
    ________________________________________________________________________

  5. APC EXECUTION

   [ [64]Top ] [ [65]Contents ] [ [66]Next ] [ [67]Previous ]

   The Kermit CONNECT and INPUT commands are coded to execute Application
   Program Command escape sequences from the host:

  <ESC>_<text><ESC>\

   where <text> is a C-Kermit command, or a list of C-Kermit commands
   separated by commas, up to about 1K in length.

   To date, this feature has been included in the OS/2, Windows, VMS,
   OS-9, and Unix versions, for which the symbol:

  CK_APC

   is defined automatically in [68]ckuusr.h. For OS/2, APC is enabled at
   runtime by default, for UNIX it is disabled. It is controlled by the
   SET TERMINAL APC command. Configuring APC capability into a version
   that gets it by default (because CK_APC is defined in [69]ckuusr.h)
   can be overridden by including:

  -DNOAPC

   on the CC command line.

   C-Kermit's autodownload feature depends on the APC feature, so
   deconfiguring APC also disables autodownload (it doesn't use APC
   escape sequences, but uses the APC switching mechanism internally).

   [ [70]C-Kermit Home ] [ [71]Kermit Home ]
    ________________________________________________________________________

  6. PROGRAM SIZE

   [ [72]Top ] [ [73]Contents ] [ [74]Next ] [ [75]Previous ]

   SECTION CONTENTS

  6.1. [76]Feature Selection
  6.2. [77]Changing Buffer Sizes
  6.3. [78]Other Size-Related Items
  6.4. [79]Space/Time Tradeoffs

   (Also see [80]Section 4)

   Each release of C-Kermit is larger than the last. On some computers
   (usually old ones) the size of the program prevents it from being
   successfully linked and loaded. On some others (also usually old
   ones), it occupies so much memory that it is constantly swapping or
   paging. In such cases, you can reduce C-Kermit's size in various ways,
   outlined in this section. The following options can cut down on the
   program's size at compile time by removing features or changing the
   size of storage areas.

   If you are reading this section because all you want is a small, fast,
   quick-to-load Kermit file-transfer application for the remote end of
   your connection, and the remote end is Unix based, take a look at
   G-Kermit:

  [81]http://www.columbia.edu/kermit/gkermit.html

  6.1. Feature Selection

   Features can be added or removed by defining symbols on the CC (C
   compiler) command line. "-D" is the normal CC directive to define a
   symbol so, for example, "-DNODEBUG" defines the symbol NODEBUG. Some C
   compilers might use different syntax, e.g. "-d NODEBUG" or
   "/DEFINE=NODEBUG". For C compilers that do not accept command-line
   definitions, you can put the corresponding #define statements in the
   file ckcsym.h, for example:

  #define NODEBUG

   The following table shows the savings achieved when building C-Kermit
   8.0 (Beta.04) with selected feature-deselection switches on an
   Intel-based PC with Red Hat Linux 7.0 and gcc 2.96. The sizes are for
   non-security builds. The fully configured non-security build is
   2127408 bytes.

  Option      Size    Savings Effect
  NOICP        545330   74.4% No Interactive Command Parser (command-line only)
  NOLOCAL     1539994   27.6% No making connections.
  NOXFER      1551108   27.1% No file transfer.
  IKSDONLY    1566608   26.4% Internet Kermit Server only.
  NOCSETS     1750097   17.7% No character-set conversion.
  NOSPL       1800293   15.4% No Script Programming Language.
  NONET       1808575   15.0% No making network connections.
  NOUNICODE   1834426   13.8% No Unicode character-set conversion.
  NOHELP      1837877   13.6% No built-in help text.
  NODEBUG     1891669   11.1% No debug log.
  NOFRILLS    1918966    9.8% No "frills".
  NOFTP       1972496    7.3% No FTP client.
  NODIAL      1984488    6.7% No automatic modem dialing.
  NOPUSH      2070184    2.7% No shell access, running external programs, etc.
  NOIKSD      2074129    2.5% No Internet Kermit Server capability.
  NOHTTP      2082610    2.1% No HTTP client.
  NOFLOAT     2091332    1.7% No floating-point arithmetic.
  NOCHANNELIO 2095978    1.5% No FOPEN/FREAD/FWRITE/FCLOSE, etc.
  MINIDIAL    2098035    1.4% No built-in support for many kinds of modems.
  NOSERVER    2098987    1.3% No server mode.
  NOSEXP      2105898    1.0% No S-Expressions.
  NOPTY       2117743    0.5% No pseudoterminal support.
  NORLOGIN    2121089    0.3% No RLOGIN connections.
  NOOLDMODEMS 2124038    0.2% No built-in support for old kinds of modems.
  NOSSH       2125696    0.1% No SSH command.

   And here are a few combinations

   Options Size Savings Effect
   NODEBUG NOICP NOCSETS NOLOCAL 281641 86.7% No debug log, parser,
   character sets, or making connections.
   NOICP NOCSETS NOLOCAL 376468 82.3% No parser, character sets, or
   making connections.
   NOICP NOCSETS NONET 427510 79.9% No parser, character sets, or network
   connections.
   NOSPL NOCSETS 1423784 33.1% No script language, or character sets.

   -DNOFRILLS removes various command synonyms; the following top-level
   commands: CLEAR, DELETE, DISABLE, ENABLE, GETOK, MAIL, RENAME, TYPE,
   WHO; and the following REMOTE commands: KERMIT, LOGIN, LOGOUT, PRINT,
   TYPE, WHO.

  6.2. Changing Buffer Sizes

   Most modern computers have so much memory that (a) there is no need to
   scrimp and save, and (b) C-Kermit, even when fully configured, is
   relatively small by today's standards.

   Two major factors affect Kermit's size: feature selection and buffer
   sizes. Buffer sizes affect such things as the maximum length for a
   Kermit packet, the maximum length for a command, for a macro, for the
   name of a macro, etc. Big buffer sizes are used when the following
   symbol is defined:

  BIGBUFOK

   as it is by default for most modern platforms (Linux, AIX 4 and 5,
   HP-UX 10 and 11, Solaris, etc) in [82]ckuusr.h. If your build does not
   get big buffers automatically (SHOW FEATURES tells you), you can
   include them by rebuilding with BIGBUFOK defined; e.g. in Unix:

  make xxxx KFLAGS=-DBIGBUFOK

   where xxxx is the makefile target. On the other hand, if you want to
   build without big buffers when they normally would be selected, use:

  make xxxx KFLAGS=-DNOBIGBUF

   There are options to control Kermit's packet buffer allocations. The
   following symbols are defined in [83]ckcker.h in such a way that you
   can override them by redefining them in CFLAGS:

  -DMAXSP=xxxx - Maximum send-packet length.
  -DMAXRP=xxxx - Maximum receive-packet length.
  -DSBSIZ=xxxx - Total allocation for send-packet buffers.
  -DRBSIZ=xxxx - Total allocation for receive-packet buffers.

   The defaults depend on the platform.

   Using dynamic allocation (-DDYNAMIC) reduces storage requirements for
   the executable program on disk, and allows more and bigger packets at
   runtime. This has proven safe over the years, and now most builds
   (e.g. all Unix, VMS, Windows, and OS/2 ones) use dynamic memory
   allocation by default. If it causes trouble, however, then omit the
   -DDYNAMIC option from CFLAGS, or add -DNODYNAMIC.

  6.3. Other Size-Related Items

   To make Kermit compile and load successfully, you might have to change
   your build procedure to:

    a. Request a larger ("large" or "huge") compilation / code-generation
       model. This is needed for 16-bit PC-based UNIX versions (most or
       all of which fail to build C-Kermit 7.0 and later anyway). This is
       typically done with a -M and/or -F switch (see your cc manual or
       man page for details).
    b. Some development systems support overlays. If the program is too
       big to be built as is, check your loader manual ("man ld") to see
       if an overlay feature is available. See the 2.10/2.11 BSD example
       in the UNIX makefile. (Actually, as of version 7.0, C-Kermit is
       too big to build, period, even with overlays, on 2.xx BSD).
    c. Similarly, some small and/or segment-based architectures support
       "code mapping", which is similar to overlays (PDP11-based VENIX
       1.0, circa 1984, was an example). See the linker documentation on
       the affected platform.

   It is also possible to reduce the size of the executable program file
   in several other ways:

    a. Include the -O (optimize) compiler switch if it isn't already
       included in your "make" entry (and if it works!). If your compiler
       supports higher levels of optimization (e.g. -O2 or higher number,
       -Onolimit (HP-UX), etc), try them; the greater the level of
       optimization, the longer the compilation and more likely the
       compiler will run out of memory. The the latter eventuality, some
       compilers also provide command-line options to allocate more
       memory for the optimizer, like "-Olimit number" in Ultrix.
    b. If your platofrm supports shared libraries, change the make entry
       to take advantage of this feature. The way to do this is, of
       course, platform dependent; see the NeXT makefile target for an
       example. some platforms (like Solaris) do it automatically and
       give you no choice. But watch out: executables linked with shared
       libraries are less portable than statically linked executables.
    c. Strip the program image after building ("man strip" for further
       info), or add -s to the LNKFLAGS (UNIX only). This strips the
       program of its symbol table and relocation information.
    d. Move character strings into a separate file. See the 2.11 BSD
       target for an example.

  6.4. Space/Time Tradeoffs

   There are more than 6000 debug() statements in the program. If you
   want to save both space (program size) and time (program execution
   time), include -DNODEBUG in the compilation. If you want to include
   debugging for tracking down problems, omit -DNODEBUG from the make
   entry. But when you include debugging, you have two choices for how
   it's done. One definition defines debug() to be a function call; this
   is cheap in space but expensive in execution. The other defines debug
   as "if (deblog)" and then the function call, to omit the function call
   overhead when the debug log is not active. But this adds a lot of
   space to the program. Both methods work, take your choice; IFDEBUG is
   preferred if memory is not a constraint but the computer is likely to
   be slow. The first method is the default, i.e. if nothing is done to
   the CFLAGS or in [84]ckcdeb.h (but in some cases, e.g. VMS, it is). To
   select the second method, include -DIFDEBUG in the compilation (and
   don't include -DNODEBUG).

   [ [85]C-Kermit Home ] [ [86]Kermit Home ]
    ________________________________________________________________________

  7. MODEM DIALING

   [ [87]Top ] [ [88]Contents ] [ [89]Next ] [ [90]Previous ]

   -DNODIAL removes automatic modem dialing completely, including the
   entire [91]ckudia.c module, plus all commands that refer to dialing in
   the various ckuus*.c modules.

   -DMINIDIAL leaves the DIAL and related commands (SET/SHOW MODEM,
   SET/SHOW DIAL) intact, but removes support for all types of modems
   except CCITT, Hayes, Unknown, User-defined, Generic-high-speed, and
   None (= Direct). The MINIDIAL option cuts the size of the dial module
   approximately in half. Use this option if you have only Hayes or CCITT
   modems and don't want to carry the baggage for the other types.

   A compromise between full dialer support and MINIDIAL is obtained by
   removing support for "old" modems -- all the strange non-Hayes
   compatible 1200 and 2400 bps modems that C-Kermit has been carrying
   around since 1985 or so. To remove support for these modems, add
   -DNOOLDMODEMS to CFLAGS at compilation time.

   Finally, if you keep support for old modems, you will notice that
   their names appear on the "set modem ?" menu. That's because their
   names are, by default, "visible". But the list is confusing to the
   younger generation, who have only heard of modems from the
   V.32bis-and-later era. If you want to be able to use old modems, but
   don't want their names cluttering up menus, add this to CFLAGS:

  -DM_OLD=1

   [ [92]C-Kermit Home ] [ [93]Kermit Home ]
    ________________________________________________________________________

  8. NETWORK SUPPORT

   [ [94]Top ] [ [95]Contents ] [ [96]Next ] [ [97]Previous ]

   SECTION CONTENTS

  8.1. [98]TCP/IP
  8.2. [99]X.25
  8.3. [100]Other Networks

   C-Kermit supports not only serial-port and modem connections, but also
   TCP/IP and X.25 network connections. Some versions support other
   network types too like DECnet, LAT, NETBIOS, etc. If you define the
   following symbol:

  NONET

   then all network support is compiled away.

  8.1. TCP/IP

   SUBSECTION CONTENTS

  8.1.1. [101]Firewalls
  8.1.2. [102]Compilation and Linking Problems
  8.1.3. [103]Enabling Host Address Lists
  8.1.4. [104]Enabling Telnet NAWS
  8.1.5. [105]Enabling Incoming TCP/IP Connections
  8.1.6. [106]Disabling SET TCP Options

   C-Kermit's TCP/IP features require the Berkeley sockets library or
   equivalent, generally available on any Unix system, as well as in
   Windows 9x/NT, OS/2, VMS, AOS/VS, VOS, etc. The TCP/IP support
   includes built-in TELNET, FTP, and HTTP protocol. To select TCP/IP
   support, include -DTCPSOCKET in your makefile target's CFLAGS, or (in
   VMS) the appropriate variant (e.g. -DWOLLONGONG, -DMULTINET,
   -DEXCELAN, -DWINTCP, etc).

   The VMS and/or early Unix third-party TCP/IP products are often
   incompatible with each other, and sometimes with different versions of
   themselves. For example, Wollongong reportedly put header files in
   different directories for different UNIX versions:

     * in.h can be in either /usr/include/sys or /user/include/netinet.
     * telnet.h can be in either /usr/include/arpa or
       /user/include/netinet.
     * inet.h can be in either /usr/include/arpa or /user/include/sys.

   In cases like this, use the -I cc command-line option when possible;
   otherwise it's better to make links in the file system than it is to
   hack up the C-Kermit source code. Suppose, for example, Kermit is
   looking for telnet.h in /usr/include/arpa, but on your computer it is
   in /usr/include/netinet. Do this (as root, or get the system
   administrator to do it):

  cd /usr/include/arpa
  ln /usr/include/netinet/telnet.h telnet.h

   ("man ln" for details about links.)

   The network support for TCP/IP and X.25 is in the source files
   [107]ckcnet.h, [108]ckctel.c, [109]ckctel.c, [110]ckctel.h,
   [111]ckcftp.c, with miscellaneous SHOW commands, etc, in the various
   ckuus*.c modules, plus code in the ck*con.c or ckucns.c (CONNECT
   command) and several other modules to detect TELNET negotiations, etc.

   Within the TCPSOCKET code, some socket-level controls are included if
   TCPSOCKET is defined in the C-Kermit CFLAGS and SOL_SOCKET is defined
   in in the system's TCP-related header files, such as <sys/socket.h>.
   These are:

  SET TCP KEEPALIVE
  SET TCP LINGER
  SET TCP RECVBUF
  SET TCP SENDBUF

   In addition, if TCP_NODELAY is defined, the following command is also
   enabled:

  SET TCP NODELAY (Nagle algorithm)

   See the [112]C-Kermit user documentation for descriptions of these
   commands.

  8.1.1. Firewalls

   There exist various types of firewalls, set up to separate users of an
   internal TCP/IP network ("Intranet") from the great wide Internet, but
   then to let selected users or services get through after all.

   One firewall method is called SOCKS, in which a proxy server allows
   users inside a firewall to access the outside world, based on a
   permission list generally stored in a file. SOCKS is enabled in one of
   two ways. First, the standard sockets library is modified to handle
   the firewall, and then all the client applications are relinked (if
   necessary, i.e. if the libraries are not dynamically loaded) with the
   modified sockets library. The APIs are all the same, so the
   applications do not need to be recoded or recompiled.

   In the other method, the applications must be modified to call
   replacement routines, such as Raccept() instead of accept(), Rbind()
   instead of bind(), etc, and then linked with a separate SOCKS library.
   This second method is accomplished (for SOCKS4) in C-Kermit by
   including -DCK_SOCKS in your CFLAGS, and also adding:

  -lsocks

   to LIBS, or replacing -lsockets with -lsocks (depending on whether the
   socks library also includes all the sockets entry points).

   For SOCKS5, use -DCK_SOCKS5.

   Explicit firewall support can, in general, not be a standard feature
   or a feature that is selected at runtime, because the SOCKS library
   tends to be different at each site -- local modifications abound.

   The ideal situation occurs when firewalls are supported by the first
   method, using dynamically linked sockets-replacement libraries; in
   this case, all your TCP/IP client applications negotiate the firewall
   transparently.

  8.1.2. Compilation and Linking Problems

   If you get a compilation error in [113]ckcnet.c, with a complaint like
   "incompatible types in assignment", it probably has something to do
   with the data type your system uses for the inet_addr() function,
   which is declared (usually) in <arpa/inet.h>. Kermit uses "unsigned
   long" unless the symbol INADDRX is defined, in which case "struct
   inaddr" is used instead. Try adding -DINADDRX to CFLAGS in your make
   entry, and if that fixes the problem, please send a report to
   kermit@columbia.edu.

   Compilation errors might also have to do with the data type used for
   getsockopt() and setsockopt() option-length field. This is normally an
   int, but sometimes it's a short, a long, or an unsigned any of those,
   or a size_t. To fix the compilation problem, add -DSOCKOPT_T=xxx to
   the CFLAGS in your makefile target, where xxx is the appropriate type
   (use "man getsockopt" or grep through your system/network header files
   to find the needed type).

  8.1.3. Enabling Host Address Lists

   When you give Kermit an IP host name, it calls the socket routine
   gethostbyname() to resolve it. gethostbyname() returns a hostent
   struct, which might or might not not include a list of addresses; if
   it does, then if the first one fails, Kermit can try the second one,
   and so on. However, this will only work if the symbol "h_addr" is a
   macro defined as "h_addr_list[0]", usually in netdb.h. If it is, then
   you can activate this feature by defining the following symbol in
   CFLAGS:

  HADDRLIST

  8.1.4. Enabling Telnet NAWS

   The Telnet Negotiation About Window Size (NAWS) option requires the
   ability to find out the terminal screen's dimensions. E.g. in Unix, we
   need something like ioctl(0, TIOCGWINSZ, ...). If your version of
   Kermit was built with NAWS capability, SHOW VERSIONS includes CK_NAWS
   among the compiler options. If it doesn't, you can add it by defining
   CK_NAWS at compile time. Then, if the compiler or linker complain
   about undefined or missing symbols, or there is no complaint but SHOW
   TERMINAL fails to show reasonable "Rows =, Columns =" values, then
   take a look at (or write) the appropriate ttgwsiz() routine. On the
   other hand, if CK_NAWS is defined by default for your system (in
   [114]ckcnet.h), but causes trouble, you can override this definition
   by including the -DNONAWS switch on your CC command line, thus
   disabling the NAWS feature.

   This appears to be needed at least on the AT&T 3B2, where in
   [115]ckutio.c, the routine ttgwsiz() finds that the TIOCGWINSZ symbol
   is defined but lacks definitions for the corresponding winsize struct
   and its members ws_col and ws_row.

   The UNIX version of C-Kermit also traps SIGWINCH, so it can send a
   NAWS to the Telnet server any time the local console terminal window
   size changes, e.g. when you stretch it with a mouse. The
   SIGWINCH-trapping code is enabled if SIGWINCH is defined (i.e. in
   signal.h). If this code should cause problems, you can disable it
   without disabling the NAWS feature altogether, by defining NOSIGWINCH
   at compile time.

  8.1.5. Enabling Incoming TCP/IP Connections

   This feature lets you "set host * port" and wait for an incoming
   connection on the given port. This feature is enabled automatically at
   compile if TCPSOCKET is defined and SELECT is also defined. But watch
   out, simply defining SELECT on the cc command line does not guarantee
   successful compilation or linking (see [116]Section 11).

   If you want to disable incoming TCP/IP connections, then build
   C-Kermit with:

  -DNOLISTEN

  8.1.6. Disabling SET TCP Options

   The main reason for this is because of header file / prototype
   conflicts at compile time regardting get- / setsockopt(). If you can't
   fix them (without breaking other builds), add the following in CFLAGS:

  -DNOTCPOPTS

  8.2. X.25

   X.25 support requires (a) a Sun, (b) the SunLink product (libraries
   and header files), and (c) an X.25 connection into your Sun. Similarly
   (in C-Kermit 7.0 or later) Stratus VOS and IBM AIX.

   In UNIX, special makefile targets sunos4x25 and sunos41x25 (for SUNOS
   4.0 and 4.1, respectively), or aix41x25, are provided to build in this
   feature, but they only work if conditions (a)-(c) are met. To request
   this feature, include -DSUNX25 (or -DIBMX25) in CFLAGS.

   SUNX25 (or -DIBMX25) and TCPSOCKET can be freely mixed and matched,
   and selected by the user at runtime with the SET NETWORK TYPE command
   or SET HOST switches.

  8.3. Other Networks

   Support for other networking methods -- NETBIOS, LAT, Named Pipes, etc
   -- is included in ck*net.h and ck*net.c for implementations (such as
   Windows or OS/2) where these methods are supported.

   Provision is made in the organization of the modules, header files,
   commands, etc, for addition of new network types such as DECnet, X.25
   for other systems (HP-UX, VMS, etc), and so on. Send email to
   [117]kermit@columbia.edu if you are willing and able to work on such a
   project.

   [ [118]C-Kermit Home ] [ [119]Kermit Home ]
    ________________________________________________________________________

  9. EXCEPTION HANDLING

   [ [120]Top ] [ [121]Contents ] [ [122]Next ] [ [123]Previous ]

   The C language setjmp/longjmp mechanism is used for handling
   exceptions. The jump buffer is of type jmp_buf, which almost
   everywhere is typedef'd as an array, in which case you should have no
   trouble compiling the exception-handling code. However, if you are
   building C-Kermit in/for an environment where jmp_buf is something
   other than an array (e.g. a struct), then you'll have to define the
   following symbol:

  JBNOTARRAY

   [ [124]C-Kermit Home ] [ [125]Kermit Home ]
    ________________________________________________________________________

  10. SECURITY FEATURES

   [ [126]Top ] [ [127]Contents ] [ [128]Next ] [ [129]Previous ]

   Security, in the sense of secure authentication and strong encryption,
   can be built into versionf of C-Kermit for which the appropriate
   libraries and header files are available (Kerberos IV, Kerberos V,
   OpenSSL, SRP), as explained in great detail in the Kermit Security
   Reference
   . The following symbols govern C-Kermit's security features at build
   time:

   NO_AUTHENTICATION
          Means do not configure any TELNET AUTHENTICATION support. It
          implies NO_ENCRYPTION and undefines any of the auth and encrypt
          types. It does not undefine CK_SSL even though builds with
          CK_SSL cannot succeed without CK_AUTHENTICATION. (This will be
          supported in a future release. It will be needed to allow
          C-Kermit to be built only as an FTP client.)

   NO_KERBEROS
          Means do not compile in any KERBEROS support when
          CK_AUTHENTICATION has been defined.

   NO_SRP
          Do not compile in any SRP support when CK_AUTHENTICATION has
          been defined.

   NO_SSL
          Do not compile in any SSL/TLS support

   NO_ENCRYPTION
          Do not compile in any Telnet encryption support. It does not
          affect the use of SSL/TLS

   NOSSH
          Do not compile in any SSH support whether internal or external

   CK_AUTHENTICATION
          Telnet AUTHENTICATION support. (Also, required if SSL/TLS
          support is desired.) On most platforms this does not autodefine
          any authentication mechanisms such as Kerberos V, Kerberos IV,
          SRP, ... Those need to be defined separately.

   CK_KERBEROS
          Defined automatically when KRB4, KRB5, or KRB524 are defined.
          Implies that some version of Kerberos is in use.

   KRB4
          Should be defined when Kerberos IV support is desired.

   KRB5
          Should be defined when Kerberos V support is desired.

   KRB524
          Should be defined if both Kerberos V and Kerberos IV are used
          and the Kerberos IV support is provided by the MIT Kerberos IV
          compatibility library in the current Kerberos 5 distribution.

   KRB5_U2U
          Should be defined if KRB5 is defined and Kerberos 5 User to
          User mode is desired.

   HEIMDAL
          Should be defined if Kerberos V support is provided by HEIMDAL.
          Support for this option is not complete in C-Kermit 8.0. Anyone
          interested in working on this should contact kermit-support.

   CK_SRP
          Should be defined if SRP support is desired.

   CK_ENCRYPTION
          Should be defined if TELNET ENCRYPTION option support is
          desired. This option does not define any particular encryption
          types. That should be done by defining CK_DES or CK_CAST.

   CK_DES
          Should be defined if either DES or 3DES Telnet Encryption
          option support is desired.

   LIBDES
          If CK_DES is defined and DES support is being provided by
          either Eric Young's libdes.a or OpenSSL 0.9.6x or earlier, this
          option must be defined. If it is not defined, it will be
          assumed that DES support is provided by the MIT Kerberos IV
          libraries.

   CK_CAST
          Should be defined if CAST Telnet Encryption option support is
          desired

   CK_SSL
          Should be defined if SSL/TLS support (OpenSSL) is desired.

   SSL_KRB5
          If KRB5 is defined, and OpenSSL is built to support the
          Kerberos 5 ciphers, then you should define SSL_KRB5

   NOSSLKRB5
          If you are using OpenSSL 0.9.7 or higher and do not wish to
          build with support for Kerberos 5 TLS ciphers, this option must
          be defined.

   ZLIB
          If you are using OpenSSL 0.9.6 or higher and it has been
          compiled with support for ZLIB compression, this option should
          be defined to enable Kermit to properly enable the use of
          compression.

   SSHCMD
          Defined for C-Kermit to enable the use of external SSH clients
          from the Kermit command language

   SSHBUILTIN
          Defined for Kermit implementations that have integrated SSH
          support. Currently only Windows.

   ANYSSH
          Defined if either SSHCMD or SSHBUILTIN are defined.

   CK_SNDLOC
          Telnet Send Location support.

   NOSNDLOC
          Do not include Telnet Send Location support.

   CK_XDISPLOC
          Telnet X-Display Location support. Determines if the X-Display
          location information is sent to the Telnet server either via
          Telnet XDISPLOC or NEW-ENV options.

   NOXDISPLOC
          Do not include Telnet X-Display Location support.

   CK_FORWARD_X
          Telnet Forward X Windows Session Data option. Used to protect
          the privacy and integrity of X Windows Sessions when secure
          telnet sessions are in use.

   NOFORWARDX
          Do not include Telnet Forward X Windows Session Data option.

   Besides the strong forms of security listed above, C-Kermit also
   embodies various internal security features, including:

   NOPUSH
          Compiling with the NOPUSH symbol defined removes all the "shell
          escape" features from the program, including the PUSH, RUN, and
          SPAWN commands, the "!" and "@" command prefixes, OPEN !READ,
          OPEN !WRITE, job control (including the SUSPEND command), the
          REDIRECT command, shell/DCL escape from CONNECT mode, as well
          as the server's execution of REMOTE HOST commands (and, of
          course, the ENABLE HOST command). Add NODISPO to also prevent
          acceptance of incoming MAIL or REMOTE PRINT files. For UNIX,
          also be sure to read [130]Section 11 of the [131]Unix C-Kermit
          Installation Instructions. about set[ug]id configuration.
          Additional restrictions can be enforced when in server mode;
          read about the DISABLE command in the user manual.

   NOCCTRAP
          Compiling with NOCCTRAP prevents the trapping of SIGINT by
          Kermit. Thus if the user generates a SIGINT signal (e.g. by
          typing the system's interrupt character), Kermit will exit
          immediately, rather than returning to its prompt.

   NOPUSH and NOCCTRAP together allow Kermit to be run from restricted
   shells, preventing access to system functions.

   [ [132]C-Kermit Home ] [ [133]Kermit Home ]
    ________________________________________________________________________

  11. ENABLING SELECT()

   [ [134]Top ] [ [135]Contents ] [ [136]Next ] [ [137]Previous ]

   Kermit works best if it can do nonblocking reads, nondestructive input
   buffer checking, and millisecond sleeps. All of these functions can be
   accomplished by the select() function, which, unfortunately, is not
   universally available. Furthermore, select() is required if incoming
   TCP/IP connections are to be supported.

   select() was introduced with Berkeley UNIX, rejected by AT&T for
   System V, but is gradually creeping in to all UNIX versions (and other
   operating systems too) by virtue of its presence in the sockets
   library, which is needed for TCP/IP. AT&T SVID for System V R4
   includes select(), but that does not mean that all SVR4
   implementations have it.

   Furthermore, even when select() is available, it might work only on
   socket file descriptors, but not on others like serial ports, pipes,
   etc. For example, in AOS/VS and BeOS, it works only with file
   descriptors that were created by socket() and opened by connect() or
   accept().

   Other alternatives include poll() and rdchk(). Only one of these three
   functions should be included. The following symbols govern this:

     SELECT  Use select() (BSD, or systems with sockets libraries)
     CK_POLL Use poll()   (System V)
     RDCHK   Use rdchk()  (SCO XENIX and UNIX)

   If your system supports the select() function, but your version of
   C-Kermit does not, try adding:

  -DSELECT

   to the CFLAGS, and removing -DRDCHK or -DCK_POLL if it is there. If
   you get compilation errors, some adjustments to ck*tio.c and/or
   ck*net.c might be needed; search for SELECT (uppercase) in these files
   (note that there are several variations on the calling conventions for
   select()).

   Various macros and data types need to be defined in order to use
   select(). Usually these are picked up from <types.h> or <sys/types.h>.
   But on some systems, they are in <sys/select.h>. In that case, add the
   following:

  -DSELECT_H

   to the CFLAGS to tell C-Kermit to #include <sys/select.h>. A good
   indication that you need to do this would be if you get compile-time
   complaints about "fd_set" or "FD_SET" not being declared or defined.

   In UNIX, the use of select() vs fork() in the CONNECT command is
   independent of the above considerations, and is governed by choosing a
   particular makefile target.

   As of C-Kermit 7.0, select() is also the preferred control mechanism
   for the CONNECT command. Unfortunately, the structures used by the
   original UNIX CONNECT command, based on fork(), and those used by
   select(), are so different, it was not practical to implement them
   both in one module. So the select()-based CONNECT command module for
   UNIX is [138]ckucns.c, and the fork-based one remains [139]ckucon.c.
   To choose the fork-based one, which is more portable (but slower and
   more fragile), use "wermit" as the make target. To choose the
   select-based one, use "xermit". Only do this if you can verify that
   the CONNECT command works on serial connections and PIPE connections
   as well as TCP connections.

     The select()-based Unix CONNECT module, ckucns.c, must be used if
     encryption is to be done, since the fork() version (ckucon.c) loses
     its ability to share vital state information between the two forks.
     Also note that the select() version is superior in many other ways
     too. For example, it recovers better from exterior killing, forced
     disconnections, etc, plus it goes faster.

   SHOW VERSIONS tells whether the CONNECT module uses fork() or
   select().

   C-Kermit 8.0 adds learned script capability, which depends on
   select(). All the "wermit" based targets (as opposed to "xermit") had
   NOLEARN added to them. Whenever changing a target over from wermit to
   xermit, also remember to remove NOLEARN.

   [ [140]C-Kermit Home ] [ [141]Kermit Home ]
    ________________________________________________________________________

  12. I/O REDIRECTION

   [ [142]Top ] [ [143]Contents ] [ [144]Next ] [ [145]Previous ]

   The REDIRECT command allows a local program to be run with its i/o
   redirected over the communications connection. Your version of
   C-Kermit has a REDIRECT command if it was built with the following
   CFLAG:

  -DCK_REDIR

   This, in turn, is possible only if the underlying API is there. In the
   case of UNIX this is just the wait() system call, so all UNIX versions
   get this feature as of 6.0.192 (earlier versions needed a <sys/wait.h>
   header file defining the symbols WIFEXITED and WEXITSTATUS).

   As of version 7.0, file transfer can be done using pipes and filters.
   To enable this feature, #define PIPESEND (and fill in the code). To
   disable on systems where it is normally enabled, define NOPIPESEND.
   This feature is, of course, also disabled by building with NOPUSH (or
   giving the "nopush" command at runtime).

   C-Kermit 7.0 also adds the PIPE and SET HOST /COMMAND commands, which
   provide another form of redirection. This feature is selected with
   -DNETCMD. CK_RDIR must also be defined, since the same mechanisms are
   used internally.

   [ [146]C-Kermit Home ] [ [147]Kermit Home ]
    ________________________________________________________________________

  13. FLOATING-POINT NUMBERS, TIMERS, AND ARITHMETIC

   [ [148]Top ] [ [149]Contents ] [ [150]Next ] [ [151]Previous ]

   Floating-point support was added in C-Kermit 7.0.

   Floating-point numbers are enabled internally, at least for use in
   high-precision file-transfer timers and statistics, unless the
   following symbol is defined at compile time:

  -DNOFLOAT

   This might be necessary on old PCs that do not have built-in
   floating-point hardware.

   When NOFLOAT is not defined, the following symbol tells which
   floating-point type to use:

  -DCKFLOAT=xxxx

   The value is either "double" (normal for 32- and 16-bit architectures)
   or "float" (normal for 64-bit architectures).

   C-Kermit can be configured to use high-precision file-transfer timers
   for more accurate statistics. This feature is enabled with:

  -DGFTIMER

   and disabled with:

  -DNOGFTIMER

   If you try to build with -DGFTIMER but you get compilation errors,
   either fix them (and send email to kermit@columbia.edu telling what
   you did), or else give up and use -DNOGFTIMER (or -DNOFLOAT) instead.
   Hint: depending on your machine architecture, you might have better
   luck using double than float as the data type for floating-point
   numbers, or vice versa. Look in [152]ckcdeb.h for the CKFLOAT
   definition.

   Floating-point arithmetic is also supported in the script programming
   language. First via the \fpp...() functions, such as \fppadd(), which
   adds two floating-point numbers, second in S-Expressions. Addition,
   subtraction, multiplication, and division are always available. But
   other functions such as logs, raising to powers, sines and cosines,
   etc, require the C Math library. To include user-level floating-point
   math you must put:

  -DFNFLOAT

   and in Unix you must link with the Math library:

  LIBS=".... -lm"

   In K95 and VMS, FNFLOAT is defined automatically if CKFLOAT is
   defined. In Unix, however, FNFLOAT must be added to each makefile
   target individually, because of the special linking instructions that
   must also be added to each target.

   Note: S-Expressions require FNFLOAT.

   [ [153]C-Kermit Home ] [ [154]Kermit Home ]
    ________________________________________________________________________

  14. SPECIAL CONFIGURATIONS

   [ [155]Top ] [ [156]Contents ] [ [157]Previous ]

   As of C-Kermit 7.0, if you build C-Kermit normally, but with -DNOICP
   (No Interactive Command Parser), you get a program capable of making
   serial connections (but not dialing) and network connections (if
   TCPSOCKET or other network option included), and can also transfer
   files using Kermit protocol, but only via autodownload/upload.
   Furthermore, if you call the executable "telnet", it will act like
   Telnet -- using the command-line options. However, in this case there
   is nothing to escape back to, so if you type Ctrl-\c, it just prints a
   message to this effect.

   You can also build C-Kermit with -DNOXFER, meaning omit all the
   file-transfer features. This leaves you with a scriptable
   communications program that is considerably smaller than the full
   C-Kermit.

   [ [158]C-Kermit Home ] [ [159]Kermit Home ]
    ________________________________________________________________________

  APPENDIX I: SUMMARY OF COMPILE-TIME OPTIONS

   [ [160]Top ] [ [161]Contents ]

   These are the symbols that can be specified on the cc command line,
   listed alphabetically. Others are used internally, including those
   taken from header files, those defined by the compiler itself, and
   those inferred from the ones given below. Kermit's SHOW VERSIONS
   command attempts to display most of these. See [162]ckcdeb.h and
   [163]ckcnet.h for inference rules. For example SVR3 implies ATTSV,
   MULTINET implies TCPSOCKET, and so on.

   Here is the complete list of the Kermit-specific compile-time
   switches:

   ACUCNTRL Select BSD 4.3-style acucntrl() bidirectional tty control.
   aegis Build for Apollo Aegis (predefined on Apollo systems).
   AIX370 Build for IBM AIX/370 for IBM mainframes.
   AIXESA Build for IBM AIX/ESA for IBM mainframes.
   AIXPS2 Build for IBM AIX 3.0 for PS/2 series (never formally
   released).
   AIXRS Build for IBM AIX 3.x on RS/6000.
   AIX41 Build for IBM AIX 4.x on RS/6000.
   AMIGA Build for Commodore Amiga with Intuition OS.
   ATT6300 Build for AT&T 6300 PLUS.
   ATT7300 Build for AT&T 7300 UNIX PC (3B1).
   ATTSV Build for AT&T System III or V UNIX.
   AUX Build for Apple A/UX for the Macintosh.
   BIGBUFOK OK to use big buffers - "memory is not a problem"
   BPS_xxxx Enable SET SPEED xxxx
   BSD29 Build for BSD 2.9 or 2.10.
   BSD4 Build for BSD 4.2.
   BSD41 Build for BSD 4.1.
   BSD43 Build for BSD 4.3.
   BSD44 Build for BSD 4.4.
   C70 Build for BBN C/70.
   CIE Build for CIE Systems 680/20.
   CKCONINTB4CB Work around prompt-disappears after escape back from
   CONNECT.
   CKLEARN Build with support for learned scripts.
   CKLOGDIAL Enable connection log.
   CKMAXPATH Maximum length for a fully qualified filename.
   CKREGEX (misnomer) Include [...] or {xxx,xxx,xxx} matching in
   ckmatch().
   CKSYSLOG Enable syslogging.
   CK_ANSIC Enable ANSI C constructs - prototypes, etc.
   CK_ANSILIBS Use header files for ANSI C libraries.
   CK_APC Enable APC execution by CONNECT module.
   CK_CURSES Enable fullscreen file transfer display.
   CK_DSYSINI Use system-wide init file, with name supplied by Kermit.
   CK_DTRCD DTR/CD flow control is available.
   CK_FAST Build with fast Kermit protocol defaults.
   CK_FORK_SIG UNIX only: signal() number for CONNECT module forks.
   CK_IFRO IF REMOTE command is available (and can run in remote mode).
   CK_INI_A System-wide init file takes precedence over user's.
   CK_INI_B User's init file takes precedence over the system-wide one.
   CK_LABELED Include support for SET FILE TYPE LABELED.
   CK_LBRK This version can send Long BREAK.
   CK_LINGER Add code to turn of TCP socket "linger" parameter.
   CK_MKDIR This version has a zmkdir() command to create directories.
   CK_NAWS Include TELNET Negotiate About Window Size support.
   CK_NEWTERM Use newterm() rather than initscr() to initialize curses.
   CK_PAM Include PAM authentication (might also require -lpam).
   CK_PCT_BAR Fullscreen file transfer display should include
   "thermometer".
   CK_POLL System-V or POSIX based UNIX has poll() function.
   CK_POSIX_SIG Use POSIX signal handing: sigjmp_buf, sigsetjmp,
   siglongjmp.
   CK_READ0 read(fd,&x,0) can be used to test TCP/IP connections.
   CK_REDIR Enable the REDIRECT command.
   CK_RESEND Include the RESEND command (needs zfseek() + append).
   CK_RTSCTS RTS/CTS flow control is available.
   CK_SHADOW Include support for shadow passwords (e.g. for IKSD
   authentication).
   CK_SOCKBUF Enable TCP socket-buffer-size-increasing code.
   CK_SOCKS UNIX only: Build with socks library rather than regular
   sockets
   CK_SOCKS5 UNIX only: Build with socks 5 lib rather than regular
   sockets
   CK_SPEED Enable control-character unprefixing.
   CK_SYSINI="xxxxx" Quoted string to be used as system-wide init file
   name.
   CK_TIMERS Build with support for dynamically calculated packet
   timeouts.
   CK_TMPDIR This version of Kermit has an isdir() function.
   CK_TTYFD Defined on systems where the communications connection file
   descriptor (ttyfd) can be passed to other processes as a command-line
   argument via \v(ttyfd).
   CK_URL Parse URLs as well as hostnames, etc.
   CK_XONXOFF Xon/Xoff flow control available.
   CK_XYZ Include support for XYZMODEM protocols.
   CK_WREFRESH Curses package includes wrefresh(),clearok() for screen
   refresh.
   CKFLOAT=type Floating-point data type, "double" or "float".
   CKTYP_H=xxx Force include of xxx as <types.h> file.
   CLSOPN When hanging up a tty device, also close and reopen it.
   CMDDEP Maximum recursion depth for self-referential user-defined fn's.
   COHERENT Build for Mark Williams Coherent UNIX
   CONGSPD Define if this version has congspd() routine in ck?tio.c
   datageneral Build for Data General AOS/VS or AOS/VS II
   DCLPOPEN popen() is available but needs to be declared
   DEC_TCPIP Build with support for DEC TCP/IP (UCX) for (Open)VMS
   DGUX430 Build for DG/UX 4.30
   DGUX540 Build for DG/UX 5.40
   DEFPAR=x Default parity, 0, 'e', 'o', 'm', or 's'.
   DFTTY=xxx Default communications device name.
   DIRENT UNIX directory structure to be taken from <dirent.h>.
   DIRPWDRP Prompt for password in REMOTE CWD command.
   DTILDE Include UNIX ~ notation for username/home-directory
   DYNAMIC Allocate file transfer packet buffers dynamically with malloc.
   ENCORE Build for Encore Multimax computers.
   EXCELAN Build with excelan TCP/IP.
   FNFLOAT Include floating-point math functions (logs, sin, cos, exp,
   etc)
   FT18 Build for Fortune For:Pro 1.8.
   FT21 Build for Fortune For:Pro 2.1.
   GEMDOS Build for Atari ST GEMDOS.
   GFTIMER Use high-precision floating-point file-transfer timers.
   GID_T=xxx Group IDs are of type xxx (usually int, short, or gid_t).
   HADDRLIST If gethostbyname() hostent struct contains a list of
   addresses.
   HDBUUCP Build with support for Honey DanBer UUCP.
   HPUX Build for Hewlett Packard HP-UX.
   HPUX9 Build for Hewlett Packard HP-UX 9.x.
   HPUX10 Build for Hewlett Packard HP-UX 10.x.
   HWPARITY Define if this version can SET PARITY HARDWARE { EVEN,
   ODD...}
   I386IX Build for Interactive System V R3.
   IFDEBUG Add IF stmts "if (deblog)" before "debug()" calls.
   INADDRX TCP/IP inet_addr() type is struct inaddr, not unsigned long.
   INTERLAN Build with support for Racal/Interlan TCP/IP.
   ISDIRBUG System defs of S_ISDIR and S_ISREG have bug, define
   ourselves.
   ISIII Build for Interactive System III.
   IX370 Build for IBM IX/370.
   KANJI Build with Kanji character-set translation support.
   LCKDIR UUCP lock directory is /usr/spool/uucp/LCK/.
   LFDEVNO UUCP lockfile name uses device numbers, as in SVR4.
   LINUXFSSTND For Linux, use FSSTND UUCP lockfile conventions (default).
   LOCK_DIR=xxx UUCP lock directory is xxx (quoted string).
   LOCKF Use lockf() (in addition to lockfiles) on serial lines
   LONGFN BSD long filenames supported using <dir.h> and opendir().
   LYNXOS Build for Lynx OS 2.2 or later (POSIX-based).
   MAC Build for Apple Macintosh with Mac OS.
   MATCHDOT Make wildcards match filenames that start with period (.)
   MAXRP=number Maximum receive-packet length.
   MAXSP=number Maximum send-packet length.
   MDEBUG Malloc-debugging requested.
   MINIDIAL Minimum modem dialer support: CCITT, Hayes, Unkown, and None.
   MINIX Build for MINIX.
   MIPS Build for MIPS workstation.
   MULTINET Build with support for TGV MultiNet TCP/IP (VAX/VMS).
   M_UNIX Defined by SCO.
   NAP The nap() is available (conflicts with SELECT and USLEEP)
   NAPHACK The nap() call is available but only as syscall(3112,...)
   NDIR BSD long filenames supported using <ndir.h> and opendir().
   NDGPWNAM Don't declare getpwnam().
   NDSYSERRLIST Don't declare sys_errlist[].
   NEEDSELECTDEFS select() is avaible but we need to define FD_blah
   ourselves.
   NETCMD Build with support for SET HOST /COMMAND and PIPE commands.
   NEXT Build for NeXT Mach 1.x or 2.x or 3.0, 3.1, or 3.2.
   NEXT33 Build for NeXT Mach 3.3.
   NOANSI Disable ANSI C function prototyping.
   NOAPC Do not include CK_APC code.
   NOARROWKEYS Exclude code to parse ANSI arrow-key sequences.
   NOB_xxxx Disable SET SPEED xxxx
   NOBIGBUF Override BIGBUFOK when it is the default
   NOBRKC Don't try to refer to t_brkc or t_eof tchars structure members.
   NOCKFQHOSTNAME Exclude code to get fully qualified hostname in case it
   causes core dumps.
   NOCCTRAP Disable Control-C (SIGINT) trapping.
   NOCKSPEED Disable control-prefix removal feature (SET CONTROL).
   NOCKTIMERS Build without support for dynamic timers.
   NOCKXYZ Overrides CK_XYZ.
   NOCKREGEX Do not include [...] or {xxx,xxx,xxx} matching in ckmatch().
   NOCMDL Build with no command-line option processing.
   NOCOTFMC No Close(Open()) To Force Mode Change (UNIX version).
   NOCSETS Build with no support for character set translation.
   NOCYRIL Build with no support for Cyrillic character set translation.
   NOCYRILLIC Ditto.
   NODEBUG Build with no debug logging capability.
   NODIAL Build with no DIAL or SET DIAL commands.
   NODISPO Build to always refuse incoming MAIL or REMOTE PRINT files.
   DNODISPLAY Build with no file-transfer display.
   NOESCSEQ Build with no support for ANSI escape sequence recognition.
   NOFAST Do not make FAST Kermit protocol settings the default.
   NOFDZERO Do not use file descriptor 0 for remote-mode file transfer.
   NOFILEH Do not #include <sys/file.h>.
   NOFLOAT Don't include any floating-point data types or operations.
   NOFRILLS Build with "no frills" (this should be phased out...)
   NOFTRUNCATE Include this on UNIXes that don't have ftruncate().
   NOGETUSERSHELL Include this on UNIXes that don't have getusershell().
   NOGFTIMER Don't use high-precision floating-point file-transfer
   timers.
   NOHEBREW Build with no support for Hebrew character sets.
   NOHELP Build with no built-in help.
   NOIKSD Build with IKSD support excluded.
   NOINITGROUPS Include this on UNIXes that don't have initgroups().
   NOICP Build with no interactive command parser.
   NOJC Build with no support for job control (suspend).
   NOKANJI Build with no support for Japanese Kanji character sets.
   NOKVERBS Build with no support for keyboard verbs (\Kverbs).
   NOLATIN2 Build with no ISO Latin-2 character-set translation support.
   NOLEARN Build with no support for learned scripts.
   NOLINKBITS Use of S_ISLNK and _IFLNK untrustworthy; use readlink()
   instead.
   NOLOCAL Build without any local-mode features: No Making Connections.
   NOLOGDIAL Disable connection log.
   NOLOGIN Build without IKSD (network login) support.
   NOLSTAT Not OK to use lstat().
   NOMDMHUP Build without "modem-specific hangup" (e.g. ATH0) feature.
   NOMHHOST Exclude the multihomed-host TCP/IP code (if compilcation
   errors)
   NOMINPUT Build without MINPUT command.
   NOMSEND Build with no MSEND command.
   NONAWS Do not include TELNET Negotiate About Window Size support.
   NONET Do not include any network support.
   NONOSETBUF (See NOSETBUF)
   NOPARSEN Build without automatic parity detection.
   NOPIPESEND Disable file transfer using pipes and filters.
   NOPOLL Override CK_POLL definition.
   NOPOPEN The popen() library call is not available.
   NOPURGE Build with no PURGE command.
   NOPUSH Build with no escapes to operating system.
   NOREALPATH In UNIX, realpath() function is not available.
   NORECALL Disable the command-recall feature.
   NOREDIRECT Disable REDIRECT command.
   NORENAME Don't use rename() system call, use link()/unlink() (UNIX).
   NORESEND Build with no RESEND command.
   NORETRY Build with no command-retry feature.
   NOSCRIPT Build with no SCRIPT command.
   NOSELECT Don't try to use select().
   NOSERVER Build with no SERVER mode and no server-related commands.
   NOSETBUF Don't make console writes unbuffered.
   NONOSETBUF DO make console writes unbuffered.
   NOSETREU setreuid() and/or setregid() not available.
   NOSHOW Build with no SHOW command (not recommended!).
   NOSIGWINCH Disable SIGWINCH signal trapping.
   NOSPL Build with no script programming language.
   NOSTAT Don't call stat() from mainline code.
   NOSYMLINK Include this for UNIXes that don't have readlink().
   NOSYSIOCTLH Do not #include <sys/ioctl.h>.
   NOSYSTIMEH Co not include <sys/time.h>.
   NOSYSLOG Disable syslogging code.
   NOTCPOPTS Build with no SET TCP options or underlying support.
   NOTLOG Build with no support for transaction logging.
   NOTM_ISDST Struct tm has no tm_isdst member.
   NOUNICODE Build with no support for Unicode character-set translation.
   NOURL Don't parse URLs
   NOUUCP Build with no UUCP lockfile support (dangerous!).
   NOWARN Make EXIT WARNING be OFF by default (otherwise it's ON).
   NOWREFRESH Override built-in definition of CK_WREFRESH (q.v.).
   NOXFER Build with no Kermit or other file-transfer protocols.
   NOXMIT Build with no TRANSMIT command.
   NOXPRINT Disables transparent print code.
   OLDMSG Use old "entering server mode" message (see [164]ckcmai.c).
   OLINUXHISPEED Build in old Linux hi-serial-speed code (for Linux <=
   1.0).
   OPENBSD Build for OpenBSD.
   OS2 Build for OS/2.
   OSF Build for OSF/1.
   OSFPC Build for OSF/1 on a PC.
   OSF32 Digital UNIX 3.2 or later.
   OSF40 Build for Digital UNIX 4.0.
   OSF50 Build for Digital UNIX 5.0.
   OSK Build for OS-9.
   OXOS Build for Olivetti X/OS 2.3.
   PCIX Build for PC/IX
   PID_T=xxx Type for pids is xxx (normally int or pid_t).
   POSIX Build for POSIX: use POSIX header files, functions, etc.
   _POSIX_SOURCE Disable non-POSIX features.
   PROVX1 Build for Venix 1.0 on DEC Professional 3xx.
   PTX Build for Dynix/PTX
   PWID_T=xxx getpwid() type is xxx.
   RBSIZ=xxx Define overall size of receive-packet buffer (with DYNAMIC).
   RDCHK rdchk() system call is available.
   RENAME rename() system call is available (UNIX).
   RTAIX Build for AIX 2.2.1 on IBM RT PC.
   RTU Build for Masscomp / Concurrent RTU.
   SAVEDUID BSD or other non-AT&T UNIX has saved-setuid feature.
   SBSIZ=xxx Define overall size of send-packet buffer (use with
   DYNAMIC).
   SDIRENT Directory structure specified in <sys/dirent.h>.
   SELECT select() function available (conflicts with RDCHK and CK_POLL)
   SELECT_H Include <sys/select.h> for select()-releated definitions.
   SETEUID BSD 4.4-style seteXid() functions available.
   SIG_V Type for signal() is void. Used to override normal assumption.
   SIG_I Type for signal() is int. Used to override normal assumption.
   SOCKOPT_T Override default data type for get/setsockopt() option
   length.
   SOLARIS Build for Solaris.
   SOLARIS25 Build for Solaris 2.5 or later.
   SONYNEWS Build for Sony NEWS-OS.
   STERMIOX <sys/termiox.h> is available.
   STRATUS Build for Stratus VOS.
   STRATUSX25 Include Stratus VOS X.25 support.
   SUN4S5 Build for SUNOS 4.x in the System V R3 environment.
   SUNOS4 Build for SUNOS 4.0 in the BSD environment.
   SUNOS41 Build for SUNOS 4.1 in the BSD environment.
   SUNX25 Build with support for SunLink X.25.
   SVR3 Build for AT&T System V Release 3.
   SVR3JC Allow job control support on System V Release 3 UNIX versions.
   SVR4 Build for AT&T System V Release 4.
   SW_ACC_ID UNIX only -- swap real & effective ids around access()
   calls.
   sxaE50 Build for PFU Compact A Series SX/A TISP.
   SYSLOGLEVEL=n Force syslogging at given level.
   SYSTIMEH Include <sys/time.h>.
   SYSUTIMEH Include <sys/utime.h> for setting file dates (88OPEN)
   TCPSOCKET Build with support for TCP/IP via Berkeley sockets library.
   TERMIOX <termiox.h> header file is available (mostly SVR4).
   TNCODE Include TELNET-specific code.
   TOWER1 Build for NCR Tower 1632 with OS 1.02.
   TRS16 Build for Tandy 16/6000.
   UID_T=xxx Type for uids is xxx (normally int or uid_t).
   UNIX Must be defined for all UNIX versions.
   UNIX351M AT&T UNIX 3.51m on the AT&T 7300 UNIX PC.
   USE_ARROWKEYS Include code to parse ANSI arrow-key sequences.
   USE_LSTAT OK to use lstat().
   USE_MEMCPY Define this if memcpy()/memset()/memmove() available.
   USE_STRERROR Define this if strerror() is available.
   USLEEP usleep() system call available (conflicts with NAP & SELECT).
   UTEK Build for Tektronix workstations with UTEK OS.
   UTIMEH Include <utime.h> for setting file dates (SVR4, POSIX)
   UTS24 Build for Amdahl UTS 2.4.
   V7 Build for Version 7 UNIX.
   VMS Build for VAX/VMS.
   VOID=xxx VOID type for functions (int or void).
   VXVE Build for CDC VX/VE 5.2.1.
   WAIT_T=xxx Type of argument passed to wait().
   WINTCP Build with Wollongong VAX/VMS TCP/IP (implies TCPSOCKET)
   WOLLONGONG Build with Wollongong UNIX TCP/IP (implies TCPSOCKET)
   XENIX Build for Xenix (SCO, Tandy, others).
   XNDIR Support for BSD long filenames via <sys/ndir.h>.
   XYZ_INTERNAL Support for XYZMODEM protocols is internal, not external.
   ZFCDAT Define this if zfcdat() function is available in Kermit.
   ZILOG Build for Zilog ZEUS.
   ZJDATE Has zjdate() function that converts date to Julian format.
   XPRINT Transparent print code included in CONNECT module.

   [ [165]Top ] [ [166]Contents ] [ [167]C-Kermit Home ] [ [168]Kermit
   Home ]
     _________________________________________________________________


    C-Kermit Configuration Options / [169]The Kermit Project /
    [170]Columbia University / [171]kermit@columbia.edu / 14 March 2003

References

   1. http://www.columbia.edu/kermit/
   2. http://www.columbia.edu/
   3. http://www.columbia.edu/kermit/ckccfg.html
   4. http://www.columbia.edu/kermit/ckermit.html
   5. http://www.columbia.edu/kermit/index.html
   6. http://www.columbia.edu/kermit/ckccfg.html#x1
   7. http://www.columbia.edu/kermit/ckccfg.html#x2
   8. http://www.columbia.edu/kermit/ckccfg.html#x3
   9. http://www.columbia.edu/kermit/ckccfg.html#x4
  10. http://www.columbia.edu/kermit/ckccfg.html#x5
  11. http://www.columbia.edu/kermit/ckccfg.html#x6
  12. http://www.columbia.edu/kermit/ckccfg.html#x7
  13. http://www.columbia.edu/kermit/ckccfg.html#x8
  14. http://www.columbia.edu/kermit/ckccfg.html#x9
  15. http://www.columbia.edu/kermit/ckccfg.html#x10
  16. http://www.columbia.edu/kermit/ckccfg.html#x11
  17. http://www.columbia.edu/kermit/ckccfg.html#x12
  18. http://www.columbia.edu/kermit/ckccfg.html#x13
  19. http://www.columbia.edu/kermit/ckccfg.html#x14
  20. http://www.columbia.edu/kermit/ckccfg.html#xa1
  21. http://www.columbia.edu/kermit/ckuins.html
  22. http://www.columbia.edu/kermit/ckermit.html
  23. http://www.columbia.edu/kermit/index.html
  24. http://www.columbia.edu/kermit/ckccfg.html#top
  25. http://www.columbia.edu/kermit/ckccfg.html#contents
  26. http://www.columbia.edu/kermit/ckccfg.html#x2
  27. http://www.columbia.edu/kermit/ckccfg.html#x0
  28. http://www.columbia.edu/kermit/ckermit.html
  29. http://www.columbia.edu/kermit/index.html
  30. http://www.columbia.edu/kermit/ckccfg.html#top
  31. http://www.columbia.edu/kermit/ckccfg.html#contents
  32. http://www.columbia.edu/kermit/ckccfg.html#x3
  33. http://www.columbia.edu/kermit/ckccfg.html#x1
  34. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
  35. ftp://kermit.columbia.edu/kermit/c-kermit/ckcdeb.h
  36. ftp://kermit.columbia.edu/kermit/c-kermit/ckuus3.c
  37. ftp://kermit.columbia.edu/kermit/c-kermit/ckcdeb.h
  38. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
  39. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
  40. http://www.columbia.edu/kermit/ckermit.html
  41. http://www.columbia.edu/kermit/index.html
  42. http://www.columbia.edu/kermit/ckccfg.html#top
  43. http://www.columbia.edu/kermit/ckccfg.html#contents
  44. http://www.columbia.edu/kermit/ckccfg.html#x4
  45. http://www.columbia.edu/kermit/ckccfg.html#x2
  46. ftp://kermit.columbia.edu/kermit/c-kermit/makefile
  47. http://www.columbia.edu/kermit/ckuins.html
  48. http://www.columbia.edu/kermit/ckuins.html#x4
  49. http://www.columbia.edu/kermit/ckuins.html#x9.2
  50. ftp://kermit.columbia.edu/kermit/c-kermit/ckuusx.c
  51. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
  52. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c
  53. ftp://kermit.columbia.edu/kermit/c-kermit/ckuusx.c
  54. ftp://kermit.columbia.edu/kermit/c-kermit/ckucmd.c
  55. http://www.columbia.edu/kermit/ckermit.html
  56. http://www.columbia.edu/kermit/index.html
  57. http://www.columbia.edu/kermit/ckccfg.html#top
  58. http://www.columbia.edu/kermit/ckccfg.html#contents
  59. http://www.columbia.edu/kermit/ckccfg.html#x5
  60. http://www.columbia.edu/kermit/ckccfg.html#x3
  61. http://www.columbia.edu/kermit/unicode.html
  62. http://www.columbia.edu/kermit/ckermit.html
  63. http://www.columbia.edu/kermit/index.html
  64. http://www.columbia.edu/kermit/ckccfg.html#top
  65. http://www.columbia.edu/kermit/ckccfg.html#contents
  66. http://www.columbia.edu/kermit/ckccfg.html#x6
  67. http://www.columbia.edu/kermit/ckccfg.html#x4
  68. ftp://kermit.columbia.edu/kermit/c-kermit/ckuusr.h
  69. ftp://kermit.columbia.edu/kermit/c-kermit/ckuusr.h
  70. http://www.columbia.edu/kermit/ckermit.html
  71. http://www.columbia.edu/kermit/index.html
  72. http://www.columbia.edu/kermit/ckccfg.html#top
  73. http://www.columbia.edu/kermit/ckccfg.html#contents
  74. http://www.columbia.edu/kermit/ckccfg.html#x7
  75. http://www.columbia.edu/kermit/ckccfg.html#x5
  76. http://www.columbia.edu/kermit/ckccfg.html#x6.1
  77. http://www.columbia.edu/kermit/ckccfg.html#x6.2
  78. http://www.columbia.edu/kermit/ckccfg.html#x6.3
  79. http://www.columbia.edu/kermit/ckccfg.html#x6.4
  80. http://www.columbia.edu/kermit/ckccfg.html#x4
  81. http://www.columbia.edu/kermit/gkermit.html
  82. ftp://kermit.columbia.edu/kermit/c-kermit/ckuusr.h
  83. ftp://kermit.columbia.edu/kermit/c-kermit/ckcker.h
  84. ftp://kermit.columbia.edu/kermit/c-kermit/ckcdeb.h
  85. http://www.columbia.edu/kermit/ckermit.html
  86. http://www.columbia.edu/kermit/index.html
  87. http://www.columbia.edu/kermit/ckccfg.html#top
  88. http://www.columbia.edu/kermit/ckccfg.html#contents
  89. http://www.columbia.edu/kermit/ckccfg.html#x8
  90. http://www.columbia.edu/kermit/ckccfg.html#x6
  91. ftp://kermit.columbia.edu/kermit/c-kermit/ckudia.c
  92. http://www.columbia.edu/kermit/ckermit.html
  93. http://www.columbia.edu/kermit/index.html
  94. http://www.columbia.edu/kermit/ckccfg.html#top
  95. http://www.columbia.edu/kermit/ckccfg.html#contents
  96. http://www.columbia.edu/kermit/ckccfg.html#x9
  97. http://www.columbia.edu/kermit/ckccfg.html#x7
  98. http://www.columbia.edu/kermit/ckccfg.html#x8.1
  99. http://www.columbia.edu/kermit/ckccfg.html#x8.2
 100. http://www.columbia.edu/kermit/ckccfg.html#x8.3
 101. http://www.columbia.edu/kermit/ckccfg.html#x8.1.1
 102. http://www.columbia.edu/kermit/ckccfg.html#x8.1.2
 103. http://www.columbia.edu/kermit/ckccfg.html#x8.1.3
 104. http://www.columbia.edu/kermit/ckccfg.html#x8.1.4
 105. http://www.columbia.edu/kermit/ckccfg.html#x8.1.5
 106. http://www.columbia.edu/kermit/ckccfg.html#x8.1.6
 107. ftp://kermit.columbia.edu/kermit/c-kermit/ckcnet.h
 108. ftp://kermit.columbia.edu/kermit/c-kermit/ckctel.c
 109. ftp://kermit.columbia.edu/kermit/c-kermit/ckctel.c
 110. ftp://kermit.columbia.edu/kermit/c-kermit/ckctel.h
 111. ftp://kermit.columbia.edu/kermit/c-kermit/ckcftp.c
 112. http://www.columbia.edu/kermit/ckermit.html
 113. ftp://kermit.columbia.edu/kermit/c-kermit/ckcnet.c
 114. ftp://kermit.columbia.edu/kermit/c-kermit/ckcnet.h
 115. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
 116. http://www.columbia.edu/kermit/ckccfg.html#x11
 117. mailto:kermit@columbia.edu
 118. http://www.columbia.edu/kermit/ckermit.html
 119. http://www.columbia.edu/kermit/index.html
 120. http://www.columbia.edu/kermit/ckccfg.html#top
 121. http://www.columbia.edu/kermit/ckccfg.html#contents
 122. http://www.columbia.edu/kermit/ckccfg.html#x10
 123. http://www.columbia.edu/kermit/ckccfg.html#x8
 124. http://www.columbia.edu/kermit/ckermit.html
 125. http://www.columbia.edu/kermit/index.html
 126. http://www.columbia.edu/kermit/ckccfg.html#top
 127. http://www.columbia.edu/kermit/ckccfg.html#contents
 128. http://www.columbia.edu/kermit/ckccfg.html#x11
 129. http://www.columbia.edu/kermit/ckccfg.html#x9
 130. http://www.columbia.edu/kermit/ckuins.html#x11
 131. http://www.columbia.edu/kermit/ckuins.html
 132. http://www.columbia.edu/kermit/ckermit.html
 133. http://www.columbia.edu/kermit/index.html
 134. http://www.columbia.edu/kermit/ckccfg.html#top
 135. http://www.columbia.edu/kermit/ckccfg.html#contents
 136. http://www.columbia.edu/kermit/ckccfg.html#x12
 137. http://www.columbia.edu/kermit/ckccfg.html#x10
 138. ftp://kermit.columbia.edu/kermit/c-kermit/ckucns.c
 139. ftp://kermit.columbia.edu/kermit/c-kermit/ckucon.c
 140. http://www.columbia.edu/kermit/ckermit.html
 141. http://www.columbia.edu/kermit/index.html
 142. http://www.columbia.edu/kermit/ckccfg.html#top
 143. http://www.columbia.edu/kermit/ckccfg.html#contents
 144. http://www.columbia.edu/kermit/ckccfg.html#x13
 145. http://www.columbia.edu/kermit/ckccfg.html#x11
 146. http://www.columbia.edu/kermit/ckermit.html
 147. http://www.columbia.edu/kermit/index.html
 148. http://www.columbia.edu/kermit/ckccfg.html#top
 149. http://www.columbia.edu/kermit/ckccfg.html#contents
 150. http://www.columbia.edu/kermit/ckccfg.html#x14
 151. http://www.columbia.edu/kermit/ckccfg.html#x12
 152. ftp://kermit.columbia.edu/kermit/c-kermit/ckcdeb.h
 153. http://www.columbia.edu/kermit/ckermit.html
 154. http://www.columbia.edu/kermit/index.html
 155. http://www.columbia.edu/kermit/ckccfg.html#top
 156. http://www.columbia.edu/kermit/ckccfg.html#contents
 157. http://www.columbia.edu/kermit/ckccfg.html#x13
 158. http://www.columbia.edu/kermit/ckermit.html
 159. http://www.columbia.edu/kermit/index.html
 160. http://www.columbia.edu/kermit/ckccfg.html#top
 161. http://www.columbia.edu/kermit/ckccfg.html#contents
 162. ftp://kermit.columbia.edu/kermit/c-kermit/ckcdeb.h
 163. ftp://kermit.columbia.edu/kermit/c-kermit/ckcnet.h
 164. ftp://kermit.columbia.edu/kermit/c-kermit/ckcmai.c
 165. http://www.columbia.edu/kermit/ckccfg.html#top
 166. http://www.columbia.edu/kermit/ckccfg.html#contents
 167. http://www.columbia.edu/kermit/ckermit.html
 168. http://www.columbia.edu/kermit/index.html
 169. http://www.columbia.edu/kermit/index.html
 170. http://www.columbia.edu/
 171. mailto:kermit@columbia.edu
