Merge branch 'upstream' into test
[ckermit.git] / ckuins.txt
diff --git a/ckuins.txt b/ckuins.txt
deleted file mode 100644 (file)
index 86448a3..0000000
+++ /dev/null
@@ -1,3519 +0,0 @@
-
-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