
C-Kermit 8.0 Unix Installation Instructions

   [ [1]Contents ] [ [2]C-Kermit ] [ [3]Kermit Home ]

   Frank da Cruz
   The Kermit Project
   Columbia University

      As of C-Kermit version: 8.0.211, 10 April 2004
      This file last updated: Tue Apr 13 10:14:33 2004 (New York City
   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:

[4]http://www.columbia.edu/kermit/ckuins.html
  __________________________________________________________________________

CONTENTS

     [5]OVERVIEW

    1. [6]INTERNET QUICK START
    2. [7]INSTALLING FROM PACKAGES
    3. [8]INSTALLING PREBUILT BINARIES
    4. [9]BUILDING FROM SOURCE CODE
    5. [10]INSTALLING THE KERMIT FILES
    6. [11]INSTALLING UNIX C-KERMIT FROM DOS-FORMAT DISKETTES
    7. [12]CHECKING THE RESULTS
    8. [13]REDUCING THE SIZE OF THE EXECUTABLE PROGRAM IMAGE
    9. [14]UNIX VERSIONS
   10. [15]DIALING OUT AND COORDINATING WITH UUCP
   11. [16]RUNNING UNIX C-KERMIT SETUID OR SETGID
   12. [17]CONFIGURING UNIX WORKSTATIONS
   13. [18]BIZARRE BEHAVIOR AT RUNTIME
   14. [19]CRASHES AND CORE DUMPS
   15. [20]SYSLOGGING
   16. [21]BUILDING SECURE VERSIONS OF C-KERMIT 8.0
   17. [22]INSTALLING C-KERMIT AS AN SSH SERVER SUBSYSTEM
  __________________________________________________________________________

OVERVIEW

   [ [23]Top ] [ [24]Contents ] [ [25]Next ]

     WARNING: This document contains notes that have been accumulating
     since the early 1980s. Many of the products and Unix versions
     mentioned here have not been heard of in a long while, but that
     does not necessarily mean they are not still running in some
     obscure nook. 

   This file contains Unix-specific information. A lot of it. Unlike most
   other packages, C-Kermit tries very hard to be portable to every Unix
   variety (and every release of each one) known to exist, including many
   that are quite old, as well as to other platforms like VMS, AOS/VS,
   VOS, OS-9, the BeBox, the Amiga, etc.

   Since C-Kermit gets so deeply into the file system, i/o system, and
   other areas that differ radically from one Unix platform to the next,
   this means that a lot can go wrong when you try to install C-Kermit on
   (for example) a new release of a particular variety of Unix, in which
   certain things might have changed that C-Kermit depended upon.

   This file concentrates on installation. For a description of general
   configuration options for C-Kermit, please read the [26]Configurations
   Options document. For troubleshooting after installation, see the
   [27]General Hints and Tips and [28]Unix-Specific Hints and Tips
   documents. The latter, in particular, contains lots of information on
   lots of specific Unix platforms. If you want to work on the source
   code, see the [29]C-Kermit Program Logic Manual

   You may install C-Kermit:

     * From an "[30]install package", if one is available.
     * As a [31]prebuilt binary, if available, plus accompanying text
       files.
     * By building from [32]source code.
  __________________________________________________________________________

1. INTERNET QUICK START

   [ [33]Top ] [ [34]Contents ] [ [35]Next ] [ [36]Previous ]

   If your Unix computer is on the Internet and it has a C compiler,
   here's how to download, build, and install C-Kermit directly from the
   "tarballs" or Zip archives:

    1. Make a fresh directory and cd to it.
    2. Download the C-Kermit source code:
       [37]ftp://kermit.columbia.edu/kermit/archives/cku211.tar.Z
       (compress format) or
       [38]ftp://kermit.columbia.edu/kermit/archives/cku211.tar.gz
       (gunzip format).
    3. Uncompress the compressed tar file with "uncompress" or "gunzip",
       according to which type of compressed file you downloaded. (If you
       don't understand this, you could download a (much larger)
       uncompressed tar archive directly:
       [39]ftp://kermit.columbia.edu/kermit/archives/cku211.tar
    4. Now type "tar xvf cku211.tar" to unpack the individual files from
       the tar archive.
    5. Type "rm cku211.tar" to get rid of the tar archive, which is no
       longer needed.
    6. Read the comments at the top of the makefile to find out which
       target to use and then type the appropriate "make" command, such
       as "make linux", "make solaris8", etc.
    7. This produces a binary in your current directory called "wermit".
       Start it by typing "./wermit" and [40]try it out to make sure it
       works. Then read [41]Section 5 for how to install it, or simply
       copy the wermit binary to the desired public directory, rename it
       to kermit, and give it the needed permissions (and, if it is going
       to be used to dial out, give it the same group and owner and
       permissions as the cu, tip, or minicom program).

   For secure installations, see [42]Sections 5 and [43]16.
  __________________________________________________________________________

2. INSTALLING FROM PACKAGES

   [ [44]Top ] [ [45]Contents ] [ [46]Next ] [ [47]Previous ]

   Various Unix varieties -- Linux, Solaris, AIX, etc -- now incorporate
   the idea of "install packages", and many users expect to find all new
   applications in this format. A selection of install packages might be
   available for any given release of C-Kermit, but there is a tradeoff
   between convenience and safety. Unix presents several notable problems
   to the builder of install packages:

    a. Since C-Kermit is portable to many non-Unix platforms (VMS, VOS,
       AOS/VS, etc), some of the files in the C-Kermit distribution do
       not fit into the Unix application model. In particular, C-Kermit
       includes some plain text files (described in [48]Section 5) and
       Unix has no standard place to put such files. Typical Unix package
       managers do not allow for them. Where should they go, and how will
       the user know where to find them?
    b. Installation of any program that will be used to make modem calls
       requires some important decisions from the installer regarding
       security and privilege.

   Item (b) is discussed at length in [49]Sections 10 and [50]11 of this
   document, but the package-related aspects are also given here. The
   basic problem is that Unix dialout devices and the UUCP "lock files"
   that regulate contention for them (described in [51]Section 10) are
   usually protected against "world". Therefore, the install procedure
   must either run as root in order to give the Kermit binary the
   required permissions, group, and/or owner, or else the dialout devices
   and associated directories must be open for group or world reading and
   writing. Otherwise, the Kermit program just installed WILL NOT WORK
   for dialing out.

   Thus, a well-crafted installation procedure should present the options
   and allow the installer to choose the method, if any, for regulating
   access to the dialout devices:

    a. Check the permissions of the lockfile directory and the dialout
       devices. If they do not allow group or world R/W access, then:
    b. "Your UUCP lockfile directory and/or dialout devices require
       privilege to access. You must either change their permissions or
       install Kermit with privileges."
    c. "If you wish to install Kermit with privileges, it will be given
       the same owner, group, and permissions as the cu program so it can
       use the dialout devices."
    d. If they choose (c) but the user is not root, give a message that
       the install procedure can be run only by root and then quit.

   It should go without saying, of course, that any binaries that are to
   be included in an install package should be built fresh on the exact
   platform (e.g. Red Hat 8.0 on Intel) for which the package is
   targeted; prebuilt binaries ([52]next section) from other sites are
   likely to have library mismatches. [53]CLICK HERE for more about
   building C-Kermit install packages.

   The Kermit Project does not have the resources or the expertise to
   make install packages for every platform. Most install packages,
   therefore, are contributed by others, and they do not necessarily
   follow the guidelines given above. Pay attention to what they do.

   If you are an end user who has obtained a C-Kermit install package for
   a particular platform, you should be aware that some additional steps
   might needed if you want to use Kermit to dial out. Read [54]Section
   10 for details.
  __________________________________________________________________________

3. INSTALLING PREBUILT BINARIES

   [ [55]Top ] [ [56]Contents ] [ [57]Next ] [ [58]Previous ]

   Hundreds of prebuilt C-Kermit binaries are available on the CDROM in
   the BINARY tree [NOTE: The C-Kermit CDROM is still for version 7.0],
   and at our ftp site in the [59]kermit/bin area (with names starting
   with "ck"), also accessible on the [60]C-Kermit website. To install a
   prebuilt binary:

    a. Rename the binary to "wermit".
    b. Make sure it works; some tests are suggested in [61]Section 7.
    c. Follow steps (b) through (e) in [62]Section 4.
    d. Install related files as described in [63]Section 5.

   But first... Please heed the following cautions:

    a. If you pick the wrong binary, it won't work (or worse).
    b. Even when you pick the appropriate binary, it still might not work
       due to shared-library mismatches, etc. (see [64]Section 4.0).
    c. Don't expect a binary built on or for version n of your OS to work
       on version n - x (where x > 0). However, it is usually safe to run
       a binary built on (or for) an older OS release on a newer one.

   Therefore, it is better to build your own binary from source code
   ([65]next section) if you can. But since it is increasingly for Unix
   systems (not to mention VMS and other OS's) to be delivered without C
   compilers, it is often impractical. In such cases, try the most
   appropriate prebuilt binary or binaries, and if none of them work,
   [66]contact us and we'll see what we can do to help.
  __________________________________________________________________________

4. BUILDING FROM SOURCE CODE

   [ [67]Top ] [ [68]Contents ] [ [69]Next ] [ [70]Previous ]

   Also see: [71]Section 8 and [72]Section 9.

   C-Kermit is designed to be built and used on as many platforms as
   possible: Unix and non-Unix, old and new (and ancient), ANSI C and
   K&R. The Unix version does not use or depend on any external tools for
   building except the "make" utility, the C compiler, and the linker. It
   does not use any automated configuration tools such as configure,
   autoconf, automake, libtool, etc. Everything in C-Kermit has been
   built by hand based on direct experience or reports or contributions
   from users of each platform.

   The [73]C-Kermit makefile contains the rules for building the program
   for each of the hundreds of different kinds of Unix systems that
   C-Kermit attempts to support. It covers all Unix variations since
   about 1980 -- pretty much everything after Unix V6. Separate makefiles
   are used for [74]Plan 9 and [75]2.x BSD.

   Prerequisites:

     * The C compiler, linker, and make program must be installed.
     * The C libraries and header files must be installed (*).
     * The C-Kermit source code and makefile in your current directory.
     * The C-Kermit text files ([76]Section 5) in your current directory.

     * This is becoming problematic in this new age of "selective
       installs" e.g. of Linux packages. C-Kermit builds will often fail
       because replying "no" to some obscure Linux installation option
       will result in missing libraries or header files. Ditto on
       platforms like AIX and Solaris that don't come with C compilers,
       and then later have gcc installed, but are still missing crucial
       libraries, like libm (math).

   Plus:

     * For TCP/IP networking support, the sockets library and related
       header files must be installed.
     * The math library for floating-point arithmetic support (can be
       deselected by adding -DNOFLOAT to CFLAGS and removing -lm from
       LIBS).
     * Many and varied security libraries for building a secure version
       (Kerberos, SSL/TLS, SRP, Zlib,...) These are required only if you
       select a secure target.
     * For the curses-based fullscreen file-ransfer display, the curses
       or ncurses header file(s) and library, and probably also the
       termcap and/or termlib library. Note that the names and locations
       of these files and libraries are likely to change capriciously
       with every new release of your Unix product. If you discover that
       the C-Kermit build procedure fails because your curses and/or
       termxxx headers or libraries are not named or located as expected,
       please [77]let us know. In the meantime, work around by installing
       symlinks.
     * IMPORTANT: Modern Linux distributions might give you the choice
       during installation of whether to install the "ncurses development
       package" (perhaps called "ncurses-devel"). If you did not install
       it, you won't be able to build C-Kermit with curses support
       included. In this case, either go back and install ncurses, or
       else choose (or create) a non-curses makefile target for your
       platform. To install the ncurses developers tools in Red Hat
       Linux, do:

mount redhat cdrom
goto RedHat/RPMS
rpm -ivh ncurses-devel*.rpm
or to have the exact name ls ncurse* and load as
rpm -ivh filename
then leave the cdrom and unmount it.

     * In AIX you might have to go back and install any or all of:

bos.adt.base
bos.adt.include
bos.adt.lib
bos.adt.libm
bos.adt.utils

       from the first installation CD.

   The makefile might need to be renamed from ckuker.mak to makefile.
   Directions:

    a. Type "make xxx" where xxx is the name of the makefile target most
       appropriate to your platform, e.g. "make linux", "make aix43",
       etc. Read the [78]comments at the top of the makefile for a
       complete list of available targets (it's a long list).
    b. Test the resulting 'wermit' file (see [79]Section 7 for
       suggestions). If it's OK, proceed; otherwise [80]notify us.

     NOTE: steps (c) through (e) can be accomplished using the
     [81]makefile 'install' target as described in [82]Section 5.4. 
    c. Rename the 'wermit' file to 'kermit', copy it to the desired
       binary directory (such as /usr/local/bin or /opt/something), and
       if it is to be used for dialing out, give it the same owner,
       group, and permissions as the 'cu' program (IMPORTANT: read
       [83]Sections 10 and [84]11 for details).
    d. Install the man page, ckuker.nr, with your other man pages.
    e. Install the accompanying text files (see [85]Section 5).
    f. If you want C-Kermit to also offer a Telnet command-line
       personality, make a symbolic link as follows:

cd directory-where-kermit-binary-is
ln -s kermit telnet

       If you want C-Kermit to be the default Telnet client, make sure
       the directory in which you created the symlink is in the PATH
       ahead of the where the regular Telnet client is.
    g. If you want C-Kermit to also offer an FTP command-line
       personality, make a symlink called "ftp" as in (f).
    h. If you want C-Kermit to also offer an FTTP command-line
       personality, make a symlink called "http" as in (f).
    i. If you want to offer an Internet Kermit Service, follow the
       directions in the [86]IKSD Administrator's Guide.
    ________________________________________________________________________

  4.0. Special Considerations for C-Kermit 8.0

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

   Also see: [90]C-Kermit Configuration Options

   SECTION CONTENTS

4.1. [91]The Unix Makefile
4.2. [92]The C-Kermit Initialization File
4.3. [93]The 2.x BSD Makefile
4.4. [94]The Plan 9 Makefile
4.5. [95]Makefile Failures

   (Also see the [96]Configurations Options document, [97]Section 8).

   Lots of new features have been added in versions 7.0 and 8.0 that
   require access to new symbols, APIs, libraries, etc, and this will no
   doubt cause problems in compiling, linking, or execution on platforms
   where 6.0 and earlier built without incident. This section contains
   what we know as of the date of this file.

   The first category concerns the new Kermit Service Daemon (IKSD; see
   the [98]IKSD Administrator's Guide for details):

   The wtmp File
          When C-Kermit is started as an IKSD (under inetd), it makes
          syslog and wtmp entries, and also keeps its own ftpd-like log.
          The code assumes the wtmp log is /var/log/wtmp on Linux and
          /usr/adm/wtmp elsewhere. No doubt this assumption will need
          adjustment. Use -DWTMPFILE=path to override at compile time
          (there is also a runtime override). See [99]iksd.html for
          details.

   UTMP, utsname(), etc
          C-Kermit 7.0 gets as much info as it can about its job --
          mainly for IKSD logging -- from utmp. But of course utmp
          formats and fields differ, and for that matter, there can be
          two different header files, <utmp.h> and <utmpx.h>. Look for
          HAVEUTMPX and HAVEUTHOST in [100]ckufio.c and let me know of
          any needed adjustments.

   Password lookup
          IKSD needs to authenticate incoming users against the password
          list. In some cases, this requires the addition of -lcrypt
          (e.g. in Unixware 2.x). In most others, the crypt functions are
          in the regular C library. If you get "crypt" as an unresolved
          symbol at link time, add -lcrypt to LIBS. If your site has
          local replacement libraries for authentication, you might need
          a special LIBS clause such as "LIBS=-L/usr/local/lib -lpwent".

          These days most Unix systems take advantage of shadow password
          files or Plugable Authentication Modules (PAM). If your system
          uses shadow passwords you must add -DCK_SHADOW to the CFLAGS
          list. If your system requires PAM you must add -DCK_PAM to the
          CFLAGS and -lpam -ldl to LIBS.

   getusershell()
          This is called by the IKSD at login time to see if a user has
          been "turned off". But many Unix platforms lack this function.
          In that case, you will get unresolved symbol reports at link
          time for _getusershell, _endusershell; to work around, add
          -DNOGETUSERSHELL.

   initgroups()
          This is called by IKSD after successful authentication. But
          some platforms do not have this function, so obviously it can't
          be called there, in which case add -DNOINITGROUPS.

   setreuid(), setreuid(), setregid() not found or "deprecated"
          Find out what your Unix variety wants you to use instead, and
          make appropriate substitutions in routine zvpass(), module
          [101]ckufio.c, and [102]let us know.

   printf()
          IKSD installs a printf() substitute to allow redirection of
          printf-like output to the connection. However, this can
          conflict with some curses libraries. In this case, separate
          binaries must be built for IKSD and non-IKSD use.

   If you encounter difficulties with any of the above, and you are not
   interested in running C-Kermit as an IKSD, then simply add NOIKSD to
   CFLAGS and rebuild. Example:

make sco286
(get lots of errors)
make clean
make sco286 "KFLAGS=-DNOIKSD"

   Some non-IKSD things to watch out for:

   Return type of main()
          The main() routine is in [103]ckcmai.c. If you get complaints
          about "main: return type is not blah", define MAINTYPE on the
          CC command line, e.g.:

make xxx "KFLAGS=-DMAINTYPE=blah

          (where blah is int, long, or whatever). If the complaint is
          "Attempt to return a value from a function of type void" then
          add -DMAINISVOID:

make xxx "KFLAGS=-DMAINISVOID=blah

   DNS Service Records
          This feature allows a remote host to redirect C-Kermit to the
          appropriate socket for the requested service; e.g. if C-Kermit
          requests service "telnet" and the host offers Telnet service on
          port 999 rather than the customary port 23. If you get
          compile-time complaints about not being able to find
          <resolv.h>, <netdb.h>, or <arpa/nameser.h>, add -DNO_DNS_SRV to
          CFLAGS. If you get link-time complaints about unresolved
          symbols res_search or dn_expand, try adding -lresolve to LIBS.

   \v(ipaddress)
          If "echo \v(ipaddress)" shows an empty string rather than your
          local IP address, add -DCKGHNLHOST to CFLAGS and rebuild.

   <sys/wait.h>
          If this file can't be found at compile time, add -DNOREDIRECT
          to CFLAGS. This disables the REDIRECT and PIPE commands and
          anything else that needs the wait() system service.

   syslog()
          C-Kermit can now write syslog records. Some older platforms
          might not have the syslog facility. In that case, add
          -DNOSYSLOG. Others might have it, but require addition of
          -lsocket to LIBS (SCO OSR5 is an example). See [104]Section 15.

   putenv()
          If "_putenv" comes up as an undefined symbol, add -DNOPUTENV to
          CFLAGS and rebuild.

   "Passing arg1 of 'time' from incompatible pointer"
          This is a mess. See the mass of #ifdefs in the appropriate
          module, [105]ckutio.c or [106]ckufio.c.

   gettimeofday()
          Wrong number of arguments. On most platforms, gettimeofday()
          takes two arguments, but on a handful of others (e.g. Motorola
          System V/88 V4, SNI Reliant UNIX 5.43, etc) it takes one. If
          your version of gettimeofday() is being called with two args
          but wants one, add -DGTODONEARG.

   "Assignment makes pointer from integer without a cast"
          This warning might appear in [107]ckutio.c or [108]ckufio.c.
          (or elsewhere), and usually can be traced to the use of a
          system or library function that returns a pointer but that is
          not declared in the system header files even though it should
          be. Several functions are commonly associated with this error:

          + getcwd(): Add -DDCLGETCWD to CFLAGS and rebuild.
          + popen() : Add -DDCLPOPEN to CFLAGS and rebuild.
          + fdopen(): Add -DDCLFDOPEN to CFLAGS and rebuild.

   "Operands of = have incompatible types"
   "Incompatible types in assignment"
          If this comes from [109]ckcnet.c and comes from a statement
          involving inet_addr(), try adding -DINADDRX to CFLAGS. If that
          doesn't help, then try adding -DNOMHHOST.

   Complaints about args to get/setsockopt(), getpeername(),
          getsockname()
          These are all in [110]ckcnet.c. Different platforms and OS's
          and versions of the same OS change this all the time: int,
          size_t, unsigned long, etc. All the affected variables are
          declared according to #ifdefs within ckcnet.c, so find the
          declarations and adjust the #ifdefs accordingly.

   size_t
          In case of complaints about "unknown type size_t", add
          -DSIZE_T=int (or other appropriate type) to CFLAGS.

   'tz' undefined
   Use of undefined enum/struct/union 'timezone'
          Left of 'tv_sec' specifies undefined struct/union 'timeval' And
          similar complaints in [111]ckutio.c: Add -DNOGFTIMER and/or
          -DNOTIMEVAL.

   Symlinks
          The new built-in DIRECTORY command should show symlinks like
          "ls -l" does. If it does not, check to see if your platform has
          the lstat() and readlink() functions. If so, add -DUSE_LSTAT
          and -DCKSYMLINK to CFLAGS and rebuild. On the other hand, if
          lstat() is unresolved at link time, add -DNOLSTAT to CFLAGS. If
          readlink() is also unresolved, add -DNOSYMLINK.

   realpath()
          Link-time complains about realpath() -- find the library in
          which it resides and add it to LIBS (example for Unixware 7.1:
          "-lcudk70") or add -DNOREALPATH to CFLAGS and rebuild. If built
          with realpath() but debug log file is truncated or mangled,
          ditto (some realpath() implementations behave differently from
          others). If built with realpath() and seemingly random core
          dumps occur during file path resolution, ditto.

   Failure to locate header file <term.h>
          Usually happens on Linux systems that have the C compiler
          installed, but not the ncurses package (see comments about
          selective installs above). Go back and install ncurses, or use
          "make linuxnc" (Linux No Curses).

   "Can't find shared library libc.so.2.1"
   "Can't find shared library libncurses.so.3.0", etc...
          You are trying to run a binary that was built on a computer
          that has different library versions than your computer, and
          your computer's loader is picky about library version numbers.
          Rebuild from source on your computer.

   Time (struct tm) related difficulties:
          Errors like the following:

"ckutio.c", line 11994: incomplete struct/union/enum tm: _tm
"ckutio.c", line 11995: error: cannot dereference non-pointer type
"ckutio.c", line 11995: error: assignment type mismatch
"ckutio.c", line 11997: warning: using out of scope declaration: localtime
"ckutio.c", line 11997: error: unknown operand size: op "="
"ckutio.c", line 11997: error: assignment type mismatch
"ckutio.c", line 11998: error: undefined struct/union member: tm_year
"ckutio.c", line 12000: error: undefined struct/union member: tm_mon
"ckutio.c", line 12001: error: undefined struct/union member: tm_mday
"ckutio.c", line 12002: error: undefined struct/union member: tm_hour
"ckutio.c", line 12003: error: undefined struct/union member: tm_min
"ckutio.c", line 12004: error: undefined struct/union member: tm_sec

          are due to failure to include the appropriate time.h header
          files. Unix platforms generally have one or more of the
          following: <time.h>, <sys/time.h>, and <sys/timeb.h>. Any
          combination of these might be required. Defaults are set up for
          each makefile target. The defaults can be corrected on the CC
          command line by adding the appropriate definition from the
          following list to CFLAGS:

-DTIMEH         Include <time.h>
-DNOTIMEH       Don't include <time.h>
-DSYSTIMEH      Include <sys/time.h>
-DNOSYSTIMEH    Don't include <sys/time.h>
-DSYSTIMEBH     Include <sys/timeb.h>
-DNOSYSTIMEBH   Don't include <sys/timeb.h>

          Note that <sys/timeb.h> is relatively scarce in the System V
          and POSIX environments; the only platform of recent vintage
          where it was/is used is OSF/1 and its derivatives (Digital Unix
          and Tru64 Unix).

   Struct timeval and/or timezone not declared:
          In some cases, merely including the appropriate time.h header
          files is still not enough. POSIX.1 does not define the timeval
          struct, and so the items we need from the header are protected
          against us by #ifndef _POSIX_SOURCE or somesuch. In this case,
          we have to declare the timeval (and timezone) structs
          ourselves. To force this, include -DDCLTIMEVAL in CFLAGS.

   Warnings about dn_expand() Argument #4
          WARNING: argument is incompatible with prototyp. It's the old
          char versus unsigned char stupidity again. Try to find a
          compiler switch like GCC's "-funsigned-char". Failing that, add
          -DCKQUERYTYPE=xxx to CFLAGS, where xxx is whatever 'man
          dn_expand' tells you the type of the 4th argument should be
          (presumably either char or unsigned char; in the latter case
          use CHAR to avoid confusion caused by multiple words.

   Switch Table Overflow (in [112]ckcuni.c)
          Add -DNOUNICODE to CFLAGS.

   Compile-time warnings about ck_out() or tgetstr() or tputs():
          Easy solution: Add -DNOTERMCAP to CFLAGS. But then you lose the
          SCREEN function. Real solution: Try all different combinations
          of the following CFLAGS:

-DTPUTSARGTYPE=char    -DTPUTSFNTYPE=int
-DTPUTSARGTYPE=int     -DTPUTSFNTYPE=void

          Until the warnings go away, except maybe "ck_outc: return with
          a value in a function returning void", and in that case also
          add -DTPUTSISVOID.

   "Passing arg 1 of to tputs() makes pointer from integer without a
          cast":
          Add -DTPUTSARG1CONST to CFLAGS.

   "Undefined symbol: dup2"
          Add -DNOZEXEC to CFLAGS.

   "header file 'termcap.h' not found"
          Add -DNOHTERMCAP to CFLAGS.

   Other difficulties are generally of the "where is curses.h and what is
   it called this week?" variety (most easily solved by making symlinks
   in the include and lib directories), or overzealous complaints
   regarding type mismatches in function calls because of the totally
   needless and silly signed versus unsigned char conflict (*), etc. In
   any case, please send any compilation or linking warnings or errors to
   the author, preferably along with fixes.

     * C-Kermit does not use the signed property of chars at all
       anywhere, ever. So if all chars and char *'s can be made unsigned
       at compile time, as they can in gcc with "-funsigned-char", they
       should be.

   IMPORTANT: If you find any of these hints necessary for a particular
   make target (or you hit upon others not listed here), PLEASE SEND A
   REPORT TO:

[113]kermit-support@columbia.edu
    ________________________________________________________________________

  4.1. The Unix Makefile

   [ [114]Top ] [ [115]Contents ] [ [116]Section Contents ] [ [117]Next ]
   [ [118]Previous ]

   If your distribution does not contain a file with the name "makefile"
   or "Makefile", then rename the file called ckuker.mak to makefile:

mv ckuker.mak makefile

   Then type "make xxx", where xxx is the platform you want to build
   C-Kermit for. These are listed in the [119]comments at the top of the
   makefile. For example, to build C-Kermit for Linux, type:

make linux

   Here are some typical examples:

     Target    Description
     linux     Linux, any version on any hardware platform
     openbsd   OpenBSD, any version on any hardware platform
     aix43     AIX 4.3
     aix43g    AIX 4.3, built with gcc
     solaris9  Solaris 9
     solaris9g Solaris 9 built with gcc
     hpux1100  HP-UX 11-point-anything

   The makefile is quite long, and at least two versions of Unix, SCO
   Xenix/286 and 2.x BSD, cannot cope with its length. An attempt to
   "make sco286" gives the message "Make: Cannot alloc mem for env..
   Stop". Solution: edit away some or all of the nonrelevant material
   from the makefile. (A separate version of the makefile is provided for
   BSD 2.x: ckubs2.mak but C-Kermit 8.0 can't be built for BSD 2.x -- it
   has simply grown too large.)

   Some make programs reportedly cannot handle continued lines (lines
   ending in backslash (\)). If you have a problem with the makefile, try
   editing the makefile to join the continued lines (remove the
   backslashes and the following linefeed).

   Other makefile troubles may occur because tabs in the makefile have
   somehow been converted to spaces. Spaces and tabs are distinct in Unix
   makefiles.

   Similarly, carriage returns might have been added to the end of each
   line, which also proves confusing to most Unix versions of make.

   Check to see if there are comments about your particular version in
   its makefile target itself. In a text editor such as EMACS or VI,
   search for the make entry name followed by a colon, e.g. "linux:" (if
   you really are building C-Kermit for Linux, do this now).

   Check to see if there are comments about your particular version in
   the [120]ckubwr.txt file ([121]CLICK HERE for the Web version).

   If you have trouble with building [122]ckwart.c, or running the
   resulting wart preprocessor program on [123]ckcpro.w:

    1. Just "touch" the [124]ckcpro.c file that comes in the distribution
       and then give the "make" command again, or:
    2. Compile ckwart.c "by hand": cc -o wart ckwart.c, or:
    3. Try various other tricks. E.g. one Linux user reported that that
       adding the "static" switch to the rule for building wart fixed
       everything:

wart: ckwart.$(EXT)
        $(CC) -static -o wart ckwart.$(EXT) $(LIBS)

   If your compiler supports a compile-time option to treat ALL chars
   (and char *'s, etc) as unsigned, by all means use it -- and send me
   email to let me know what it is (I already know about gcc
   -funsigned-char).

   To add compilation options (which are explained later in this
   document) to your makefile target without editing the makefile,
   include "KFLAGS=..." on the make command line, for example:

make linux KFLAGS=-DNODEBUG
make bsd "KFLAGS=-DKANJI -DNODEBUG -DNOTLOG -DDYNAMIC -UTCPSOCKET"

   Multiple options must be separated by spaces. Quotes are necessary if
   the KFLAGS= clause includes spaces. The KFLAGS are added to the end of
   the CFLAGS that are defined in the selected makefile target. For
   example, the "bsd" entry includes -DBSD4 -DTCPSOCKET, so the second
   example above compiles Kermit with the following options:

-DBSD4 -DTCPSOCKET -DKANJI -DNODEBUG -DNOTLOG -DDYNAMIC -UTCPSOCKET

   (Notice how "-UTCPSOCKET" is used to negate the effect of the
   "-DTCPSOCKET" option that is included in the makefile target.)

   WARNING: Be careful with KFLAGS. If you build C-Kermit, change some
   files, and then run make again using the same make entry but
   specifying different KFLAGS than last time, make won't detect it and
   you could easily wind up with inconsistent object modules, e.g. some
   of them built with a certain option, others not. When in doubt, "make
   clean" first to make sure all your object files are consistent.
   Similarly, if you change CFLAGS, LIBS, or any other items in the
   makefile, or you rebuild using a different makefile target, "make
   clean" first.

   If you create a new makefile target, use static linking if possible.
   Even though this makes your C-Kermit binary bigger, the resulting
   binary will be more portable. Dynamically linked binaries tend to run
   only on the exact configuration and version where they were built; on
   others, invocation tends to fail with a message like:

Can't find shared library "libc.so.2.1"
    ________________________________________________________________________

  4.2. The C-Kermit Initialization File

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

   (This section is obsolete.) Read [130]Section 5 about the
   initialization file.
    ________________________________________________________________________

  4.3. The 2.x BSD Makefile

   [ [131]Top ] [ [132]Contents ] [ [133]Section Contents ] [ [134]Next ]
   [ [135]Previous ]

     This section is obsolete. C-Kermit 6.0 was the last release that
     could be built on PDP-11 based BSD versions.
    ________________________________________________________________________

  4.4. The Plan 9 Makefile

   [ [136]Top ] [ [137]Contents ] [ [138]Section Contents ] [ [139]Next ]
   [ [140]Previous ]

   Use the separate makefile [141]ckpker.mk. NOTE: The Plan 9 version of
   C-Kermit 8.0 has not yet been built. There should be no impediment to
   building it. However, even when built successfully, certain key
   features are missing, notably TCP/IP networking.
    ________________________________________________________________________

  4.5. Makefile Failures

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

   First, be sure the source files are stored on your current disk and
   directory with the right names (in lowercase). Second, make sure that
   the makefile itself does not contain any lines with leading spaces:
   indented lines must all start with horizontal TAB, and no spaces.

   Then make sure that your Unix PATH is defined to find the appropriate
   compiler for your makefile target. For example, on SunOS systems,
   "make sunos41" builds C-Kermit for the BSD environment, and assumes
   that /usr/ucb/cc will be used for compilation and linking. If your
   PATH has /usr/5bin ahead of /usr/ucb, you can have problems at compile
   or link time (a commonly reported symptom is the inability to find
   "ftime" during linking). Fix such problems by redefining your Unix
   PATH, or by specifying the appropriate "cc" in CC= and CC2= statements
   in your makefile target.

   During edits 166-167, considerable effort went into making C-Kermit
   compilable by ANSI C compilers. This includes prototyping all of
   C-Kermit's functions, and including the ANSI-defined system header
   files for system and library functions, as defined in K&R, second
   edition: <string.h>, <stdlib.h>, <unistd.h> (except in NeXTSTEP this
   is <libc.h>), and <sys/stdtypes.h>. If you get warnings about any of
   these header files not being found, or about argument mismatches
   involving pid_t, uid_t, or gid_t, look in ckcdeb.h and make
   amendments. C-Kermit assumes it is being compiled by an ANSI-compliant
   C compiler if __STDC__ is defined, normally defined by the compiler
   itself. You can force ANSI compilation without defining __STDC__
   (which some compilers won't let you define) by including -DCK_ANSIC on
   the cc command line.

   On the other hand, if your compiler defines __STDC__ but still
   complains about the syntax of Kermit's function prototypes, you can
   disable the ANSI-style function prototyping by including -DNOANSI on
   the command line.

   For SCO OpenServer, UNIX, ODT, and XENIX compilations, be sure to pick
   the most appropriate [146]makefile target, and be sure you have
   installed an SCO development system that is keyed to your exact SCO
   operating system release, down to the minor version (like 2.3.1).

   Also note that SCO distributes some of its libraries in encrypted
   form, and they must be decrypted before C-Kermit can be linked with
   them. If not, you might see a message like:

ld: file /usr/lib/libsocket.a is of unknown type: magic number = 6365

   To decrypt, you must supply a key (password) that came with your
   license. Call SCO for further info.

   If your compiler uses something other than int for the pid (process
   id) data type, put -DPID_T=pid_t or whatever in your CFLAGS.

   If you get complaints about unknown data types uid_t and gid_t, put
   -DUID_T=xxx -DGID_T=yyy in your CFLAGS, where xxx and yyy are the
   appropriate types.

   If your compilation fails because of conflicting or duplicate
   declarations for sys_errlist, add -DUSE_STRERROR or -DNDSYSERRLIST to
   CFLAGS.

   If your compilation dies because getpwnam() is being redeclared (or
   because of "conflicting types for getwpnam"), add -DNDGPWNAM to your
   CFLAGS. If that doesn't work, then add -DDCGPWNAM to your CFLAGS (see
   ckufio.c around line 440).

   If the compiler complains about the declaration of getpwnam() during
   an ANSI C compilation, remove the declaration from ckufio.c or change
   the argument in the prototype from (char *) to (const char *).

   If you get complaints that getpwuid() is being called with an improper
   type, put -DPWID_T=xx in your CFLAGS.

   If you get compile-time warnings that t_brkc or t_eofc (tchars
   structure members, used in BSD-based versions) are undefined, or
   structure-member- related warnings that might be traced to this fact,
   add -DNOBRKC to CFLAGS.

   If you get a linker message to the effect that _setreuid or _setregid
   is not defined, add -DNOSETREU to CFLAGS, or add -DCKTYP_H=blah to
   CFLAGS to make C-Kermit read the right <types.h>-kind-of-file to pick
   up these definitions.

   If you get a message that _popen is undefined, add -DNOPOPEN to
   CFLAGS.

   If you get a complaint at compile time about an illegal
   pointer-integer combination in ckufio.c involving popen(), or at link
   time that _popen is an undefined symbol, add the declaration "FILE
   *popen();" to the function zxcmd() in ckufio.c (this declaration is
   supposed to be in <stdio.h>). If making this change does not help,
   then apparently your Unix does not have the popen() function, so you
   should add -DNOPOPEN to your make entry, in which case certain
   functions involving "file" i/o to the standard input and output of
   subprocesses will not be available.

   If your linker complains that _getcwd is undefined, you can add a
   getcwd() function to ckufio.c, or add it to your libc.a library using
   ar:

#include <stdio.h>

char *
getcwd(buf,size) char *buf; int size; {
#ifndef NOPOPEN
#ifdef DCLPOPEN
    FILE *popen();
#endif
    FILE *pfp;

    if (!buf) return(NULL);
    if (!(pfp = popen("pwd","r"))) return(NULL);
    fgets(buf,size-2,pfp);
    pclose(pfp);
    buf[strlen(buf)-1] = '\0';
    return((char *)buf);
#else
    buf[0] = '\0';
    return(NULL);
#endif /* NOPOPEN */
}

#ifdef NOPOPEN
FILE *popen(s,t) char *s,*t; {
    return(NULL);
}
#endif /* NOPOPEN */

   If you get complaints about NPROC having an invalid value, add a valid
   definition for it (depends on your system), as in the cray entry.

   If you get some symbol that's multiply defined, it probably means that
   a variable name used by Kermit is also used in one of your system
   libraries that Kermit is linked with. For example, under PC/IX some
   library has a variable or function called "data", and the variable
   "data" is also used extensively by Kermit. Rather than edit the Kermit
   source files, just put a -D in the make entry CFLAGS to change the
   Kermit symbol at compile time. In this example, it might be
   -Ddata=xdata.

   Some symbol is defined in your system's header files, but it produces
   conflicts with, or undesired results from, Kermit. Try undefining the
   symbol in the makefile target's CFLAGS, for example -UFIONREAD.

   Some well-known symbol is missing from your system header files. Try
   defining in the makefile target's CFLAGS, for example -DFREAD=1.

   You get many warnings about pointer mismatches. This probably means
   that Kermit is assuming an int type for signal() when it should be
   void, or vice-versa. Try adding -DSIG_I (for integer signal()) or
   -DSIG_V (for void) to CFLAGS. Or just include KFLAGS=-DSIG_V (or
   whatever) in your "make" command, for example:

make bsd KFLAGS=-DSIG_V

   You get many messages about variables that are declared and/or set but
   never used. It is difficult to avoid these because of all the
   conditional compilation in the program. Ignore these messages.

   Some of C-Kermit's modules are so large, or contain so many character
   string constants, or are so offensive in some other way, that some C
   compilers give up and refuse to compile them. This is usually because
   the -O (optimize) option is included in the make entry. If this
   happens to you, you can (a) remove the -O option from the make entry,
   which will turn off the optimizer for ALL modules; or (b) compile the
   offending module(s) by hand, including all the switches from make
   entry except for -O, and then give the appropriate "make" command
   again; or (c) increase the value of the -Olimit option, if your
   compiler supports this option; or (d) change the [147]makefile target
   to first compile each offending module explicitly without
   optimization, then compile the others normally (with optimization),
   for example:

#Fortune 32:16, For:Pro 2.1 (mostly like 4.1bsd)
ft21:
        @echo 'Making C-Kermit $(CKVER) for Fortune 32:16 For:Pro 2.1...'
        $(MAKE) ckuusx.$(EXT) "CFLAGS= -DNODEBUG -DBSD4 -DFT21 -DNOFILEH \
        -SYM 800 \ -DDYNAMIC -DNOSETBUF -DCK_CURSES $(KFLAGS) -DPID_T=short"
        $(MAKE) ckuxla.$(EXT) "CFLAGS= -DNODEBUG -DBSD4 -DFT21 -DNOFILEH \
        -SYM 800 \ -DDYNAMIC -DNOSETBUF -DCK_CURSES $(KFLAGS) -DPID_T=short"
        $(MAKE) ckudia.$(EXT) "CFLAGS= -DNODEBUG -DBSD4 -DFT21 -DNOFILEH \
        -SYM 800 \ -DDYNAMIC -DNOSETBUF -DCK_CURSES $(KFLAGS) -DPID_T=short"
        $(MAKE) wermit "CFLAGS= -O -DNODEBUG -DBSD4 -DFT21 -DNOFILEH -SYM 800 \
        -DDYNAMIC -DNOSETBUF -DCK_CURSES $(KFLAGS) -DPID_T=short" \
        "LNKFLAGS= -n -s" "LIBS= -lcurses -ltermcap -lv -lnet"

   As an extreme example, some compilers (e.g. gcc on the DG AViiON) have
   been known to dump core when trying to compile ckwart.c with
   optimization. So just do this one "by hand":

cc -o wart ckwart.c

   or:

touch ckcpro.c

   and then give the "make" command again.

   Speaking of wart, it is unavoidable that some picky compilers might
   generate "statement unreachable" messages when compiling ckcpro.c.
   Unreachable statements can be generated by the wart program, which
   generates ckcpro.c automatically from [148]ckcpro.w, which translates
   lex-like state/input constructions into a big switch/case
   construction.

   Some function in Kermit wreaks havoc when it is called. Change all
   invocations of the function into a macro that evaluates to the
   appropriate return code that would have been returned by the function
   had it been called and failed, for example: -Dzkself()=0. Obviously
   not a good idea if the function is really needed.

   If you have just installed SunOS 4.1.2 or 4.1.3, you might find that
   C-Kermit (and any other C program) fails to link because of unresolved
   references from within libc. This is because of a mistake in Sun's
   /usr/lib/shlib.etc files for building the new libc. Change the libc
   Makefile so that the "ld" lines have "-ldl" at the end. Change the
   README file to say "mv xccs.multibyte. xccs.multibyte.o" and follow
   that instruction.
  __________________________________________________________________________

5. INSTALLING THE KERMIT FILES

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

   SECTION CONTENTS

5.1. [153]The C-Kermit Initialization File
5.2. [154]Text Files
5.3. [155]Installing the Kermit Files
5.4. [156]The Makefile Install Target

   The C-Kermit executable does not need any external files to run.
   Unlike, say, the cu program, which on most platforms is useless unless
   you (as root) edit the /usr/spool/uucp/Systems and
   /usr/spool/uucp/Devices files to supply whatever obscure and
   undocumented syntax is required to match some supposedly user-friendly
   mnemonic to the real pathname of whatever device you want to use,
   Kermit runs on its own without needing any external configuration
   files, and lets you refer to device (and network hosts and services)
   by their own natural undisguised names.

   Nevertheless, a number of external files can be installed along with
   the C-Kermit executable if you wish. These include configuration and
   customization files that are read by Kermit as well as documentation
   files to be read by people. All of this material is (a) optional, and
   (b) available on the Kermit website:

[157]http://www.columbia.edu/kermit/

   and usually in a more pleasant form, perhaps also with updated
   content. So if your computer is on the Internet, there is no need to
   install anything but the Kermit executable if users know how to find
   the Kermit website (and if they don't, Kermit's "help" command tells
   them).

  5.1. The C-Kermit Initialization File

   In C-Kermit 7.0 and earlier, the standard initialization file was a
   key C-Kermit component because:

    a. It "loaded" the dialing and network directories.
    b. It defined all the macros and variables for the services
       directory.
    c. It defined macros for quickly changing Kermit's file-transfer
       performance tuning.

   The standard initialization file is quite long (more than 600 lines)
   and requires noticeable processing time (the slower the computer, the
   more noticeable), yet few people actually use the services directory,
   whose definition takes up most of its bulk. Meanwhile, in C-Kermit
   8.0, many of the remaining functions of the standard initialization
   file are now built in; for example, the FAST, CAUTIOUS, and ROBUST
   commands.

   More to the point, many of the settings that could be made only in the
   initialization and customization files can now be picked up from
   environment variables. The first group identifies initialization and
   directory files:

   CKERMIT_INI
          The path of your Kermit initialization file, if any. This
          overrides the built-in search for $HOME/.kermrc.

   K_CHARSET
          The character set used for encoding local text files.
          Equivalent to SET FILE CHARACTER-SET.

   K_DIAL_DIRECTORY
          The full pathname of one or more Kermit dialing directory
          files. Equivalent to SET DIAL DIRECTORY.

   K_NET_DIRECTORY
          The full pathname of one or more Kermit network directory
          files. Equivalent to SET NETWORK DIRECTORY.

   K_INFO_DIRECTORY
   K_INFO_DIR
          The full pathname of a directory containing Kermit (if any)
          containing ckubwr.txt and other Kermit text files. Overrides
          Kermit's built-in search for this directory.

   The next group is related to dialing modems:

   K_COUNTRYCODE
          The telephonic numeric country code for this location, e.g. 1
          for North America or 39 for Italy. It is recommended that this
          one be set for all users, system-wide. Not only is it used to
          process portable-format dialing directory entries, but it is
          also compared against Kermit's built-in list of "tone
          countries" to see if tone dialing can be used. Equivalent to
          Kermit's SET DIAL COUNTRY-CODE command.

   K_AREACODE
          The telephonic numeric area code for this location, e.g. 212
          for Manhattan, New York, USA. Recommend this one also be set
          system-wide, so shared portable-format dialing directories will
          work automatically for everybody. Equivalent to Kermit's SET
          DIAL AREA-CODE command.

   K_DIAL_METHOD
          TONE or PULSE. Equivalent to Kermit's SET DIAL METHOD command.
          If a dial method is not set explicitly (or implicitly from the
          country code), Kermit does not specify a dialing method, and
          uses the modem's default method, which tends to be pulse.

   K_INTL_PREFIX
          The telephonic numeric international dialing prefix for this
          location. Equivalent to Kermit's SET DIAL INTL-PREFIX command.

   K_LD_PREFIX
          The telephonic numeric long-distance dialing prefix for this
          location. Equivalent to Kermit's SET DIAL LD-PREFIX command.

   K_PBX_ICP
          The telephonic numeric PBX internal call prefix for this
          location. Equivalent to Kermit's SET DIAL PBX-INSIDE-PREFIX
          command.

   K_PBX_OCP
          The telephonic numeric PBX external call prefix for this
          location. Equivalent to Kermit's SET DIAL PBX-OUTSIDE-PREFIX
          command.

   K_PBX_XCH
          The telephonic numeric PBX exchange (first part of the
          subscriber number). Equivalent to Kermit's SET DIAL
          PBX-EXCHANGE command.

   K_TF_AREACODE
          A list of one or more telephonic numeric toll-free area codes.

   K_TF_PREFIX
          The telephonic numeric toll-free dialing prefix, in case it is
          different from the long-distance prefix. Equivalent to Kermit's
          SET DIAL TF-PREFIX command.

   The final group includes well-known environment variables that are
   also used by Kermit:

   CDPATH
          Where the CD command should look for relative directory names.

   SHELL
          The path of your Unix shell. Used by the RUN (!) command to
          choose the shell to execute its arguments.

   USER
          Your Unix username.

   EDITOR
          The name or path of your preferred editor (used by the EDIT
          command). Equivalent to SET EDITOR.

   BROWSER
          The name or path of your preferred web browser (used by the
          BROWSE command). Equivalent to Kermit's SET BROWSER command.

   Does this mean the initialization file can be abolished? I think so.
   Here's why:

     * Kermit already does everything most people want it to do without
       one.
     * Important site-specific customizations can be done with global
       environment variables.
     * There is no longer any need for everybody to have to use the
       standard initialization file.
     * This means that your initialization file, if you want one, can
       contain your own personal settings, definitions, and preferences,
       rather than 600 lines of "standard" setups.
     * If you still want the services directory, you can either TAKE the
       standard initialization file (which must be named anything other
       than $HOME/.kermrc to avoid being executed automatically every
       time you start Kermit), or you can make it a kerbang script and
       execute it "directly" (the [158]makefile install target does this
       for you by putting ckermit.ini in the same directory as the Kermit
       binary, adding the appropriate Kerbang line to the top, and giving
       it execute permission).

   In fact, you can put any number of kerbang scripts in your PATH to
   start up C-Kermit in different ways, to have it adopt certain
   settings, make particular connections, execute complicated scripts,
   whatever you want.

  5.2. Text Files

   These are entirely optional. Many of them are to be found at the
   Kermit website in HTML form (i.e. as Web pages with clickable links,
   etc), and very likely also more up to date. Plain-text files that
   correspond to Web pages were simply "dumped" by Lynx from the website
   to plain ASCII text. The format is whatever Lynx uses for this
   purpose. If you wish, you can install them on your computer as
   described in the [159]next section.

   [160]COPYING.TXT
          Copyright notice, permissions, and disclaimer.

   [161]ckermit.ini
          The standard initialization file, intended more for reference
          (in most cases) than actual use; see [162]Section 5.1.

   [163]ckermod.ini
          A sample customization file.

   [164]ckermit70.txt
          Supplement to [165]Using C-Kermit for version 7.0. Available on
          the Kermit website as:
          [166]http://www.columbia.edu/kermit/ckermit70.html

   [167]ckermit80.txt
          Supplement to [168]Using C-Kermit for version 8.0. Available on
          the Kermit website as:
          [169]http://www.columbia.edu/kermit/ckermit80.html

   [170]ckcbwr.txt
          The general C-Kermit hints and tips ("beware") file. Available
          on the Kermit website as:
          [171]http://www.columbia.edu/kermit/ckcbwr.html

   [172]ckubwr.txt
          The Unix-specific C-Kermit hints and tips file. Available on
          the Kermit website as:
          [173]http://www.columbia.edu/kermit/ckubwr.html

   [174]ckuins.txt
          Unix C-Kermit Installation Instructions (this file). Available
          on the Kermit website as:
          [175]http://www.columbia.edu/kermit/ckuins.html

   [176]ckccfg.txt
          C-Kermit compile-time configuration options. Available on the
          Kermit website as:
          [177]http://www.columbia.edu/kermit/ckccfg.html

   [178]ckcplm.txt
          The C-Kermit program logic manual. Available on the Kermit
          website as:
          [179]http://www.columbia.edu/kermit/ckcplm.html

   [180]ca_certs.pem
          Certificate Authority certificates for secure connections (see
          [181]Section 16).

  5.3. Installing the Kermit Files

   There is an "install" target in the [182]makefile that you can use if
   you wish. However, since every site has its own layout and
   requirements, it is often better to install the Kermit files by hand.
   You don't have to use the makefile install target to install C-Kermit.
   This is especially true since not all sites build C-Kermit from
   source, and therefore might not even have the makefile. But you should
   read this section in any case.

     If your computer already has an older version of C-Kermit
     installed, you should rename it (e.g. to "kermit6" or "kermit7") so
     in case you have any trouble with the new version, the old one is
     still available.

   In most cases, you need to be root to install C-Kermit, if only to
   gain write access to directories in which the binary and manual page
   are to be copied. The C-Kermit binary should be installed in a
   directory that is in the users' PATH, but that is not likely to be
   overwritten when you install a new version of the operating system. A
   good candidate would be the /usr/local/bin/ directory, but the
   specific choice is site dependent. Example (assuming the appropriate
   Kermit binary is stored in your current directory as "wermit", e.g.
   because you just built it from source and that's the name the makefile
   gave it):

mv wermit /usr/local/bin/kermit
chmod 755 /usr/local/bin/kermit

   or (only after you finish reading this section!) simply:

make install

   IMPORTANT: IF C-KERMIT IS TO BE USED FOR DIALING OUT, you must also do
   something to give it access to the dialout devices and lockfile
   directories. The 'install' target does not attempt to set Kermit's
   owner, group, and permissions to allow dialing out. This requires
   privileges, open eyes, and human decision-making. Please read
   [183]Sections 10 and [184]11 below, make the necessary decisions, and
   then implement them by hand as described in those sections.

   You should also install the man page, which is called ckuker.nr, in
   the man page directory for local commands, such as /usr/man/man1/,
   renamed appropriately, e.g. to kermit.1. This is also taken care of by
   "make install".

   Optionally, the text files listed in the [185]previous section can be
   placed in a publicly readable directory. Suggested directory names
   are:

/usr/local/doc/kermit/
/usr/local/lib/kermit/
/usr/share/lib/kermit/
/opt/kermit/doc/

   (or any of these without the "/kermit"). Upon startup, C-Kermit checks
   the following environment variables whose purpose is to specify the
   directory where the C-Kermit text files are, in the following order:

K_INFO_DIRECTORY
K_INFO_DIR

   If either of these is defined, C-Kermit checks for the existence of
   the ckubwr.txt file (Unix C-Kermit Hints and Tips). If not found, it
   checks the directories listed above (both with and without the
   "/kermit") plus several others to see if they contain the ckubwr.txt
   file. If found, various C-Kermit messages can refer the user to this
   directory.

   Finally, if you want to put the source code files somewhere for people
   to look at, you can do that too.

  5.4. The Makefile Install Target

   The makefile "install" target does almost everything for you if you
   give it the information it needs by setting the variables described
   below. You can use this target if:

     * You downloaded the [186]complete C-Kermit archive and built
       C-Kermit from source; or:
     * You downloaded an [187]individual C-Kermit binary and the
       [188]C-Kermit text-file archive, and your computer has a "make"
       command.

   Here are the parameters you need to know:

   BINARY
          Name of the binary you want to install as "kermit". Default:
          "wermit".

   prefix
          (lower case) If you define this variable, its value is
          prepended to all the following xxxDIR variables (8.0.211 and
          later).

   DESTDIR
          If you want to install the Kermit files in a directory
          structure like /opt/kermit/bin/, /opt/kermit/doc/,
          /opt/kermit/src/, then define DESTIR as the root of this
          structure; for example, /opt/kermit. The DESTDIR string should
          not end with a slash. By default, DESTDIR is not defined. If it
          is defined, but the directory does not exist, the makefile
          attempts to create it, which might require you to be root. Even
          so, this can fail if any segments in the path except the last
          one do not already exist. WARNING: If the makefile creates any
          directories, it gives them a mode of 755, and the default owner
          and group. Modify these by hand if necessary.

   BINDIR
          Directory in which to install the Kermit binary (and the
          standard C-Kermit initialization file, if it is found, as a
          Kerbang script). If DESTDIR is defined, BINDIR must start with
          a slash. BINDIR must not end with a slash. If DESTDIR is
          defined, BINDIR is a subdirectory of DESTDIR. If BINDIR does
          not exist, the makefile attempts to create it as with DESTDIR.
          Default: /usr/local/bin.

   MANDIR
          Directory in which to install the C-Kermit manual page as
          "kermit" followed by the manual-chapter extension (next item).
          Default: /usr/man/man1. If MANDIR is defined, the directory
          must already exist.

   MANEXT
          Extension for the manual page. Default: 1 (digit one).

   SRCDIR
          Directory in which to install the C-Kermit source code. If
          DESTDIR is defined, this is a subdirectory of DESTDIR. Default:
          None.

   CERTDIR
          For secure builds only: Directory in which to install the
          ca_certs.pem file. This must be the verification directory used
          by programs that use the SSL libraries at your site. Default:
          none. Possibilities include: /usr/local/ssl, /opt/ssl,
          /usr/lib/ssl, . . .     If CERTDIR is defined, the directory
          must already exist.

   INFODIR
          Directory in which to install the C-Kermit text files. If
          DESTDIR is defined, this is a subdirectory of DESTDIR. Default:
          None. If INFODIR is defined but does not exist, the makefile
          attempts to create it, as with DESTDIR.

   Examples:

   make install
          Installs "wermit" as /usr/local/bin/kermit with permissions
          755, the default owner and group, and no special privileges.
          The manual page is installed as /usr/man/man1/kermit.1. Text
          files are not copied anywhere, nor are the sources.

   make MANDIR= install
          Just like "make install" but does not attempt to install the
          manual page.

   make DESTDIR=/opt/kermit BINDIR=/bin SRCDIR=/src INFODIR=/doc install
          Installs the Kermit binary "wermit" as /opt/kermit/bin/kermit,
          puts the source code in /opt/kermit/src, and puts the text
          files in /opt/kermit/doc, creating the directories if they
          don't already exist, and puts the man page in the default
          location.

   make BINDIR=/usr/local/bin CERTDIR=/usr/local/ssl install
          Installs the Kerberized Kermit binary "wermit" as
          /usr/local/bin/kermit, puts the CA Certificates file in
          /usr/local/ssl/, and the man page in the normal place.

   For definitive information, see the makefile. The following is
   excerpted from the 8.0.211 makefile:

# The following symbols are used to specify library and header file locations
# Redefine them to the values used on your system by:
# . editing this file
# . defining the values on the command line
# . defining the values in the environment and use the -e option
#
prefix  = /usr/local
srproot = $(prefix)
sslroot = $(prefix)
manroot = $(prefix)

K4LIB=-L/usr/kerberos/lib
K4INC=-I/usr/kerberos/include
K5LIB=-L/usr/kerberos/lib
K5INC=-I/usr/kerberos/include
SRPLIB=-L$(srproot)/lib
SRPINC=-I$(srproot)/include
SSLLIB=-L$(sslroot)/ssl/lib
SSLINC=-I$(sslroot)/ssl/include
...
WERMIT = makewhat
BINARY = wermit
DESTDIR =
BINDIR = $(prefix)/bin
MANDIR = $(manroot)/man/man1
MANEXT = 1
SRCDIR =
INFODIR =
CERTDIR =
  __________________________________________________________________________

6. INSTALLING UNIX C-KERMIT FROM DOS-FORMAT DISKETTES

   [ [189]Top ] [ [190]Contents ] [ [191]Next ] [ [192]Previous ]

     This section is obsolete. We don't distribute C-Kermit on diskettes
     any more because (a)there is no demand, and (b) it no longer fits. 

   If you received a DOS-format diskette containing a binary executable
   C-Kermit program plus supporting text files, be sure to chmod +x the
   executable before attempting to run it.

   In version 5A(190) and later, all the text files on the C-Kermit
   DOS-format diskettes are in Unix format: LF at the end of each line
   rather than CRLF. This means that no conversions are necessary when
   copying to your Unix file system, and that all the files on the
   diskette, text and binary, can be copied together. The following
   comments apply to the DOS-format diskettes furnished with version
   5A(189) and earlier or to other DOS-format diskettes you might have
   obtained from other sources.

   If you have received C-Kermit on MS-DOS format diskettes (such as
   those distributed by Columbia University), you should make sure that
   your DOS-to-Unix conversion utility (such as "dosread") both: (1)
   changes line terminators in all files from carriage-return linefeed
   (CRLF) to just linefeed (LF) (such as "dosread -a") and remove any
   Ctrl-Z's, and (2) that all filenames are converted from uppercase to
   lowercase. If these conversions were not done, you can use the
   following shell script on your Unix system to do them:

---(cut here)---
#!/bin/sh
#
# Shell script to convert C-Kermit DOS-format files into Unix format.
# Lowercases the filenames, strips out carriage returns and Ctrl-Z's.
#
x=$1 # the name of the source directory
y=$2 # the name of the target directory if [ $# -lt 2 ]; then
  echo "usage: $0 source-directory target-directory"
  exit 1
fi
if cd $1 ; then
  echo "Converting files from $1 to $2"
else
  echo "$0: cannot cd to $1"
  exit 1
fi
for i in *; do
  j=`echo $i | tr 'A-Z' 'a-z'`
  echo $x/$i =\> $y/$j
  tr -d '\015\032' < $i > $y/$j
done
---(cut here)---

   Cut out this shell script, save it as "convert.sh" (or any other name
   you prefer), then "chmod +x convert.sh". Then, create a new, empty
   directory to put the converted files in, and then "convert.sh /xxx
   /yyy" where /xxx is the name of the directory where the PC-format
   files are, and /yyy is the name of the new, empty directory. The
   converted files will appear in the new directory.
  __________________________________________________________________________

7. CHECKING THE RESULTS

   [ [193]Top ] [ [194]Contents ] [ [195]Next ] [ [196]Previous ]

   First some quick checks for problems that can be easily corrected by
   recompiling with different options:

   DIRECTORY listing is garbage
          Permissions, size, and date are random garbage (but the
          filenames are correct) in a C-Kermit DIRECTORY listing. On some
          platforms, the lstat() function is present but simply doesn't
          work; try adding -DNOLSTAT to CFLAGS and rebuild. If that
          doesn't fix it, also add -DNOLINKBITS. If it's still not fixed,
          remove -DNOLSTAT and -DNOLINKBITS and add -DNOSYMLINK.

   curses
          When you make a connection with C-Kermit and transfer files
          using the fullscreen (curses) file-transfer display, and then
          get the C-Kermit> prompt back afterwards, do characters echo
          when you type them? If not, the curses library has altered the
          buffering of /dev/tty. Try rebuilding with KFLAGS=-DCK_NEWTERM.
          If it already has -DCK_NEWTERM in CFLAGS, try removing it. If
          that doesn't help, then rebuild with -DNONOSETBUF (yes, two
          NO's). If none of this works (and you can't fix the code), then
          either don't use the fullscreen display, or rebuild with
          -DNOCURSES.

   Ctrl-L or any SCREEN command crashes C-Kermit:
          Rebuild with -DNOTERMCAP.

   No prompt after CONNECT:
          After escaping back from CONNECT mode, does your C-Kermit>
          prompt disappear? (Yet, typing "?" still produces a command
          list, etc) In that case, add -DCKCONINTB4CB to CFLAGS and
          rebuild.

   Here is a more thorough checklist can use to tell whether your version
   of C-Kermit was built correctly for your Unix system, with hints on
   how to fix or work around problems:

    a. Start C-Kermit (usually by typing "./wermit" in the directory
       where you ran the makefile). Do you see the C-Kermit> prompt? If
       not, C-Kermit incorrectly deduced that it was running in the
       background. The test is in conbgt() in [197]ckutio.c. If you can
       fix it for your system, please send in the fix (Hint: read about
       "PID_T" below). Otherwise, you can force C-Kermit to foreground
       mode by starting it with the -z command line option, as in "kermit
       -z", or giving the interactive command SET BACKGROUND OFF.
    b. When you type characters at the C-Kermit prompt, do they echo
       immediately? If not, something is wrong with concb() and probably
       the other terminal mode settings routines in [198]ckutio.c. Be
       sure you have used the most appropriate make entry.
    c. At the C-Kermit> prompt, type "send ./?". C-Kermit should list all
       the files in the current directory. If not, it was built for the
       wrong type of Unix file system. Details below. In the meantime,
       try SET WILDCARD-EXPANSION SHELL as a workaround.
    d. CD to a directory that contains a variety of files, symlinks, and
       subdirectories and give a DIRECTORY command at the C-Kermit>
       prompt. Do the permissions, size, and date appear correct? If not
       see [199]Section 4.0.
    e. Assuming your platform supports long file names, create a file
       with a long name in your current directory, e.g.:

$ touch thisisafilewithaveryveryveryveryveryveryveryverylooooooooongname

       (you might need to make it longer than this, perhaps as long as
       257 or even 1025 characters).
       Check with ls to see if your version of Unix truncated the name.
       Now start C-Kermit and type "send thisis<ESC>". Does Kermit
       complete the name, showing the same name as ls did? If not, wrong
       filesystem. Read on.
    f. Make sure that Kermit has the maximum path length right. Just type
       SHOW FILE and see what it says about this. If it is too short,
       there could be some problems at runtime. To correct, look in
       [200]ckcdeb.h to see how the symbol CKMAXPATH is set and make any
       needed adjustments.
    g. Send a file to your new Kermit program from a different Kermit
       program that is known to work. Is the date/timestamp of the new
       file identical to the original? If not, adjustments are needed in
       zstrdt() in [201]ckufio.c.
    h. Go to another computer (Computer B) from which you can send files
       to C-Kermit. Connect Computer B to the computer (A) where you are
       testing C-Kermit. Then:
    i. Send a file from B to A. Make sure it transferred OK and was
       created with the the right name.
    j. Send a file from B to A, specifying an "as-name" that is very,
       very long (longer than the maximum name length on computer A).
       Check to make sure that the file was received OK and that its name
       was truncated to Computer A's maximum length. If not, check the
       MAXNAMLEN definition in [202]ckufio.c.
    k. Tell C-Kermit on Computer A to "set receive pathnames relative"
       and then send it a file from Computer B specifying an as-name that
       contains several directory segments:

send foo dir1/dir2/dir3/foo

       Check to make sure that dir1/dir2/dir3/foo was created in Computer
       A's current directory (i.e. that three levels of directories were
       created).
    l. Repeat step k, but make each path segment in the pathname longer
       than Computer A's maximum name length. Make sure each directory
       name, and the final filename, were truncated properly.
    m. Type Ctrl-C (or whatever your Unix interrupt character is) at the
       prompt. Do you get "^C..." and a new prompt? If instead, you get a
       core dump (this shouldn't happen any more) "rm core" and then
       rebuild with -DNOCCTRAP added to your CFLAGS. If it did work, then
       type another Ctrl-C. If this does the same thing as the first one,
       then Ctrl-C handling is OK. Otherwise, the SIGINT signal is either
       not getting re-armed (shouldn't happen) or is being masked off
       after the first time it is caught, in which case, if your Unix is
       POSIX-based, try rebuilding C-Kermit with -DCK_POSIX_SIG.
    n. Type Ctrl-Z (or whatever your Unix suspend character is) to put
       C-Kermit in the background. Did it work? If nothing happened, then
       (a)your version of Unix does not support job control, or (b) your
       version of C-Kermit was probably built with -DNOJC. If your
       session became totally frozen, then you are probably running
       C-Kermit on a Unix version that supports job control, but under a
       shell that doesn't. If that's not the case, look in the congm()
       and psuspend() routines in [203]ckutio.c and see if you can figure
       out what's wrong. If you can't, rebuild with -DNOJC.
    o. Give a SET LINE command for a dialout device, e.g. "set line
       /dev/tty00". If you got some kind of permission or access denied
       message, go read [204]Section 10 and then come back here.
    p. After giving a successful SET LINE command, type "show comm" to
       see the communication parameters. Do they make sense?
    q. Type "set speed ?" and observe the list of available speeds. Is it
       what you expected? If not, see [205]Section 2) of the
       [206]Configurations Options document.
    r. Give a SET SPEED command to change the device's speed. Did it
       work? (Type "show comm" again to check.)
    s. Try dialing out: SET MODEM TYPE , SET LINE , SET SPEED , DIAL . If
       it doesn't work, keep reading. After dialing, can you REDIAL?
    t. If your version was built with TCP/IP network support, try the
       TELNET command.
    u. Transfer some files in remote mode on incoming asynchronous serial
       (direct or modem) connections, and on incoming network (telnet,
       rlogin, terminal server) connections. If you get lots of errors,
       try different SET FLOW settings on the remote Kermit program.
    v. Establish a serial connection from C-Kermit to another computer
       (direct or dialed) and transfer some files. If you have network
       support, do the same with a network connection.
    w. If your version was built with fullscreen file transfer display
       support, check that it works during local-mode file transfer.
       Also, check C-Kermit's operation afterwards: is the echoing funny?
       etc etc. If there are problems, see [207]Section 4.
    x. If your version was built with script programming language
       support, TAKE the ckedemo.ksc file to give it a workout.
    y. Does C-Kermit interlock correctly with UUCP-family programs (cu,
       tip, uucp, etc)? If not, read the section [208]DIALING OUT AND
       COORDINATING WITH UUCP below.
    z. Modem signals... Give a SET LINE command to a serial device and
       then type the SHOW MODEM command. If it says "Modem signals
       unavailable in this version of Kermit", then you might want to
       look at the ttgmdm() routine in [209]ckutio.c and add the needed
       code -- if indeed your version of Unix provides a way to get modem
       signals (some don't; e.g. modem signals are a foreign concept to
       POSIX, requiring politically incorrect workarounds).
   aa. If it says "Modem signals unavailable", then it is likely that the
       API for getting modem signals is provided, but it doesn't actually
       do anything (e.g. ioctl(ttyfd,TIOCMGET,&x) returns EINVAL).
   ab. In any case, it still should be able to manipulate the DTR signal.
       To test, SET LINE , SET MODEM NONE, and HANGUP. The DTR light
       should go out momentarily. If it doesn't, see if you can add the
       needed code for your system to the tthang() routine in
       [210]ckutio.c.
   ac. If your version of Kermit has the SET FLOW RTS/CTS command, check
       to see if it works: give Kermit this command, set your modem for
       RTS/CTS, transfer some files (using big packet and window sizes)
       and watch the RTS and CTS lights on the modem. If they go on and
       off (and Kermit does not get packet errors), then it works. If
       your version of Kermit does not have this command, but your
       version of Unix does support hardware flow control, take a look at
       the tthflow() command in [211]ckutio.c and see if you can add the
       needed code (see the section on [212]HARDWARE FLOW CONTROL below).
       (And please [213]send back any added code, so that others can
       benefit from it and it can be carried forward into future
       releases.)
   ad. If C-Kermit starts normally and issues its prompt, echoing is
       normal, etc, but then after returning from a CONNECT session, the
       prompt no longer appears, try rebuilding with -DCKCONINTB4CB.
   ae. (8.0.206 or later) Type some commands at the C-Kermit prompt. Can
       you use the Up-arrow and Down-arrow keys on your keyboard to
       access Kermit's command history? If not, and you're a programmer,
       take a look at the USE_ARROWKEYS sections of ckucmd.c.
  __________________________________________________________________________

8. REDUCING THE SIZE OF THE EXECUTABLE PROGRAM IMAGE

   [ [214]Top ] [ [215]Contents ] [ [216]Next ] [ [217]Previous ]

   Also see: [218]C-Kermit Configuration Options

    a. Many of C-Kermit's options and features can be deselected at
       compile time. The greatest savings at the least sacrifice in
       functionality is to disable the logging of debug information by
       defining NODEBUG during compilation. See the [219]Configurations
       Options document for further information.
    b. Use shared libraries rather than static linking. This is the
       default on many Unix systems anyway. However, executables built
       for dynamic linking with shared libraries are generally not
       portable away from the machine they were built on, so this is
       recommended if the binary is for your use only.
    c. Most Unix systems have a "strip" command to remove symbol table
       information from an executable program image. "man strip" for
       further information. The same effect can be achieved by including
       "-s" among the link flags when building C-Kermit.
    d. SCO, Interactive, and some other Unix versions have an "mcs"
       command. "mcs -d wermit" can be used to delete the contents of the
       ".comment" section from the executable program image.
    e. Many modern optimizers can be instructed to optimize for space
       rather than execution efficiency. Check the CFLAGS in the makefile
       target, adjust as desired.
  __________________________________________________________________________

9. UNIX VERSIONS

   [ [220]Top ] [ [221]Contents ] [ [222]Next ] [ [223]Previous ]

   SECTION CONTENTS

9.1 [224]Standards
     9.1.1. [225]POSIX
     9.1.2. [226]ANSI C
     9.1.3. [227]Other Standards
9.2. [228]Library Issues
9.3. [229]Unix File System Peculiarities
9.4. [230]Hardware Flow Control
9.5. [231]Terminal Speeds
9.6. [232]Millisecond Sleeps
9.7. [233]Nondestructive Input Buffer Peeking
9.8. [234]Other System-Dependent Features
9.9. [235]Terminal Interruption

   There are several major varieties of Unix: Bell Laboratories Seventh
   Edition, AT&T System V, Berkeley Standard Distribution (BSD), and
   POSIX. Each has many, many subvarieties and descendents, and there are
   also hybrids that exhibit symptoms of two or more varieties, plus
   special quirks of their own.

   Seventh edition versions of C-Kermit include the compile-time option
   -DV7 in the CFLAGS string in the makefile target. Various V7-based
   implementations are also supported: -DCOHERENT, -DMINIX, etc.

   AT&T-based versions of Unix Kermit include the compile-time option
   -DATTSV (standing for AT&mp;T Unix System V). This applies to System
   III and to System V up to and including Release 2. For System V
   Release 3, the flag -DSVR3 should be used instead (which also implies
   -DATTSV). This is because the data type of signal() and several other
   functions was changed between SVR2 and SVR3. For System V Release 4,
   include -DSVR4 because of changes in UUCP lockfile conventions; this
   also implies -DSVR3 and -DATTSV.

   For BSD, the flag -BSDxx must be included, where xx is the BSD version
   number, for example BSD4 (for version 4.2 or later, using only 4.2
   features), -DBSD41 (for BSD 4.1 only), -DBSD43 (for 4.3), -DBSD29 (BSD
   2.9 for DEC PDP-11s). -DBSD44 is for 4.4BSD, which is the basis of
   FreeBSD, NetBSD, OpenBSD, BSDI, and Mac OS X, and which contains many
   POSIX features, and has little relation to 4.3BSD and earlier.

   For POSIX, include the flag -DPOSIX. POSIX defines a whole new set of
   terminal i/o functions that are not found in traditional AT&T or
   Berkeley implementations, and also defines the symbol _POSIX_SOURCE,
   which is used in many system and library header files, mainly to
   disable non-POSIX (i.e. useful) features.

   Note (circa 1997): In order to enable serial speeds higher than 38400
   bps, it is generally necessary to add -DPOSIX (among other things),
   since the older terminal APIs can not accommodate the new speeds --
   out o' bits. But this often also means wholesale conversion to POSIX
   APIs. In general, just try adding -DPOSIX and then see what goes
   wrong. Be wary of features disappearing: when _POSIX_SOURCE is
   defined, all sorts of things that were perfectly OK before suddenly
   become politically incorrect -- like reading modem signals, doing
   hardware flow control, etc. POSIX was evidently not designed with
   serial communication in mind!

   Case in point: In UnixWare 7.0, #define'ing POSIX causes strictness
   clauses in the header files to take effect. These prevent <sys/time.h>
   from defining the timeval and timezone structs, which are needed for
   all sorts of things (like select()). Thus, if we want the high serial
   speeds, we have to circumvent the POSIX clauses.

   Similarly in SCO OpenServer R5.0.4 where, again, we must use the POSIX
   APIs to get at serial speeds higher than 38400, but then doing so
   removes hardware flow control -- just when we need it most! In cases
   like this, dirty tricks are the only recourse (search for SCO_OSR504
   in [236]ckutio.c for examples).

   For reasons like this, Unix implementations tend to be neither pure
   AT&T nor pure BSD nor pure POSIX, but a mixture of two or more of
   these, with "compatibility features" allowing different varieties of
   programs to be built on the same computer. In general, Kermit tries
   not to mix and match but to keep a consistent repertoire throughout.
   However, there are certain Unix implementations that only work when
   you mix and match. For example, the Silicon Graphics IRIX operating
   system (prior to version 3.3) is an AT&T Unix but with a BSD file
   system. The only way you can build Kermit successfully for this
   configuration is to include -DSVR3 plus the special option -DLONGFN,
   meaning "pretend I was built with -DBSDxx when it's time to compile
   file-related code". See the "iris" makefile target.
    ________________________________________________________________________

  9.1. Standards

   [ [237]Top ] [ [238]Section Contents ] [ [239]Contents ] [ [240]Next ]

   SUBSECTION CONTENTS

9.1.1. [241]POSIX
9.1.2. [242]ANSI C
9.1.3. [243]Other Standards

   In edits 166-167 (1988-89), C-Kermit was heavily modified to try to
   keep abreast of new standards while still remaining compatible with
   old versions of C and Unix. There are two new standards of interest:
   ANSI C (as described in Kernighan and Ritchie, "The C Programming
   Language", Second Edition, Prentice Hall, 1988) and POSIX.1 (IEEE
   Standard 1003.1 and ISO/IEC 9945-1, 1990, "Portable Operating System
   Interface"). These two standards have nothing to do with each other:
   you can build C-Kermit with a non-ANSI compiler for a POSIX system, or
   for a non-POSIX system with with an ANSI compiler.

    9.1.1. POSIX

   POSIX.1 defines a repertoire of system functions and header files for
   use by C language programs. Most notably, the ioctl() function is not
   allowed in POSIX; all ioctl() functions have been replaced by
   device-specific functions like tcsetattr(), tcsendbreak(), etc.

   Computer systems that claim some degree of POSIX compliance have made
   some attempt to put their header files in the right places and give
   them the right names, and to provide system library functions with the
   right names and calling conventions. Within the header files,
   POSIX-compliant functions are supposed to be within #ifdef
   _POSIX_SOURCE..#endif conditionals, and non-POSIX items are not within
   these conditionals.

   If Kermit is built with neither -D_POSIX_SOURCE nor -DPOSIX, the
   functions and header files of the selected version of Unix (or VMS,
   etc) are used according to the CFLAGS Kermit was built with.

   If Kermit is built with -D_POSIX_SOURCE but not -DPOSIX, then one of
   the -DBSD or -DATTSV flags (or one that implies them) must also be
   defined, but it still uses only the POSIX features in the system
   header files. This allows C-Kermit to be built on BSD or AT&T systems
   that have some degree of POSIX compliance, but still use BSD or AT&T
   specific features.

   The dilimma is this: it is often necessary to define _POSIX_SOURCE to
   get at new or modern features, such as high serial speeds and the APIs
   to deal with them. But defining _POSIX_SOURCE also hides other APIs
   that Kermit needs, for example the ones dealing with modem signals
   (others are listed just below). Thus all sorts of hideous contortions
   are often required to get a full set of features.

   The POSIX standard does not define anything about uucp lockfiles.
   "make posix" uses NO (repeat, NO) lockfile conventions. If your
   POSIX-compliant Unix version uses a lockfile convention such as
   HDBUUCP (see below), use the "posix" entry, but include the
   appropriate lockfile option in your KFLAGS on the "make" command line,
   for example:

make posix "KFLAGS=-DHDBUUCP"

   POSIX.1 also lacks certain other features that Kermit needs. For
   example:

     * There is no defined way for an application to do wildcard matching
       of filenames. Kermit uses the inode in the directory structure,
       but POSIX.1 does not include this concept. (Later POSIX revisions
       include functions named (I think) glob() and fnmatch(), but these
       functions are not yet in Kermit, and might not be appropriate in
       any case.)
     * There is no POSIX mechanism for sensing or controlling modem
       signals, nor to enable RTS/CTS or other hardware flow control.
     * There is no select() for multiplexing i/o, and therefore no
       TCP/IP.
     * There is no way to check if characters are waiting in a
       communications device (or console) input buffer, short of trying
       to read them -- no select(), ioctl(fd,FIONREAD,blah), rdchk(),
       etc. This is bad for CONNECT mode and bad for sliding windows.
     * No way to do a millisecond sleep (no nap(), usleep(), select(),
       etc).
     * There is no popen().

   So at this point, there cannot be one single fully functional POSIX
   form of C-Kermit unless it also has "extensions", as do Linux, QNX,
   etc.

   More on POSIX (quoting from a newsgroup posting by Dave Butenhof):

     Standards tend to look at themselves as "enabling". So POSIX
     standards say that, in order to use POSIX functions, a program must
     define some macro that will put the development environment in
     "POSIX mode". For the ancient POSIX 1003.1-1990, the symbol is
     _POSIX_SOURCE. For recent revisions, it's _POSIX_C_SOURCE with an
     appropriate value. POSIX 1003.1-1996 says that, to use its features
     in a portable manner, you must define _POSIX_C_SOURCE=199506L
     before including any header files.

     But for Solaris, or Digital Unix, the picture is different. POSIX
     is one important but small part of the universe. Yet POSIX
     unconditionally and unambiguously REQUIRES that, when
     _POSIX_C_SOURCE=199506L, ALL of the functions and definitions
     required by the standard, and NO others (except in specific
     restricted namespaces, specifically "_" followed by an uppercase
     letter or "__" followed by a lowercase letter) shall be visible.
     That kinda puts a cramp on BSD and SVID support, because those
     require names that are not in the "protected" POSIX namespaces.
     It's ILLEGAL to make those symbols visible, unless you've done
     something else that's beyond the scope of POSIX to allow the system
     to infer that you didn't really mean it.

     In most cases, you should just compile, with no standards-related
     macros defined. The system will make available every interface and
     definition that isn't incompatible with the "main stream". There
     may indeed be cases where two standards cross, and you really can't
     use both together. But, in general, they play nicely together as
     long as you don't do anything rash -- like telling the system that
     it's not allowed to let them.

     In the area of threads, both Solaris and Digital Unix support
     incompatible thread APIs. We have POSIX and DCE, they have POSIX
     and UI. The nasty areas are in the _r routines and in some aspects
     of signal behavior. You cannot compile a single source file that
     uses both semantics. That's life. It sounds as if Solaris defaults
     to the UI variants, but allows you to define this
     _POSIX_THREAD_SEMANTICS to get around it. We default to POSIX, and
     allow you to define _PTHREAD_USE_D4 (automatically defined by the
     cc "-threads" switch) to select the DCE thread variants. That
     default, because you're operating outside of any individual
     standard, is really just a marketing decision.
      ______________________________________________________________________

    9.1.2. ANSI C

   [ [244]Top ] [ [245]Contents ] [ [246]Section Contents ] [
   [247]Subsection Contents ] [ [248]Next ] [ [249]Previous ]

   The major difference between ANSI C and earlier C compilers is
   function prototyping. ANSI C allows function arguments to be checked
   for type agreement, and (when possible) type coercion in the event of
   a mismatch. For this to work, functions and their arguments must be
   declared before they are called. The form for function declarations is
   different in ANSI C and non-ANSI C (ANSI C also accepts the earlier
   form, but then does not do type checking).

   As of edit 167, C-Kermit tries to take full advantage of ANSI C
   features, especially function prototyping. This removes many bugs
   introduced by differing data types used or returned by the same
   functions on different computers. ANSI C features are automatically
   enabled when the symbol __STDC__ is defined. Most ANSI C compilers,
   such as GNU CC and the new DEC C compiler define this symbol
   internally.

   On the downside, ANSI C compilation increases the
   administrative/bureacratic burden, spewing out countless unneeded
   warnings about mismatched types, especially when we are dealing with
   signed and unsigned characters, requiring casts everywhere to shut up
   the mindless complaints -- there is no use for signed chars in Kermit
   (or probably anywhere else). Some compilers, mercifully, include a
   "treat all chars as unsigned" option, and when available it should be
   used -- not only to stop the warnings, but also to avoid unhelpful
   sign extension on high-bit characters.

   To force use of ANSI C prototypes, include -DCK_ANSIC on the cc
   command line. To disable the use of ANSI prototypes, include -DNOANSI.
      ______________________________________________________________________

    9.1.3. Other Standards

   [ [250]Top ] [ [251]Contents ] [ [252]Section Contents ] [
   [253]Subsection Contents ] [ [254]Next ] [ [255]Previous ]

   As the years go by, standards with-which-all-must-comply continue to
   pile up: AES, XPG2, XPG3, XPG4, FIPS 151-2, successive generations of
   POSIX, OSF/1, X/Open, Spec 1170, UNIX95, Open Group UNIX98, ISO/IEC
   9945 parts 1-4, ISO 9899, 88Open, OS 99, Single Unix Specification
   (SUS, [256]IEEE 1003.1-2001, not to mention "mature standards" like
   V7, 4.2/4.3BSD, System V R3 and R4 (SVID2 and SVID3), 4.4BSD (the
   basis for BSDI, OpenBSD, NetBSD, FreeBSD, Mac OS X etc), /usr/group,
   plus assorted seismic pronouncements of the neverending series of
   ephemeral corporate consortia, not to mention the libc-vs-glibc
   turmoil in the Linux arena and who knows what else.

   None of these standards simplifies life for portable applications like
   C-Kermit -- each one is simply one more environment to support (or
   circumvent, as in many cases these standards do more harm than good by
   denying access to facilities we need, e.g. as noted in above in
   [257]9.1.1).
    ________________________________________________________________________

  9.2. Library Issues

   [ [258]Top ] [ [259]Contents ] [ [260]Section Contents ] [
   [261]Subsection Contents ] [ [262]Next ] [ [263]Previous ]

   On most modern platforms, applications are -- and often must be --
   dynamically linked. This has numerous advantages (smaller executables,
   ability to patch a library and thereby patch all applications that use
   it, etc), but also causes some headaches: most commonly, the library
   ID built into the executable at link time does not match the ID of the
   corresponding library on the target system, and so the loader refuses
   to let the application run.

   This problem only gets worse over time. In the Linux and *BSD world,
   we also have totally different libraries (each with their own names
   and numbering systems) that cover the same territory; for example,
   curses vs ncurses, libc versus glibc. Combinations proliferate and any
   given Unix computer might have any combination. For this reason it is
   becoming increasingly difficult to produce a "Linux binary" for a
   given architecture (e.g. PC or Alpha). There has to be a separate
   binary for (at least) every combination of curses vs ncurses and libc
   vs glibc.

   In such cases, the best advice is for every user to build C-Kermit
   from source code on the system where it will run. Too bad most
   commercial Unix vendors have stopped including C compilers with the
   operating system!
    ________________________________________________________________________

  9.3. Unix File System Peculiarities

   [ [264]Top ] [ [265]Contents ] [ [266]Section Contents ] [ [267]Next ]
   [ [268]Previous ]

   Normally, including a BSD, System-V, POSIX, or DIRENT flag in the make
   entry selects the right file system code. But some versions of Unix
   are inconsistent in this regard, and building in the normal way either
   gives compiler or linker errors, or results in problems at runtime,
   typically failure to properly expand wildcard file specifications when
   you do something like "send *.*", or failure to recognize long
   filenames, as in "send filewithaveryveryveryveryverylongname".

   C-Kermit is supposed to know about all the various styles of Unix file
   systems, but it has to be told which one to use when you build it,
   usually in the makefile target CFLAGS as shown below, but you might
   also have to add something like -I/usr/include/bsd to CFLAGS, or
   something like -lbsd to LIBS.

   C-Kermit gives you the following CFLAGS switches to adapt to your file
   system's peculiarities:

-DDIRENT   - #include <dirent.h>
-DSDIRENT  - #include <sys/dirent.h>
-DNDIR     - #include <ndir.h>
-DXNDIR    - #include <sys/ndir.h>
-DRTU      - #include "/usr/lib/ndir.h", only if NDIR and XNDIR not defined.
-DSYSUTIMH - #include <sys/utime.h> for setting file creation dates.
-DUTIMEH   - #include <utime.h> for setting file creation dates.

   (Note, RTU should only be used for Masscomp RTU systems, because it
   also selects certain other RTU-specific features.)

   If none of these is defined, then <sys/dir.h> is used. IMPORTANT: If
   your system has the file /usr/include/dirent.h then be sure to add
   -DDIRENT to your makefile target's CFLAGS. "dirent" should be used in
   preference to any of the others, because it supports all the features
   of your file system, and the others probably don't.

   Having selected the appropriate directory header file, you might also
   need to tell Kermit how to declare the routines and variables it needs
   to read the directory. This happens most commonly on AT&T System-V
   based UNIXes, particularly System V R3 and earlier, that provide long
   file and directory names (longer than 14 characters). Examples include
   certain releases of HP-UX, DIAB DNIX, older versions of Silicon
   Graphics IRIX, and perhaps also MIPS. In this case, try adding
   -DLONGFN to your makefile target.

   Another problem child is <sys/file.h>. Most Unix C-Kermit versions
   need to #include this file from within [269]ckufio.c and
   [270]ckutio.c, but some not only do not need to include it, but MUST
   not include it because (a) it doesn't exist, or (b) it has already
   been included by some other header file and it doesn't protect itself
   against multiple inclusion, or (c) some other reason that prevents
   successful compilation. If you have compilation problems that seem to
   stem from including this file, then add the following switch to CFLAGS
   in your makefile target:

-DNOFILEH

   There are a few odd cases where <sys/file.h> must be included in one
   of the cku[ft]io.c files, but not the other. In that case, add the
   aforementioned switch, but go into the file that needs <sys/file.h>
   and add something like this:

#ifdef XXX       /* (where XXX is a symbol unique to your system) */
#undef NOFILEH
#endif /* XXX */

   before the section that includes <sys/file.h>.

   Kermit's SEND command expands wildcard characters "?" and "*" itself.
   Before version 5A, commands like "send *" would send all regular
   (non-directory) files, including "hidden files" (whose names start
   with "."). In version 5A, the default behavior is to match like the
   Bourne shell or the ls command, and not include files whose names
   start with dot. Such files can still be sent if the dot is included
   explicitly in the SEND command: "send .oofa, send .*". To change back
   to the old way and let leading wildcard characters match dot files,
   include the following in your CFLAGS:

-DMATCHDOT

   (In C-Kermit 6.0, there is also a command to control this at runtime.)

   Complaints about data-type mismatches:

     * If you get compile-time complaints about data type mismatches for
       process-ID related functions like getpid(), add -DPID_T=pid_t.
     * If you get compile-time complaints about data type mismatches for
       user ID related functions like getuid(), add -DUID_T=uid_t.
     * If you get compile-time complaints about data type mismatches for
       user-ID related functions like getgid(), add -DGID_T=gid_t.
     * If you get compile-time complaints about data type mismatches for
       getpwuid(), add -DPWID_T=uid_t (or whatever it should be).

   File creation dates: C-Kermit attempts to set the creation date/time
   of an incoming file according to the date/time given in the file's
   attribute packet, if any. If you find that the dates are set
   incorrectly, you might need to build Kermit with the -DSYSUTIMEH flag,
   to tell it to include <sys/utime.h>. If that doesn't help, look at the
   code in zstrdt() in [271]ckufio.c.
    ________________________________________________________________________

  9.4. Hardware Flow Control

   [ [272]Top ] [ [273]Contents ] [ [274]Section Contents ] [ [275]Next ]
   [ [276]Previous ]

   Hardware flow control is a problematic concept in many popular Unix
   implementations. Often it is lacking altogether, and when available,
   the application program interface (API) to it is inconsistent from
   system to system. Here are some examples:

    a. POSIX does not support hardware flow control.
    b. RTS/CTS flow control support MIGHT be available for System V R3
       and later if /usr/include/termiox.h exists (its successful
       operation also depends on the device driver, and the device
       itself, not to mention the cable, etc, actually supporting it). If
       your SVR3-or-later Unix system does have this file, add:

-DTERMIOX

       to your CFLAGS. If the file is in /usr/include/sys instead, add:

-DSTERMIOX

       Note that the presence of this file does not guarantee that
       RTS/CTS will actually work -- that depends on the device-driver
       implementation (reportedly, many Unix versions treat
       hardware-flow-control related ioctl's as no-ops).
    c. Search ("grep -i") through /usr/include/*.h and
       /usr/include/sys/*.h for RTS or CTS and see what turns up. For
       example, in SunOS 4.x we find "CRTSCTS". Figuring out how to use
       it is another question entirely! In IBM AIX RS/6000 3.x, we have
       to "add" a new "line discipline" (and you won't find uppercase RTS
       or CTS symbols in the header files).
    d. NeXTSTEP and IRIX, and possibly others, support hardware flow
       control, but do not furnish an API to control it, and thus on
       these systems Kermit has no command to select it -- instead, a
       special device name must be used. (NeXTSTEP: /dev/cufa instead of
       /dev/cua; IRIX: /dev/ttyf00)

   See the routine tthflow() in [277]ckutio.c for details. If you find
   that your system offers hardware flow control selection under program
   control, you can add this capability to C-Kermit as follows:

    a. See if it agrees with one of the methods already used in
       tthflow(). if not, add new code, appropriately #ifdef'd.
    b. Add -DCK_RTSCTS to the compiler CFLAGS in your makefile target or
       define this symbol within the appropriate #ifdefs in
       [278]ckcdeb.h.

   To illustrate the difficulties with RTS/CTS, here is a tale from Jamie
   Watson <jw@adasoft.ch>, who added the RTS/CTS code for the RS/6000,
   about his attempts to do the same for DEC ULTRIX:

     "The number and type of hardware signals available to/from a serial
     port vary between different machines and different types of serial
     interfaces on each machine. This means that, for example, there are
     virtually no hardware signals in or out available on the DECsystem
     3000/3100 series; on the DECsystem 5000/2xx series all modem
     signals in/out are present on both built-in serial ports; on the
     DECsystem 5100 some ports have all signals and some only have some;
     and so on... It looks to me as if this pretty well rules out any
     attempt to use hardware flow control on these platforms, even if we
     could figure out how to do it. The confusion on the user level
     about whether or not it should work for any given platform or port
     would be tremendous. And then it isn't clear how to use the
     hardware signals even in the cases where the device supports them."
    ________________________________________________________________________

  9.5. Terminal Speeds

   [ [279]Top ] [ [280]Contents ] [ [281]Section Contents ] [ [282]Next ]
   [ [283]Previous ]

   The allowable speeds for the SET SPEED command are defined in
   [284]ckcdeb.h. If your system supports speeds that are not listed in
   "set speed ?", you can add definitions for them to ckcdeb.h.

   Then if the speed you are adding is one that was never used before in
   Kermit, such as 921600, you'll also need to add the appropriate
   keywords to spdtab[] in [285]ckuus3.c, and the corresponding case to
   ttsspd() in [286]ckutio.c.
    ________________________________________________________________________

  9.6. Millisecond Sleeps

   [ [287]Top ] [ [288]Contents ] [ [289]Section Contents ] [ [290]Next ]
   [ [291]Previous ]

   There is no standard for millisecond sleeps, but at least five
   different functions have appeared in various Unix versions that can be
   used for this purpose: nap() (mostly in System V), usleep() (found at
   least in SunOS and NeXT OS), select() (found in 4.2BSD and later, and
   part of any TCP/IP sockets library), nanosleep(), and sginap(). If you
   have any of these available, pick one (in this order of preference, if
   you have more than one):

-DSELECT: Include this in CFLAGS if your system has the select() function.
-DNAP:    Include this in CFLAGS if your system has the nap() function.
-USLEEP:  Include this in CFLAGS if your system has the usleep() function.

   NOTE: The nap() function is assumed to be a function that puts the
   process to sleep for the given number of milliseconds. If your
   system's nap() function does something else or uses some other units
   of time (like the NCR Tower 32, which uses clock-ticks), do not
   include -DNAP.

   Reportedly, all versions of System V R4 for Intel-based computers, and
   possibly also SVR3.2, include nap() as a kernel call, but it's not in
   the library. To include code to use it via syscall(3112,x), without
   having to include Xenix compatibility features, include the following
   compile-time option:

-DNAPHACK
    ________________________________________________________________________

  9.7. Nondestructive Input Buffer Peeking

   [ [292]Top ] [ [293]Contents ] [ [294]Section Contents ] [ [295]Next ]
   [ [296]Previous ]

   Some AT&T Unix versions have no way to check if input is waiting on a
   tty device, but this is a very important feature for Kermit. Without
   it, sliding windows might not work very well (or at all), and you also
   have to type your escape character to get Kermit's attention in order
   to interrupt a local-mode file transfer. If your system offers an
   FIONREAD ioctl, the build procedure should pick that up automatically
   and use it, which is ideal.

   If your system lacks FIONREAD but has a select() function, this can be
   used instead. If the build procedure fails to include it (SHOW
   FEATURES will list SELECT), then you can add it to your CFLAGS:

-DSELECT

   Conversely, if the build procedure tries to use select() when it
   really is not there, add:

-DNOSELECT

   Note: select() is not part of System V nor of POSIX, but it has been
   added to various System-V- and POSIX-based systems as an extension.

   Some System-V variations (SCO Xenix/UNIX/ODT and DIAB DNIX) include a
   rdchk() function that can be used for buffer peeking. It returns 0 if
   no characters are waiting and 1 if characters are waiting (but unlike
   FIONREAD, it does not tell the actual number). If your system has
   rdchk(), add:

-DRDCHK:  Include this in CFLAGS if your system has the rdchk() function.

   Otherwise, if your version of Unix has the poll() function (and the
   /usr/include/poll.h file) -- which appears to be a standard part of
   System V going back to at least SVR3, include:

-DCK_POLL
    ________________________________________________________________________

  9.8. Other System-Dependent Features

   [ [297]Top ] [ [298]Contents ] [ [299]Section Contents ] [ [300]Next ]
   [ [301]Previous ]

   Systems with <termios.h> might have the symbol IEXTEN defined. This is
   used to turn "extended features" in the tty device driver on and off,
   such as Ctrl-O to toggle output flushing, Ctrl-V to quote input
   characters, etc.

   In most Unix implementations, it should be turned off during Kermit
   operation, so if [302]ckutio.c finds this symbol, it uses it. This is
   necessary, at least, on BSDI. On some systems, however, IEXTEN is
   either misdefined or misimplemented. The symptom is that CR, when
   typed to the command processor, is echoed as LF, rather than CRLF.
   This happens (at least) on Convex/OS 9.1. The solution is to add the
   following symbol to the makefile target's CFLACS:

-DNOIEXTEN

   However, in at least one Unix implementation, QNX 4.21, IEXTEN must be
   set before hardware flow control can be used.

   In edits 177 and earlier, workstation users noticed a "slow screen
   writing" phenomenon during interactive command parsing. This was
   traced to a setbuf() call in [303]ckutio.c that made console (stdout)
   writes unbuffered. This setbuf() call has been there forever, and
   could not be removed without some risk. Kermit's operation was tested
   on the NeXT in edit 178 with the setbuf() call removed, and the
   slow-writing symptom was cured, and everything else (command parsing,
   proper wakeup on ?, ESC, Ctrl-U, and other editing characters,
   terminal emulation, remote-mode and local-mode file transfer, etc)
   seemed to work as well as or better than before. In subsequent edits,
   this change was made to many other versions too, with no apparent ill
   effects. To remove the setbuf() call for your version of Kermit, add:

-DNOSETBUF

   Later reports indicate that adding -DNOSETBUF has other beneficial
   effects, like cutting down on swapping when Kermit is run on
   workstations with small memories. But BEWARE: on certain small Unix
   systems, notably the AT&T 6300 and 3B1 (the very same ones that
   benefit from NOSETBUF), NOSETBUF seems to conflict with CK_CURSES. The
   program builds and runs OK, but after once using the curses display,
   echoing is messed up. In this case, we use a System-V specific
   variation in the curses code, using newterm() to prevent System V from
   altering the buffering. See makefile entries for AT&T 6300 and 3B1.

   The Unix version of C-Kermit includes code to switch to file
   descriptor zero (stdin) for remote-mode file transfer. This code is
   necessary to prevent Kermit from giving the impression that it is
   "idle" during file transfers, which, at some sites, can result in the
   job being logged out in the middle of an active file transfer by
   idle-job monitors.

   However, this feature can interfere with certain setups; for example,
   there is a package which substitutes a pty/tty pair for /dev/tty and
   sets file descriptor 0 to be read-only, preventing Kermit from sending
   packets. Or... When a Unix shell is invoked under the PICK
   environment, file descriptor 0 is inoperative.

   To remove this feature and allow Kermit to work in such environments,
   add the compile-time option:

-DNOFDZERO

   On some versions of Unix, earlier releases of C-Kermit were reported
   to render a tty device unusable after a hangup operation. Examples
   include IBM AIX on the RT PC and RS/6000. A typical symptom of this
   phenomenon is that the DIAL command doesn't work, but CONNECTing to
   the device and dialing manually do work. A further test is to SET DIAL
   HANGUP OFF, which should make dialing work once by skipping the
   pre-dial hangup. However, after the connection is broken, it can't be
   used any more: subsequent attempts to DIAL the same device don't work.
   The cure is usually to close and reopen the device as part of the
   hangup operation. To do this, include the following compile-time
   option:

-DCLSOPN

   Similarly, there is a section of code in ttopen(), which does another
   close(open()) to force the O_NDELAY mode change. On some systems, the
   close(open()) is required to make the mode change take effect, and
   apparently on most others it does no harm. But reportedly on at least
   one System V R4 implementation, and on SCO Xenix 3.2, the
   close(open()) operation hangs if the device lacks carrier, EVEN THOUGH
   the CLOCAL characteristic has just been set to avoid this very
   problem. If this happens to you, add this to your CFLAGS:

-DNOCOTFMC

   or, equivalently, in your KFLAGS on the make command line. It stands
   for NO Close(Open()) To Force Mode Change.

   C-Kermit renames files when you give a RENAME command and also
   according to the current SET FILE COLLISION option when receiving
   files. The normal Unix way to rename a file is via two system calls:
   link() and unlink(). But this leaves open a window of vulnerability.
   Some Unix systems also offer an atomic rename(oldname,newname)
   function. If your version of Unix has this function, add the following
   to your CFLAGS:

-DRENAME

   C-Kermit predefines the RENAME for several Unix versions in
   [304]ckcdeb.h (SVR4, SUNOS41, BSD44, AIXRS, etc). You can tell if
   rename() is being used if the SHOW FEATURES command includes RENAME in
   the compiler options list. If the predefined RENAME symbol causes
   trouble, then add NORENAME to your CFLAGS. Trouble includes:

    a. Linker complains that _rename is an unresolved symbol.
    b. Linking works, but Kermit's RENAME command doesn't work (which
       happens because older versions of rename() might have their
       arguments reversed).

   If rename() is not used, then Kermit uses link()/unlink(), which is
   equivalent except it is not atomic: there is a tiny interval in which
   some other process might "do something" to one of the files or links.

   Some Unix systems (Olivetti X/OS, Amdahl UTS/V, ICL SVR3, etc) define
   the S_ISREG and S_ISDIR macros incorrectly. This is compensated for
   automatically in [305]ckufio.c. Other systems might have this same
   problem. If you get a compile-time error message regarding S_ISREG
   and/or S_ISDIR, add the following to your CFLAGS:

-DISDIRBUG

   Finally, here's a symbol you should NEVER define:

-DCOMMENT

   It's used for commenting out blocks of code. If for some reason you
   find that your compiler has COMMENT defined, then add -UCOMMENT to
   CFLAGS or KFLAGS! Similarly, some header files have been known to
   define COMMENT, in which case you must add "#undef COMMENT" to each
   C-Kermit source module, after all the #includes.
    ________________________________________________________________________

  9.9. Terminal Interruption

   [ [306]Top ] [ [307]Contents ] [ [308]Section Contents ] [ [309]Next ]
   [ [310]Previous ]

   When C-Kermit enters interactive command mode, it sets a Control-C
   (terminal keyboard interrupt = SIGINT) trap to allow it to return to
   the command prompt whenever the user types Control-C (or whatever is
   assigned to be the interrupt character). This is implemented using
   setjmp() and longjmp(). On some systems, depending on the machine
   architecture and C compiler and who knows what else, you might get
   "Memory fault (coredump)" or "longjmp botch" instead of the desired
   effect (this should not happen in 5A(190) and later). In that case,
   add -DNOCCTRAP to your CFLAGS and rebuild the program.

   Job control -- the ability to "suspend" C-Kermit on a Unix system by
   typing the "susp" character (normally Ctrl-Z) and then resume
   execution later (with the "fg" command) -- is a tricky business.
   C-Kermit must trap suspend signals so it can put the terminal back
   into normal mode when you suspend it (Kermit puts the terminal into
   various strange modes during interactive command parsing, CONNECT, and
   file transfer). Supporting code is compiled into C-Kermit
   automatically if <signal.h> includes a definition for the SIGTSTP
   signal. HOWEVER... some systems define this signal without supporting
   job control correctly. You can build Kermit to ignore SIGTSTP signals
   by including the -DNOJC option in CFLAGS. (You can also do this at
   runtime by giving the command SET SUSPEND OFF.)

     NOTE: As of version 5A(190), C-Kermit makes another safety check.
     Even if job control is available in the operating system (according
     to the numerous checks made in congm()), it will still disable the
     catching of SIGTSTP signals if SIGTSTP was set to SIG_IGN at the
     time C-Kermit was started.

   System V R3 and earlier systems normally do not support job control.
   If you have an SVR3 system that does, include the following option in
   your CFLAGS:

-DSVR3JC

   On systems that correctly implement POSIX signal handling, signals can
   be handled more reliably than in Bell, Berkeley, or AT&T Unixes. On
   systems (such as QNX) that are "strictly POSIX", POSIX signal handling
   *must* be used, otherwise no signal will work more than once. If you
   have POSIX-based system and you find that your version of Kermit
   responds to Ctrl-C (SIGINT) or Ctrl-Z (SIGTSTP) only once, then you
   should add the following option to your CFLAGS:

-DCK_POSIX_SIG

   But be careful; some POSIX implementations, notably 4.4BSD, include
   POSIX signal handling symbols and functions as "stubs" only, which do
   nothing. Look in <signal.h> for sigsetjmp and siglongjmp and read the
   comments.
  __________________________________________________________________________

10. DIALING OUT AND COORDINATING WITH UUCP

   [ [311]Top ] [ [312]Contents ] [ [313]Next ] [ [314]Previous ]

     NOTE: Red Hat Linux 7.2 and later include a new API that allows
     serial-port arbitration by non-setuid/gid programs. This API has
     not yet been added to C-Kermit. If C-Kermit is to be used for
     dialing out on Red Hat 7.2 or later, it must still be installed as
     described in this section and the next. 

   The short version:

     In order for C-Kermit to be able to dial out from your Unix
     computer, you need to give it the same owner, group, and
     permissions as your other dialout programs, such as cu, tip,
     minicom, uucp, seyon, etc.

   The long version:

   Make sure your dialout line is correctly configured for dialing out
   (as opposed to login). The method for doing this is different for each
   kind of Unix. Consult your system documentation for configuring lines
   for dialing out (for example, Sun SPARCstation IPC users should read
   the section "Setting up Modem Software" in the Desktop SPARC Sun
   System and Network Manager's Guide, or the Terminals and Modems
   section of the HP manual, "Configuring HP-UX for Peripherals" (e.g.
   /usr/sbin/sam => Peripheral Devices => Terminals and Modems => Add
   Modem).

   Unlike most other multiuser, multitasking operating systems, Unix
   allows multiple users to access the same serial device at the same
   time, even though there is no earthly reason why two users should do
   this. When they do, user A will read some of the incoming characters,
   and user B will read the others. In all likelihood, neither user will
   see them all. Furthermore, User B can hang up User A's call, etc.

   Rather than change Unix to enforce exclusive access to serial devices
   such as ttys, Unix developers chose instead to use a "lock file". Any
   process that wants to open a tty device should first check to see if a
   file of a certain name exists, and if so, not to open the device. If
   the file does not exist, the process creates the file and then opens
   the device. When the process closes the device, it destroys the
   lockfile. This procedure was originated for use with Unix's UUCP, CU,
   and TIP programs, and so these lockfiles are commonly called "UUCP
   lockfiles" (UUCP = Unix-to-Unix Copy Program).

   As you can imagine, this method is riddled with pitfalls:

     * If a process does not observe the prevailing lockfile convention,
       then it can interfere with other "polite" processes. And in fact,
       very few Unix applications or commands handle lockfiles at all; an
       original design goal of Unix was that "everything is a file", and
       countless utilities operate on files directly (by opening them) or
       indirectly through redirection of standard i/o, without creating
       or looking for lockfiles.
     * If a process crashes while it has the device open, the lockfile is
       left behind, preventing further processes from using the device.
     * Various versions of Unix use different names for the lockfiles,
       put them in different directories, with different owners and
       groups and permissions, and specify their contents differently.
     * On a given platform, the lockfile conventions may change from one
       Unix release to the next (for example, SunOS 4.0 to 4.1) or, in
       the case of Linux, across different distributions.
     * The same tty device might have more than one name, and most
       lockfile conventions don't allow for this. Similarly for symbolic
       links.

   In an attempt to address the problem of "stale" lockfiles, most UUCP
   implementations put the PID (Process ID) of the creating process in
   the lockfile. Thus, another process that wants to open the
   corresponding device can check not only for the lockfile itself, but
   also can check the PID for validity. But this doesn't work well
   either:

     * PIDs are stored in diverse formats that change with every new
       release (short, integer, long, or string in any of various
       formats). If the reading program does not follow the same
       convention as the writing program, it can diagnose a valid PID to
       be invalid, and therefore not honor the lock.
     * PIDs recycle. If the lockfile was created by PID 1234, which later
       crashed without removing the lockfile, and then a new process 1234
       exists a the time the lockfile is checked, the lockfile will be
       improperly taken as valid, and access to the device denied
       unnecessarily.

   Several techniques address the problem of multiple names for the same
   device:

     * Multiple lockfiles. For example, if the user opens a device
       through a symlink, a lockfile is created for both the symlink name
       and the true name (obtained from readlink()). However, when
       multiple drivers are installed for the same device (e.g. /dev/cua,
       /dev/cufa, etc), this approach won't work unless all applications
       *know* all the different names for the same device and make
       lockfiles for all of them, which is obviously not practical.
     * Lockfiles whose names are not based on the device name. These
       lockfiles generally have names like LK.inode/major/minor, where
       inode, major, and minor are numbers, which will always be the same
       for any physical device, no matter what its name. This form of
       lockfile is used in System V R4 and its derivatives, such as
       Solaris, UnixWare, etc. If lockfiles must be used (as opposed to,
       say, kernel-based locks), this would seem to be the most effective
       form.

   Most versions of Unix were not designed to accommodate third-party
   communications software; thus vendors of these Unix products feel no
   compunction about changing lockfile conventions from release to
   release, since they also change their versions of the cu, uucp, tip,
   etc, programs at the same time to match. And since the source code to
   these programs might not be published, it is difficult for makers of
   third-party products like C-Kermit to find out what the new
   conventions are. It also forces release of new versions of C-Kermit
   whenever the OS vendor makes a change like this.

   Some Unix vendors have taken a small step to simplify communications
   application development for their products: the inclusion of lockfile
   routines in the standard system C runtime libraries to shield the
   application from the details of lockfile management (IBM AIX is an
   example). When such routines are used, communications applications do
   not need modification when lockfile conventions change (although they
   will need recompiling if the routines are statically linked into the
   application). In the AIX example, the simple function calls ttylock(),
   ttyunlock(), and ttylocked() replace hundreds of lines of ugly code in
   C-Kermit that attempts to keep pace with every release of every Unix
   product over the last 20 years. Inclusion of ttylock() code occurs
   when:

-DUSETTYLOCK

   is included in the CFLAGS.

   If such routines are available, they should be used. The rest of this
   section applies when they are not.

   To fit in with UUCP and other Unix-based communication software,
   C-Kermit must have the same idea as your system's uucp, cu, and tip
   programs about what the UUCP lock directory is called, what the
   lockfile itself is called, and what its contents should be. In most
   cases, C-Kermit preprocessor flags create the appropriate
   configuration at compile time if the appropriate makefile target was
   used (see [315]ckutio.c). The following CFLAGS options can be used to
   override the built-in configuration:

   -DLCKDIR
          Tells Kermit that the UUCP lock directory is
          /usr/spool/uucp/LCK.

   -DACUCNTRL
          Tells Kermit to use the BSD 4.3 acucntrl() program to turn off
          getty (login) on the line before using it, and restore getty
          when done.

   -DHDBUUCP
          Include this if your system uses Honey DanBer UUCP, in which
          the lockfile directory and format are relatively standardized.

   -DLOCK_DIR=\\\"/xxx/yyy\\\"
          Gives the lock directory name explicitly. The triple quoting is
          necessary. For example:

CFLAGS= -DBSD4 -DLOCK_DIR=\\\"/usr/local/locks\\\" -DNODEBUG

          (NOTE: The triple quoting assumes this is a "top-level" make
          entry, and not a make entry that calls another one.)

   -DLFDEVNO The lockfile name uses the tty device inode and major and
          minor
          numbers: LK.dev.maj.min, as in Sys V R4, e.g. LK.035.044.008.

   When the LK.inode.major.minor form is used, a single lockfile is
   enough. Otherwise, a single lockfile rarely suffices. For example, in
   Linux, it is common to have a /dev/modem symbolic link to an actual
   dialout device, like /dev/cua0 or /dev/ttyS0, whose purpose is to hide
   the details of the actual driver from the user. So if one user opens
   /dev/modem, a lockfile called LCK..modem is created, which does not
   prevent another user from simulataneously opening the same device by
   its real name.

   On SCO Unix platforms, we have a slightly different problem: the same
   device is, by convention, known by "lowercase" and "uppercase" names,
   depending on whether it has modem control. So by convention,
   communications programs are supposed to create the lockfiles based on
   the lowercase name. But some programs don't follow this convention. In
   HP-UX, we have several different names for each serial device. And so
   on.

   For this reason, on platforms where the LK.inode.major.minor form is
   not used, C-Kermit also creates a secondary lockfile (which is simply
   a link to the first) if:

    a. The given device name is a symbolic link. The secondary link is
       based on the device's real name.
    b. On SCO: The device name is not a symbolic link, but it contains
       uppercase letters. The primary link is based on the lowercase
       name; the secondary link is based on the name that was given.
    c. On HP-UX: The device name starts with "cu". The primary link is
       based on the name that was given; the secondary link is based on
       the corresponding "ttyd" device, e.g. "LCK..cua0p0" and
       "LCK..ttyd0p0".

   NOTE: symlinks are not handled in HP-UX.

   Honey DanBer (HDB) UUCP, which is becoming increasingly popular, has
   two characteristics:

    a. Lockfiles are kept in /usr/spool/locks/ (usually).
    b. A lockfile contains the process id (pid) in ASCII, rather than as
       an int.

   Non-HDB selections assume the lockfile contains the pid in int form
   (or, more precisely, in PID_T form, where PID_T is either int or
   pid_t, depending on your system's C library and header files). (b), by
   the way, is subject to interpretation: the numeric ASCII string may or
   may not be terminated by a newline, it may or may not have leading
   spaces (or zeros), and the number of leading spaces or zeros can
   differ, and the differences can be significant.

   Even if you build the program with the right lockfile option, you can
   still have problems when you try to open the device. Here are the
   error messages you can get from SET LINE, and what they mean:

    a. "Timed out, no carrier." This one is not related to lockfiles. It
       means that you have SET CARRIER ON xx, where xx is the number of
       seconds to wait for carrier, and carrier did not appear within xx
       seconds. Solution: SET CARRIER AUTO or OFF.
    b. "Sorry, access to lock denied." Kermit has been configured to use
       lockfiles, but (a)the lockfile directory is write-protected
       against you, or (b) it does not exist. The "access to lock denied"
       message will tell you the reason. If the directory does not exist,
       check to make sure Kermit is using the right name. Just because
       version n of your Unix used a certain lockfile directory is no
       gurantee that version n.1 does not use a different one.
       Workaround: ask the system administrator to install a symbolic
       link from the old name to the new name. Other solutions: (see
       below)
    c. "Sorry, access to tty device denied." The tty device that you
       specified in your SET LINE command is read/write protected against
       you. Solution: (see below)
    d. "Sorry, device is in use." The tty device you have specified is
       currently being used by another user. A prefatory message gives
       you an "ls -l" listing of the lockfile, which should show the
       username of the person who created it, plus a message "pid = nnn"
       to show you the process id of the user's program. Solutions: try
       another device, wait until the other user is finished, ask the
       other user to hurry up, or ask the system manager for help.
    e. "Sorry, can't open connection: reason". The device cannot be
       opened for some other reason, which is listed.
    f. "sh: /usr/lib/uucp/acucntrl: not found". This means your Kermit
       program was built with the -DACUCNTRL switch, but your computer
       system does not have the BSD 4.3 acucntrl program. Solution:
       install the acucntrl program if you have it, or rebuild Kermit
       without the -DACUCNTRL switch.

   There are two solutions for problems (b) and (c), both of which
   involve intervention by your Unix system administrator (superuser):

    a. Have the superuser change the permission of the lockfile directory
       and to the tty devices so that everyone on the system has
       read/write permission.

su% chmod 777 /usr/spool/locks (or whatever the path is)
su% chmod 666 /dev/ttyXX

       One risk here is that people can write lots of junk into the
       lockfile directory, delete other people's files in the lockfile
       directory, and intercept other people's data as it goes in and out
       of the tty device. The major danger here would be intercepting a
       privileged password. Of course, any user could write a short,
       ordinary, unprivileged program to do exactly the same thing if the
       tty device was world read/writeable. The other risk as that
       telephone calls are not controlled -- anybody on your system can
       make them, without having to belong to any particular group, and
       this could run up your phone bill.
    b. Use groups to regulate access. Normally the lockfile directory and
       and the dialout devices will have the same group (such as uucp).
       If so, then put everybody who's allowed to dial out into that
       group, and make sure that the lockfile directory and the tty
       devices have group read AND write permission. Example:

su% chmod 770 /usr/spool/locks (or whatever the path is)
su% chmod 660 /dev/ttyXX

       User whatever tool is available on your platform to add users to
       the appropropriate group (e.g. edit the /etc/group file).
    c. Have the superuser change Kermit to run setuid and/or setgid to
       the owner and/or group of the lockfile directory and the tty
       devices if necessary), typically uucp (see [316]next section), but
       NOT root. Example:

su% chown uucp kermit          - or -  chgrp uucp kermit
su% chmod u+s kermit (setuid)  - or -  chmod g+s kermit (setgid)

       and then make sure the lockfile directory, and the tty devices,
       have owner (setuid) and/or group (setgid) write permission. For
       example:

su% chmod o+rwx /usr/spool/uucp
su% chown uucp /dev/ttyXX ; chmod 600 /dev/ttyXX

       In some cases, the owner and group must be distinct; the key point
       is that read/write access is required to both the UUCP lockfile
       directory and the tty itself.

   If you make C-Kermit setuid or setgid to root, it refuses to run:

Fatal: C-Kermit setuid to root!

   Example:

crw-r-----   1 uucp     uucp       5,  67 Feb 11 06:23 /dev/cua3
drwxrwxr-x   3 root     uucp         1024 Feb 11 06:22 /var/lock

   requires suid uucp to get read/write access on /dev/cua3 and sgid to
   get read/write access on /var/lock (since you can't set Kermit's uid
   or gid to root).

     The reason Kermit can't be setuid or setgid to root has to do with
     the fact that some Unix OS's can't switch user or group IDs in that
     case. Unfortunately, the prohibition against making Kermit setuid
     or setgid to root means that Unix C-Kermit can't be used to make
     rlogin connections by non-root users. (The rlogin port is
     privileged, which is why the regular rlogin command is setuid root
     -- which is safe because the rlogin program never has to create or
     access files like Kermit does.)

   For the lockfile mechanism to achieve its desired purpose --
   prevention of access to the same tty device by more than one process
   at a time -- ALL programs on a given computer that open, read or
   write, and close tty devices must use the SAME lockfile conventions.
   Unfortunately, this is often not the case. Here is a typical example
   of how this can go wrong: In SunOS 4.0 and earler, the lockfile
   directory was /usr/spool/uucp; in 4.1 it was changed to
   /var/spool/locks in the quest for political correctness. Consequently,
   any third-party programs (such as C-Kermit) that were not modified to
   account for this change, recompiled, and reinstalled, did not use the
   same lockfiles as uucp, tip, etc, and so the entire purpose of the
   lockfile is defeated.

   What if your Unix system does not have UUCP installed? For example,
   you have a Unix workstation, and you do not use uucp, cu, or tip, or
   UUCP was not even supplied with your version of Unix (QNX is an
   example). In this case, you have two choices:

    a. If there may be more than one person running Kermit at the same
       time, competing for the same tty device, then create a special
       lockfile directory just for Kermit, for example,
       /usr/spool/kermit, and make sure you have read/write access to it.
       Then add the following to your makefile target CFLAGS, as shown
       earlier:

-DLOCK_DIR=\\\"/usr/spool/kermit\\\"

    b. If you are the only user on your workstation, and no other
       processes will ever be competing with Kermit for the dialout tty
       device, then add -DNOUUCP to your makefile target's CFLAGS and
       rebuild Kermit.
  __________________________________________________________________________

11. RUNNING UNIX C-KERMIT SETUID OR SETGID

   [ [317]Top ] [ [318]Contents ] [ [319]Next ] [ [320]Previous ]

   Even if you don't intend to run C-Kermit setuid, somebody else might
   come along and chown and chmod it after it has been built. You should
   be sure that it is built correctly to run setuid on your system. For
   POSIX and AT&T Unix based versions, you don't have to do anything
   special.

   For 4.2 and 4.3 BSD-based Unix versions, you normally need not add
   anything special to the makefile. The program assumes that the
   setreuid() and setregid() functions are available, without which we
   cannot switch back and forth between real and effective uids. If
   "make" complains that _setreuid or _setregid is/are not defined, add
   -DNOSETREU to CFLAGS. In this case it is very likely (but not certain)
   that you cannot protect ttys and lockfiles against people and have
   them run Kermit setuid.

   If make does not complain about this, you should find out whether your
   BSD version (4.3 or other systems like SunOS 4.x that claim to include
   BSD 4.3 compatibility) includes the saved-setuid feature (see long
   notes under edit 146 in ckc178.upd). If it does, then add -DSAVEDUID
   to CFLAGS.

     IMPORTANT NOTE: Most Unix system documentation will not give you
     the required information. To determine whether your Unix system
     supplies the the saved-original-effective-user/group-id feature,
     use the ckuuid.c program. Read and follow the instructions in the
     comments at the beginning.

   C-Kermit for 4.4BSD-based systems automatically use sete[ug]id(). See
   [321]ckutio.c.

   If you have a version of Unix that is not BSD-based, but which
   supplies the setreuid() and setregid() functions, and these are the
   only way to switch between real and effective uid, add -DSETREUID to
   your makefile target.

     WARNING: There are two calls to access() in [322]ckufio.c, by which
     Kermit checks to see if it can create an output file. These calls
     will not work correctly when (a)you have installed C-Kermit setuid
     or setgid on a BSD-based Unix system, and (b) the
     saved-original-effective-uid/gid feature is not present, and (c)
     the access() function always checks what it believes to be the real
     ID rather than the effective ID. This is the case, for example, in
     Olivetti X/OS and in NeXTSTEP. In such cases, you can force correct
     operation of access() calls by defining the symbol SW_ACC_ID at
     compile time in CFLAGS.

   If you have a version of Unix that does not allow a process to switch
   back and forth between its effective and real user and group ids
   multiple times, you probably should not attempt to run Kermit setuid,
   because once having given up its effective uid or gid (which it must
   do in order to transfer files, fork a shell, etc) it can never get it
   back, and so it can not use the original effective uid or gid to
   create or delete uucp lockfiles. In this case, you'll either have to
   set the permissions on your lockfile directory to make them publicly
   read/writable, or dispense with locking altogether.

   MORAL: Are you thoroughly sickened and/or frightened by all that you
   have just read? You should be. What is the real answer? Simple. Serial
   devices -- such as ttys and magnetic tapes -- in Unix should be opened
   with exclusive access only, enforced by the Unix kernel. Shared access
   has no conceivable purpose, legitimate or otherwise, except by
   privileged system programs such as getty. The original design dates
   from the late 1960s, when Unix was developed for laboratory use under
   a philosophy of trust by people within shouting distance of each other
   -- but even then, no useful purpose was served by this particular form
   of openness; it was probably more of a political statement. Since the
   emergence of Unix from the laboratory into the commercial market, we
   have seen every vestige of openness -- but this one -- stripped away.
   I'd like to see some influential Unix maker take the bold step of
   making the simple kernel change required to enforce exclusive access
   to serial devices. (Well, perhaps not so simple when bidirectionality
   must also be a goal -- but then other OS's like VMS solved this
   problem decades ago.)
  __________________________________________________________________________

12. CONFIGURING UNIX WORKSTATIONS

   [ [323]Top ] [ [324]Contents ] [ [325]Next ] [ [326]Previous ]

   On desktop workstations that are used by only the user at the console
   keyboard, C-Kermit is always used in local mode. But as delivered,
   C-Kermit runs in remote mode by default. To put it in local mode at
   startup, you can put a SET LINE command in your .mykermrc.

   You can also build C-Kermit to start up in local mode by default. To
   do this, include the following in the CFLAGS in your makefile target:

-DDFTTY=\\\"/dev/ttyxx\\\"

   where ttyxx is the name of the device you will be using for
   communications. Presently there is no way of setting the default modem
   type at compile time, so use this option only for direct lines.

   C-Kermit does not work well on certain workstations if it is not run
   from within a terminal window. For example, you cannot start C-Kermit
   on a NeXT by launching it directly from NeXTstep. Similarly for Sun
   workstations in the Open Windows environment. Run Kermit in a terminal
   window.
  __________________________________________________________________________

13. BIZARRE BEHAVIOR AT RUNTIME

   [ [327]Top ] [ [328]Contents ] [ [329]Next ] [ [330]Previous ]

   See the "beware file",

   [331]ckubwr.txt, for hints about runtime misbehavior. This section
   lists some runtime problems that can be cured by rebuilding C-Kermit.

   The program starts, but there is no prompt, and certain operations
   don't work (you see error messages like "Kermit command error in
   background execution"). This is because Kermit thinks it is running in
   the background. See conbgt() in [332]ckutio.c. Try rebuilding Kermit
   with:

 -DPID_T=pid_t

   added to your CFLAGS. If that doesn't help, find out the actual data
   type for pids (look in types.h or similar file) and use it in place of
   "pid_t", for example:

 -DPID_T=short

   Unexplainable and inappropriate error messages ("Sockets not supported
   on this device", etc) have been traced in at least one case to a lack
   of agreement between the system header files and the actual kernel.
   This happened because the GNU C compiler (gcc) was being used. gcc
   wants to have ANSI-C-compliant header files, and so part of the
   installation procedure for gcc is (or was) to run a shell script
   called "fixincludes", which translates the system's header files into
   a separate set of headers that gcc likes. So far so good. Later, a new
   version of the operating system is installed and nobody remembers to
   run fixincludes again. From that point, any program compiled with gcc
   that makes use of header files (particularly ioctl.h) is very likely
   to misbehave. Solution: run fixincludes again, or use your system's
   regular C compiler, libraries, and header files instead of gcc.
  __________________________________________________________________________

14. CRASHES AND CORE DUMPS

   [ [333]Top ] [ [334]Contents ] [ [335]Next ] [ [336]Previous ]

   If C-Kermit constitently dumps core at the beginning of a file
   transfer, look in SHOW FEATURES for CKREALPATH. If found, rebuild with
   -DNOREALPATH and see if that fixes the problem (some UNIXes have
   realpath() but it doesn't work).

   Total failure of the Kermit program can occur because of bad memory
   references, bad system calls, or problems with dynamic memory
   allocation. First, try to reproduce the problem with debugging turned
   on: run Kermit with the -d command-line option (for example, "wermit
   -d") and then examine the resulting debug.log file. The last entry
   should be in the vicinity of the crash. In VMS, a crash automatically
   produces a "stack dump" which shows the routine where the crash
   occurs. In some versions of Unix, you can get a stack dump with "adb"
   -- just type "adb wermit core" and then give the command "$c", then
   Ctrl-D to quit (note: replace "wermit" by "kermit" or by the full
   pathname of the executable that crashed if it is not in the current
   directory). Or use gdb to get a backtrace, etc.

   In edit 186, one implementation, UNISYS 5000/95 built with "make
   sys5r3", has been reported to run out of memory very quickly (e.g.
   while executing a short initialization file that contains a SET DIAL
   DIRECTORY command). Debug logs show that malloc calls are failing,
   reason unknown. For this and any other implementation that gives error
   messages about "malloc failure" or "memory allocation failure",
   rebuild the program *without* the -DDYNAMIC CFLAGS definition, for
   example:

make sys5r3 KFLAGS=-UDYNAMIC

   As of edit 169, C-Kermit includes a malloc() debugging package which
   you may link with the Kermit program to catch runtime malloc errors.
   See the makefile entries for sunos41md and nextmd for examples of how
   to select malloc debugging. Once you have linked Kermit with the
   malloc debugger, it will halt with an informative message if a
   malloc-related error occurs and, if possible, dump core. For this
   reason, malloc-debugging versions of Kermit should be built without
   the "-s" link option (which removes symbols, preventing analysis of
   the core dump). You have several ways to track down the malloc error:
   Analyze the core dump with adb. Or reproduce the problem with "log
   debug" and then look at the code around the last debug.log entry. If
   you have gcc, build the program with "-g" added to CFLAGS and then
   debug it with gdb, e.g.

gdb wermit
break main
run
.. set other breakpoints or watchpoints
continue

   Watchpoints are especially useful for finding memory leaks, but they
   make the program run about a thousand times slower than usual, so
   don't set them until the last possible moment. When a watchpoint is
   hit, you can use the "where" command to find out which C-Kermit source
   statement triggered it.

   If you have the Pure Software Inc "Purify" product, see the sunos41cp
   makefile entry for an example of how to use it to debug C-Kermit.
  __________________________________________________________________________

15. SYSLOGGING

   [ [337]Top ] [ [338]Contents ] [ [339]Next ] [ [340]Previous ]

   "Syslogging" means recording selected in the system log via the Unix
   syslog() facility, which is available in most Unix versions.
   Syslogging is not done unless C-Kermit is started with:

--syslog:n

   on the command-line, where n is a number greater than 0 to indicate
   the level of syslogging. See [341]Section 4.2 of the [342]IKSD
   Administrator's Guide for details.

   Obviously you can't depend on users to include --syslog:3 (or
   whatever) on the command line every time they start C-Kermit, so if
   you want certain kinds of records to be recorded in the system log,
   you can build C-Kermit with forced syslogging at the desired level,
   e.g.:

make linux KFLAGS=-DSYSLOGLEVEL=2

   Levels 2 and 3 are the most likely candidates for this treatment.
   Level 2 forces logging of all successful dialout calls (e.g. for
   checking against or phone bills), and level 3 records all connections
   (SET LINE or SET HOST / TELNET / RLOGIN, etc) so you can see who is
   connecting out from your system, and to where.

   Level 2 and 3 records are equivalent to those in the connection log;
   see the [343]C-Kermit 7.0 Supplement) for a detailed description of
   the connection log.
  __________________________________________________________________________

16. BUILDING SECURE VERSIONS OF C-KERMIT 8.0

   [ [344]Top ] [ [345]Contents ] [ [346]Next ] [ [347]Previous ]

   C-Kermit 7.0 and later may be built with Kerberos(TM) and/or SRP(TM)
   (Secure Remote Password) and/or SSL/TLS security for strong
   authentication and encryption of Internet connections. These security
   methods require external libraries that, in their binary forms, are
   restricted from export by USA law. See the [348]Kermit Security
   Reference) for details. C-Kermit binaries themselves are likewise
   restricted; the C-Kermit binaries that are available for public
   download on the Internet are not allowed to contain the security
   options.

   Sample makefile entries are provided for Linux and many other
   operating systems. A list of secure makefile entries is included in
   the Makefile. Complete instructions on building C-Kermit 8.0 with MIT
   Kerberos; Secure Remote Password; and/or OpenSSL can be found in the
   [349]Kermit Security Reference.

   C-Kermit 8.0 comes with a current list of Certificate Authority
   certificates, including one for the Kermit Project that can be used
   for authentication to Columbia's [350]Internet Kermit Service (IKSD).
   You can use C-Kermit 7.0 or later to access Columbia's IKSD securely
   by installing the Kermit Project certificate in
   /usr/local/ssl/cert.pem (or the appropriate location based upon the
   installation of OpenSSL on your system). You can find a copy of the
   certificates file at:

[351]ftp://kermit.columbia.edu/kermit/c-kermit/ca_certs.pem
  __________________________________________________________________________

17. INSTALLING C-KERMIT AS AN SSH SERVER SUBSYSTEM

   [ [352]Top ] [ [353]Contents ] [ [354]Previous ]

   This requires C-Kermit 8.0.206 or later and an SSH v2 server. If you
   list C-Kermit as a Subsystem in the SSH v2 server configuration file
   (as, for example, SFTP is listed), users can make SSH connections
   direct to a Kermit server as explained here:

[355]http://www.columbia.edu/kermit/skermit.html

   The name and location of the SSH server configuration file depends on
   your platform, which SSH product(s) you have, etc. C-Kermit itself
   must be referred to in this file as "kermit-sshsub". On the host,
   install the C-Kermit 8.0.211 binary in the normal way. Then, in the
   same directory as the C-Kermit binary, make a symbolic link:

ln -s kermit kermit-sshsub

   (Note: the "make install" makefile target does this for you.) Then in
   the sshd configuration file, add a line:

Subsystem  kermit   /some/path/kermit-sshsub

   (where /some/path is the fully specified directory where the symlink
   is.) This is similar to the line that sets up the SFTP susbsystem.
   Example:

Subsystem   sftp    /usr/local/libexec/sftp-server
Subsystem   kermit  /usr/local/bin/kermit-sshsub

   The mechanics might vary for other SSH servers; "man sshd" for
   details. The method shown here is used because the OpenSSH server does
   not permit the subsystem invocation to include command-line options.
   C-Kermit would have no way of knowing that it should enter Server mode
   if it were not called by a special name.

   [ [356]Top ] [ [357]Contents ] [ [358]C-Kermit Home ] [ [359]C-Kermit
   8.0 Overview ] [ [360]Kermit Home ]
     _________________________________________________________________


    C-Kermit 8.0 Unix Installation Instructions / The Kermit Project /
    Columbia University / 10 April 2004

References

   1. http://www.columbia.edu/kermit/ckuins.html#contents
   2. http://www.columbia.edu/kermit/ckermit.html
   3. http://www.columbia.edu/kermit/index.html
   4. http://www.columbia.edu/kermit/ckuins.html
   5. http://www.columbia.edu/kermit/ckuins.html#x0
   6. http://www.columbia.edu/kermit/ckuins.html#x1
   7. http://www.columbia.edu/kermit/ckuins.html#x2
   8. http://www.columbia.edu/kermit/ckuins.html#x3
   9. http://www.columbia.edu/kermit/ckuins.html#x4
  10. http://www.columbia.edu/kermit/ckuins.html#x5
  11. http://www.columbia.edu/kermit/ckuins.html#x6
  12. http://www.columbia.edu/kermit/ckuins.html#x7
  13. http://www.columbia.edu/kermit/ckuins.html#x8
  14. http://www.columbia.edu/kermit/ckuins.html#x9
  15. http://www.columbia.edu/kermit/ckuins.html#x10
  16. http://www.columbia.edu/kermit/ckuins.html#x11
  17. http://www.columbia.edu/kermit/ckuins.html#x12
  18. http://www.columbia.edu/kermit/ckuins.html#x13
  19. http://www.columbia.edu/kermit/ckuins.html#x14
  20. http://www.columbia.edu/kermit/ckuins.html#x15
  21. http://www.columbia.edu/kermit/ckuins.html#x16
  22. http://www.columbia.edu/kermit/ckuins.html#x16
  23. http://www.columbia.edu/kermit/ckuins.html#top
  24. http://www.columbia.edu/kermit/ckuins.html#contents
  25. http://www.columbia.edu/kermit/ckuins.html#x1
  26. http://www.columbia.edu/kermit/ckccfg.html
  27. http://www.columbia.edu/kermit/ckcbwr.html
  28. http://www.columbia.edu/kermit/ckubwr.html
  29. http://www.columbia.edu/kermit/ckcplm.html
  30. http://www.columbia.edu/kermit/ckuins.html#x2
  31. http://www.columbia.edu/kermit/x3
  32. http://www.columbia.edu/kermit/ckuins.html#x4
  33. http://www.columbia.edu/kermit/ckuins.html#top
  34. http://www.columbia.edu/kermit/ckuins.html#contents
  35. http://www.columbia.edu/kermit/ckuins.html#x2
  36. http://www.columbia.edu/kermit/ckuins.html#x0
  37. ftp://kermit.columbia.edu/kermit/archives/cku211.tar.Z
  38. ftp://kermit.columbia.edu/kermit/archives/cku211.tar.gz
  39. ftp://kermit.columbia.edu/kermit/archives/cku211.tar
  40. http://www.columbia.edu/kermit/ckuins.html#x7
  41. http://www.columbia.edu/kermit/ckuins.html#x5
  42. http://www.columbia.edu/kermit/ckuins.html#x5
  43. http://www.columbia.edu/kermit/ckuins.html#x16
  44. http://www.columbia.edu/kermit/ckuins.html#top
  45. http://www.columbia.edu/kermit/ckuins.html#contents
  46. http://www.columbia.edu/kermit/ckuins.html#x3
  47. http://www.columbia.edu/kermit/ckuins.html#x1
  48. http://www.columbia.edu/kermit/ckuins.html#x5
  49. http://www.columbia.edu/kermit/ckuins.html#X10
  50. http://www.columbia.edu/kermit/ckuins.html#x11
  51. http://www.columbia.edu/kermit/ckuins.html#x10
  52. http://www.columbia.edu/kermit/ckuins.html#x3
  53. http://www.columbia.edu/kermit/ck80packages.html
  54. http://www.columbia.edu/kermit/ckuins.html#x10
  55. http://www.columbia.edu/kermit/ckuins.html#top
  56. http://www.columbia.edu/kermit/ckuins.html#contents
  57. http://www.columbia.edu/kermit/ckuins.html#x4
  58. http://www.columbia.edu/kermit/ckuins.html#x2
  59. ftp://kermit.columbia.edu/kermit/bin/
  60. http://www.columbia.edu/kermit/ck80binaries.html
  61. http://www.columbia.edu/kermit/ckuins.html#x7
  62. http://www.columbia.edu/kermit/ckuins.html#build
  63. http://www.columbia.edu/kermit/ckuins.html#x5
  64. http://www.columbia.edu/kermit/ckuins.html#x4
  65. http://www.columbia.edu/kermit/ckuins.html#x4
  66. mailto:kermit@columbia.edu
  67. http://www.columbia.edu/kermit/ckuins.html#top
  68. http://www.columbia.edu/kermit/ckuins.html#contents
  69. http://www.columbia.edu/kermit/ckuins.html#x5
  70. http://www.columbia.edu/kermit/ckuins.html#x3
  71. http://www.columbia.edu/kermit/ckuins.html#x8
  72. http://www.columbia.edu/kermit/ckuins.html#x9
  73. ftp://kermit.columbia.edu/kermit/c-kermit/makefile
  74. ftp://kermit.columbia.edu/kermit/c-kermit/ckpker.mk
  75. ftp://kermit.columbia.edu/kermit/c-kermit/ckubsd.mak
  76. http://www.columbia.edu/kermit/ckuins.html#x5
  77. mailto:kermit-support@columbia.edu
  78. ftp://kermit.columbia.edu/kermit/c-kermit/makefile
  79. http://www.columbia.edu/kermit/ckuins.html#x7
  80. mailto:kermit-support@columbia.edu
  81. ftp://kermit.columbia.edu/kermit/c-kermit/makefile
  82. http://www.columbia.edu/kermit/ckuins.html#x5.4
  83. http://www.columbia.edu/kermit/ckuins.html#x10
  84. http://www.columbia.edu/kermit/ckuins.html#x11
  85. http://www.columbia.edu/kermit/ckuins.html#x5
  86. http://www.columbia.edu/kermit/iksd.html
  87. http://www.columbia.edu/kermit/ckuins.html#top
  88. http://www.columbia.edu/kermit/ckuins.html#contents
  89. http://www.columbia.edu/kermit/ckuins.html#x4.1
  90. http://www.columbia.edu/kermit/ckccfg.html
  91. http://www.columbia.edu/kermit/ckuins.html#x4.1
  92. http://www.columbia.edu/kermit/ckuins.html#x4.2
  93. http://www.columbia.edu/kermit/ckuins.html#x4.3
  94. http://www.columbia.edu/kermit/ckuins.html#x4.4
  95. http://www.columbia.edu/kermit/ckuins.html#x4.5
  96. http://www.columbia.edu/kermit/ckccfg.html
  97. http://www.columbia.edu/kermit/ckccfg.html#x8
  98. http://www.columbia.edu/kermit/iksd.html
  99. http://www.columbia.edu/kermit/iksd.html
 100. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c
 101. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c
 102. mailto:kermit-support@columbia.edu
 103. ftp://kermit.columbia.edu/kermit/c-kermit/ckcmai.c
 104. http://www.columbia.edu/kermit/ckuins.html#x15
 105. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
 106. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c
 107. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
 108. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c
 109. ftp://kermit.columbia.edu/kermit/c-kermit/ckcnet.c
 110. ftp://kermit.columbia.edu/kermit/c-kermit/ckcnet.c
 111. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
 112. ftp://kermit.columbia.edu/kermit/c-kermit/ckcuni.c
 113. mailto:kermit-support@columbia.edu
 114. http://www.columbia.edu/kermit/ckuins.html#top
 115. http://www.columbia.edu/kermit/ckuins.html#contents
 116. http://www.columbia.edu/kermit/ckuins.html#x4
 117. http://www.columbia.edu/kermit/ckuins.html#x4.2
 118. http://www.columbia.edu/kermit/ckuins.html#x4.0
 119. ftp://kermit.columbia.edu/kermit/c-kermit/makefile
 120. ftp://kermit.columbia.edu/kermit/c-kermit/ckubwr.txt
 121. http://www.columbia.edu/kermit/ckubwr.html
 122. ftp://kermit.columbia.edu/kermit/c-kermit/ckwart.c
 123. ftp://kermit.columbia.edu/kermit/c-kermit/ckcpro.w
 124. ftp://kermit.columbia.edu/kermit/c-kermit/ckcpro.c
 125. http://www.columbia.edu/kermit/ckuins.html#top
 126. http://www.columbia.edu/kermit/ckuins.html#contents
 127. http://www.columbia.edu/kermit/ckuins.html#x4
 128. http://www.columbia.edu/kermit/ckuins.html#x4.3
 129. http://www.columbia.edu/kermit/ckuins.html#x4.1
 130. http://www.columbia.edu/kermit/ckuins.html#x5
 131. http://www.columbia.edu/kermit/ckuins.html#top
 132. http://www.columbia.edu/kermit/ckuins.html#contents
 133. http://www.columbia.edu/kermit/ckuins.html#x4
 134. http://www.columbia.edu/kermit/ckuins.html#x4.4
 135. http://www.columbia.edu/kermit/ckuins.html#x4.2
 136. http://www.columbia.edu/kermit/ckuins.html#top
 137. http://www.columbia.edu/kermit/ckuins.html#contents
 138. http://www.columbia.edu/kermit/ckuins.html#x4
 139. http://www.columbia.edu/kermit/ckuins.html#x4.5
 140. http://www.columbia.edu/kermit/ckuins.html#x4.3
 141. ftp://kermit.columbia.edu/kermit/c-kermit/ckpker.mk
 142. http://www.columbia.edu/kermit/ckuins.html#top
 143. http://www.columbia.edu/kermit/ckuins.html#contents
 144. http://www.columbia.edu/kermit/ckuins.html#x4
 145. http://www.columbia.edu/kermit/ckuins.html#x4.4
 146. ftp://kermit.columbia.edu/kermit/c-kermit/makefile
 147. ftp://kermit.columbia.edu/kermit/c-kermit/makefile
 148. ftp://kermit.columbia.edu/kermit/c-kermit/ckcpro.w
 149. http://www.columbia.edu/kermit/ckuins.html#top
 150. http://www.columbia.edu/kermit/ckuins.html#contents
 151. http://www.columbia.edu/kermit/ckuins.html#x6
 152. http://www.columbia.edu/kermit/ckuins.html#x4
 153. http://www.columbia.edu/kermit/ckuins.html#x5.1
 154. http://www.columbia.edu/kermit/ckuins.html#x5.2
 155. http://www.columbia.edu/kermit/ckuins.html#x5.3
 156. http://www.columbia.edu/kermit/ckuins.html#x5.4
 157. http://www.columbia.edu/kermit/
 158. http://www.columbia.edu/kermit/ckuins.html#x5.4
 159. http://www.columbia.edu/kermit/ckuins.html#x5.3
 160. ftp://kermit.columbia.edu/kermit/c-kermit/COPYING.TXT
 161. ftp://kermit.columbia.edu/kermit/c-kermit/ckermit.ini
 162. http://www.columbia.edu/kermit/ckuins.html#x5.1
 163. ftp://kermit.columbia.edu/kermit/c-kermit/ckermod.ini
 164. ftp://kermit.columbia.edu/kermit/c-kermit/ckermit70.txt
 165. http://www.columbia.edu/kermit/ck60manual
 166. http://www.columbia.edu/kermit/ckermit70.html
 167. ftp://kermit.columbia.edu/kermit/c-kermit/ckermit80.txt
 168. http://www.columbia.edu/kermit/ck60manual
 169. http://www.columbia.edu/kermit/ckermit80.html
 170. ftp://kermit.columbia.edu/kermit/c-kermit/ckcbwr.txt
 171. http://www.columbia.edu/kermit/ckcbwr.html
 172. ftp://kermit.columbia.edu/kermit/c-kermit/ckubwr.txt
 173. http://www.columbia.edu/kermit/ckubwr.html
 174. ftp://kermit.columbia.edu/kermit/c-kermit/ckuins.txt
 175. http://www.columbia.edu/kermit/ckuins.html
 176. ftp://kermit.columbia.edu/kermit/c-kermit/ckccfg.txt
 177. http://www.columbia.edu/kermit/ckccfg.html
 178. ftp://kermit.columbia.edu/kermit/c-kermit/ckcplm.txt
 179. http://www.columbia.edu/kermit/ckcplm.html
 180. ftp://kermit.columbia.edu/kermit/c-kermit/ca_certs.pem
 181. http://www.columbia.edu/kermit/ckuins.html#x16"
 182. ftp://kermit.columbia.edu/kermit/c-kermit/makefile
 183. http://www.columbia.edu/kermit/ckuins.html#x?
 184. http://www.columbia.edu/kermit/ckuins.html#x11
 185. http://www.columbia.edu/kermit/ckuins.html#x5.2
 186. http://www.columbia.edu/kermit/ckermit.html#download
 187. http://www.columbia.edu/kermit/ck80binaries.html
 188. http://www.columbia.edu/kermit/ckermit.html#download
 189. http://www.columbia.edu/kermit/ckuins.html#top
 190. http://www.columbia.edu/kermit/ckuins.html#contents
 191. http://www.columbia.edu/kermit/ckuins.html#x7
 192. http://www.columbia.edu/kermit/ckuins.html#x5
 193. http://www.columbia.edu/kermit/ckuins.html#top
 194. http://www.columbia.edu/kermit/ckuins.html#contents
 195. http://www.columbia.edu/kermit/ckuins.html#x8
 196. http://www.columbia.edu/kermit/ckuins.html#x6
 197. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
 198. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
 199. http://www.columbia.edu/kermit/ckuins.html#x4.0
 200. ftp://kermit.columbia.edu/kermit/c-kermit/ckcdeb.h
 201. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c
 202. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c
 203. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
 204. http://www.columbia.edu/kermit/ckuins.html#x10
 205. http://www.columbia.edu/kermit/ckccfg.html#x2
 206. http://www.columbia.edu/kermit/ckccfg.html
 207. http://www.columbia.edu/kermit/ckuins.html#x4
 208. http://www.columbia.edu/kermit/ckuins.html#x10
 209. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
 210. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
 211. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
 212. http://www.columbia.edu/kermit/ckuins.html#x9.4
 213. mailto:kermit-support@columbia.edu
 214. http://www.columbia.edu/kermit/ckuins.html#top
 215. http://www.columbia.edu/kermit/ckuins.html#contents
 216. http://www.columbia.edu/kermit/ckuins.html#x9
 217. http://www.columbia.edu/kermit/ckuins.html#x7
 218. http://www.columbia.edu/kermit/ckccfg.html
 219. http://www.columbia.edu/kermit/ckccfg.html
 220. http://www.columbia.edu/kermit/ckuins.html#top
 221. http://www.columbia.edu/kermit/ckuins.html#contents
 222. http://www.columbia.edu/kermit/ckuins.html#x10
 223. http://www.columbia.edu/kermit/ckuins.html#x8
 224. http://www.columbia.edu/kermit/ckuins.html#x9.1
 225. http://www.columbia.edu/kermit/ckuins.html#x9.1.1
 226. http://www.columbia.edu/kermit/ckuins.html#x9.1.2
 227. http://www.columbia.edu/kermit/ckuins.html#x9.1.3
 228. http://www.columbia.edu/kermit/ckuins.html#x9.2
 229. http://www.columbia.edu/kermit/ckuins.html#x9.3
 230. http://www.columbia.edu/kermit/ckuins.html#x9.4
 231. http://www.columbia.edu/kermit/ckuins.html#x9.5
 232. http://www.columbia.edu/kermit/ckuins.html#x9.6
 233. http://www.columbia.edu/kermit/ckuins.html#x9.7
 234. http://www.columbia.edu/kermit/ckuins.html#x9.8
 235. http://www.columbia.edu/kermit/ckuins.html#x9.9
 236. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
 237. http://www.columbia.edu/kermit/ckuins.html#top
 238. http://www.columbia.edu/kermit/ckuins.html#x9
 239. http://www.columbia.edu/kermit/ckuins.html#contents
 240. http://www.columbia.edu/kermit/ckuins.html#x9.2
 241. http://www.columbia.edu/kermit/ckuins.html#x9.1.1
 242. http://www.columbia.edu/kermit/ckuins.html#x9.1.2
 243. http://www.columbia.edu/kermit/ckuins.html#x9.1.3
 244. http://www.columbia.edu/kermit/ckuins.html#top
 245. http://www.columbia.edu/kermit/ckuins.html#contents
 246. http://www.columbia.edu/kermit/ckuins.html#x9
 247. http://www.columbia.edu/kermit/ckuins.html#x9.1
 248. http://www.columbia.edu/kermit/ckuins.html#x9.1.3
 249. http://www.columbia.edu/kermit/ckuins.html#x9.1.1
 250. http://www.columbia.edu/kermit/ckuins.html#top
 251. http://www.columbia.edu/kermit/ckuins.html#contents
 252. http://www.columbia.edu/kermit/ckuins.html#x9
 253. http://www.columbia.edu/kermit/ckuins.html#x9.1
 254. http://www.columbia.edu/kermit/ckuins.html#x9.2
 255. http://www.columbia.edu/kermit/ckuins.html#x9.1.2
 256. http://www.opengroup.org/onlinepubs/007904975/
 257. http://www.columbia.edu/kermit/ckuins.html#x9.1.1
 258. http://www.columbia.edu/kermit/ckuins.html#top
 259. http://www.columbia.edu/kermit/ckuins.html#contents
 260. http://www.columbia.edu/kermit/ckuins.html#x9
 261. http://www.columbia.edu/kermit/ckuins.html#x9.1
 262. http://www.columbia.edu/kermit/ckuins.html#x9.3
 263. http://www.columbia.edu/kermit/ckuins.html#x9.1
 264. http://www.columbia.edu/kermit/ckuins.html#top
 265. http://www.columbia.edu/kermit/ckuins.html#contents
 266. http://www.columbia.edu/kermit/ckuins.html#x9
 267. http://www.columbia.edu/kermit/ckuins.html#x9.4
 268. http://www.columbia.edu/kermit/ckuins.html#x9.2
 269. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c
 270. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
 271. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c
 272. http://www.columbia.edu/kermit/ckuins.html#top
 273. http://www.columbia.edu/kermit/ckuins.html#contents
 274. http://www.columbia.edu/kermit/ckuins.html#x9
 275. http://www.columbia.edu/kermit/ckuins.html#x9.5
 276. http://www.columbia.edu/kermit/ckuins.html#x9.3
 277. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
 278. ftp://kermit.columbia.edu/kermit/c-kermit/ckcdeb.h
 279. http://www.columbia.edu/kermit/ckuins.html#top
 280. http://www.columbia.edu/kermit/ckuins.html#contents
 281. http://www.columbia.edu/kermit/ckuins.html#x9
 282. http://www.columbia.edu/kermit/ckuins.html#x9.6
 283. http://www.columbia.edu/kermit/ckuins.html#x9.4
 284. ftp://kermit.columbia.edu/kermit/c-kermit/ckcdeb.h
 285. ftp://kermit.columbia.edu/kermit/c-kermit/ckuus3.c
 286. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
 287. http://www.columbia.edu/kermit/ckuins.html#top
 288. http://www.columbia.edu/kermit/ckuins.html#contents
 289. http://www.columbia.edu/kermit/ckuins.html#x9
 290. http://www.columbia.edu/kermit/ckuins.html#x9.7
 291. http://www.columbia.edu/kermit/ckuins.html#x9.5
 292. http://www.columbia.edu/kermit/ckuins.html#top
 293. http://www.columbia.edu/kermit/ckuins.html#contents
 294. http://www.columbia.edu/kermit/ckuins.html#x9
 295. http://www.columbia.edu/kermit/ckuins.html#x9.8
 296. http://www.columbia.edu/kermit/ckuins.html#x9.6
 297. http://www.columbia.edu/kermit/ckuins.html#top
 298. http://www.columbia.edu/kermit/ckuins.html#contents
 299. http://www.columbia.edu/kermit/ckuins.html#x9
 300. http://www.columbia.edu/kermit/ckuins.html#x9.9
 301. http://www.columbia.edu/kermit/ckuins.html#x9.7
 302. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
 303. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
 304. ftp://kermit.columbia.edu/kermit/c-kermit/ckcdeb.h
 305. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c
 306. http://www.columbia.edu/kermit/ckuins.html#top
 307. http://www.columbia.edu/kermit/ckuins.html#contents
 308. http://www.columbia.edu/kermit/ckuins.html#x9
 309. http://www.columbia.edu/kermit/ckuins.html#x10
 310. http://www.columbia.edu/kermit/ckuins.html#x9.8
 311. http://www.columbia.edu/kermit/ckuins.html#top
 312. http://www.columbia.edu/kermit/ckuins.html#contents
 313. http://www.columbia.edu/kermit/ckuins.html#x11
 314. http://www.columbia.edu/kermit/ckuins.html#x9
 315. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
 316. http://www.columbia.edu/kermit/ckuins.html#x11
 317. http://www.columbia.edu/kermit/ckuins.html#top
 318. http://www.columbia.edu/kermit/ckuins.html#contents
 319. http://www.columbia.edu/kermit/ckuins.html#x12
 320. http://www.columbia.edu/kermit/ckuins.html#x10
 321. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
 322. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c
 323. http://www.columbia.edu/kermit/ckuins.html#top
 324. http://www.columbia.edu/kermit/ckuins.html#contents
 325. http://www.columbia.edu/kermit/ckuins.html#x13
 326. http://www.columbia.edu/kermit/ckuins.html#x11
 327. http://www.columbia.edu/kermit/ckuins.html#top
 328. http://www.columbia.edu/kermit/ckuins.html#contents
 329. http://www.columbia.edu/kermit/ckuins.html#x14
 330. http://www.columbia.edu/kermit/ckuins.html#x12
 331. ftp://kermit.columbia.edu/kermit/c-kermit/ckubwr.txt
 332. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
 333. http://www.columbia.edu/kermit/ckuins.html#top
 334. http://www.columbia.edu/kermit/ckuins.html#contents
 335. http://www.columbia.edu/kermit/ckuins.html#x15
 336. http://www.columbia.edu/kermit/ckuins.html#x13
 337. http://www.columbia.edu/kermit/ckuins.html#top
 338. http://www.columbia.edu/kermit/ckuins.html#contents
 339. http://www.columbia.edu/kermit/ckuins.html#x16
 340. http://www.columbia.edu/kermit/ckuins.html#x14
 341. http://www.columbia.edu/kermit/iksd.html#x4.2
 342. http://www.columbia.edu/kermit/iksd.html
 343. http://www.columbia.edu/kermit/ckermit2.html
 344. http://www.columbia.edu/kermit/ckuins.html#top
 345. http://www.columbia.edu/kermit/ckuins.html#contents
 346. http://www.columbia.edu/kermit/ckuins.html#x17
 347. http://www.columbia.edu/kermit/ckuins.html#x15
 348. http://www.columbia.edu/kermit/security.html
 349. http://www.columbia.edu/kermit/security80.html
 350. http://www.columbia.edu/kermit/cuiksd.html
 351. ftp://kermit.columbia.edu/kermit/c-kermit/ca_certs.pem
 352. http://www.columbia.edu/kermit/ckuins.html#top
 353. http://www.columbia.edu/kermit/ckuins.html#contents
 354. http://www.columbia.edu/kermit/ckuins.html#x16
 355. http://www.columbia.edu/kermit/skermit.html
 356. http://www.columbia.edu/kermit/ckuins.html#top
 357. http://www.columbia.edu/kermit/ckuins.html#contents
 358. http://www.columbia.edu/kermit/ckermit.html
 359. http://www.columbia.edu/kermit/ck80.html
 360. http://www.columbia.edu/kermit/index.html
