applied 050_ck_patch.patch
[ckermit.git] / ckuins.txt
1
2 C-Kermit 8.0 Unix Installation Instructions
3
4    [ [1]Contents ] [ [2]C-Kermit ] [ [3]Kermit Home ]
5
6    Frank da Cruz
7    The Kermit Project
8    Columbia University
9
10       As of C-Kermit version: 8.0.211, 10 April 2004
11       This file last updated: Tue Apr 13 10:14:33 2004 (New York City
12    time)
13
14    IF YOU ARE READING A PLAIN-TEXT version of this document, note that
15    this file is a plain-text dump of a Web page. You can visit the
16    original (and possibly more up-to-date) Web page here:
17
18 [4]http://www.columbia.edu/kermit/ckuins.html
19   __________________________________________________________________________
20
21 CONTENTS
22
23      [5]OVERVIEW
24
25     1. [6]INTERNET QUICK START
26     2. [7]INSTALLING FROM PACKAGES
27     3. [8]INSTALLING PREBUILT BINARIES
28     4. [9]BUILDING FROM SOURCE CODE
29     5. [10]INSTALLING THE KERMIT FILES
30     6. [11]INSTALLING UNIX C-KERMIT FROM DOS-FORMAT DISKETTES
31     7. [12]CHECKING THE RESULTS
32     8. [13]REDUCING THE SIZE OF THE EXECUTABLE PROGRAM IMAGE
33     9. [14]UNIX VERSIONS
34    10. [15]DIALING OUT AND COORDINATING WITH UUCP
35    11. [16]RUNNING UNIX C-KERMIT SETUID OR SETGID
36    12. [17]CONFIGURING UNIX WORKSTATIONS
37    13. [18]BIZARRE BEHAVIOR AT RUNTIME
38    14. [19]CRASHES AND CORE DUMPS
39    15. [20]SYSLOGGING
40    16. [21]BUILDING SECURE VERSIONS OF C-KERMIT 8.0
41    17. [22]INSTALLING C-KERMIT AS AN SSH SERVER SUBSYSTEM
42   __________________________________________________________________________
43
44 OVERVIEW
45
46    [ [23]Top ] [ [24]Contents ] [ [25]Next ]
47
48      WARNING: This document contains notes that have been accumulating
49      since the early 1980s. Many of the products and Unix versions
50      mentioned here have not been heard of in a long while, but that
51      does not necessarily mean they are not still running in some
52      obscure nook. 
53
54    This file contains Unix-specific information. A lot of it. Unlike most
55    other packages, C-Kermit tries very hard to be portable to every Unix
56    variety (and every release of each one) known to exist, including many
57    that are quite old, as well as to other platforms like VMS, AOS/VS,
58    VOS, OS-9, the BeBox, the Amiga, etc.
59
60    Since C-Kermit gets so deeply into the file system, i/o system, and
61    other areas that differ radically from one Unix platform to the next,
62    this means that a lot can go wrong when you try to install C-Kermit on
63    (for example) a new release of a particular variety of Unix, in which
64    certain things might have changed that C-Kermit depended upon.
65
66    This file concentrates on installation. For a description of general
67    configuration options for C-Kermit, please read the [26]Configurations
68    Options document. For troubleshooting after installation, see the
69    [27]General Hints and Tips and [28]Unix-Specific Hints and Tips
70    documents. The latter, in particular, contains lots of information on
71    lots of specific Unix platforms. If you want to work on the source
72    code, see the [29]C-Kermit Program Logic Manual
73
74    You may install C-Kermit:
75
76      * From an "[30]install package", if one is available.
77      * As a [31]prebuilt binary, if available, plus accompanying text
78        files.
79      * By building from [32]source code.
80   __________________________________________________________________________
81
82 1. INTERNET QUICK START
83
84    [ [33]Top ] [ [34]Contents ] [ [35]Next ] [ [36]Previous ]
85
86    If your Unix computer is on the Internet and it has a C compiler,
87    here's how to download, build, and install C-Kermit directly from the
88    "tarballs" or Zip archives:
89
90     1. Make a fresh directory and cd to it.
91     2. Download the C-Kermit source code:
92        [37]ftp://kermit.columbia.edu/kermit/archives/cku211.tar.Z
93        (compress format) or
94        [38]ftp://kermit.columbia.edu/kermit/archives/cku211.tar.gz
95        (gunzip format).
96     3. Uncompress the compressed tar file with "uncompress" or "gunzip",
97        according to which type of compressed file you downloaded. (If you
98        don't understand this, you could download a (much larger)
99        uncompressed tar archive directly:
100        [39]ftp://kermit.columbia.edu/kermit/archives/cku211.tar
101     4. Now type "tar xvf cku211.tar" to unpack the individual files from
102        the tar archive.
103     5. Type "rm cku211.tar" to get rid of the tar archive, which is no
104        longer needed.
105     6. Read the comments at the top of the makefile to find out which
106        target to use and then type the appropriate "make" command, such
107        as "make linux", "make solaris8", etc.
108     7. This produces a binary in your current directory called "wermit".
109        Start it by typing "./wermit" and [40]try it out to make sure it
110        works. Then read [41]Section 5 for how to install it, or simply
111        copy the wermit binary to the desired public directory, rename it
112        to kermit, and give it the needed permissions (and, if it is going
113        to be used to dial out, give it the same group and owner and
114        permissions as the cu, tip, or minicom program).
115
116    For secure installations, see [42]Sections 5 and [43]16.
117   __________________________________________________________________________
118
119 2. INSTALLING FROM PACKAGES
120
121    [ [44]Top ] [ [45]Contents ] [ [46]Next ] [ [47]Previous ]
122
123    Various Unix varieties -- Linux, Solaris, AIX, etc -- now incorporate
124    the idea of "install packages", and many users expect to find all new
125    applications in this format. A selection of install packages might be
126    available for any given release of C-Kermit, but there is a tradeoff
127    between convenience and safety. Unix presents several notable problems
128    to the builder of install packages:
129
130     a. Since C-Kermit is portable to many non-Unix platforms (VMS, VOS,
131        AOS/VS, etc), some of the files in the C-Kermit distribution do
132        not fit into the Unix application model. In particular, C-Kermit
133        includes some plain text files (described in [48]Section 5) and
134        Unix has no standard place to put such files. Typical Unix package
135        managers do not allow for them. Where should they go, and how will
136        the user know where to find them?
137     b. Installation of any program that will be used to make modem calls
138        requires some important decisions from the installer regarding
139        security and privilege.
140
141    Item (b) is discussed at length in [49]Sections 10 and [50]11 of this
142    document, but the package-related aspects are also given here. The
143    basic problem is that Unix dialout devices and the UUCP "lock files"
144    that regulate contention for them (described in [51]Section 10) are
145    usually protected against "world". Therefore, the install procedure
146    must either run as root in order to give the Kermit binary the
147    required permissions, group, and/or owner, or else the dialout devices
148    and associated directories must be open for group or world reading and
149    writing. Otherwise, the Kermit program just installed WILL NOT WORK
150    for dialing out.
151
152    Thus, a well-crafted installation procedure should present the options
153    and allow the installer to choose the method, if any, for regulating
154    access to the dialout devices:
155
156     a. Check the permissions of the lockfile directory and the dialout
157        devices. If they do not allow group or world R/W access, then:
158     b. "Your UUCP lockfile directory and/or dialout devices require
159        privilege to access. You must either change their permissions or
160        install Kermit with privileges."
161     c. "If you wish to install Kermit with privileges, it will be given
162        the same owner, group, and permissions as the cu program so it can
163        use the dialout devices."
164     d. If they choose (c) but the user is not root, give a message that
165        the install procedure can be run only by root and then quit.
166
167    It should go without saying, of course, that any binaries that are to
168    be included in an install package should be built fresh on the exact
169    platform (e.g. Red Hat 8.0 on Intel) for which the package is
170    targeted; prebuilt binaries ([52]next section) from other sites are
171    likely to have library mismatches. [53]CLICK HERE for more about
172    building C-Kermit install packages.
173
174    The Kermit Project does not have the resources or the expertise to
175    make install packages for every platform. Most install packages,
176    therefore, are contributed by others, and they do not necessarily
177    follow the guidelines given above. Pay attention to what they do.
178
179    If you are an end user who has obtained a C-Kermit install package for
180    a particular platform, you should be aware that some additional steps
181    might needed if you want to use Kermit to dial out. Read [54]Section
182    10 for details.
183   __________________________________________________________________________
184
185 3. INSTALLING PREBUILT BINARIES
186
187    [ [55]Top ] [ [56]Contents ] [ [57]Next ] [ [58]Previous ]
188
189    Hundreds of prebuilt C-Kermit binaries are available on the CDROM in
190    the BINARY tree [NOTE: The C-Kermit CDROM is still for version 7.0],
191    and at our ftp site in the [59]kermit/bin area (with names starting
192    with "ck"), also accessible on the [60]C-Kermit website. To install a
193    prebuilt binary:
194
195     a. Rename the binary to "wermit".
196     b. Make sure it works; some tests are suggested in [61]Section 7.
197     c. Follow steps (b) through (e) in [62]Section 4.
198     d. Install related files as described in [63]Section 5.
199
200    But first... Please heed the following cautions:
201
202     a. If you pick the wrong binary, it won't work (or worse).
203     b. Even when you pick the appropriate binary, it still might not work
204        due to shared-library mismatches, etc. (see [64]Section 4.0).
205     c. Don't expect a binary built on or for version n of your OS to work
206        on version n - x (where x > 0). However, it is usually safe to run
207        a binary built on (or for) an older OS release on a newer one.
208
209    Therefore, it is better to build your own binary from source code
210    ([65]next section) if you can. But since it is increasingly for Unix
211    systems (not to mention VMS and other OS's) to be delivered without C
212    compilers, it is often impractical. In such cases, try the most
213    appropriate prebuilt binary or binaries, and if none of them work,
214    [66]contact us and we'll see what we can do to help.
215   __________________________________________________________________________
216
217 4. BUILDING FROM SOURCE CODE
218
219    [ [67]Top ] [ [68]Contents ] [ [69]Next ] [ [70]Previous ]
220
221    Also see: [71]Section 8 and [72]Section 9.
222
223    C-Kermit is designed to be built and used on as many platforms as
224    possible: Unix and non-Unix, old and new (and ancient), ANSI C and
225    K&R. The Unix version does not use or depend on any external tools for
226    building except the "make" utility, the C compiler, and the linker. It
227    does not use any automated configuration tools such as configure,
228    autoconf, automake, libtool, etc. Everything in C-Kermit has been
229    built by hand based on direct experience or reports or contributions
230    from users of each platform.
231
232    The [73]C-Kermit makefile contains the rules for building the program
233    for each of the hundreds of different kinds of Unix systems that
234    C-Kermit attempts to support. It covers all Unix variations since
235    about 1980 -- pretty much everything after Unix V6. Separate makefiles
236    are used for [74]Plan 9 and [75]2.x BSD.
237
238    Prerequisites:
239
240      * The C compiler, linker, and make program must be installed.
241      * The C libraries and header files must be installed (*).
242      * The C-Kermit source code and makefile in your current directory.
243      * The C-Kermit text files ([76]Section 5) in your current directory.
244
245      * This is becoming problematic in this new age of "selective
246        installs" e.g. of Linux packages. C-Kermit builds will often fail
247        because replying "no" to some obscure Linux installation option
248        will result in missing libraries or header files. Ditto on
249        platforms like AIX and Solaris that don't come with C compilers,
250        and then later have gcc installed, but are still missing crucial
251        libraries, like libm (math).
252
253    Plus:
254
255      * For TCP/IP networking support, the sockets library and related
256        header files must be installed.
257      * The math library for floating-point arithmetic support (can be
258        deselected by adding -DNOFLOAT to CFLAGS and removing -lm from
259        LIBS).
260      * Many and varied security libraries for building a secure version
261        (Kerberos, SSL/TLS, SRP, Zlib,...) These are required only if you
262        select a secure target.
263      * For the curses-based fullscreen file-ransfer display, the curses
264        or ncurses header file(s) and library, and probably also the
265        termcap and/or termlib library. Note that the names and locations
266        of these files and libraries are likely to change capriciously
267        with every new release of your Unix product. If you discover that
268        the C-Kermit build procedure fails because your curses and/or
269        termxxx headers or libraries are not named or located as expected,
270        please [77]let us know. In the meantime, work around by installing
271        symlinks.
272      * IMPORTANT: Modern Linux distributions might give you the choice
273        during installation of whether to install the "ncurses development
274        package" (perhaps called "ncurses-devel"). If you did not install
275        it, you won't be able to build C-Kermit with curses support
276        included. In this case, either go back and install ncurses, or
277        else choose (or create) a non-curses makefile target for your
278        platform. To install the ncurses developers tools in Red Hat
279        Linux, do:
280
281 mount redhat cdrom
282 goto RedHat/RPMS
283 rpm -ivh ncurses-devel*.rpm
284 or to have the exact name ls ncurse* and load as
285 rpm -ivh filename
286 then leave the cdrom and unmount it.
287
288      * In AIX you might have to go back and install any or all of:
289
290 bos.adt.base
291 bos.adt.include
292 bos.adt.lib
293 bos.adt.libm
294 bos.adt.utils
295
296        from the first installation CD.
297
298    The makefile might need to be renamed from ckuker.mak to makefile.
299    Directions:
300
301     a. Type "make xxx" where xxx is the name of the makefile target most
302        appropriate to your platform, e.g. "make linux", "make aix43",
303        etc. Read the [78]comments at the top of the makefile for a
304        complete list of available targets (it's a long list).
305     b. Test the resulting 'wermit' file (see [79]Section 7 for
306        suggestions). If it's OK, proceed; otherwise [80]notify us.
307
308      NOTE: steps (c) through (e) can be accomplished using the
309      [81]makefile 'install' target as described in [82]Section 5.4. 
310     c. Rename the 'wermit' file to 'kermit', copy it to the desired
311        binary directory (such as /usr/local/bin or /opt/something), and
312        if it is to be used for dialing out, give it the same owner,
313        group, and permissions as the 'cu' program (IMPORTANT: read
314        [83]Sections 10 and [84]11 for details).
315     d. Install the man page, ckuker.nr, with your other man pages.
316     e. Install the accompanying text files (see [85]Section 5).
317     f. If you want C-Kermit to also offer a Telnet command-line
318        personality, make a symbolic link as follows:
319
320 cd directory-where-kermit-binary-is
321 ln -s kermit telnet
322
323        If you want C-Kermit to be the default Telnet client, make sure
324        the directory in which you created the symlink is in the PATH
325        ahead of the where the regular Telnet client is.
326     g. If you want C-Kermit to also offer an FTP command-line
327        personality, make a symlink called "ftp" as in (f).
328     h. If you want C-Kermit to also offer an FTTP command-line
329        personality, make a symlink called "http" as in (f).
330     i. If you want to offer an Internet Kermit Service, follow the
331        directions in the [86]IKSD Administrator's Guide.
332     ________________________________________________________________________
333
334   4.0. Special Considerations for C-Kermit 8.0
335
336    [ [87]Top ] [ [88]Contents ] [ [89]Next ]
337
338    Also see: [90]C-Kermit Configuration Options
339
340    SECTION CONTENTS
341
342 4.1. [91]The Unix Makefile
343 4.2. [92]The C-Kermit Initialization File
344 4.3. [93]The 2.x BSD Makefile
345 4.4. [94]The Plan 9 Makefile
346 4.5. [95]Makefile Failures
347
348    (Also see the [96]Configurations Options document, [97]Section 8).
349
350    Lots of new features have been added in versions 7.0 and 8.0 that
351    require access to new symbols, APIs, libraries, etc, and this will no
352    doubt cause problems in compiling, linking, or execution on platforms
353    where 6.0 and earlier built without incident. This section contains
354    what we know as of the date of this file.
355
356    The first category concerns the new Kermit Service Daemon (IKSD; see
357    the [98]IKSD Administrator's Guide for details):
358
359    The wtmp File
360           When C-Kermit is started as an IKSD (under inetd), it makes
361           syslog and wtmp entries, and also keeps its own ftpd-like log.
362           The code assumes the wtmp log is /var/log/wtmp on Linux and
363           /usr/adm/wtmp elsewhere. No doubt this assumption will need
364           adjustment. Use -DWTMPFILE=path to override at compile time
365           (there is also a runtime override). See [99]iksd.html for
366           details.
367
368    UTMP, utsname(), etc
369           C-Kermit 7.0 gets as much info as it can about its job --
370           mainly for IKSD logging -- from utmp. But of course utmp
371           formats and fields differ, and for that matter, there can be
372           two different header files, <utmp.h> and <utmpx.h>. Look for
373           HAVEUTMPX and HAVEUTHOST in [100]ckufio.c and let me know of
374           any needed adjustments.
375
376    Password lookup
377           IKSD needs to authenticate incoming users against the password
378           list. In some cases, this requires the addition of -lcrypt
379           (e.g. in Unixware 2.x). In most others, the crypt functions are
380           in the regular C library. If you get "crypt" as an unresolved
381           symbol at link time, add -lcrypt to LIBS. If your site has
382           local replacement libraries for authentication, you might need
383           a special LIBS clause such as "LIBS=-L/usr/local/lib -lpwent".
384
385           These days most Unix systems take advantage of shadow password
386           files or Plugable Authentication Modules (PAM). If your system
387           uses shadow passwords you must add -DCK_SHADOW to the CFLAGS
388           list. If your system requires PAM you must add -DCK_PAM to the
389           CFLAGS and -lpam -ldl to LIBS.
390
391    getusershell()
392           This is called by the IKSD at login time to see if a user has
393           been "turned off". But many Unix platforms lack this function.
394           In that case, you will get unresolved symbol reports at link
395           time for _getusershell, _endusershell; to work around, add
396           -DNOGETUSERSHELL.
397
398    initgroups()
399           This is called by IKSD after successful authentication. But
400           some platforms do not have this function, so obviously it can't
401           be called there, in which case add -DNOINITGROUPS.
402
403    setreuid(), setreuid(), setregid() not found or "deprecated"
404           Find out what your Unix variety wants you to use instead, and
405           make appropriate substitutions in routine zvpass(), module
406           [101]ckufio.c, and [102]let us know.
407
408    printf()
409           IKSD installs a printf() substitute to allow redirection of
410           printf-like output to the connection. However, this can
411           conflict with some curses libraries. In this case, separate
412           binaries must be built for IKSD and non-IKSD use.
413
414    If you encounter difficulties with any of the above, and you are not
415    interested in running C-Kermit as an IKSD, then simply add NOIKSD to
416    CFLAGS and rebuild. Example:
417
418 make sco286
419 (get lots of errors)
420 make clean
421 make sco286 "KFLAGS=-DNOIKSD"
422
423    Some non-IKSD things to watch out for:
424
425    Return type of main()
426           The main() routine is in [103]ckcmai.c. If you get complaints
427           about "main: return type is not blah", define MAINTYPE on the
428           CC command line, e.g.:
429
430 make xxx "KFLAGS=-DMAINTYPE=blah
431
432           (where blah is int, long, or whatever). If the complaint is
433           "Attempt to return a value from a function of type void" then
434           add -DMAINISVOID:
435
436 make xxx "KFLAGS=-DMAINISVOID=blah
437
438    DNS Service Records
439           This feature allows a remote host to redirect C-Kermit to the
440           appropriate socket for the requested service; e.g. if C-Kermit
441           requests service "telnet" and the host offers Telnet service on
442           port 999 rather than the customary port 23. If you get
443           compile-time complaints about not being able to find
444           <resolv.h>, <netdb.h>, or <arpa/nameser.h>, add -DNO_DNS_SRV to
445           CFLAGS. If you get link-time complaints about unresolved
446           symbols res_search or dn_expand, try adding -lresolve to LIBS.
447
448    \v(ipaddress)
449           If "echo \v(ipaddress)" shows an empty string rather than your
450           local IP address, add -DCKGHNLHOST to CFLAGS and rebuild.
451
452    <sys/wait.h>
453           If this file can't be found at compile time, add -DNOREDIRECT
454           to CFLAGS. This disables the REDIRECT and PIPE commands and
455           anything else that needs the wait() system service.
456
457    syslog()
458           C-Kermit can now write syslog records. Some older platforms
459           might not have the syslog facility. In that case, add
460           -DNOSYSLOG. Others might have it, but require addition of
461           -lsocket to LIBS (SCO OSR5 is an example). See [104]Section 15.
462
463    putenv()
464           If "_putenv" comes up as an undefined symbol, add -DNOPUTENV to
465           CFLAGS and rebuild.
466
467    "Passing arg1 of 'time' from incompatible pointer"
468           This is a mess. See the mass of #ifdefs in the appropriate
469           module, [105]ckutio.c or [106]ckufio.c.
470
471    gettimeofday()
472           Wrong number of arguments. On most platforms, gettimeofday()
473           takes two arguments, but on a handful of others (e.g. Motorola
474           System V/88 V4, SNI Reliant UNIX 5.43, etc) it takes one. If
475           your version of gettimeofday() is being called with two args
476           but wants one, add -DGTODONEARG.
477
478    "Assignment makes pointer from integer without a cast"
479           This warning might appear in [107]ckutio.c or [108]ckufio.c.
480           (or elsewhere), and usually can be traced to the use of a
481           system or library function that returns a pointer but that is
482           not declared in the system header files even though it should
483           be. Several functions are commonly associated with this error:
484
485           + getcwd(): Add -DDCLGETCWD to CFLAGS and rebuild.
486           + popen() : Add -DDCLPOPEN to CFLAGS and rebuild.
487           + fdopen(): Add -DDCLFDOPEN to CFLAGS and rebuild.
488
489    "Operands of = have incompatible types"
490    "Incompatible types in assignment"
491           If this comes from [109]ckcnet.c and comes from a statement
492           involving inet_addr(), try adding -DINADDRX to CFLAGS. If that
493           doesn't help, then try adding -DNOMHHOST.
494
495    Complaints about args to get/setsockopt(), getpeername(),
496           getsockname()
497           These are all in [110]ckcnet.c. Different platforms and OS's
498           and versions of the same OS change this all the time: int,
499           size_t, unsigned long, etc. All the affected variables are
500           declared according to #ifdefs within ckcnet.c, so find the
501           declarations and adjust the #ifdefs accordingly.
502
503    size_t
504           In case of complaints about "unknown type size_t", add
505           -DSIZE_T=int (or other appropriate type) to CFLAGS.
506
507    'tz' undefined
508    Use of undefined enum/struct/union 'timezone'
509           Left of 'tv_sec' specifies undefined struct/union 'timeval' And
510           similar complaints in [111]ckutio.c: Add -DNOGFTIMER and/or
511           -DNOTIMEVAL.
512
513    Symlinks
514           The new built-in DIRECTORY command should show symlinks like
515           "ls -l" does. If it does not, check to see if your platform has
516           the lstat() and readlink() functions. If so, add -DUSE_LSTAT
517           and -DCKSYMLINK to CFLAGS and rebuild. On the other hand, if
518           lstat() is unresolved at link time, add -DNOLSTAT to CFLAGS. If
519           readlink() is also unresolved, add -DNOSYMLINK.
520
521    realpath()
522           Link-time complains about realpath() -- find the library in
523           which it resides and add it to LIBS (example for Unixware 7.1:
524           "-lcudk70") or add -DNOREALPATH to CFLAGS and rebuild. If built
525           with realpath() but debug log file is truncated or mangled,
526           ditto (some realpath() implementations behave differently from
527           others). If built with realpath() and seemingly random core
528           dumps occur during file path resolution, ditto.
529
530    Failure to locate header file <term.h>
531           Usually happens on Linux systems that have the C compiler
532           installed, but not the ncurses package (see comments about
533           selective installs above). Go back and install ncurses, or use
534           "make linuxnc" (Linux No Curses).
535
536    "Can't find shared library libc.so.2.1"
537    "Can't find shared library libncurses.so.3.0", etc...
538           You are trying to run a binary that was built on a computer
539           that has different library versions than your computer, and
540           your computer's loader is picky about library version numbers.
541           Rebuild from source on your computer.
542
543    Time (struct tm) related difficulties:
544           Errors like the following:
545
546 "ckutio.c", line 11994: incomplete struct/union/enum tm: _tm
547 "ckutio.c", line 11995: error: cannot dereference non-pointer type
548 "ckutio.c", line 11995: error: assignment type mismatch
549 "ckutio.c", line 11997: warning: using out of scope declaration: localtime
550 "ckutio.c", line 11997: error: unknown operand size: op "="
551 "ckutio.c", line 11997: error: assignment type mismatch
552 "ckutio.c", line 11998: error: undefined struct/union member: tm_year
553 "ckutio.c", line 12000: error: undefined struct/union member: tm_mon
554 "ckutio.c", line 12001: error: undefined struct/union member: tm_mday
555 "ckutio.c", line 12002: error: undefined struct/union member: tm_hour
556 "ckutio.c", line 12003: error: undefined struct/union member: tm_min
557 "ckutio.c", line 12004: error: undefined struct/union member: tm_sec
558
559           are due to failure to include the appropriate time.h header
560           files. Unix platforms generally have one or more of the
561           following: <time.h>, <sys/time.h>, and <sys/timeb.h>. Any
562           combination of these might be required. Defaults are set up for
563           each makefile target. The defaults can be corrected on the CC
564           command line by adding the appropriate definition from the
565           following list to CFLAGS:
566
567 -DTIMEH         Include <time.h>
568 -DNOTIMEH       Don't include <time.h>
569 -DSYSTIMEH      Include <sys/time.h>
570 -DNOSYSTIMEH    Don't include <sys/time.h>
571 -DSYSTIMEBH     Include <sys/timeb.h>
572 -DNOSYSTIMEBH   Don't include <sys/timeb.h>
573
574           Note that <sys/timeb.h> is relatively scarce in the System V
575           and POSIX environments; the only platform of recent vintage
576           where it was/is used is OSF/1 and its derivatives (Digital Unix
577           and Tru64 Unix).
578
579    Struct timeval and/or timezone not declared:
580           In some cases, merely including the appropriate time.h header
581           files is still not enough. POSIX.1 does not define the timeval
582           struct, and so the items we need from the header are protected
583           against us by #ifndef _POSIX_SOURCE or somesuch. In this case,
584           we have to declare the timeval (and timezone) structs
585           ourselves. To force this, include -DDCLTIMEVAL in CFLAGS.
586
587    Warnings about dn_expand() Argument #4
588           WARNING: argument is incompatible with prototyp. It's the old
589           char versus unsigned char stupidity again. Try to find a
590           compiler switch like GCC's "-funsigned-char". Failing that, add
591           -DCKQUERYTYPE=xxx to CFLAGS, where xxx is whatever 'man
592           dn_expand' tells you the type of the 4th argument should be
593           (presumably either char or unsigned char; in the latter case
594           use CHAR to avoid confusion caused by multiple words.
595
596    Switch Table Overflow (in [112]ckcuni.c)
597           Add -DNOUNICODE to CFLAGS.
598
599    Compile-time warnings about ck_out() or tgetstr() or tputs():
600           Easy solution: Add -DNOTERMCAP to CFLAGS. But then you lose the
601           SCREEN function. Real solution: Try all different combinations
602           of the following CFLAGS:
603
604 -DTPUTSARGTYPE=char    -DTPUTSFNTYPE=int
605 -DTPUTSARGTYPE=int     -DTPUTSFNTYPE=void
606
607           Until the warnings go away, except maybe "ck_outc: return with
608           a value in a function returning void", and in that case also
609           add -DTPUTSISVOID.
610
611    "Passing arg 1 of to tputs() makes pointer from integer without a
612           cast":
613           Add -DTPUTSARG1CONST to CFLAGS.
614
615    "Undefined symbol: dup2"
616           Add -DNOZEXEC to CFLAGS.
617
618    "header file 'termcap.h' not found"
619           Add -DNOHTERMCAP to CFLAGS.
620
621    Other difficulties are generally of the "where is curses.h and what is
622    it called this week?" variety (most easily solved by making symlinks
623    in the include and lib directories), or overzealous complaints
624    regarding type mismatches in function calls because of the totally
625    needless and silly signed versus unsigned char conflict (*), etc. In
626    any case, please send any compilation or linking warnings or errors to
627    the author, preferably along with fixes.
628
629      * C-Kermit does not use the signed property of chars at all
630        anywhere, ever. So if all chars and char *'s can be made unsigned
631        at compile time, as they can in gcc with "-funsigned-char", they
632        should be.
633
634    IMPORTANT: If you find any of these hints necessary for a particular
635    make target (or you hit upon others not listed here), PLEASE SEND A
636    REPORT TO:
637
638 [113]kermit-support@columbia.edu
639     ________________________________________________________________________
640
641   4.1. The Unix Makefile
642
643    [ [114]Top ] [ [115]Contents ] [ [116]Section Contents ] [ [117]Next ]
644    [ [118]Previous ]
645
646    If your distribution does not contain a file with the name "makefile"
647    or "Makefile", then rename the file called ckuker.mak to makefile:
648
649 mv ckuker.mak makefile
650
651    Then type "make xxx", where xxx is the platform you want to build
652    C-Kermit for. These are listed in the [119]comments at the top of the
653    makefile. For example, to build C-Kermit for Linux, type:
654
655 make linux
656
657    Here are some typical examples:
658
659      Target    Description
660      linux     Linux, any version on any hardware platform
661      openbsd   OpenBSD, any version on any hardware platform
662      aix43     AIX 4.3
663      aix43g    AIX 4.3, built with gcc
664      solaris9  Solaris 9
665      solaris9g Solaris 9 built with gcc
666      hpux1100  HP-UX 11-point-anything
667
668    The makefile is quite long, and at least two versions of Unix, SCO
669    Xenix/286 and 2.x BSD, cannot cope with its length. An attempt to
670    "make sco286" gives the message "Make: Cannot alloc mem for env..
671    Stop". Solution: edit away some or all of the nonrelevant material
672    from the makefile. (A separate version of the makefile is provided for
673    BSD 2.x: ckubs2.mak but C-Kermit 8.0 can't be built for BSD 2.x -- it
674    has simply grown too large.)
675
676    Some make programs reportedly cannot handle continued lines (lines
677    ending in backslash (\)). If you have a problem with the makefile, try
678    editing the makefile to join the continued lines (remove the
679    backslashes and the following linefeed).
680
681    Other makefile troubles may occur because tabs in the makefile have
682    somehow been converted to spaces. Spaces and tabs are distinct in Unix
683    makefiles.
684
685    Similarly, carriage returns might have been added to the end of each
686    line, which also proves confusing to most Unix versions of make.
687
688    Check to see if there are comments about your particular version in
689    its makefile target itself. In a text editor such as EMACS or VI,
690    search for the make entry name followed by a colon, e.g. "linux:" (if
691    you really are building C-Kermit for Linux, do this now).
692
693    Check to see if there are comments about your particular version in
694    the [120]ckubwr.txt file ([121]CLICK HERE for the Web version).
695
696    If you have trouble with building [122]ckwart.c, or running the
697    resulting wart preprocessor program on [123]ckcpro.w:
698
699     1. Just "touch" the [124]ckcpro.c file that comes in the distribution
700        and then give the "make" command again, or:
701     2. Compile ckwart.c "by hand": cc -o wart ckwart.c, or:
702     3. Try various other tricks. E.g. one Linux user reported that that
703        adding the "static" switch to the rule for building wart fixed
704        everything:
705
706 wart: ckwart.$(EXT)
707         $(CC) -static -o wart ckwart.$(EXT) $(LIBS)
708
709    If your compiler supports a compile-time option to treat ALL chars
710    (and char *'s, etc) as unsigned, by all means use it -- and send me
711    email to let me know what it is (I already know about gcc
712    -funsigned-char).
713
714    To add compilation options (which are explained later in this
715    document) to your makefile target without editing the makefile,
716    include "KFLAGS=..." on the make command line, for example:
717
718 make linux KFLAGS=-DNODEBUG
719 make bsd "KFLAGS=-DKANJI -DNODEBUG -DNOTLOG -DDYNAMIC -UTCPSOCKET"
720
721    Multiple options must be separated by spaces. Quotes are necessary if
722    the KFLAGS= clause includes spaces. The KFLAGS are added to the end of
723    the CFLAGS that are defined in the selected makefile target. For
724    example, the "bsd" entry includes -DBSD4 -DTCPSOCKET, so the second
725    example above compiles Kermit with the following options:
726
727 -DBSD4 -DTCPSOCKET -DKANJI -DNODEBUG -DNOTLOG -DDYNAMIC -UTCPSOCKET
728
729    (Notice how "-UTCPSOCKET" is used to negate the effect of the
730    "-DTCPSOCKET" option that is included in the makefile target.)
731
732    WARNING: Be careful with KFLAGS. If you build C-Kermit, change some
733    files, and then run make again using the same make entry but
734    specifying different KFLAGS than last time, make won't detect it and
735    you could easily wind up with inconsistent object modules, e.g. some
736    of them built with a certain option, others not. When in doubt, "make
737    clean" first to make sure all your object files are consistent.
738    Similarly, if you change CFLAGS, LIBS, or any other items in the
739    makefile, or you rebuild using a different makefile target, "make
740    clean" first.
741
742    If you create a new makefile target, use static linking if possible.
743    Even though this makes your C-Kermit binary bigger, the resulting
744    binary will be more portable. Dynamically linked binaries tend to run
745    only on the exact configuration and version where they were built; on
746    others, invocation tends to fail with a message like:
747
748 Can't find shared library "libc.so.2.1"
749     ________________________________________________________________________
750
751   4.2. The C-Kermit Initialization File
752
753    [ [125]Top ] [ [126]Contents ] [ [127]Section Contents ] [ [128]Next ]
754    [ [129]Previous ]
755
756    (This section is obsolete.) Read [130]Section 5 about the
757    initialization file.
758     ________________________________________________________________________
759
760   4.3. The 2.x BSD Makefile
761
762    [ [131]Top ] [ [132]Contents ] [ [133]Section Contents ] [ [134]Next ]
763    [ [135]Previous ]
764
765      This section is obsolete. C-Kermit 6.0 was the last release that
766      could be built on PDP-11 based BSD versions.
767     ________________________________________________________________________
768
769   4.4. The Plan 9 Makefile
770
771    [ [136]Top ] [ [137]Contents ] [ [138]Section Contents ] [ [139]Next ]
772    [ [140]Previous ]
773
774    Use the separate makefile [141]ckpker.mk. NOTE: The Plan 9 version of
775    C-Kermit 8.0 has not yet been built. There should be no impediment to
776    building it. However, even when built successfully, certain key
777    features are missing, notably TCP/IP networking.
778     ________________________________________________________________________
779
780   4.5. Makefile Failures
781
782    [ [142]Top ] [ [143]Contents ] [ [144]Section Contents ] [
783    [145]Previous ]
784
785    First, be sure the source files are stored on your current disk and
786    directory with the right names (in lowercase). Second, make sure that
787    the makefile itself does not contain any lines with leading spaces:
788    indented lines must all start with horizontal TAB, and no spaces.
789
790    Then make sure that your Unix PATH is defined to find the appropriate
791    compiler for your makefile target. For example, on SunOS systems,
792    "make sunos41" builds C-Kermit for the BSD environment, and assumes
793    that /usr/ucb/cc will be used for compilation and linking. If your
794    PATH has /usr/5bin ahead of /usr/ucb, you can have problems at compile
795    or link time (a commonly reported symptom is the inability to find
796    "ftime" during linking). Fix such problems by redefining your Unix
797    PATH, or by specifying the appropriate "cc" in CC= and CC2= statements
798    in your makefile target.
799
800    During edits 166-167, considerable effort went into making C-Kermit
801    compilable by ANSI C compilers. This includes prototyping all of
802    C-Kermit's functions, and including the ANSI-defined system header
803    files for system and library functions, as defined in K&R, second
804    edition: <string.h>, <stdlib.h>, <unistd.h> (except in NeXTSTEP this
805    is <libc.h>), and <sys/stdtypes.h>. If you get warnings about any of
806    these header files not being found, or about argument mismatches
807    involving pid_t, uid_t, or gid_t, look in ckcdeb.h and make
808    amendments. C-Kermit assumes it is being compiled by an ANSI-compliant
809    C compiler if __STDC__ is defined, normally defined by the compiler
810    itself. You can force ANSI compilation without defining __STDC__
811    (which some compilers won't let you define) by including -DCK_ANSIC on
812    the cc command line.
813
814    On the other hand, if your compiler defines __STDC__ but still
815    complains about the syntax of Kermit's function prototypes, you can
816    disable the ANSI-style function prototyping by including -DNOANSI on
817    the command line.
818
819    For SCO OpenServer, UNIX, ODT, and XENIX compilations, be sure to pick
820    the most appropriate [146]makefile target, and be sure you have
821    installed an SCO development system that is keyed to your exact SCO
822    operating system release, down to the minor version (like 2.3.1).
823
824    Also note that SCO distributes some of its libraries in encrypted
825    form, and they must be decrypted before C-Kermit can be linked with
826    them. If not, you might see a message like:
827
828 ld: file /usr/lib/libsocket.a is of unknown type: magic number = 6365
829
830    To decrypt, you must supply a key (password) that came with your
831    license. Call SCO for further info.
832
833    If your compiler uses something other than int for the pid (process
834    id) data type, put -DPID_T=pid_t or whatever in your CFLAGS.
835
836    If you get complaints about unknown data types uid_t and gid_t, put
837    -DUID_T=xxx -DGID_T=yyy in your CFLAGS, where xxx and yyy are the
838    appropriate types.
839
840    If your compilation fails because of conflicting or duplicate
841    declarations for sys_errlist, add -DUSE_STRERROR or -DNDSYSERRLIST to
842    CFLAGS.
843
844    If your compilation dies because getpwnam() is being redeclared (or
845    because of "conflicting types for getwpnam"), add -DNDGPWNAM to your
846    CFLAGS. If that doesn't work, then add -DDCGPWNAM to your CFLAGS (see
847    ckufio.c around line 440).
848
849    If the compiler complains about the declaration of getpwnam() during
850    an ANSI C compilation, remove the declaration from ckufio.c or change
851    the argument in the prototype from (char *) to (const char *).
852
853    If you get complaints that getpwuid() is being called with an improper
854    type, put -DPWID_T=xx in your CFLAGS.
855
856    If you get compile-time warnings that t_brkc or t_eofc (tchars
857    structure members, used in BSD-based versions) are undefined, or
858    structure-member- related warnings that might be traced to this fact,
859    add -DNOBRKC to CFLAGS.
860
861    If you get a linker message to the effect that _setreuid or _setregid
862    is not defined, add -DNOSETREU to CFLAGS, or add -DCKTYP_H=blah to
863    CFLAGS to make C-Kermit read the right <types.h>-kind-of-file to pick
864    up these definitions.
865
866    If you get a message that _popen is undefined, add -DNOPOPEN to
867    CFLAGS.
868
869    If you get a complaint at compile time about an illegal
870    pointer-integer combination in ckufio.c involving popen(), or at link
871    time that _popen is an undefined symbol, add the declaration "FILE
872    *popen();" to the function zxcmd() in ckufio.c (this declaration is
873    supposed to be in <stdio.h>). If making this change does not help,
874    then apparently your Unix does not have the popen() function, so you
875    should add -DNOPOPEN to your make entry, in which case certain
876    functions involving "file" i/o to the standard input and output of
877    subprocesses will not be available.
878
879    If your linker complains that _getcwd is undefined, you can add a
880    getcwd() function to ckufio.c, or add it to your libc.a library using
881    ar:
882
883 #include <stdio.h>
884
885 char *
886 getcwd(buf,size) char *buf; int size; {
887 #ifndef NOPOPEN
888 #ifdef DCLPOPEN
889     FILE *popen();
890 #endif
891     FILE *pfp;
892
893     if (!buf) return(NULL);
894     if (!(pfp = popen("pwd","r"))) return(NULL);
895     fgets(buf,size-2,pfp);
896     pclose(pfp);
897     buf[strlen(buf)-1] = '\0';
898     return((char *)buf);
899 #else
900     buf[0] = '\0';
901     return(NULL);
902 #endif /* NOPOPEN */
903 }
904
905 #ifdef NOPOPEN
906 FILE *popen(s,t) char *s,*t; {
907     return(NULL);
908 }
909 #endif /* NOPOPEN */
910
911    If you get complaints about NPROC having an invalid value, add a valid
912    definition for it (depends on your system), as in the cray entry.
913
914    If you get some symbol that's multiply defined, it probably means that
915    a variable name used by Kermit is also used in one of your system
916    libraries that Kermit is linked with. For example, under PC/IX some
917    library has a variable or function called "data", and the variable
918    "data" is also used extensively by Kermit. Rather than edit the Kermit
919    source files, just put a -D in the make entry CFLAGS to change the
920    Kermit symbol at compile time. In this example, it might be
921    -Ddata=xdata.
922
923    Some symbol is defined in your system's header files, but it produces
924    conflicts with, or undesired results from, Kermit. Try undefining the
925    symbol in the makefile target's CFLAGS, for example -UFIONREAD.
926
927    Some well-known symbol is missing from your system header files. Try
928    defining in the makefile target's CFLAGS, for example -DFREAD=1.
929
930    You get many warnings about pointer mismatches. This probably means
931    that Kermit is assuming an int type for signal() when it should be
932    void, or vice-versa. Try adding -DSIG_I (for integer signal()) or
933    -DSIG_V (for void) to CFLAGS. Or just include KFLAGS=-DSIG_V (or
934    whatever) in your "make" command, for example:
935
936 make bsd KFLAGS=-DSIG_V
937
938    You get many messages about variables that are declared and/or set but
939    never used. It is difficult to avoid these because of all the
940    conditional compilation in the program. Ignore these messages.
941
942    Some of C-Kermit's modules are so large, or contain so many character
943    string constants, or are so offensive in some other way, that some C
944    compilers give up and refuse to compile them. This is usually because
945    the -O (optimize) option is included in the make entry. If this
946    happens to you, you can (a) remove the -O option from the make entry,
947    which will turn off the optimizer for ALL modules; or (b) compile the
948    offending module(s) by hand, including all the switches from make
949    entry except for -O, and then give the appropriate "make" command
950    again; or (c) increase the value of the -Olimit option, if your
951    compiler supports this option; or (d) change the [147]makefile target
952    to first compile each offending module explicitly without
953    optimization, then compile the others normally (with optimization),
954    for example:
955
956 #Fortune 32:16, For:Pro 2.1 (mostly like 4.1bsd)
957 ft21:
958         @echo 'Making C-Kermit $(CKVER) for Fortune 32:16 For:Pro 2.1...'
959         $(MAKE) ckuusx.$(EXT) "CFLAGS= -DNODEBUG -DBSD4 -DFT21 -DNOFILEH \
960         -SYM 800 \ -DDYNAMIC -DNOSETBUF -DCK_CURSES $(KFLAGS) -DPID_T=short"
961         $(MAKE) ckuxla.$(EXT) "CFLAGS= -DNODEBUG -DBSD4 -DFT21 -DNOFILEH \
962         -SYM 800 \ -DDYNAMIC -DNOSETBUF -DCK_CURSES $(KFLAGS) -DPID_T=short"
963         $(MAKE) ckudia.$(EXT) "CFLAGS= -DNODEBUG -DBSD4 -DFT21 -DNOFILEH \
964         -SYM 800 \ -DDYNAMIC -DNOSETBUF -DCK_CURSES $(KFLAGS) -DPID_T=short"
965         $(MAKE) wermit "CFLAGS= -O -DNODEBUG -DBSD4 -DFT21 -DNOFILEH -SYM 800 \
966         -DDYNAMIC -DNOSETBUF -DCK_CURSES $(KFLAGS) -DPID_T=short" \
967         "LNKFLAGS= -n -s" "LIBS= -lcurses -ltermcap -lv -lnet"
968
969    As an extreme example, some compilers (e.g. gcc on the DG AViiON) have
970    been known to dump core when trying to compile ckwart.c with
971    optimization. So just do this one "by hand":
972
973 cc -o wart ckwart.c
974
975    or:
976
977 touch ckcpro.c
978
979    and then give the "make" command again.
980
981    Speaking of wart, it is unavoidable that some picky compilers might
982    generate "statement unreachable" messages when compiling ckcpro.c.
983    Unreachable statements can be generated by the wart program, which
984    generates ckcpro.c automatically from [148]ckcpro.w, which translates
985    lex-like state/input constructions into a big switch/case
986    construction.
987
988    Some function in Kermit wreaks havoc when it is called. Change all
989    invocations of the function into a macro that evaluates to the
990    appropriate return code that would have been returned by the function
991    had it been called and failed, for example: -Dzkself()=0. Obviously
992    not a good idea if the function is really needed.
993
994    If you have just installed SunOS 4.1.2 or 4.1.3, you might find that
995    C-Kermit (and any other C program) fails to link because of unresolved
996    references from within libc. This is because of a mistake in Sun's
997    /usr/lib/shlib.etc files for building the new libc. Change the libc
998    Makefile so that the "ld" lines have "-ldl" at the end. Change the
999    README file to say "mv xccs.multibyte. xccs.multibyte.o" and follow
1000    that instruction.
1001   __________________________________________________________________________
1002
1003 5. INSTALLING THE KERMIT FILES
1004
1005    [ [149]Top ] [ [150]Contents ] [ [151]Next ] [ [152]Previous ]
1006
1007    SECTION CONTENTS
1008
1009 5.1. [153]The C-Kermit Initialization File
1010 5.2. [154]Text Files
1011 5.3. [155]Installing the Kermit Files
1012 5.4. [156]The Makefile Install Target
1013
1014    The C-Kermit executable does not need any external files to run.
1015    Unlike, say, the cu program, which on most platforms is useless unless
1016    you (as root) edit the /usr/spool/uucp/Systems and
1017    /usr/spool/uucp/Devices files to supply whatever obscure and
1018    undocumented syntax is required to match some supposedly user-friendly
1019    mnemonic to the real pathname of whatever device you want to use,
1020    Kermit runs on its own without needing any external configuration
1021    files, and lets you refer to device (and network hosts and services)
1022    by their own natural undisguised names.
1023
1024    Nevertheless, a number of external files can be installed along with
1025    the C-Kermit executable if you wish. These include configuration and
1026    customization files that are read by Kermit as well as documentation
1027    files to be read by people. All of this material is (a) optional, and
1028    (b) available on the Kermit website:
1029
1030 [157]http://www.columbia.edu/kermit/
1031
1032    and usually in a more pleasant form, perhaps also with updated
1033    content. So if your computer is on the Internet, there is no need to
1034    install anything but the Kermit executable if users know how to find
1035    the Kermit website (and if they don't, Kermit's "help" command tells
1036    them).
1037
1038   5.1. The C-Kermit Initialization File
1039
1040    In C-Kermit 7.0 and earlier, the standard initialization file was a
1041    key C-Kermit component because:
1042
1043     a. It "loaded" the dialing and network directories.
1044     b. It defined all the macros and variables for the services
1045        directory.
1046     c. It defined macros for quickly changing Kermit's file-transfer
1047        performance tuning.
1048
1049    The standard initialization file is quite long (more than 600 lines)
1050    and requires noticeable processing time (the slower the computer, the
1051    more noticeable), yet few people actually use the services directory,
1052    whose definition takes up most of its bulk. Meanwhile, in C-Kermit
1053    8.0, many of the remaining functions of the standard initialization
1054    file are now built in; for example, the FAST, CAUTIOUS, and ROBUST
1055    commands.
1056
1057    More to the point, many of the settings that could be made only in the
1058    initialization and customization files can now be picked up from
1059    environment variables. The first group identifies initialization and
1060    directory files:
1061
1062    CKERMIT_INI
1063           The path of your Kermit initialization file, if any. This
1064           overrides the built-in search for $HOME/.kermrc.
1065
1066    K_CHARSET
1067           The character set used for encoding local text files.
1068           Equivalent to SET FILE CHARACTER-SET.
1069
1070    K_DIAL_DIRECTORY
1071           The full pathname of one or more Kermit dialing directory
1072           files. Equivalent to SET DIAL DIRECTORY.
1073
1074    K_NET_DIRECTORY
1075           The full pathname of one or more Kermit network directory
1076           files. Equivalent to SET NETWORK DIRECTORY.
1077
1078    K_INFO_DIRECTORY
1079    K_INFO_DIR
1080           The full pathname of a directory containing Kermit (if any)
1081           containing ckubwr.txt and other Kermit text files. Overrides
1082           Kermit's built-in search for this directory.
1083
1084    The next group is related to dialing modems:
1085
1086    K_COUNTRYCODE
1087           The telephonic numeric country code for this location, e.g. 1
1088           for North America or 39 for Italy. It is recommended that this
1089           one be set for all users, system-wide. Not only is it used to
1090           process portable-format dialing directory entries, but it is
1091           also compared against Kermit's built-in list of "tone
1092           countries" to see if tone dialing can be used. Equivalent to
1093           Kermit's SET DIAL COUNTRY-CODE command.
1094
1095    K_AREACODE
1096           The telephonic numeric area code for this location, e.g. 212
1097           for Manhattan, New York, USA. Recommend this one also be set
1098           system-wide, so shared portable-format dialing directories will
1099           work automatically for everybody. Equivalent to Kermit's SET
1100           DIAL AREA-CODE command.
1101
1102    K_DIAL_METHOD
1103           TONE or PULSE. Equivalent to Kermit's SET DIAL METHOD command.
1104           If a dial method is not set explicitly (or implicitly from the
1105           country code), Kermit does not specify a dialing method, and
1106           uses the modem's default method, which tends to be pulse.
1107
1108    K_INTL_PREFIX
1109           The telephonic numeric international dialing prefix for this
1110           location. Equivalent to Kermit's SET DIAL INTL-PREFIX command.
1111
1112    K_LD_PREFIX
1113           The telephonic numeric long-distance dialing prefix for this
1114           location. Equivalent to Kermit's SET DIAL LD-PREFIX command.
1115
1116    K_PBX_ICP
1117           The telephonic numeric PBX internal call prefix for this
1118           location. Equivalent to Kermit's SET DIAL PBX-INSIDE-PREFIX
1119           command.
1120
1121    K_PBX_OCP
1122           The telephonic numeric PBX external call prefix for this
1123           location. Equivalent to Kermit's SET DIAL PBX-OUTSIDE-PREFIX
1124           command.
1125
1126    K_PBX_XCH
1127           The telephonic numeric PBX exchange (first part of the
1128           subscriber number). Equivalent to Kermit's SET DIAL
1129           PBX-EXCHANGE command.
1130
1131    K_TF_AREACODE
1132           A list of one or more telephonic numeric toll-free area codes.
1133
1134    K_TF_PREFIX
1135           The telephonic numeric toll-free dialing prefix, in case it is
1136           different from the long-distance prefix. Equivalent to Kermit's
1137           SET DIAL TF-PREFIX command.
1138
1139    The final group includes well-known environment variables that are
1140    also used by Kermit:
1141
1142    CDPATH
1143           Where the CD command should look for relative directory names.
1144
1145    SHELL
1146           The path of your Unix shell. Used by the RUN (!) command to
1147           choose the shell to execute its arguments.
1148
1149    USER
1150           Your Unix username.
1151
1152    EDITOR
1153           The name or path of your preferred editor (used by the EDIT
1154           command). Equivalent to SET EDITOR.
1155
1156    BROWSER
1157           The name or path of your preferred web browser (used by the
1158           BROWSE command). Equivalent to Kermit's SET BROWSER command.
1159
1160    Does this mean the initialization file can be abolished? I think so.
1161    Here's why:
1162
1163      * Kermit already does everything most people want it to do without
1164        one.
1165      * Important site-specific customizations can be done with global
1166        environment variables.
1167      * There is no longer any need for everybody to have to use the
1168        standard initialization file.
1169      * This means that your initialization file, if you want one, can
1170        contain your own personal settings, definitions, and preferences,
1171        rather than 600 lines of "standard" setups.
1172      * If you still want the services directory, you can either TAKE the
1173        standard initialization file (which must be named anything other
1174        than $HOME/.kermrc to avoid being executed automatically every
1175        time you start Kermit), or you can make it a kerbang script and
1176        execute it "directly" (the [158]makefile install target does this
1177        for you by putting ckermit.ini in the same directory as the Kermit
1178        binary, adding the appropriate Kerbang line to the top, and giving
1179        it execute permission).
1180
1181    In fact, you can put any number of kerbang scripts in your PATH to
1182    start up C-Kermit in different ways, to have it adopt certain
1183    settings, make particular connections, execute complicated scripts,
1184    whatever you want.
1185
1186   5.2. Text Files
1187
1188    These are entirely optional. Many of them are to be found at the
1189    Kermit website in HTML form (i.e. as Web pages with clickable links,
1190    etc), and very likely also more up to date. Plain-text files that
1191    correspond to Web pages were simply "dumped" by Lynx from the website
1192    to plain ASCII text. The format is whatever Lynx uses for this
1193    purpose. If you wish, you can install them on your computer as
1194    described in the [159]next section.
1195
1196    [160]COPYING.TXT
1197           Copyright notice, permissions, and disclaimer.
1198
1199    [161]ckermit.ini
1200           The standard initialization file, intended more for reference
1201           (in most cases) than actual use; see [162]Section 5.1.
1202
1203    [163]ckermod.ini
1204           A sample customization file.
1205
1206    [164]ckermit70.txt
1207           Supplement to [165]Using C-Kermit for version 7.0. Available on
1208           the Kermit website as:
1209           [166]http://www.columbia.edu/kermit/ckermit70.html
1210
1211    [167]ckermit80.txt
1212           Supplement to [168]Using C-Kermit for version 8.0. Available on
1213           the Kermit website as:
1214           [169]http://www.columbia.edu/kermit/ckermit80.html
1215
1216    [170]ckcbwr.txt
1217           The general C-Kermit hints and tips ("beware") file. Available
1218           on the Kermit website as:
1219           [171]http://www.columbia.edu/kermit/ckcbwr.html
1220
1221    [172]ckubwr.txt
1222           The Unix-specific C-Kermit hints and tips file. Available on
1223           the Kermit website as:
1224           [173]http://www.columbia.edu/kermit/ckubwr.html
1225
1226    [174]ckuins.txt
1227           Unix C-Kermit Installation Instructions (this file). Available
1228           on the Kermit website as:
1229           [175]http://www.columbia.edu/kermit/ckuins.html
1230
1231    [176]ckccfg.txt
1232           C-Kermit compile-time configuration options. Available on the
1233           Kermit website as:
1234           [177]http://www.columbia.edu/kermit/ckccfg.html
1235
1236    [178]ckcplm.txt
1237           The C-Kermit program logic manual. Available on the Kermit
1238           website as:
1239           [179]http://www.columbia.edu/kermit/ckcplm.html
1240
1241    [180]ca_certs.pem
1242           Certificate Authority certificates for secure connections (see
1243           [181]Section 16).
1244
1245   5.3. Installing the Kermit Files
1246
1247    There is an "install" target in the [182]makefile that you can use if
1248    you wish. However, since every site has its own layout and
1249    requirements, it is often better to install the Kermit files by hand.
1250    You don't have to use the makefile install target to install C-Kermit.
1251    This is especially true since not all sites build C-Kermit from
1252    source, and therefore might not even have the makefile. But you should
1253    read this section in any case.
1254
1255      If your computer already has an older version of C-Kermit
1256      installed, you should rename it (e.g. to "kermit6" or "kermit7") so
1257      in case you have any trouble with the new version, the old one is
1258      still available.
1259
1260    In most cases, you need to be root to install C-Kermit, if only to
1261    gain write access to directories in which the binary and manual page
1262    are to be copied. The C-Kermit binary should be installed in a
1263    directory that is in the users' PATH, but that is not likely to be
1264    overwritten when you install a new version of the operating system. A
1265    good candidate would be the /usr/local/bin/ directory, but the
1266    specific choice is site dependent. Example (assuming the appropriate
1267    Kermit binary is stored in your current directory as "wermit", e.g.
1268    because you just built it from source and that's the name the makefile
1269    gave it):
1270
1271 mv wermit /usr/local/bin/kermit
1272 chmod 755 /usr/local/bin/kermit
1273
1274    or (only after you finish reading this section!) simply:
1275
1276 make install
1277
1278    IMPORTANT: IF C-KERMIT IS TO BE USED FOR DIALING OUT, you must also do
1279    something to give it access to the dialout devices and lockfile
1280    directories. The 'install' target does not attempt to set Kermit's
1281    owner, group, and permissions to allow dialing out. This requires
1282    privileges, open eyes, and human decision-making. Please read
1283    [183]Sections 10 and [184]11 below, make the necessary decisions, and
1284    then implement them by hand as described in those sections.
1285
1286    You should also install the man page, which is called ckuker.nr, in
1287    the man page directory for local commands, such as /usr/man/man1/,
1288    renamed appropriately, e.g. to kermit.1. This is also taken care of by
1289    "make install".
1290
1291    Optionally, the text files listed in the [185]previous section can be
1292    placed in a publicly readable directory. Suggested directory names
1293    are:
1294
1295 /usr/local/doc/kermit/
1296 /usr/local/lib/kermit/
1297 /usr/share/lib/kermit/
1298 /opt/kermit/doc/
1299
1300    (or any of these without the "/kermit"). Upon startup, C-Kermit checks
1301    the following environment variables whose purpose is to specify the
1302    directory where the C-Kermit text files are, in the following order:
1303
1304 K_INFO_DIRECTORY
1305 K_INFO_DIR
1306
1307    If either of these is defined, C-Kermit checks for the existence of
1308    the ckubwr.txt file (Unix C-Kermit Hints and Tips). If not found, it
1309    checks the directories listed above (both with and without the
1310    "/kermit") plus several others to see if they contain the ckubwr.txt
1311    file. If found, various C-Kermit messages can refer the user to this
1312    directory.
1313
1314    Finally, if you want to put the source code files somewhere for people
1315    to look at, you can do that too.
1316
1317   5.4. The Makefile Install Target
1318
1319    The makefile "install" target does almost everything for you if you
1320    give it the information it needs by setting the variables described
1321    below. You can use this target if:
1322
1323      * You downloaded the [186]complete C-Kermit archive and built
1324        C-Kermit from source; or:
1325      * You downloaded an [187]individual C-Kermit binary and the
1326        [188]C-Kermit text-file archive, and your computer has a "make"
1327        command.
1328
1329    Here are the parameters you need to know:
1330
1331    BINARY
1332           Name of the binary you want to install as "kermit". Default:
1333           "wermit".
1334
1335    prefix
1336           (lower case) If you define this variable, its value is
1337           prepended to all the following xxxDIR variables (8.0.211 and
1338           later).
1339
1340    DESTDIR
1341           If you want to install the Kermit files in a directory
1342           structure like /opt/kermit/bin/, /opt/kermit/doc/,
1343           /opt/kermit/src/, then define DESTIR as the root of this
1344           structure; for example, /opt/kermit. The DESTDIR string should
1345           not end with a slash. By default, DESTDIR is not defined. If it
1346           is defined, but the directory does not exist, the makefile
1347           attempts to create it, which might require you to be root. Even
1348           so, this can fail if any segments in the path except the last
1349           one do not already exist. WARNING: If the makefile creates any
1350           directories, it gives them a mode of 755, and the default owner
1351           and group. Modify these by hand if necessary.
1352
1353    BINDIR
1354           Directory in which to install the Kermit binary (and the
1355           standard C-Kermit initialization file, if it is found, as a
1356           Kerbang script). If DESTDIR is defined, BINDIR must start with
1357           a slash. BINDIR must not end with a slash. If DESTDIR is
1358           defined, BINDIR is a subdirectory of DESTDIR. If BINDIR does
1359           not exist, the makefile attempts to create it as with DESTDIR.
1360           Default: /usr/local/bin.
1361
1362    MANDIR
1363           Directory in which to install the C-Kermit manual page as
1364           "kermit" followed by the manual-chapter extension (next item).
1365           Default: /usr/man/man1. If MANDIR is defined, the directory
1366           must already exist.
1367
1368    MANEXT
1369           Extension for the manual page. Default: 1 (digit one).
1370
1371    SRCDIR
1372           Directory in which to install the C-Kermit source code. If
1373           DESTDIR is defined, this is a subdirectory of DESTDIR. Default:
1374           None.
1375
1376    CERTDIR
1377           For secure builds only: Directory in which to install the
1378           ca_certs.pem file. This must be the verification directory used
1379           by programs that use the SSL libraries at your site. Default:
1380           none. Possibilities include: /usr/local/ssl, /opt/ssl,
1381           /usr/lib/ssl, . . .     If CERTDIR is defined, the directory
1382           must already exist.
1383
1384    INFODIR
1385           Directory in which to install the C-Kermit text files. If
1386           DESTDIR is defined, this is a subdirectory of DESTDIR. Default:
1387           None. If INFODIR is defined but does not exist, the makefile
1388           attempts to create it, as with DESTDIR.
1389
1390    Examples:
1391
1392    make install
1393           Installs "wermit" as /usr/local/bin/kermit with permissions
1394           755, the default owner and group, and no special privileges.
1395           The manual page is installed as /usr/man/man1/kermit.1. Text
1396           files are not copied anywhere, nor are the sources.
1397
1398    make MANDIR= install
1399           Just like "make install" but does not attempt to install the
1400           manual page.
1401
1402    make DESTDIR=/opt/kermit BINDIR=/bin SRCDIR=/src INFODIR=/doc install
1403           Installs the Kermit binary "wermit" as /opt/kermit/bin/kermit,
1404           puts the source code in /opt/kermit/src, and puts the text
1405           files in /opt/kermit/doc, creating the directories if they
1406           don't already exist, and puts the man page in the default
1407           location.
1408
1409    make BINDIR=/usr/local/bin CERTDIR=/usr/local/ssl install
1410           Installs the Kerberized Kermit binary "wermit" as
1411           /usr/local/bin/kermit, puts the CA Certificates file in
1412           /usr/local/ssl/, and the man page in the normal place.
1413
1414    For definitive information, see the makefile. The following is
1415    excerpted from the 8.0.211 makefile:
1416
1417 # The following symbols are used to specify library and header file locations
1418 # Redefine them to the values used on your system by:
1419 # . editing this file
1420 # . defining the values on the command line
1421 # . defining the values in the environment and use the -e option
1422 #
1423 prefix  = /usr/local
1424 srproot = $(prefix)
1425 sslroot = $(prefix)
1426 manroot = $(prefix)
1427
1428 K4LIB=-L/usr/kerberos/lib
1429 K4INC=-I/usr/kerberos/include
1430 K5LIB=-L/usr/kerberos/lib
1431 K5INC=-I/usr/kerberos/include
1432 SRPLIB=-L$(srproot)/lib
1433 SRPINC=-I$(srproot)/include
1434 SSLLIB=-L$(sslroot)/ssl/lib
1435 SSLINC=-I$(sslroot)/ssl/include
1436 ...
1437 WERMIT = makewhat
1438 BINARY = wermit
1439 DESTDIR =
1440 BINDIR = $(prefix)/bin
1441 MANDIR = $(manroot)/man/man1
1442 MANEXT = 1
1443 SRCDIR =
1444 INFODIR =
1445 CERTDIR =
1446   __________________________________________________________________________
1447
1448 6. INSTALLING UNIX C-KERMIT FROM DOS-FORMAT DISKETTES
1449
1450    [ [189]Top ] [ [190]Contents ] [ [191]Next ] [ [192]Previous ]
1451
1452      This section is obsolete. We don't distribute C-Kermit on diskettes
1453      any more because (a)there is no demand, and (b) it no longer fits. 
1454
1455    If you received a DOS-format diskette containing a binary executable
1456    C-Kermit program plus supporting text files, be sure to chmod +x the
1457    executable before attempting to run it.
1458
1459    In version 5A(190) and later, all the text files on the C-Kermit
1460    DOS-format diskettes are in Unix format: LF at the end of each line
1461    rather than CRLF. This means that no conversions are necessary when
1462    copying to your Unix file system, and that all the files on the
1463    diskette, text and binary, can be copied together. The following
1464    comments apply to the DOS-format diskettes furnished with version
1465    5A(189) and earlier or to other DOS-format diskettes you might have
1466    obtained from other sources.
1467
1468    If you have received C-Kermit on MS-DOS format diskettes (such as
1469    those distributed by Columbia University), you should make sure that
1470    your DOS-to-Unix conversion utility (such as "dosread") both: (1)
1471    changes line terminators in all files from carriage-return linefeed
1472    (CRLF) to just linefeed (LF) (such as "dosread -a") and remove any
1473    Ctrl-Z's, and (2) that all filenames are converted from uppercase to
1474    lowercase. If these conversions were not done, you can use the
1475    following shell script on your Unix system to do them:
1476
1477 ---(cut here)---
1478 #!/bin/sh
1479 #
1480 # Shell script to convert C-Kermit DOS-format files into Unix format.
1481 # Lowercases the filenames, strips out carriage returns and Ctrl-Z's.
1482 #
1483 x=$1 # the name of the source directory
1484 y=$2 # the name of the target directory if [ $# -lt 2 ]; then
1485   echo "usage: $0 source-directory target-directory"
1486   exit 1
1487 fi
1488 if cd $1 ; then
1489   echo "Converting files from $1 to $2"
1490 else
1491   echo "$0: cannot cd to $1"
1492   exit 1
1493 fi
1494 for i in *; do
1495   j=`echo $i | tr 'A-Z' 'a-z'`
1496   echo $x/$i =\> $y/$j
1497   tr -d '\015\032' < $i > $y/$j
1498 done
1499 ---(cut here)---
1500
1501    Cut out this shell script, save it as "convert.sh" (or any other name
1502    you prefer), then "chmod +x convert.sh". Then, create a new, empty
1503    directory to put the converted files in, and then "convert.sh /xxx
1504    /yyy" where /xxx is the name of the directory where the PC-format
1505    files are, and /yyy is the name of the new, empty directory. The
1506    converted files will appear in the new directory.
1507   __________________________________________________________________________
1508
1509 7. CHECKING THE RESULTS
1510
1511    [ [193]Top ] [ [194]Contents ] [ [195]Next ] [ [196]Previous ]
1512
1513    First some quick checks for problems that can be easily corrected by
1514    recompiling with different options:
1515
1516    DIRECTORY listing is garbage
1517           Permissions, size, and date are random garbage (but the
1518           filenames are correct) in a C-Kermit DIRECTORY listing. On some
1519           platforms, the lstat() function is present but simply doesn't
1520           work; try adding -DNOLSTAT to CFLAGS and rebuild. If that
1521           doesn't fix it, also add -DNOLINKBITS. If it's still not fixed,
1522           remove -DNOLSTAT and -DNOLINKBITS and add -DNOSYMLINK.
1523
1524    curses
1525           When you make a connection with C-Kermit and transfer files
1526           using the fullscreen (curses) file-transfer display, and then
1527           get the C-Kermit> prompt back afterwards, do characters echo
1528           when you type them? If not, the curses library has altered the
1529           buffering of /dev/tty. Try rebuilding with KFLAGS=-DCK_NEWTERM.
1530           If it already has -DCK_NEWTERM in CFLAGS, try removing it. If
1531           that doesn't help, then rebuild with -DNONOSETBUF (yes, two
1532           NO's). If none of this works (and you can't fix the code), then
1533           either don't use the fullscreen display, or rebuild with
1534           -DNOCURSES.
1535
1536    Ctrl-L or any SCREEN command crashes C-Kermit:
1537           Rebuild with -DNOTERMCAP.
1538
1539    No prompt after CONNECT:
1540           After escaping back from CONNECT mode, does your C-Kermit>
1541           prompt disappear? (Yet, typing "?" still produces a command
1542           list, etc) In that case, add -DCKCONINTB4CB to CFLAGS and
1543           rebuild.
1544
1545    Here is a more thorough checklist can use to tell whether your version
1546    of C-Kermit was built correctly for your Unix system, with hints on
1547    how to fix or work around problems:
1548
1549     a. Start C-Kermit (usually by typing "./wermit" in the directory
1550        where you ran the makefile). Do you see the C-Kermit> prompt? If
1551        not, C-Kermit incorrectly deduced that it was running in the
1552        background. The test is in conbgt() in [197]ckutio.c. If you can
1553        fix it for your system, please send in the fix (Hint: read about
1554        "PID_T" below). Otherwise, you can force C-Kermit to foreground
1555        mode by starting it with the -z command line option, as in "kermit
1556        -z", or giving the interactive command SET BACKGROUND OFF.
1557     b. When you type characters at the C-Kermit prompt, do they echo
1558        immediately? If not, something is wrong with concb() and probably
1559        the other terminal mode settings routines in [198]ckutio.c. Be
1560        sure you have used the most appropriate make entry.
1561     c. At the C-Kermit> prompt, type "send ./?". C-Kermit should list all
1562        the files in the current directory. If not, it was built for the
1563        wrong type of Unix file system. Details below. In the meantime,
1564        try SET WILDCARD-EXPANSION SHELL as a workaround.
1565     d. CD to a directory that contains a variety of files, symlinks, and
1566        subdirectories and give a DIRECTORY command at the C-Kermit>
1567        prompt. Do the permissions, size, and date appear correct? If not
1568        see [199]Section 4.0.
1569     e. Assuming your platform supports long file names, create a file
1570        with a long name in your current directory, e.g.:
1571
1572 $ touch thisisafilewithaveryveryveryveryveryveryveryverylooooooooongname
1573
1574        (you might need to make it longer than this, perhaps as long as
1575        257 or even 1025 characters).
1576        Check with ls to see if your version of Unix truncated the name.
1577        Now start C-Kermit and type "send thisis<ESC>". Does Kermit
1578        complete the name, showing the same name as ls did? If not, wrong
1579        filesystem. Read on.
1580     f. Make sure that Kermit has the maximum path length right. Just type
1581        SHOW FILE and see what it says about this. If it is too short,
1582        there could be some problems at runtime. To correct, look in
1583        [200]ckcdeb.h to see how the symbol CKMAXPATH is set and make any
1584        needed adjustments.
1585     g. Send a file to your new Kermit program from a different Kermit
1586        program that is known to work. Is the date/timestamp of the new
1587        file identical to the original? If not, adjustments are needed in
1588        zstrdt() in [201]ckufio.c.
1589     h. Go to another computer (Computer B) from which you can send files
1590        to C-Kermit. Connect Computer B to the computer (A) where you are
1591        testing C-Kermit. Then:
1592     i. Send a file from B to A. Make sure it transferred OK and was
1593        created with the the right name.
1594     j. Send a file from B to A, specifying an "as-name" that is very,
1595        very long (longer than the maximum name length on computer A).
1596        Check to make sure that the file was received OK and that its name
1597        was truncated to Computer A's maximum length. If not, check the
1598        MAXNAMLEN definition in [202]ckufio.c.
1599     k. Tell C-Kermit on Computer A to "set receive pathnames relative"
1600        and then send it a file from Computer B specifying an as-name that
1601        contains several directory segments:
1602
1603 send foo dir1/dir2/dir3/foo
1604
1605        Check to make sure that dir1/dir2/dir3/foo was created in Computer
1606        A's current directory (i.e. that three levels of directories were
1607        created).
1608     l. Repeat step k, but make each path segment in the pathname longer
1609        than Computer A's maximum name length. Make sure each directory
1610        name, and the final filename, were truncated properly.
1611     m. Type Ctrl-C (or whatever your Unix interrupt character is) at the
1612        prompt. Do you get "^C..." and a new prompt? If instead, you get a
1613        core dump (this shouldn't happen any more) "rm core" and then
1614        rebuild with -DNOCCTRAP added to your CFLAGS. If it did work, then
1615        type another Ctrl-C. If this does the same thing as the first one,
1616        then Ctrl-C handling is OK. Otherwise, the SIGINT signal is either
1617        not getting re-armed (shouldn't happen) or is being masked off
1618        after the first time it is caught, in which case, if your Unix is
1619        POSIX-based, try rebuilding C-Kermit with -DCK_POSIX_SIG.
1620     n. Type Ctrl-Z (or whatever your Unix suspend character is) to put
1621        C-Kermit in the background. Did it work? If nothing happened, then
1622        (a)your version of Unix does not support job control, or (b) your
1623        version of C-Kermit was probably built with -DNOJC. If your
1624        session became totally frozen, then you are probably running
1625        C-Kermit on a Unix version that supports job control, but under a
1626        shell that doesn't. If that's not the case, look in the congm()
1627        and psuspend() routines in [203]ckutio.c and see if you can figure
1628        out what's wrong. If you can't, rebuild with -DNOJC.
1629     o. Give a SET LINE command for a dialout device, e.g. "set line
1630        /dev/tty00". If you got some kind of permission or access denied
1631        message, go read [204]Section 10 and then come back here.
1632     p. After giving a successful SET LINE command, type "show comm" to
1633        see the communication parameters. Do they make sense?
1634     q. Type "set speed ?" and observe the list of available speeds. Is it
1635        what you expected? If not, see [205]Section 2) of the
1636        [206]Configurations Options document.
1637     r. Give a SET SPEED command to change the device's speed. Did it
1638        work? (Type "show comm" again to check.)
1639     s. Try dialing out: SET MODEM TYPE , SET LINE , SET SPEED , DIAL . If
1640        it doesn't work, keep reading. After dialing, can you REDIAL?
1641     t. If your version was built with TCP/IP network support, try the
1642        TELNET command.
1643     u. Transfer some files in remote mode on incoming asynchronous serial
1644        (direct or modem) connections, and on incoming network (telnet,
1645        rlogin, terminal server) connections. If you get lots of errors,
1646        try different SET FLOW settings on the remote Kermit program.
1647     v. Establish a serial connection from C-Kermit to another computer
1648        (direct or dialed) and transfer some files. If you have network
1649        support, do the same with a network connection.
1650     w. If your version was built with fullscreen file transfer display
1651        support, check that it works during local-mode file transfer.
1652        Also, check C-Kermit's operation afterwards: is the echoing funny?
1653        etc etc. If there are problems, see [207]Section 4.
1654     x. If your version was built with script programming language
1655        support, TAKE the ckedemo.ksc file to give it a workout.
1656     y. Does C-Kermit interlock correctly with UUCP-family programs (cu,
1657        tip, uucp, etc)? If not, read the section [208]DIALING OUT AND
1658        COORDINATING WITH UUCP below.
1659     z. Modem signals... Give a SET LINE command to a serial device and
1660        then type the SHOW MODEM command. If it says "Modem signals
1661        unavailable in this version of Kermit", then you might want to
1662        look at the ttgmdm() routine in [209]ckutio.c and add the needed
1663        code -- if indeed your version of Unix provides a way to get modem
1664        signals (some don't; e.g. modem signals are a foreign concept to
1665        POSIX, requiring politically incorrect workarounds).
1666    aa. If it says "Modem signals unavailable", then it is likely that the
1667        API for getting modem signals is provided, but it doesn't actually
1668        do anything (e.g. ioctl(ttyfd,TIOCMGET,&x) returns EINVAL).
1669    ab. In any case, it still should be able to manipulate the DTR signal.
1670        To test, SET LINE , SET MODEM NONE, and HANGUP. The DTR light
1671        should go out momentarily. If it doesn't, see if you can add the
1672        needed code for your system to the tthang() routine in
1673        [210]ckutio.c.
1674    ac. If your version of Kermit has the SET FLOW RTS/CTS command, check
1675        to see if it works: give Kermit this command, set your modem for
1676        RTS/CTS, transfer some files (using big packet and window sizes)
1677        and watch the RTS and CTS lights on the modem. If they go on and
1678        off (and Kermit does not get packet errors), then it works. If
1679        your version of Kermit does not have this command, but your
1680        version of Unix does support hardware flow control, take a look at
1681        the tthflow() command in [211]ckutio.c and see if you can add the
1682        needed code (see the section on [212]HARDWARE FLOW CONTROL below).
1683        (And please [213]send back any added code, so that others can
1684        benefit from it and it can be carried forward into future
1685        releases.)
1686    ad. If C-Kermit starts normally and issues its prompt, echoing is
1687        normal, etc, but then after returning from a CONNECT session, the
1688        prompt no longer appears, try rebuilding with -DCKCONINTB4CB.
1689    ae. (8.0.206 or later) Type some commands at the C-Kermit prompt. Can
1690        you use the Up-arrow and Down-arrow keys on your keyboard to
1691        access Kermit's command history? If not, and you're a programmer,
1692        take a look at the USE_ARROWKEYS sections of ckucmd.c.
1693   __________________________________________________________________________
1694
1695 8. REDUCING THE SIZE OF THE EXECUTABLE PROGRAM IMAGE
1696
1697    [ [214]Top ] [ [215]Contents ] [ [216]Next ] [ [217]Previous ]
1698
1699    Also see: [218]C-Kermit Configuration Options
1700
1701     a. Many of C-Kermit's options and features can be deselected at
1702        compile time. The greatest savings at the least sacrifice in
1703        functionality is to disable the logging of debug information by
1704        defining NODEBUG during compilation. See the [219]Configurations
1705        Options document for further information.
1706     b. Use shared libraries rather than static linking. This is the
1707        default on many Unix systems anyway. However, executables built
1708        for dynamic linking with shared libraries are generally not
1709        portable away from the machine they were built on, so this is
1710        recommended if the binary is for your use only.
1711     c. Most Unix systems have a "strip" command to remove symbol table
1712        information from an executable program image. "man strip" for
1713        further information. The same effect can be achieved by including
1714        "-s" among the link flags when building C-Kermit.
1715     d. SCO, Interactive, and some other Unix versions have an "mcs"
1716        command. "mcs -d wermit" can be used to delete the contents of the
1717        ".comment" section from the executable program image.
1718     e. Many modern optimizers can be instructed to optimize for space
1719        rather than execution efficiency. Check the CFLAGS in the makefile
1720        target, adjust as desired.
1721   __________________________________________________________________________
1722
1723 9. UNIX VERSIONS
1724
1725    [ [220]Top ] [ [221]Contents ] [ [222]Next ] [ [223]Previous ]
1726
1727    SECTION CONTENTS
1728
1729 9.1 [224]Standards
1730      9.1.1. [225]POSIX
1731      9.1.2. [226]ANSI C
1732      9.1.3. [227]Other Standards
1733 9.2. [228]Library Issues
1734 9.3. [229]Unix File System Peculiarities
1735 9.4. [230]Hardware Flow Control
1736 9.5. [231]Terminal Speeds
1737 9.6. [232]Millisecond Sleeps
1738 9.7. [233]Nondestructive Input Buffer Peeking
1739 9.8. [234]Other System-Dependent Features
1740 9.9. [235]Terminal Interruption
1741
1742    There are several major varieties of Unix: Bell Laboratories Seventh
1743    Edition, AT&T System V, Berkeley Standard Distribution (BSD), and
1744    POSIX. Each has many, many subvarieties and descendents, and there are
1745    also hybrids that exhibit symptoms of two or more varieties, plus
1746    special quirks of their own.
1747
1748    Seventh edition versions of C-Kermit include the compile-time option
1749    -DV7 in the CFLAGS string in the makefile target. Various V7-based
1750    implementations are also supported: -DCOHERENT, -DMINIX, etc.
1751
1752    AT&T-based versions of Unix Kermit include the compile-time option
1753    -DATTSV (standing for AT&mp;T Unix System V). This applies to System
1754    III and to System V up to and including Release 2. For System V
1755    Release 3, the flag -DSVR3 should be used instead (which also implies
1756    -DATTSV). This is because the data type of signal() and several other
1757    functions was changed between SVR2 and SVR3. For System V Release 4,
1758    include -DSVR4 because of changes in UUCP lockfile conventions; this
1759    also implies -DSVR3 and -DATTSV.
1760
1761    For BSD, the flag -BSDxx must be included, where xx is the BSD version
1762    number, for example BSD4 (for version 4.2 or later, using only 4.2
1763    features), -DBSD41 (for BSD 4.1 only), -DBSD43 (for 4.3), -DBSD29 (BSD
1764    2.9 for DEC PDP-11s). -DBSD44 is for 4.4BSD, which is the basis of
1765    FreeBSD, NetBSD, OpenBSD, BSDI, and Mac OS X, and which contains many
1766    POSIX features, and has little relation to 4.3BSD and earlier.
1767
1768    For POSIX, include the flag -DPOSIX. POSIX defines a whole new set of
1769    terminal i/o functions that are not found in traditional AT&T or
1770    Berkeley implementations, and also defines the symbol _POSIX_SOURCE,
1771    which is used in many system and library header files, mainly to
1772    disable non-POSIX (i.e. useful) features.
1773
1774    Note (circa 1997): In order to enable serial speeds higher than 38400
1775    bps, it is generally necessary to add -DPOSIX (among other things),
1776    since the older terminal APIs can not accommodate the new speeds --
1777    out o' bits. But this often also means wholesale conversion to POSIX
1778    APIs. In general, just try adding -DPOSIX and then see what goes
1779    wrong. Be wary of features disappearing: when _POSIX_SOURCE is
1780    defined, all sorts of things that were perfectly OK before suddenly
1781    become politically incorrect -- like reading modem signals, doing
1782    hardware flow control, etc. POSIX was evidently not designed with
1783    serial communication in mind!
1784
1785    Case in point: In UnixWare 7.0, #define'ing POSIX causes strictness
1786    clauses in the header files to take effect. These prevent <sys/time.h>
1787    from defining the timeval and timezone structs, which are needed for
1788    all sorts of things (like select()). Thus, if we want the high serial
1789    speeds, we have to circumvent the POSIX clauses.
1790
1791    Similarly in SCO OpenServer R5.0.4 where, again, we must use the POSIX
1792    APIs to get at serial speeds higher than 38400, but then doing so
1793    removes hardware flow control -- just when we need it most! In cases
1794    like this, dirty tricks are the only recourse (search for SCO_OSR504
1795    in [236]ckutio.c for examples).
1796
1797    For reasons like this, Unix implementations tend to be neither pure
1798    AT&T nor pure BSD nor pure POSIX, but a mixture of two or more of
1799    these, with "compatibility features" allowing different varieties of
1800    programs to be built on the same computer. In general, Kermit tries
1801    not to mix and match but to keep a consistent repertoire throughout.
1802    However, there are certain Unix implementations that only work when
1803    you mix and match. For example, the Silicon Graphics IRIX operating
1804    system (prior to version 3.3) is an AT&T Unix but with a BSD file
1805    system. The only way you can build Kermit successfully for this
1806    configuration is to include -DSVR3 plus the special option -DLONGFN,
1807    meaning "pretend I was built with -DBSDxx when it's time to compile
1808    file-related code". See the "iris" makefile target.
1809     ________________________________________________________________________
1810
1811   9.1. Standards
1812
1813    [ [237]Top ] [ [238]Section Contents ] [ [239]Contents ] [ [240]Next ]
1814
1815    SUBSECTION CONTENTS
1816
1817 9.1.1. [241]POSIX
1818 9.1.2. [242]ANSI C
1819 9.1.3. [243]Other Standards
1820
1821    In edits 166-167 (1988-89), C-Kermit was heavily modified to try to
1822    keep abreast of new standards while still remaining compatible with
1823    old versions of C and Unix. There are two new standards of interest:
1824    ANSI C (as described in Kernighan and Ritchie, "The C Programming
1825    Language", Second Edition, Prentice Hall, 1988) and POSIX.1 (IEEE
1826    Standard 1003.1 and ISO/IEC 9945-1, 1990, "Portable Operating System
1827    Interface"). These two standards have nothing to do with each other:
1828    you can build C-Kermit with a non-ANSI compiler for a POSIX system, or
1829    for a non-POSIX system with with an ANSI compiler.
1830
1831     9.1.1. POSIX
1832
1833    POSIX.1 defines a repertoire of system functions and header files for
1834    use by C language programs. Most notably, the ioctl() function is not
1835    allowed in POSIX; all ioctl() functions have been replaced by
1836    device-specific functions like tcsetattr(), tcsendbreak(), etc.
1837
1838    Computer systems that claim some degree of POSIX compliance have made
1839    some attempt to put their header files in the right places and give
1840    them the right names, and to provide system library functions with the
1841    right names and calling conventions. Within the header files,
1842    POSIX-compliant functions are supposed to be within #ifdef
1843    _POSIX_SOURCE..#endif conditionals, and non-POSIX items are not within
1844    these conditionals.
1845
1846    If Kermit is built with neither -D_POSIX_SOURCE nor -DPOSIX, the
1847    functions and header files of the selected version of Unix (or VMS,
1848    etc) are used according to the CFLAGS Kermit was built with.
1849
1850    If Kermit is built with -D_POSIX_SOURCE but not -DPOSIX, then one of
1851    the -DBSD or -DATTSV flags (or one that implies them) must also be
1852    defined, but it still uses only the POSIX features in the system
1853    header files. This allows C-Kermit to be built on BSD or AT&T systems
1854    that have some degree of POSIX compliance, but still use BSD or AT&T
1855    specific features.
1856
1857    The dilimma is this: it is often necessary to define _POSIX_SOURCE to
1858    get at new or modern features, such as high serial speeds and the APIs
1859    to deal with them. But defining _POSIX_SOURCE also hides other APIs
1860    that Kermit needs, for example the ones dealing with modem signals
1861    (others are listed just below). Thus all sorts of hideous contortions
1862    are often required to get a full set of features.
1863
1864    The POSIX standard does not define anything about uucp lockfiles.
1865    "make posix" uses NO (repeat, NO) lockfile conventions. If your
1866    POSIX-compliant Unix version uses a lockfile convention such as
1867    HDBUUCP (see below), use the "posix" entry, but include the
1868    appropriate lockfile option in your KFLAGS on the "make" command line,
1869    for example:
1870
1871 make posix "KFLAGS=-DHDBUUCP"
1872
1873    POSIX.1 also lacks certain other features that Kermit needs. For
1874    example:
1875
1876      * There is no defined way for an application to do wildcard matching
1877        of filenames. Kermit uses the inode in the directory structure,
1878        but POSIX.1 does not include this concept. (Later POSIX revisions
1879        include functions named (I think) glob() and fnmatch(), but these
1880        functions are not yet in Kermit, and might not be appropriate in
1881        any case.)
1882      * There is no POSIX mechanism for sensing or controlling modem
1883        signals, nor to enable RTS/CTS or other hardware flow control.
1884      * There is no select() for multiplexing i/o, and therefore no
1885        TCP/IP.
1886      * There is no way to check if characters are waiting in a
1887        communications device (or console) input buffer, short of trying
1888        to read them -- no select(), ioctl(fd,FIONREAD,blah), rdchk(),
1889        etc. This is bad for CONNECT mode and bad for sliding windows.
1890      * No way to do a millisecond sleep (no nap(), usleep(), select(),
1891        etc).
1892      * There is no popen().
1893
1894    So at this point, there cannot be one single fully functional POSIX
1895    form of C-Kermit unless it also has "extensions", as do Linux, QNX,
1896    etc.
1897
1898    More on POSIX (quoting from a newsgroup posting by Dave Butenhof):
1899
1900      Standards tend to look at themselves as "enabling". So POSIX
1901      standards say that, in order to use POSIX functions, a program must
1902      define some macro that will put the development environment in
1903      "POSIX mode". For the ancient POSIX 1003.1-1990, the symbol is
1904      _POSIX_SOURCE. For recent revisions, it's _POSIX_C_SOURCE with an
1905      appropriate value. POSIX 1003.1-1996 says that, to use its features
1906      in a portable manner, you must define _POSIX_C_SOURCE=199506L
1907      before including any header files.
1908
1909      But for Solaris, or Digital Unix, the picture is different. POSIX
1910      is one important but small part of the universe. Yet POSIX
1911      unconditionally and unambiguously REQUIRES that, when
1912      _POSIX_C_SOURCE=199506L, ALL of the functions and definitions
1913      required by the standard, and NO others (except in specific
1914      restricted namespaces, specifically "_" followed by an uppercase
1915      letter or "__" followed by a lowercase letter) shall be visible.
1916      That kinda puts a cramp on BSD and SVID support, because those
1917      require names that are not in the "protected" POSIX namespaces.
1918      It's ILLEGAL to make those symbols visible, unless you've done
1919      something else that's beyond the scope of POSIX to allow the system
1920      to infer that you didn't really mean it.
1921
1922      In most cases, you should just compile, with no standards-related
1923      macros defined. The system will make available every interface and
1924      definition that isn't incompatible with the "main stream". There
1925      may indeed be cases where two standards cross, and you really can't
1926      use both together. But, in general, they play nicely together as
1927      long as you don't do anything rash -- like telling the system that
1928      it's not allowed to let them.
1929
1930      In the area of threads, both Solaris and Digital Unix support
1931      incompatible thread APIs. We have POSIX and DCE, they have POSIX
1932      and UI. The nasty areas are in the _r routines and in some aspects
1933      of signal behavior. You cannot compile a single source file that
1934      uses both semantics. That's life. It sounds as if Solaris defaults
1935      to the UI variants, but allows you to define this
1936      _POSIX_THREAD_SEMANTICS to get around it. We default to POSIX, and
1937      allow you to define _PTHREAD_USE_D4 (automatically defined by the
1938      cc "-threads" switch) to select the DCE thread variants. That
1939      default, because you're operating outside of any individual
1940      standard, is really just a marketing decision.
1941       ______________________________________________________________________
1942
1943     9.1.2. ANSI C
1944
1945    [ [244]Top ] [ [245]Contents ] [ [246]Section Contents ] [
1946    [247]Subsection Contents ] [ [248]Next ] [ [249]Previous ]
1947
1948    The major difference between ANSI C and earlier C compilers is
1949    function prototyping. ANSI C allows function arguments to be checked
1950    for type agreement, and (when possible) type coercion in the event of
1951    a mismatch. For this to work, functions and their arguments must be
1952    declared before they are called. The form for function declarations is
1953    different in ANSI C and non-ANSI C (ANSI C also accepts the earlier
1954    form, but then does not do type checking).
1955
1956    As of edit 167, C-Kermit tries to take full advantage of ANSI C
1957    features, especially function prototyping. This removes many bugs
1958    introduced by differing data types used or returned by the same
1959    functions on different computers. ANSI C features are automatically
1960    enabled when the symbol __STDC__ is defined. Most ANSI C compilers,
1961    such as GNU CC and the new DEC C compiler define this symbol
1962    internally.
1963
1964    On the downside, ANSI C compilation increases the
1965    administrative/bureacratic burden, spewing out countless unneeded
1966    warnings about mismatched types, especially when we are dealing with
1967    signed and unsigned characters, requiring casts everywhere to shut up
1968    the mindless complaints -- there is no use for signed chars in Kermit
1969    (or probably anywhere else). Some compilers, mercifully, include a
1970    "treat all chars as unsigned" option, and when available it should be
1971    used -- not only to stop the warnings, but also to avoid unhelpful
1972    sign extension on high-bit characters.
1973
1974    To force use of ANSI C prototypes, include -DCK_ANSIC on the cc
1975    command line. To disable the use of ANSI prototypes, include -DNOANSI.
1976       ______________________________________________________________________
1977
1978     9.1.3. Other Standards
1979
1980    [ [250]Top ] [ [251]Contents ] [ [252]Section Contents ] [
1981    [253]Subsection Contents ] [ [254]Next ] [ [255]Previous ]
1982
1983    As the years go by, standards with-which-all-must-comply continue to
1984    pile up: AES, XPG2, XPG3, XPG4, FIPS 151-2, successive generations of
1985    POSIX, OSF/1, X/Open, Spec 1170, UNIX95, Open Group UNIX98, ISO/IEC
1986    9945 parts 1-4, ISO 9899, 88Open, OS 99, Single Unix Specification
1987    (SUS, [256]IEEE 1003.1-2001, not to mention "mature standards" like
1988    V7, 4.2/4.3BSD, System V R3 and R4 (SVID2 and SVID3), 4.4BSD (the
1989    basis for BSDI, OpenBSD, NetBSD, FreeBSD, Mac OS X etc), /usr/group,
1990    plus assorted seismic pronouncements of the neverending series of
1991    ephemeral corporate consortia, not to mention the libc-vs-glibc
1992    turmoil in the Linux arena and who knows what else.
1993
1994    None of these standards simplifies life for portable applications like
1995    C-Kermit -- each one is simply one more environment to support (or
1996    circumvent, as in many cases these standards do more harm than good by
1997    denying access to facilities we need, e.g. as noted in above in
1998    [257]9.1.1).
1999     ________________________________________________________________________
2000
2001   9.2. Library Issues
2002
2003    [ [258]Top ] [ [259]Contents ] [ [260]Section Contents ] [
2004    [261]Subsection Contents ] [ [262]Next ] [ [263]Previous ]
2005
2006    On most modern platforms, applications are -- and often must be --
2007    dynamically linked. This has numerous advantages (smaller executables,
2008    ability to patch a library and thereby patch all applications that use
2009    it, etc), but also causes some headaches: most commonly, the library
2010    ID built into the executable at link time does not match the ID of the
2011    corresponding library on the target system, and so the loader refuses
2012    to let the application run.
2013
2014    This problem only gets worse over time. In the Linux and *BSD world,
2015    we also have totally different libraries (each with their own names
2016    and numbering systems) that cover the same territory; for example,
2017    curses vs ncurses, libc versus glibc. Combinations proliferate and any
2018    given Unix computer might have any combination. For this reason it is
2019    becoming increasingly difficult to produce a "Linux binary" for a
2020    given architecture (e.g. PC or Alpha). There has to be a separate
2021    binary for (at least) every combination of curses vs ncurses and libc
2022    vs glibc.
2023
2024    In such cases, the best advice is for every user to build C-Kermit
2025    from source code on the system where it will run. Too bad most
2026    commercial Unix vendors have stopped including C compilers with the
2027    operating system!
2028     ________________________________________________________________________
2029
2030   9.3. Unix File System Peculiarities
2031
2032    [ [264]Top ] [ [265]Contents ] [ [266]Section Contents ] [ [267]Next ]
2033    [ [268]Previous ]
2034
2035    Normally, including a BSD, System-V, POSIX, or DIRENT flag in the make
2036    entry selects the right file system code. But some versions of Unix
2037    are inconsistent in this regard, and building in the normal way either
2038    gives compiler or linker errors, or results in problems at runtime,
2039    typically failure to properly expand wildcard file specifications when
2040    you do something like "send *.*", or failure to recognize long
2041    filenames, as in "send filewithaveryveryveryveryverylongname".
2042
2043    C-Kermit is supposed to know about all the various styles of Unix file
2044    systems, but it has to be told which one to use when you build it,
2045    usually in the makefile target CFLAGS as shown below, but you might
2046    also have to add something like -I/usr/include/bsd to CFLAGS, or
2047    something like -lbsd to LIBS.
2048
2049    C-Kermit gives you the following CFLAGS switches to adapt to your file
2050    system's peculiarities:
2051
2052 -DDIRENT   - #include <dirent.h>
2053 -DSDIRENT  - #include <sys/dirent.h>
2054 -DNDIR     - #include <ndir.h>
2055 -DXNDIR    - #include <sys/ndir.h>
2056 -DRTU      - #include "/usr/lib/ndir.h", only if NDIR and XNDIR not defined.
2057 -DSYSUTIMH - #include <sys/utime.h> for setting file creation dates.
2058 -DUTIMEH   - #include <utime.h> for setting file creation dates.
2059
2060    (Note, RTU should only be used for Masscomp RTU systems, because it
2061    also selects certain other RTU-specific features.)
2062
2063    If none of these is defined, then <sys/dir.h> is used. IMPORTANT: If
2064    your system has the file /usr/include/dirent.h then be sure to add
2065    -DDIRENT to your makefile target's CFLAGS. "dirent" should be used in
2066    preference to any of the others, because it supports all the features
2067    of your file system, and the others probably don't.
2068
2069    Having selected the appropriate directory header file, you might also
2070    need to tell Kermit how to declare the routines and variables it needs
2071    to read the directory. This happens most commonly on AT&T System-V
2072    based UNIXes, particularly System V R3 and earlier, that provide long
2073    file and directory names (longer than 14 characters). Examples include
2074    certain releases of HP-UX, DIAB DNIX, older versions of Silicon
2075    Graphics IRIX, and perhaps also MIPS. In this case, try adding
2076    -DLONGFN to your makefile target.
2077
2078    Another problem child is <sys/file.h>. Most Unix C-Kermit versions
2079    need to #include this file from within [269]ckufio.c and
2080    [270]ckutio.c, but some not only do not need to include it, but MUST
2081    not include it because (a) it doesn't exist, or (b) it has already
2082    been included by some other header file and it doesn't protect itself
2083    against multiple inclusion, or (c) some other reason that prevents
2084    successful compilation. If you have compilation problems that seem to
2085    stem from including this file, then add the following switch to CFLAGS
2086    in your makefile target:
2087
2088 -DNOFILEH
2089
2090    There are a few odd cases where <sys/file.h> must be included in one
2091    of the cku[ft]io.c files, but not the other. In that case, add the
2092    aforementioned switch, but go into the file that needs <sys/file.h>
2093    and add something like this:
2094
2095 #ifdef XXX       /* (where XXX is a symbol unique to your system) */
2096 #undef NOFILEH
2097 #endif /* XXX */
2098
2099    before the section that includes <sys/file.h>.
2100
2101    Kermit's SEND command expands wildcard characters "?" and "*" itself.
2102    Before version 5A, commands like "send *" would send all regular
2103    (non-directory) files, including "hidden files" (whose names start
2104    with "."). In version 5A, the default behavior is to match like the
2105    Bourne shell or the ls command, and not include files whose names
2106    start with dot. Such files can still be sent if the dot is included
2107    explicitly in the SEND command: "send .oofa, send .*". To change back
2108    to the old way and let leading wildcard characters match dot files,
2109    include the following in your CFLAGS:
2110
2111 -DMATCHDOT
2112
2113    (In C-Kermit 6.0, there is also a command to control this at runtime.)
2114
2115    Complaints about data-type mismatches:
2116
2117      * If you get compile-time complaints about data type mismatches for
2118        process-ID related functions like getpid(), add -DPID_T=pid_t.
2119      * If you get compile-time complaints about data type mismatches for
2120        user ID related functions like getuid(), add -DUID_T=uid_t.
2121      * If you get compile-time complaints about data type mismatches for
2122        user-ID related functions like getgid(), add -DGID_T=gid_t.
2123      * If you get compile-time complaints about data type mismatches for
2124        getpwuid(), add -DPWID_T=uid_t (or whatever it should be).
2125
2126    File creation dates: C-Kermit attempts to set the creation date/time
2127    of an incoming file according to the date/time given in the file's
2128    attribute packet, if any. If you find that the dates are set
2129    incorrectly, you might need to build Kermit with the -DSYSUTIMEH flag,
2130    to tell it to include <sys/utime.h>. If that doesn't help, look at the
2131    code in zstrdt() in [271]ckufio.c.
2132     ________________________________________________________________________
2133
2134   9.4. Hardware Flow Control
2135
2136    [ [272]Top ] [ [273]Contents ] [ [274]Section Contents ] [ [275]Next ]
2137    [ [276]Previous ]
2138
2139    Hardware flow control is a problematic concept in many popular Unix
2140    implementations. Often it is lacking altogether, and when available,
2141    the application program interface (API) to it is inconsistent from
2142    system to system. Here are some examples:
2143
2144     a. POSIX does not support hardware flow control.
2145     b. RTS/CTS flow control support MIGHT be available for System V R3
2146        and later if /usr/include/termiox.h exists (its successful
2147        operation also depends on the device driver, and the device
2148        itself, not to mention the cable, etc, actually supporting it). If
2149        your SVR3-or-later Unix system does have this file, add:
2150
2151 -DTERMIOX
2152
2153        to your CFLAGS. If the file is in /usr/include/sys instead, add:
2154
2155 -DSTERMIOX
2156
2157        Note that the presence of this file does not guarantee that
2158        RTS/CTS will actually work -- that depends on the device-driver
2159        implementation (reportedly, many Unix versions treat
2160        hardware-flow-control related ioctl's as no-ops).
2161     c. Search ("grep -i") through /usr/include/*.h and
2162        /usr/include/sys/*.h for RTS or CTS and see what turns up. For
2163        example, in SunOS 4.x we find "CRTSCTS". Figuring out how to use
2164        it is another question entirely! In IBM AIX RS/6000 3.x, we have
2165        to "add" a new "line discipline" (and you won't find uppercase RTS
2166        or CTS symbols in the header files).
2167     d. NeXTSTEP and IRIX, and possibly others, support hardware flow
2168        control, but do not furnish an API to control it, and thus on
2169        these systems Kermit has no command to select it -- instead, a
2170        special device name must be used. (NeXTSTEP: /dev/cufa instead of
2171        /dev/cua; IRIX: /dev/ttyf00)
2172
2173    See the routine tthflow() in [277]ckutio.c for details. If you find
2174    that your system offers hardware flow control selection under program
2175    control, you can add this capability to C-Kermit as follows:
2176
2177     a. See if it agrees with one of the methods already used in
2178        tthflow(). if not, add new code, appropriately #ifdef'd.
2179     b. Add -DCK_RTSCTS to the compiler CFLAGS in your makefile target or
2180        define this symbol within the appropriate #ifdefs in
2181        [278]ckcdeb.h.
2182
2183    To illustrate the difficulties with RTS/CTS, here is a tale from Jamie
2184    Watson <jw@adasoft.ch>, who added the RTS/CTS code for the RS/6000,
2185    about his attempts to do the same for DEC ULTRIX:
2186
2187      "The number and type of hardware signals available to/from a serial
2188      port vary between different machines and different types of serial
2189      interfaces on each machine. This means that, for example, there are
2190      virtually no hardware signals in or out available on the DECsystem
2191      3000/3100 series; on the DECsystem 5000/2xx series all modem
2192      signals in/out are present on both built-in serial ports; on the
2193      DECsystem 5100 some ports have all signals and some only have some;
2194      and so on... It looks to me as if this pretty well rules out any
2195      attempt to use hardware flow control on these platforms, even if we
2196      could figure out how to do it. The confusion on the user level
2197      about whether or not it should work for any given platform or port
2198      would be tremendous. And then it isn't clear how to use the
2199      hardware signals even in the cases where the device supports them."
2200     ________________________________________________________________________
2201
2202   9.5. Terminal Speeds
2203
2204    [ [279]Top ] [ [280]Contents ] [ [281]Section Contents ] [ [282]Next ]
2205    [ [283]Previous ]
2206
2207    The allowable speeds for the SET SPEED command are defined in
2208    [284]ckcdeb.h. If your system supports speeds that are not listed in
2209    "set speed ?", you can add definitions for them to ckcdeb.h.
2210
2211    Then if the speed you are adding is one that was never used before in
2212    Kermit, such as 921600, you'll also need to add the appropriate
2213    keywords to spdtab[] in [285]ckuus3.c, and the corresponding case to
2214    ttsspd() in [286]ckutio.c.
2215     ________________________________________________________________________
2216
2217   9.6. Millisecond Sleeps
2218
2219    [ [287]Top ] [ [288]Contents ] [ [289]Section Contents ] [ [290]Next ]
2220    [ [291]Previous ]
2221
2222    There is no standard for millisecond sleeps, but at least five
2223    different functions have appeared in various Unix versions that can be
2224    used for this purpose: nap() (mostly in System V), usleep() (found at
2225    least in SunOS and NeXT OS), select() (found in 4.2BSD and later, and
2226    part of any TCP/IP sockets library), nanosleep(), and sginap(). If you
2227    have any of these available, pick one (in this order of preference, if
2228    you have more than one):
2229
2230 -DSELECT: Include this in CFLAGS if your system has the select() function.
2231 -DNAP:    Include this in CFLAGS if your system has the nap() function.
2232 -USLEEP:  Include this in CFLAGS if your system has the usleep() function.
2233
2234    NOTE: The nap() function is assumed to be a function that puts the
2235    process to sleep for the given number of milliseconds. If your
2236    system's nap() function does something else or uses some other units
2237    of time (like the NCR Tower 32, which uses clock-ticks), do not
2238    include -DNAP.
2239
2240    Reportedly, all versions of System V R4 for Intel-based computers, and
2241    possibly also SVR3.2, include nap() as a kernel call, but it's not in
2242    the library. To include code to use it via syscall(3112,x), without
2243    having to include Xenix compatibility features, include the following
2244    compile-time option:
2245
2246 -DNAPHACK
2247     ________________________________________________________________________
2248
2249   9.7. Nondestructive Input Buffer Peeking
2250
2251    [ [292]Top ] [ [293]Contents ] [ [294]Section Contents ] [ [295]Next ]
2252    [ [296]Previous ]
2253
2254    Some AT&T Unix versions have no way to check if input is waiting on a
2255    tty device, but this is a very important feature for Kermit. Without
2256    it, sliding windows might not work very well (or at all), and you also
2257    have to type your escape character to get Kermit's attention in order
2258    to interrupt a local-mode file transfer. If your system offers an
2259    FIONREAD ioctl, the build procedure should pick that up automatically
2260    and use it, which is ideal.
2261
2262    If your system lacks FIONREAD but has a select() function, this can be
2263    used instead. If the build procedure fails to include it (SHOW
2264    FEATURES will list SELECT), then you can add it to your CFLAGS:
2265
2266 -DSELECT
2267
2268    Conversely, if the build procedure tries to use select() when it
2269    really is not there, add:
2270
2271 -DNOSELECT
2272
2273    Note: select() is not part of System V nor of POSIX, but it has been
2274    added to various System-V- and POSIX-based systems as an extension.
2275
2276    Some System-V variations (SCO Xenix/UNIX/ODT and DIAB DNIX) include a
2277    rdchk() function that can be used for buffer peeking. It returns 0 if
2278    no characters are waiting and 1 if characters are waiting (but unlike
2279    FIONREAD, it does not tell the actual number). If your system has
2280    rdchk(), add:
2281
2282 -DRDCHK:  Include this in CFLAGS if your system has the rdchk() function.
2283
2284    Otherwise, if your version of Unix has the poll() function (and the
2285    /usr/include/poll.h file) -- which appears to be a standard part of
2286    System V going back to at least SVR3, include:
2287
2288 -DCK_POLL
2289     ________________________________________________________________________
2290
2291   9.8. Other System-Dependent Features
2292
2293    [ [297]Top ] [ [298]Contents ] [ [299]Section Contents ] [ [300]Next ]
2294    [ [301]Previous ]
2295
2296    Systems with <termios.h> might have the symbol IEXTEN defined. This is
2297    used to turn "extended features" in the tty device driver on and off,
2298    such as Ctrl-O to toggle output flushing, Ctrl-V to quote input
2299    characters, etc.
2300
2301    In most Unix implementations, it should be turned off during Kermit
2302    operation, so if [302]ckutio.c finds this symbol, it uses it. This is
2303    necessary, at least, on BSDI. On some systems, however, IEXTEN is
2304    either misdefined or misimplemented. The symptom is that CR, when
2305    typed to the command processor, is echoed as LF, rather than CRLF.
2306    This happens (at least) on Convex/OS 9.1. The solution is to add the
2307    following symbol to the makefile target's CFLACS:
2308
2309 -DNOIEXTEN
2310
2311    However, in at least one Unix implementation, QNX 4.21, IEXTEN must be
2312    set before hardware flow control can be used.
2313
2314    In edits 177 and earlier, workstation users noticed a "slow screen
2315    writing" phenomenon during interactive command parsing. This was
2316    traced to a setbuf() call in [303]ckutio.c that made console (stdout)
2317    writes unbuffered. This setbuf() call has been there forever, and
2318    could not be removed without some risk. Kermit's operation was tested
2319    on the NeXT in edit 178 with the setbuf() call removed, and the
2320    slow-writing symptom was cured, and everything else (command parsing,
2321    proper wakeup on ?, ESC, Ctrl-U, and other editing characters,
2322    terminal emulation, remote-mode and local-mode file transfer, etc)
2323    seemed to work as well as or better than before. In subsequent edits,
2324    this change was made to many other versions too, with no apparent ill
2325    effects. To remove the setbuf() call for your version of Kermit, add:
2326
2327 -DNOSETBUF
2328
2329    Later reports indicate that adding -DNOSETBUF has other beneficial
2330    effects, like cutting down on swapping when Kermit is run on
2331    workstations with small memories. But BEWARE: on certain small Unix
2332    systems, notably the AT&T 6300 and 3B1 (the very same ones that
2333    benefit from NOSETBUF), NOSETBUF seems to conflict with CK_CURSES. The
2334    program builds and runs OK, but after once using the curses display,
2335    echoing is messed up. In this case, we use a System-V specific
2336    variation in the curses code, using newterm() to prevent System V from
2337    altering the buffering. See makefile entries for AT&T 6300 and 3B1.
2338
2339    The Unix version of C-Kermit includes code to switch to file
2340    descriptor zero (stdin) for remote-mode file transfer. This code is
2341    necessary to prevent Kermit from giving the impression that it is
2342    "idle" during file transfers, which, at some sites, can result in the
2343    job being logged out in the middle of an active file transfer by
2344    idle-job monitors.
2345
2346    However, this feature can interfere with certain setups; for example,
2347    there is a package which substitutes a pty/tty pair for /dev/tty and
2348    sets file descriptor 0 to be read-only, preventing Kermit from sending
2349    packets. Or... When a Unix shell is invoked under the PICK
2350    environment, file descriptor 0 is inoperative.
2351
2352    To remove this feature and allow Kermit to work in such environments,
2353    add the compile-time option:
2354
2355 -DNOFDZERO
2356
2357    On some versions of Unix, earlier releases of C-Kermit were reported
2358    to render a tty device unusable after a hangup operation. Examples
2359    include IBM AIX on the RT PC and RS/6000. A typical symptom of this
2360    phenomenon is that the DIAL command doesn't work, but CONNECTing to
2361    the device and dialing manually do work. A further test is to SET DIAL
2362    HANGUP OFF, which should make dialing work once by skipping the
2363    pre-dial hangup. However, after the connection is broken, it can't be
2364    used any more: subsequent attempts to DIAL the same device don't work.
2365    The cure is usually to close and reopen the device as part of the
2366    hangup operation. To do this, include the following compile-time
2367    option:
2368
2369 -DCLSOPN
2370
2371    Similarly, there is a section of code in ttopen(), which does another
2372    close(open()) to force the O_NDELAY mode change. On some systems, the
2373    close(open()) is required to make the mode change take effect, and
2374    apparently on most others it does no harm. But reportedly on at least
2375    one System V R4 implementation, and on SCO Xenix 3.2, the
2376    close(open()) operation hangs if the device lacks carrier, EVEN THOUGH
2377    the CLOCAL characteristic has just been set to avoid this very
2378    problem. If this happens to you, add this to your CFLAGS:
2379
2380 -DNOCOTFMC
2381
2382    or, equivalently, in your KFLAGS on the make command line. It stands
2383    for NO Close(Open()) To Force Mode Change.
2384
2385    C-Kermit renames files when you give a RENAME command and also
2386    according to the current SET FILE COLLISION option when receiving
2387    files. The normal Unix way to rename a file is via two system calls:
2388    link() and unlink(). But this leaves open a window of vulnerability.
2389    Some Unix systems also offer an atomic rename(oldname,newname)
2390    function. If your version of Unix has this function, add the following
2391    to your CFLAGS:
2392
2393 -DRENAME
2394
2395    C-Kermit predefines the RENAME for several Unix versions in
2396    [304]ckcdeb.h (SVR4, SUNOS41, BSD44, AIXRS, etc). You can tell if
2397    rename() is being used if the SHOW FEATURES command includes RENAME in
2398    the compiler options list. If the predefined RENAME symbol causes
2399    trouble, then add NORENAME to your CFLAGS. Trouble includes:
2400
2401     a. Linker complains that _rename is an unresolved symbol.
2402     b. Linking works, but Kermit's RENAME command doesn't work (which
2403        happens because older versions of rename() might have their
2404        arguments reversed).
2405
2406    If rename() is not used, then Kermit uses link()/unlink(), which is
2407    equivalent except it is not atomic: there is a tiny interval in which
2408    some other process might "do something" to one of the files or links.
2409
2410    Some Unix systems (Olivetti X/OS, Amdahl UTS/V, ICL SVR3, etc) define
2411    the S_ISREG and S_ISDIR macros incorrectly. This is compensated for
2412    automatically in [305]ckufio.c. Other systems might have this same
2413    problem. If you get a compile-time error message regarding S_ISREG
2414    and/or S_ISDIR, add the following to your CFLAGS:
2415
2416 -DISDIRBUG
2417
2418    Finally, here's a symbol you should NEVER define:
2419
2420 -DCOMMENT
2421
2422    It's used for commenting out blocks of code. If for some reason you
2423    find that your compiler has COMMENT defined, then add -UCOMMENT to
2424    CFLAGS or KFLAGS! Similarly, some header files have been known to
2425    define COMMENT, in which case you must add "#undef COMMENT" to each
2426    C-Kermit source module, after all the #includes.
2427     ________________________________________________________________________
2428
2429   9.9. Terminal Interruption
2430
2431    [ [306]Top ] [ [307]Contents ] [ [308]Section Contents ] [ [309]Next ]
2432    [ [310]Previous ]
2433
2434    When C-Kermit enters interactive command mode, it sets a Control-C
2435    (terminal keyboard interrupt = SIGINT) trap to allow it to return to
2436    the command prompt whenever the user types Control-C (or whatever is
2437    assigned to be the interrupt character). This is implemented using
2438    setjmp() and longjmp(). On some systems, depending on the machine
2439    architecture and C compiler and who knows what else, you might get
2440    "Memory fault (coredump)" or "longjmp botch" instead of the desired
2441    effect (this should not happen in 5A(190) and later). In that case,
2442    add -DNOCCTRAP to your CFLAGS and rebuild the program.
2443
2444    Job control -- the ability to "suspend" C-Kermit on a Unix system by
2445    typing the "susp" character (normally Ctrl-Z) and then resume
2446    execution later (with the "fg" command) -- is a tricky business.
2447    C-Kermit must trap suspend signals so it can put the terminal back
2448    into normal mode when you suspend it (Kermit puts the terminal into
2449    various strange modes during interactive command parsing, CONNECT, and
2450    file transfer). Supporting code is compiled into C-Kermit
2451    automatically if <signal.h> includes a definition for the SIGTSTP
2452    signal. HOWEVER... some systems define this signal without supporting
2453    job control correctly. You can build Kermit to ignore SIGTSTP signals
2454    by including the -DNOJC option in CFLAGS. (You can also do this at
2455    runtime by giving the command SET SUSPEND OFF.)
2456
2457      NOTE: As of version 5A(190), C-Kermit makes another safety check.
2458      Even if job control is available in the operating system (according
2459      to the numerous checks made in congm()), it will still disable the
2460      catching of SIGTSTP signals if SIGTSTP was set to SIG_IGN at the
2461      time C-Kermit was started.
2462
2463    System V R3 and earlier systems normally do not support job control.
2464    If you have an SVR3 system that does, include the following option in
2465    your CFLAGS:
2466
2467 -DSVR3JC
2468
2469    On systems that correctly implement POSIX signal handling, signals can
2470    be handled more reliably than in Bell, Berkeley, or AT&T Unixes. On
2471    systems (such as QNX) that are "strictly POSIX", POSIX signal handling
2472    *must* be used, otherwise no signal will work more than once. If you
2473    have POSIX-based system and you find that your version of Kermit
2474    responds to Ctrl-C (SIGINT) or Ctrl-Z (SIGTSTP) only once, then you
2475    should add the following option to your CFLAGS:
2476
2477 -DCK_POSIX_SIG
2478
2479    But be careful; some POSIX implementations, notably 4.4BSD, include
2480    POSIX signal handling symbols and functions as "stubs" only, which do
2481    nothing. Look in <signal.h> for sigsetjmp and siglongjmp and read the
2482    comments.
2483   __________________________________________________________________________
2484
2485 10. DIALING OUT AND COORDINATING WITH UUCP
2486
2487    [ [311]Top ] [ [312]Contents ] [ [313]Next ] [ [314]Previous ]
2488
2489      NOTE: Red Hat Linux 7.2 and later include a new API that allows
2490      serial-port arbitration by non-setuid/gid programs. This API has
2491      not yet been added to C-Kermit. If C-Kermit is to be used for
2492      dialing out on Red Hat 7.2 or later, it must still be installed as
2493      described in this section and the next. 
2494
2495    The short version:
2496
2497      In order for C-Kermit to be able to dial out from your Unix
2498      computer, you need to give it the same owner, group, and
2499      permissions as your other dialout programs, such as cu, tip,
2500      minicom, uucp, seyon, etc.
2501
2502    The long version:
2503
2504    Make sure your dialout line is correctly configured for dialing out
2505    (as opposed to login). The method for doing this is different for each
2506    kind of Unix. Consult your system documentation for configuring lines
2507    for dialing out (for example, Sun SPARCstation IPC users should read
2508    the section "Setting up Modem Software" in the Desktop SPARC Sun
2509    System and Network Manager's Guide, or the Terminals and Modems
2510    section of the HP manual, "Configuring HP-UX for Peripherals" (e.g.
2511    /usr/sbin/sam => Peripheral Devices => Terminals and Modems => Add
2512    Modem).
2513
2514    Unlike most other multiuser, multitasking operating systems, Unix
2515    allows multiple users to access the same serial device at the same
2516    time, even though there is no earthly reason why two users should do
2517    this. When they do, user A will read some of the incoming characters,
2518    and user B will read the others. In all likelihood, neither user will
2519    see them all. Furthermore, User B can hang up User A's call, etc.
2520
2521    Rather than change Unix to enforce exclusive access to serial devices
2522    such as ttys, Unix developers chose instead to use a "lock file". Any
2523    process that wants to open a tty device should first check to see if a
2524    file of a certain name exists, and if so, not to open the device. If
2525    the file does not exist, the process creates the file and then opens
2526    the device. When the process closes the device, it destroys the
2527    lockfile. This procedure was originated for use with Unix's UUCP, CU,
2528    and TIP programs, and so these lockfiles are commonly called "UUCP
2529    lockfiles" (UUCP = Unix-to-Unix Copy Program).
2530
2531    As you can imagine, this method is riddled with pitfalls:
2532
2533      * If a process does not observe the prevailing lockfile convention,
2534        then it can interfere with other "polite" processes. And in fact,
2535        very few Unix applications or commands handle lockfiles at all; an
2536        original design goal of Unix was that "everything is a file", and
2537        countless utilities operate on files directly (by opening them) or
2538        indirectly through redirection of standard i/o, without creating
2539        or looking for lockfiles.
2540      * If a process crashes while it has the device open, the lockfile is
2541        left behind, preventing further processes from using the device.
2542      * Various versions of Unix use different names for the lockfiles,
2543        put them in different directories, with different owners and
2544        groups and permissions, and specify their contents differently.
2545      * On a given platform, the lockfile conventions may change from one
2546        Unix release to the next (for example, SunOS 4.0 to 4.1) or, in
2547        the case of Linux, across different distributions.
2548      * The same tty device might have more than one name, and most
2549        lockfile conventions don't allow for this. Similarly for symbolic
2550        links.
2551
2552    In an attempt to address the problem of "stale" lockfiles, most UUCP
2553    implementations put the PID (Process ID) of the creating process in
2554    the lockfile. Thus, another process that wants to open the
2555    corresponding device can check not only for the lockfile itself, but
2556    also can check the PID for validity. But this doesn't work well
2557    either:
2558
2559      * PIDs are stored in diverse formats that change with every new
2560        release (short, integer, long, or string in any of various
2561        formats). If the reading program does not follow the same
2562        convention as the writing program, it can diagnose a valid PID to
2563        be invalid, and therefore not honor the lock.
2564      * PIDs recycle. If the lockfile was created by PID 1234, which later
2565        crashed without removing the lockfile, and then a new process 1234
2566        exists a the time the lockfile is checked, the lockfile will be
2567        improperly taken as valid, and access to the device denied
2568        unnecessarily.
2569
2570    Several techniques address the problem of multiple names for the same
2571    device:
2572
2573      * Multiple lockfiles. For example, if the user opens a device
2574        through a symlink, a lockfile is created for both the symlink name
2575        and the true name (obtained from readlink()). However, when
2576        multiple drivers are installed for the same device (e.g. /dev/cua,
2577        /dev/cufa, etc), this approach won't work unless all applications
2578        *know* all the different names for the same device and make
2579        lockfiles for all of them, which is obviously not practical.
2580      * Lockfiles whose names are not based on the device name. These
2581        lockfiles generally have names like LK.inode/major/minor, where
2582        inode, major, and minor are numbers, which will always be the same
2583        for any physical device, no matter what its name. This form of
2584        lockfile is used in System V R4 and its derivatives, such as
2585        Solaris, UnixWare, etc. If lockfiles must be used (as opposed to,
2586        say, kernel-based locks), this would seem to be the most effective
2587        form.
2588
2589    Most versions of Unix were not designed to accommodate third-party
2590    communications software; thus vendors of these Unix products feel no
2591    compunction about changing lockfile conventions from release to
2592    release, since they also change their versions of the cu, uucp, tip,
2593    etc, programs at the same time to match. And since the source code to
2594    these programs might not be published, it is difficult for makers of
2595    third-party products like C-Kermit to find out what the new
2596    conventions are. It also forces release of new versions of C-Kermit
2597    whenever the OS vendor makes a change like this.
2598
2599    Some Unix vendors have taken a small step to simplify communications
2600    application development for their products: the inclusion of lockfile
2601    routines in the standard system C runtime libraries to shield the
2602    application from the details of lockfile management (IBM AIX is an
2603    example). When such routines are used, communications applications do
2604    not need modification when lockfile conventions change (although they
2605    will need recompiling if the routines are statically linked into the
2606    application). In the AIX example, the simple function calls ttylock(),
2607    ttyunlock(), and ttylocked() replace hundreds of lines of ugly code in
2608    C-Kermit that attempts to keep pace with every release of every Unix
2609    product over the last 20 years. Inclusion of ttylock() code occurs
2610    when:
2611
2612 -DUSETTYLOCK
2613
2614    is included in the CFLAGS.
2615
2616    If such routines are available, they should be used. The rest of this
2617    section applies when they are not.
2618
2619    To fit in with UUCP and other Unix-based communication software,
2620    C-Kermit must have the same idea as your system's uucp, cu, and tip
2621    programs about what the UUCP lock directory is called, what the
2622    lockfile itself is called, and what its contents should be. In most
2623    cases, C-Kermit preprocessor flags create the appropriate
2624    configuration at compile time if the appropriate makefile target was
2625    used (see [315]ckutio.c). The following CFLAGS options can be used to
2626    override the built-in configuration:
2627
2628    -DLCKDIR
2629           Tells Kermit that the UUCP lock directory is
2630           /usr/spool/uucp/LCK.
2631
2632    -DACUCNTRL
2633           Tells Kermit to use the BSD 4.3 acucntrl() program to turn off
2634           getty (login) on the line before using it, and restore getty
2635           when done.
2636
2637    -DHDBUUCP
2638           Include this if your system uses Honey DanBer UUCP, in which
2639           the lockfile directory and format are relatively standardized.
2640
2641    -DLOCK_DIR=\\\"/xxx/yyy\\\"
2642           Gives the lock directory name explicitly. The triple quoting is
2643           necessary. For example:
2644
2645 CFLAGS= -DBSD4 -DLOCK_DIR=\\\"/usr/local/locks\\\" -DNODEBUG
2646
2647           (NOTE: The triple quoting assumes this is a "top-level" make
2648           entry, and not a make entry that calls another one.)
2649
2650    -DLFDEVNO The lockfile name uses the tty device inode and major and
2651           minor
2652           numbers: LK.dev.maj.min, as in Sys V R4, e.g. LK.035.044.008.
2653
2654    When the LK.inode.major.minor form is used, a single lockfile is
2655    enough. Otherwise, a single lockfile rarely suffices. For example, in
2656    Linux, it is common to have a /dev/modem symbolic link to an actual
2657    dialout device, like /dev/cua0 or /dev/ttyS0, whose purpose is to hide
2658    the details of the actual driver from the user. So if one user opens
2659    /dev/modem, a lockfile called LCK..modem is created, which does not
2660    prevent another user from simulataneously opening the same device by
2661    its real name.
2662
2663    On SCO Unix platforms, we have a slightly different problem: the same
2664    device is, by convention, known by "lowercase" and "uppercase" names,
2665    depending on whether it has modem control. So by convention,
2666    communications programs are supposed to create the lockfiles based on
2667    the lowercase name. But some programs don't follow this convention. In
2668    HP-UX, we have several different names for each serial device. And so
2669    on.
2670
2671    For this reason, on platforms where the LK.inode.major.minor form is
2672    not used, C-Kermit also creates a secondary lockfile (which is simply
2673    a link to the first) if:
2674
2675     a. The given device name is a symbolic link. The secondary link is
2676        based on the device's real name.
2677     b. On SCO: The device name is not a symbolic link, but it contains
2678        uppercase letters. The primary link is based on the lowercase
2679        name; the secondary link is based on the name that was given.
2680     c. On HP-UX: The device name starts with "cu". The primary link is
2681        based on the name that was given; the secondary link is based on
2682        the corresponding "ttyd" device, e.g. "LCK..cua0p0" and
2683        "LCK..ttyd0p0".
2684
2685    NOTE: symlinks are not handled in HP-UX.
2686
2687    Honey DanBer (HDB) UUCP, which is becoming increasingly popular, has
2688    two characteristics:
2689
2690     a. Lockfiles are kept in /usr/spool/locks/ (usually).
2691     b. A lockfile contains the process id (pid) in ASCII, rather than as
2692        an int.
2693
2694    Non-HDB selections assume the lockfile contains the pid in int form
2695    (or, more precisely, in PID_T form, where PID_T is either int or
2696    pid_t, depending on your system's C library and header files). (b), by
2697    the way, is subject to interpretation: the numeric ASCII string may or
2698    may not be terminated by a newline, it may or may not have leading
2699    spaces (or zeros), and the number of leading spaces or zeros can
2700    differ, and the differences can be significant.
2701
2702    Even if you build the program with the right lockfile option, you can
2703    still have problems when you try to open the device. Here are the
2704    error messages you can get from SET LINE, and what they mean:
2705
2706     a. "Timed out, no carrier." This one is not related to lockfiles. It
2707        means that you have SET CARRIER ON xx, where xx is the number of
2708        seconds to wait for carrier, and carrier did not appear within xx
2709        seconds. Solution: SET CARRIER AUTO or OFF.
2710     b. "Sorry, access to lock denied." Kermit has been configured to use
2711        lockfiles, but (a)the lockfile directory is write-protected
2712        against you, or (b) it does not exist. The "access to lock denied"
2713        message will tell you the reason. If the directory does not exist,
2714        check to make sure Kermit is using the right name. Just because
2715        version n of your Unix used a certain lockfile directory is no
2716        gurantee that version n.1 does not use a different one.
2717        Workaround: ask the system administrator to install a symbolic
2718        link from the old name to the new name. Other solutions: (see
2719        below)
2720     c. "Sorry, access to tty device denied." The tty device that you
2721        specified in your SET LINE command is read/write protected against
2722        you. Solution: (see below)
2723     d. "Sorry, device is in use." The tty device you have specified is
2724        currently being used by another user. A prefatory message gives
2725        you an "ls -l" listing of the lockfile, which should show the
2726        username of the person who created it, plus a message "pid = nnn"
2727        to show you the process id of the user's program. Solutions: try
2728        another device, wait until the other user is finished, ask the
2729        other user to hurry up, or ask the system manager for help.
2730     e. "Sorry, can't open connection: reason". The device cannot be
2731        opened for some other reason, which is listed.
2732     f. "sh: /usr/lib/uucp/acucntrl: not found". This means your Kermit
2733        program was built with the -DACUCNTRL switch, but your computer
2734        system does not have the BSD 4.3 acucntrl program. Solution:
2735        install the acucntrl program if you have it, or rebuild Kermit
2736        without the -DACUCNTRL switch.
2737
2738    There are two solutions for problems (b) and (c), both of which
2739    involve intervention by your Unix system administrator (superuser):
2740
2741     a. Have the superuser change the permission of the lockfile directory
2742        and to the tty devices so that everyone on the system has
2743        read/write permission.
2744
2745 su% chmod 777 /usr/spool/locks (or whatever the path is)
2746 su% chmod 666 /dev/ttyXX
2747
2748        One risk here is that people can write lots of junk into the
2749        lockfile directory, delete other people's files in the lockfile
2750        directory, and intercept other people's data as it goes in and out
2751        of the tty device. The major danger here would be intercepting a
2752        privileged password. Of course, any user could write a short,
2753        ordinary, unprivileged program to do exactly the same thing if the
2754        tty device was world read/writeable. The other risk as that
2755        telephone calls are not controlled -- anybody on your system can
2756        make them, without having to belong to any particular group, and
2757        this could run up your phone bill.
2758     b. Use groups to regulate access. Normally the lockfile directory and
2759        and the dialout devices will have the same group (such as uucp).
2760        If so, then put everybody who's allowed to dial out into that
2761        group, and make sure that the lockfile directory and the tty
2762        devices have group read AND write permission. Example:
2763
2764 su% chmod 770 /usr/spool/locks (or whatever the path is)
2765 su% chmod 660 /dev/ttyXX
2766
2767        User whatever tool is available on your platform to add users to
2768        the appropropriate group (e.g. edit the /etc/group file).
2769     c. Have the superuser change Kermit to run setuid and/or setgid to
2770        the owner and/or group of the lockfile directory and the tty
2771        devices if necessary), typically uucp (see [316]next section), but
2772        NOT root. Example:
2773
2774 su% chown uucp kermit          - or -  chgrp uucp kermit
2775 su% chmod u+s kermit (setuid)  - or -  chmod g+s kermit (setgid)
2776
2777        and then make sure the lockfile directory, and the tty devices,
2778        have owner (setuid) and/or group (setgid) write permission. For
2779        example:
2780
2781 su% chmod o+rwx /usr/spool/uucp
2782 su% chown uucp /dev/ttyXX ; chmod 600 /dev/ttyXX
2783
2784        In some cases, the owner and group must be distinct; the key point
2785        is that read/write access is required to both the UUCP lockfile
2786        directory and the tty itself.
2787
2788    If you make C-Kermit setuid or setgid to root, it refuses to run:
2789
2790 Fatal: C-Kermit setuid to root!
2791
2792    Example:
2793
2794 crw-r-----   1 uucp     uucp       5,  67 Feb 11 06:23 /dev/cua3
2795 drwxrwxr-x   3 root     uucp         1024 Feb 11 06:22 /var/lock
2796
2797    requires suid uucp to get read/write access on /dev/cua3 and sgid to
2798    get read/write access on /var/lock (since you can't set Kermit's uid
2799    or gid to root).
2800
2801      The reason Kermit can't be setuid or setgid to root has to do with
2802      the fact that some Unix OS's can't switch user or group IDs in that
2803      case. Unfortunately, the prohibition against making Kermit setuid
2804      or setgid to root means that Unix C-Kermit can't be used to make
2805      rlogin connections by non-root users. (The rlogin port is
2806      privileged, which is why the regular rlogin command is setuid root
2807      -- which is safe because the rlogin program never has to create or
2808      access files like Kermit does.)
2809
2810    For the lockfile mechanism to achieve its desired purpose --
2811    prevention of access to the same tty device by more than one process
2812    at a time -- ALL programs on a given computer that open, read or
2813    write, and close tty devices must use the SAME lockfile conventions.
2814    Unfortunately, this is often not the case. Here is a typical example
2815    of how this can go wrong: In SunOS 4.0 and earler, the lockfile
2816    directory was /usr/spool/uucp; in 4.1 it was changed to
2817    /var/spool/locks in the quest for political correctness. Consequently,
2818    any third-party programs (such as C-Kermit) that were not modified to
2819    account for this change, recompiled, and reinstalled, did not use the
2820    same lockfiles as uucp, tip, etc, and so the entire purpose of the
2821    lockfile is defeated.
2822
2823    What if your Unix system does not have UUCP installed? For example,
2824    you have a Unix workstation, and you do not use uucp, cu, or tip, or
2825    UUCP was not even supplied with your version of Unix (QNX is an
2826    example). In this case, you have two choices:
2827
2828     a. If there may be more than one person running Kermit at the same
2829        time, competing for the same tty device, then create a special
2830        lockfile directory just for Kermit, for example,
2831        /usr/spool/kermit, and make sure you have read/write access to it.
2832        Then add the following to your makefile target CFLAGS, as shown
2833        earlier:
2834
2835 -DLOCK_DIR=\\\"/usr/spool/kermit\\\"
2836
2837     b. If you are the only user on your workstation, and no other
2838        processes will ever be competing with Kermit for the dialout tty
2839        device, then add -DNOUUCP to your makefile target's CFLAGS and
2840        rebuild Kermit.
2841   __________________________________________________________________________
2842
2843 11. RUNNING UNIX C-KERMIT SETUID OR SETGID
2844
2845    [ [317]Top ] [ [318]Contents ] [ [319]Next ] [ [320]Previous ]
2846
2847    Even if you don't intend to run C-Kermit setuid, somebody else might
2848    come along and chown and chmod it after it has been built. You should
2849    be sure that it is built correctly to run setuid on your system. For
2850    POSIX and AT&T Unix based versions, you don't have to do anything
2851    special.
2852
2853    For 4.2 and 4.3 BSD-based Unix versions, you normally need not add
2854    anything special to the makefile. The program assumes that the
2855    setreuid() and setregid() functions are available, without which we
2856    cannot switch back and forth between real and effective uids. If
2857    "make" complains that _setreuid or _setregid is/are not defined, add
2858    -DNOSETREU to CFLAGS. In this case it is very likely (but not certain)
2859    that you cannot protect ttys and lockfiles against people and have
2860    them run Kermit setuid.
2861
2862    If make does not complain about this, you should find out whether your
2863    BSD version (4.3 or other systems like SunOS 4.x that claim to include
2864    BSD 4.3 compatibility) includes the saved-setuid feature (see long
2865    notes under edit 146 in ckc178.upd). If it does, then add -DSAVEDUID
2866    to CFLAGS.
2867
2868      IMPORTANT NOTE: Most Unix system documentation will not give you
2869      the required information. To determine whether your Unix system
2870      supplies the the saved-original-effective-user/group-id feature,
2871      use the ckuuid.c program. Read and follow the instructions in the
2872      comments at the beginning.
2873
2874    C-Kermit for 4.4BSD-based systems automatically use sete[ug]id(). See
2875    [321]ckutio.c.
2876
2877    If you have a version of Unix that is not BSD-based, but which
2878    supplies the setreuid() and setregid() functions, and these are the
2879    only way to switch between real and effective uid, add -DSETREUID to
2880    your makefile target.
2881
2882      WARNING: There are two calls to access() in [322]ckufio.c, by which
2883      Kermit checks to see if it can create an output file. These calls
2884      will not work correctly when (a)you have installed C-Kermit setuid
2885      or setgid on a BSD-based Unix system, and (b) the
2886      saved-original-effective-uid/gid feature is not present, and (c)
2887      the access() function always checks what it believes to be the real
2888      ID rather than the effective ID. This is the case, for example, in
2889      Olivetti X/OS and in NeXTSTEP. In such cases, you can force correct
2890      operation of access() calls by defining the symbol SW_ACC_ID at
2891      compile time in CFLAGS.
2892
2893    If you have a version of Unix that does not allow a process to switch
2894    back and forth between its effective and real user and group ids
2895    multiple times, you probably should not attempt to run Kermit setuid,
2896    because once having given up its effective uid or gid (which it must
2897    do in order to transfer files, fork a shell, etc) it can never get it
2898    back, and so it can not use the original effective uid or gid to
2899    create or delete uucp lockfiles. In this case, you'll either have to
2900    set the permissions on your lockfile directory to make them publicly
2901    read/writable, or dispense with locking altogether.
2902
2903    MORAL: Are you thoroughly sickened and/or frightened by all that you
2904    have just read? You should be. What is the real answer? Simple. Serial
2905    devices -- such as ttys and magnetic tapes -- in Unix should be opened
2906    with exclusive access only, enforced by the Unix kernel. Shared access
2907    has no conceivable purpose, legitimate or otherwise, except by
2908    privileged system programs such as getty. The original design dates
2909    from the late 1960s, when Unix was developed for laboratory use under
2910    a philosophy of trust by people within shouting distance of each other
2911    -- but even then, no useful purpose was served by this particular form
2912    of openness; it was probably more of a political statement. Since the
2913    emergence of Unix from the laboratory into the commercial market, we
2914    have seen every vestige of openness -- but this one -- stripped away.
2915    I'd like to see some influential Unix maker take the bold step of
2916    making the simple kernel change required to enforce exclusive access
2917    to serial devices. (Well, perhaps not so simple when bidirectionality
2918    must also be a goal -- but then other OS's like VMS solved this
2919    problem decades ago.)
2920   __________________________________________________________________________
2921
2922 12. CONFIGURING UNIX WORKSTATIONS
2923
2924    [ [323]Top ] [ [324]Contents ] [ [325]Next ] [ [326]Previous ]
2925
2926    On desktop workstations that are used by only the user at the console
2927    keyboard, C-Kermit is always used in local mode. But as delivered,
2928    C-Kermit runs in remote mode by default. To put it in local mode at
2929    startup, you can put a SET LINE command in your .mykermrc.
2930
2931    You can also build C-Kermit to start up in local mode by default. To
2932    do this, include the following in the CFLAGS in your makefile target:
2933
2934 -DDFTTY=\\\"/dev/ttyxx\\\"
2935
2936    where ttyxx is the name of the device you will be using for
2937    communications. Presently there is no way of setting the default modem
2938    type at compile time, so use this option only for direct lines.
2939
2940    C-Kermit does not work well on certain workstations if it is not run
2941    from within a terminal window. For example, you cannot start C-Kermit
2942    on a NeXT by launching it directly from NeXTstep. Similarly for Sun
2943    workstations in the Open Windows environment. Run Kermit in a terminal
2944    window.
2945   __________________________________________________________________________
2946
2947 13. BIZARRE BEHAVIOR AT RUNTIME
2948
2949    [ [327]Top ] [ [328]Contents ] [ [329]Next ] [ [330]Previous ]
2950
2951    See the "beware file",
2952
2953    [331]ckubwr.txt, for hints about runtime misbehavior. This section
2954    lists some runtime problems that can be cured by rebuilding C-Kermit.
2955
2956    The program starts, but there is no prompt, and certain operations
2957    don't work (you see error messages like "Kermit command error in
2958    background execution"). This is because Kermit thinks it is running in
2959    the background. See conbgt() in [332]ckutio.c. Try rebuilding Kermit
2960    with:
2961
2962  -DPID_T=pid_t
2963
2964    added to your CFLAGS. If that doesn't help, find out the actual data
2965    type for pids (look in types.h or similar file) and use it in place of
2966    "pid_t", for example:
2967
2968  -DPID_T=short
2969
2970    Unexplainable and inappropriate error messages ("Sockets not supported
2971    on this device", etc) have been traced in at least one case to a lack
2972    of agreement between the system header files and the actual kernel.
2973    This happened because the GNU C compiler (gcc) was being used. gcc
2974    wants to have ANSI-C-compliant header files, and so part of the
2975    installation procedure for gcc is (or was) to run a shell script
2976    called "fixincludes", which translates the system's header files into
2977    a separate set of headers that gcc likes. So far so good. Later, a new
2978    version of the operating system is installed and nobody remembers to
2979    run fixincludes again. From that point, any program compiled with gcc
2980    that makes use of header files (particularly ioctl.h) is very likely
2981    to misbehave. Solution: run fixincludes again, or use your system's
2982    regular C compiler, libraries, and header files instead of gcc.
2983   __________________________________________________________________________
2984
2985 14. CRASHES AND CORE DUMPS
2986
2987    [ [333]Top ] [ [334]Contents ] [ [335]Next ] [ [336]Previous ]
2988
2989    If C-Kermit constitently dumps core at the beginning of a file
2990    transfer, look in SHOW FEATURES for CKREALPATH. If found, rebuild with
2991    -DNOREALPATH and see if that fixes the problem (some UNIXes have
2992    realpath() but it doesn't work).
2993
2994    Total failure of the Kermit program can occur because of bad memory
2995    references, bad system calls, or problems with dynamic memory
2996    allocation. First, try to reproduce the problem with debugging turned
2997    on: run Kermit with the -d command-line option (for example, "wermit
2998    -d") and then examine the resulting debug.log file. The last entry
2999    should be in the vicinity of the crash. In VMS, a crash automatically
3000    produces a "stack dump" which shows the routine where the crash
3001    occurs. In some versions of Unix, you can get a stack dump with "adb"
3002    -- just type "adb wermit core" and then give the command "$c", then
3003    Ctrl-D to quit (note: replace "wermit" by "kermit" or by the full
3004    pathname of the executable that crashed if it is not in the current
3005    directory). Or use gdb to get a backtrace, etc.
3006
3007    In edit 186, one implementation, UNISYS 5000/95 built with "make
3008    sys5r3", has been reported to run out of memory very quickly (e.g.
3009    while executing a short initialization file that contains a SET DIAL
3010    DIRECTORY command). Debug logs show that malloc calls are failing,
3011    reason unknown. For this and any other implementation that gives error
3012    messages about "malloc failure" or "memory allocation failure",
3013    rebuild the program *without* the -DDYNAMIC CFLAGS definition, for
3014    example:
3015
3016 make sys5r3 KFLAGS=-UDYNAMIC
3017
3018    As of edit 169, C-Kermit includes a malloc() debugging package which
3019    you may link with the Kermit program to catch runtime malloc errors.
3020    See the makefile entries for sunos41md and nextmd for examples of how
3021    to select malloc debugging. Once you have linked Kermit with the
3022    malloc debugger, it will halt with an informative message if a
3023    malloc-related error occurs and, if possible, dump core. For this
3024    reason, malloc-debugging versions of Kermit should be built without
3025    the "-s" link option (which removes symbols, preventing analysis of
3026    the core dump). You have several ways to track down the malloc error:
3027    Analyze the core dump with adb. Or reproduce the problem with "log
3028    debug" and then look at the code around the last debug.log entry. If
3029    you have gcc, build the program with "-g" added to CFLAGS and then
3030    debug it with gdb, e.g.
3031
3032 gdb wermit
3033 break main
3034 run
3035 .. set other breakpoints or watchpoints
3036 continue
3037
3038    Watchpoints are especially useful for finding memory leaks, but they
3039    make the program run about a thousand times slower than usual, so
3040    don't set them until the last possible moment. When a watchpoint is
3041    hit, you can use the "where" command to find out which C-Kermit source
3042    statement triggered it.
3043
3044    If you have the Pure Software Inc "Purify" product, see the sunos41cp
3045    makefile entry for an example of how to use it to debug C-Kermit.
3046   __________________________________________________________________________
3047
3048 15. SYSLOGGING
3049
3050    [ [337]Top ] [ [338]Contents ] [ [339]Next ] [ [340]Previous ]
3051
3052    "Syslogging" means recording selected in the system log via the Unix
3053    syslog() facility, which is available in most Unix versions.
3054    Syslogging is not done unless C-Kermit is started with:
3055
3056 --syslog:n
3057
3058    on the command-line, where n is a number greater than 0 to indicate
3059    the level of syslogging. See [341]Section 4.2 of the [342]IKSD
3060    Administrator's Guide for details.
3061
3062    Obviously you can't depend on users to include --syslog:3 (or
3063    whatever) on the command line every time they start C-Kermit, so if
3064    you want certain kinds of records to be recorded in the system log,
3065    you can build C-Kermit with forced syslogging at the desired level,
3066    e.g.:
3067
3068 make linux KFLAGS=-DSYSLOGLEVEL=2
3069
3070    Levels 2 and 3 are the most likely candidates for this treatment.
3071    Level 2 forces logging of all successful dialout calls (e.g. for
3072    checking against or phone bills), and level 3 records all connections
3073    (SET LINE or SET HOST / TELNET / RLOGIN, etc) so you can see who is
3074    connecting out from your system, and to where.
3075
3076    Level 2 and 3 records are equivalent to those in the connection log;
3077    see the [343]C-Kermit 7.0 Supplement) for a detailed description of
3078    the connection log.
3079   __________________________________________________________________________
3080
3081 16. BUILDING SECURE VERSIONS OF C-KERMIT 8.0
3082
3083    [ [344]Top ] [ [345]Contents ] [ [346]Next ] [ [347]Previous ]
3084
3085    C-Kermit 7.0 and later may be built with Kerberos(TM) and/or SRP(TM)
3086    (Secure Remote Password) and/or SSL/TLS security for strong
3087    authentication and encryption of Internet connections. These security
3088    methods require external libraries that, in their binary forms, are
3089    restricted from export by USA law. See the [348]Kermit Security
3090    Reference) for details. C-Kermit binaries themselves are likewise
3091    restricted; the C-Kermit binaries that are available for public
3092    download on the Internet are not allowed to contain the security
3093    options.
3094
3095    Sample makefile entries are provided for Linux and many other
3096    operating systems. A list of secure makefile entries is included in
3097    the Makefile. Complete instructions on building C-Kermit 8.0 with MIT
3098    Kerberos; Secure Remote Password; and/or OpenSSL can be found in the
3099    [349]Kermit Security Reference.
3100
3101    C-Kermit 8.0 comes with a current list of Certificate Authority
3102    certificates, including one for the Kermit Project that can be used
3103    for authentication to Columbia's [350]Internet Kermit Service (IKSD).
3104    You can use C-Kermit 7.0 or later to access Columbia's IKSD securely
3105    by installing the Kermit Project certificate in
3106    /usr/local/ssl/cert.pem (or the appropriate location based upon the
3107    installation of OpenSSL on your system). You can find a copy of the
3108    certificates file at:
3109
3110 [351]ftp://kermit.columbia.edu/kermit/c-kermit/ca_certs.pem
3111   __________________________________________________________________________
3112
3113 17. INSTALLING C-KERMIT AS AN SSH SERVER SUBSYSTEM
3114
3115    [ [352]Top ] [ [353]Contents ] [ [354]Previous ]
3116
3117    This requires C-Kermit 8.0.206 or later and an SSH v2 server. If you
3118    list C-Kermit as a Subsystem in the SSH v2 server configuration file
3119    (as, for example, SFTP is listed), users can make SSH connections
3120    direct to a Kermit server as explained here:
3121
3122 [355]http://www.columbia.edu/kermit/skermit.html
3123
3124    The name and location of the SSH server configuration file depends on
3125    your platform, which SSH product(s) you have, etc. C-Kermit itself
3126    must be referred to in this file as "kermit-sshsub". On the host,
3127    install the C-Kermit 8.0.211 binary in the normal way. Then, in the
3128    same directory as the C-Kermit binary, make a symbolic link:
3129
3130 ln -s kermit kermit-sshsub
3131
3132    (Note: the "make install" makefile target does this for you.) Then in
3133    the sshd configuration file, add a line:
3134
3135 Subsystem  kermit   /some/path/kermit-sshsub
3136
3137    (where /some/path is the fully specified directory where the symlink
3138    is.) This is similar to the line that sets up the SFTP susbsystem.
3139    Example:
3140
3141 Subsystem   sftp    /usr/local/libexec/sftp-server
3142 Subsystem   kermit  /usr/local/bin/kermit-sshsub
3143
3144    The mechanics might vary for other SSH servers; "man sshd" for
3145    details. The method shown here is used because the OpenSSH server does
3146    not permit the subsystem invocation to include command-line options.
3147    C-Kermit would have no way of knowing that it should enter Server mode
3148    if it were not called by a special name.
3149
3150    [ [356]Top ] [ [357]Contents ] [ [358]C-Kermit Home ] [ [359]C-Kermit
3151    8.0 Overview ] [ [360]Kermit Home ]
3152      _________________________________________________________________
3153
3154
3155     C-Kermit 8.0 Unix Installation Instructions / The Kermit Project /
3156     Columbia University / 10 April 2004
3157
3158 References
3159
3160    1. http://www.columbia.edu/kermit/ckuins.html#contents
3161    2. http://www.columbia.edu/kermit/ckermit.html
3162    3. http://www.columbia.edu/kermit/index.html
3163    4. http://www.columbia.edu/kermit/ckuins.html
3164    5. http://www.columbia.edu/kermit/ckuins.html#x0
3165    6. http://www.columbia.edu/kermit/ckuins.html#x1
3166    7. http://www.columbia.edu/kermit/ckuins.html#x2
3167    8. http://www.columbia.edu/kermit/ckuins.html#x3
3168    9. http://www.columbia.edu/kermit/ckuins.html#x4
3169   10. http://www.columbia.edu/kermit/ckuins.html#x5
3170   11. http://www.columbia.edu/kermit/ckuins.html#x6
3171   12. http://www.columbia.edu/kermit/ckuins.html#x7
3172   13. http://www.columbia.edu/kermit/ckuins.html#x8
3173   14. http://www.columbia.edu/kermit/ckuins.html#x9
3174   15. http://www.columbia.edu/kermit/ckuins.html#x10
3175   16. http://www.columbia.edu/kermit/ckuins.html#x11
3176   17. http://www.columbia.edu/kermit/ckuins.html#x12
3177   18. http://www.columbia.edu/kermit/ckuins.html#x13
3178   19. http://www.columbia.edu/kermit/ckuins.html#x14
3179   20. http://www.columbia.edu/kermit/ckuins.html#x15
3180   21. http://www.columbia.edu/kermit/ckuins.html#x16
3181   22. http://www.columbia.edu/kermit/ckuins.html#x16
3182   23. http://www.columbia.edu/kermit/ckuins.html#top
3183   24. http://www.columbia.edu/kermit/ckuins.html#contents
3184   25. http://www.columbia.edu/kermit/ckuins.html#x1
3185   26. http://www.columbia.edu/kermit/ckccfg.html
3186   27. http://www.columbia.edu/kermit/ckcbwr.html
3187   28. http://www.columbia.edu/kermit/ckubwr.html
3188   29. http://www.columbia.edu/kermit/ckcplm.html
3189   30. http://www.columbia.edu/kermit/ckuins.html#x2
3190   31. http://www.columbia.edu/kermit/x3
3191   32. http://www.columbia.edu/kermit/ckuins.html#x4
3192   33. http://www.columbia.edu/kermit/ckuins.html#top
3193   34. http://www.columbia.edu/kermit/ckuins.html#contents
3194   35. http://www.columbia.edu/kermit/ckuins.html#x2
3195   36. http://www.columbia.edu/kermit/ckuins.html#x0
3196   37. ftp://kermit.columbia.edu/kermit/archives/cku211.tar.Z
3197   38. ftp://kermit.columbia.edu/kermit/archives/cku211.tar.gz
3198   39. ftp://kermit.columbia.edu/kermit/archives/cku211.tar
3199   40. http://www.columbia.edu/kermit/ckuins.html#x7
3200   41. http://www.columbia.edu/kermit/ckuins.html#x5
3201   42. http://www.columbia.edu/kermit/ckuins.html#x5
3202   43. http://www.columbia.edu/kermit/ckuins.html#x16
3203   44. http://www.columbia.edu/kermit/ckuins.html#top
3204   45. http://www.columbia.edu/kermit/ckuins.html#contents
3205   46. http://www.columbia.edu/kermit/ckuins.html#x3
3206   47. http://www.columbia.edu/kermit/ckuins.html#x1
3207   48. http://www.columbia.edu/kermit/ckuins.html#x5
3208   49. http://www.columbia.edu/kermit/ckuins.html#X10
3209   50. http://www.columbia.edu/kermit/ckuins.html#x11
3210   51. http://www.columbia.edu/kermit/ckuins.html#x10
3211   52. http://www.columbia.edu/kermit/ckuins.html#x3
3212   53. http://www.columbia.edu/kermit/ck80packages.html
3213   54. http://www.columbia.edu/kermit/ckuins.html#x10
3214   55. http://www.columbia.edu/kermit/ckuins.html#top
3215   56. http://www.columbia.edu/kermit/ckuins.html#contents
3216   57. http://www.columbia.edu/kermit/ckuins.html#x4
3217   58. http://www.columbia.edu/kermit/ckuins.html#x2
3218   59. ftp://kermit.columbia.edu/kermit/bin/
3219   60. http://www.columbia.edu/kermit/ck80binaries.html
3220   61. http://www.columbia.edu/kermit/ckuins.html#x7
3221   62. http://www.columbia.edu/kermit/ckuins.html#build
3222   63. http://www.columbia.edu/kermit/ckuins.html#x5
3223   64. http://www.columbia.edu/kermit/ckuins.html#x4
3224   65. http://www.columbia.edu/kermit/ckuins.html#x4
3225   66. mailto:kermit@columbia.edu
3226   67. http://www.columbia.edu/kermit/ckuins.html#top
3227   68. http://www.columbia.edu/kermit/ckuins.html#contents
3228   69. http://www.columbia.edu/kermit/ckuins.html#x5
3229   70. http://www.columbia.edu/kermit/ckuins.html#x3
3230   71. http://www.columbia.edu/kermit/ckuins.html#x8
3231   72. http://www.columbia.edu/kermit/ckuins.html#x9
3232   73. ftp://kermit.columbia.edu/kermit/c-kermit/makefile
3233   74. ftp://kermit.columbia.edu/kermit/c-kermit/ckpker.mk
3234   75. ftp://kermit.columbia.edu/kermit/c-kermit/ckubsd.mak
3235   76. http://www.columbia.edu/kermit/ckuins.html#x5
3236   77. mailto:kermit-support@columbia.edu
3237   78. ftp://kermit.columbia.edu/kermit/c-kermit/makefile
3238   79. http://www.columbia.edu/kermit/ckuins.html#x7
3239   80. mailto:kermit-support@columbia.edu
3240   81. ftp://kermit.columbia.edu/kermit/c-kermit/makefile
3241   82. http://www.columbia.edu/kermit/ckuins.html#x5.4
3242   83. http://www.columbia.edu/kermit/ckuins.html#x10
3243   84. http://www.columbia.edu/kermit/ckuins.html#x11
3244   85. http://www.columbia.edu/kermit/ckuins.html#x5
3245   86. http://www.columbia.edu/kermit/iksd.html
3246   87. http://www.columbia.edu/kermit/ckuins.html#top
3247   88. http://www.columbia.edu/kermit/ckuins.html#contents
3248   89. http://www.columbia.edu/kermit/ckuins.html#x4.1
3249   90. http://www.columbia.edu/kermit/ckccfg.html
3250   91. http://www.columbia.edu/kermit/ckuins.html#x4.1
3251   92. http://www.columbia.edu/kermit/ckuins.html#x4.2
3252   93. http://www.columbia.edu/kermit/ckuins.html#x4.3
3253   94. http://www.columbia.edu/kermit/ckuins.html#x4.4
3254   95. http://www.columbia.edu/kermit/ckuins.html#x4.5
3255   96. http://www.columbia.edu/kermit/ckccfg.html
3256   97. http://www.columbia.edu/kermit/ckccfg.html#x8
3257   98. http://www.columbia.edu/kermit/iksd.html
3258   99. http://www.columbia.edu/kermit/iksd.html
3259  100. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c
3260  101. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c
3261  102. mailto:kermit-support@columbia.edu
3262  103. ftp://kermit.columbia.edu/kermit/c-kermit/ckcmai.c
3263  104. http://www.columbia.edu/kermit/ckuins.html#x15
3264  105. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3265  106. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c
3266  107. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3267  108. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c
3268  109. ftp://kermit.columbia.edu/kermit/c-kermit/ckcnet.c
3269  110. ftp://kermit.columbia.edu/kermit/c-kermit/ckcnet.c
3270  111. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3271  112. ftp://kermit.columbia.edu/kermit/c-kermit/ckcuni.c
3272  113. mailto:kermit-support@columbia.edu
3273  114. http://www.columbia.edu/kermit/ckuins.html#top
3274  115. http://www.columbia.edu/kermit/ckuins.html#contents
3275  116. http://www.columbia.edu/kermit/ckuins.html#x4
3276  117. http://www.columbia.edu/kermit/ckuins.html#x4.2
3277  118. http://www.columbia.edu/kermit/ckuins.html#x4.0
3278  119. ftp://kermit.columbia.edu/kermit/c-kermit/makefile
3279  120. ftp://kermit.columbia.edu/kermit/c-kermit/ckubwr.txt
3280  121. http://www.columbia.edu/kermit/ckubwr.html
3281  122. ftp://kermit.columbia.edu/kermit/c-kermit/ckwart.c
3282  123. ftp://kermit.columbia.edu/kermit/c-kermit/ckcpro.w
3283  124. ftp://kermit.columbia.edu/kermit/c-kermit/ckcpro.c
3284  125. http://www.columbia.edu/kermit/ckuins.html#top
3285  126. http://www.columbia.edu/kermit/ckuins.html#contents
3286  127. http://www.columbia.edu/kermit/ckuins.html#x4
3287  128. http://www.columbia.edu/kermit/ckuins.html#x4.3
3288  129. http://www.columbia.edu/kermit/ckuins.html#x4.1
3289  130. http://www.columbia.edu/kermit/ckuins.html#x5
3290  131. http://www.columbia.edu/kermit/ckuins.html#top
3291  132. http://www.columbia.edu/kermit/ckuins.html#contents
3292  133. http://www.columbia.edu/kermit/ckuins.html#x4
3293  134. http://www.columbia.edu/kermit/ckuins.html#x4.4
3294  135. http://www.columbia.edu/kermit/ckuins.html#x4.2
3295  136. http://www.columbia.edu/kermit/ckuins.html#top
3296  137. http://www.columbia.edu/kermit/ckuins.html#contents
3297  138. http://www.columbia.edu/kermit/ckuins.html#x4
3298  139. http://www.columbia.edu/kermit/ckuins.html#x4.5
3299  140. http://www.columbia.edu/kermit/ckuins.html#x4.3
3300  141. ftp://kermit.columbia.edu/kermit/c-kermit/ckpker.mk
3301  142. http://www.columbia.edu/kermit/ckuins.html#top
3302  143. http://www.columbia.edu/kermit/ckuins.html#contents
3303  144. http://www.columbia.edu/kermit/ckuins.html#x4
3304  145. http://www.columbia.edu/kermit/ckuins.html#x4.4
3305  146. ftp://kermit.columbia.edu/kermit/c-kermit/makefile
3306  147. ftp://kermit.columbia.edu/kermit/c-kermit/makefile
3307  148. ftp://kermit.columbia.edu/kermit/c-kermit/ckcpro.w
3308  149. http://www.columbia.edu/kermit/ckuins.html#top
3309  150. http://www.columbia.edu/kermit/ckuins.html#contents
3310  151. http://www.columbia.edu/kermit/ckuins.html#x6
3311  152. http://www.columbia.edu/kermit/ckuins.html#x4
3312  153. http://www.columbia.edu/kermit/ckuins.html#x5.1
3313  154. http://www.columbia.edu/kermit/ckuins.html#x5.2
3314  155. http://www.columbia.edu/kermit/ckuins.html#x5.3
3315  156. http://www.columbia.edu/kermit/ckuins.html#x5.4
3316  157. http://www.columbia.edu/kermit/
3317  158. http://www.columbia.edu/kermit/ckuins.html#x5.4
3318  159. http://www.columbia.edu/kermit/ckuins.html#x5.3
3319  160. ftp://kermit.columbia.edu/kermit/c-kermit/COPYING.TXT
3320  161. ftp://kermit.columbia.edu/kermit/c-kermit/ckermit.ini
3321  162. http://www.columbia.edu/kermit/ckuins.html#x5.1
3322  163. ftp://kermit.columbia.edu/kermit/c-kermit/ckermod.ini
3323  164. ftp://kermit.columbia.edu/kermit/c-kermit/ckermit70.txt
3324  165. http://www.columbia.edu/kermit/ck60manual
3325  166. http://www.columbia.edu/kermit/ckermit70.html
3326  167. ftp://kermit.columbia.edu/kermit/c-kermit/ckermit80.txt
3327  168. http://www.columbia.edu/kermit/ck60manual
3328  169. http://www.columbia.edu/kermit/ckermit80.html
3329  170. ftp://kermit.columbia.edu/kermit/c-kermit/ckcbwr.txt
3330  171. http://www.columbia.edu/kermit/ckcbwr.html
3331  172. ftp://kermit.columbia.edu/kermit/c-kermit/ckubwr.txt
3332  173. http://www.columbia.edu/kermit/ckubwr.html
3333  174. ftp://kermit.columbia.edu/kermit/c-kermit/ckuins.txt
3334  175. http://www.columbia.edu/kermit/ckuins.html
3335  176. ftp://kermit.columbia.edu/kermit/c-kermit/ckccfg.txt
3336  177. http://www.columbia.edu/kermit/ckccfg.html
3337  178. ftp://kermit.columbia.edu/kermit/c-kermit/ckcplm.txt
3338  179. http://www.columbia.edu/kermit/ckcplm.html
3339  180. ftp://kermit.columbia.edu/kermit/c-kermit/ca_certs.pem
3340  181. http://www.columbia.edu/kermit/ckuins.html#x16"
3341  182. ftp://kermit.columbia.edu/kermit/c-kermit/makefile
3342  183. http://www.columbia.edu/kermit/ckuins.html#x?
3343  184. http://www.columbia.edu/kermit/ckuins.html#x11
3344  185. http://www.columbia.edu/kermit/ckuins.html#x5.2
3345  186. http://www.columbia.edu/kermit/ckermit.html#download
3346  187. http://www.columbia.edu/kermit/ck80binaries.html
3347  188. http://www.columbia.edu/kermit/ckermit.html#download
3348  189. http://www.columbia.edu/kermit/ckuins.html#top
3349  190. http://www.columbia.edu/kermit/ckuins.html#contents
3350  191. http://www.columbia.edu/kermit/ckuins.html#x7
3351  192. http://www.columbia.edu/kermit/ckuins.html#x5
3352  193. http://www.columbia.edu/kermit/ckuins.html#top
3353  194. http://www.columbia.edu/kermit/ckuins.html#contents
3354  195. http://www.columbia.edu/kermit/ckuins.html#x8
3355  196. http://www.columbia.edu/kermit/ckuins.html#x6
3356  197. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3357  198. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3358  199. http://www.columbia.edu/kermit/ckuins.html#x4.0
3359  200. ftp://kermit.columbia.edu/kermit/c-kermit/ckcdeb.h
3360  201. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c
3361  202. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c
3362  203. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3363  204. http://www.columbia.edu/kermit/ckuins.html#x10
3364  205. http://www.columbia.edu/kermit/ckccfg.html#x2
3365  206. http://www.columbia.edu/kermit/ckccfg.html
3366  207. http://www.columbia.edu/kermit/ckuins.html#x4
3367  208. http://www.columbia.edu/kermit/ckuins.html#x10
3368  209. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3369  210. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3370  211. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3371  212. http://www.columbia.edu/kermit/ckuins.html#x9.4
3372  213. mailto:kermit-support@columbia.edu
3373  214. http://www.columbia.edu/kermit/ckuins.html#top
3374  215. http://www.columbia.edu/kermit/ckuins.html#contents
3375  216. http://www.columbia.edu/kermit/ckuins.html#x9
3376  217. http://www.columbia.edu/kermit/ckuins.html#x7
3377  218. http://www.columbia.edu/kermit/ckccfg.html
3378  219. http://www.columbia.edu/kermit/ckccfg.html
3379  220. http://www.columbia.edu/kermit/ckuins.html#top
3380  221. http://www.columbia.edu/kermit/ckuins.html#contents
3381  222. http://www.columbia.edu/kermit/ckuins.html#x10
3382  223. http://www.columbia.edu/kermit/ckuins.html#x8
3383  224. http://www.columbia.edu/kermit/ckuins.html#x9.1
3384  225. http://www.columbia.edu/kermit/ckuins.html#x9.1.1
3385  226. http://www.columbia.edu/kermit/ckuins.html#x9.1.2
3386  227. http://www.columbia.edu/kermit/ckuins.html#x9.1.3
3387  228. http://www.columbia.edu/kermit/ckuins.html#x9.2
3388  229. http://www.columbia.edu/kermit/ckuins.html#x9.3
3389  230. http://www.columbia.edu/kermit/ckuins.html#x9.4
3390  231. http://www.columbia.edu/kermit/ckuins.html#x9.5
3391  232. http://www.columbia.edu/kermit/ckuins.html#x9.6
3392  233. http://www.columbia.edu/kermit/ckuins.html#x9.7
3393  234. http://www.columbia.edu/kermit/ckuins.html#x9.8
3394  235. http://www.columbia.edu/kermit/ckuins.html#x9.9
3395  236. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3396  237. http://www.columbia.edu/kermit/ckuins.html#top
3397  238. http://www.columbia.edu/kermit/ckuins.html#x9
3398  239. http://www.columbia.edu/kermit/ckuins.html#contents
3399  240. http://www.columbia.edu/kermit/ckuins.html#x9.2
3400  241. http://www.columbia.edu/kermit/ckuins.html#x9.1.1
3401  242. http://www.columbia.edu/kermit/ckuins.html#x9.1.2
3402  243. http://www.columbia.edu/kermit/ckuins.html#x9.1.3
3403  244. http://www.columbia.edu/kermit/ckuins.html#top
3404  245. http://www.columbia.edu/kermit/ckuins.html#contents
3405  246. http://www.columbia.edu/kermit/ckuins.html#x9
3406  247. http://www.columbia.edu/kermit/ckuins.html#x9.1
3407  248. http://www.columbia.edu/kermit/ckuins.html#x9.1.3
3408  249. http://www.columbia.edu/kermit/ckuins.html#x9.1.1
3409  250. http://www.columbia.edu/kermit/ckuins.html#top
3410  251. http://www.columbia.edu/kermit/ckuins.html#contents
3411  252. http://www.columbia.edu/kermit/ckuins.html#x9
3412  253. http://www.columbia.edu/kermit/ckuins.html#x9.1
3413  254. http://www.columbia.edu/kermit/ckuins.html#x9.2
3414  255. http://www.columbia.edu/kermit/ckuins.html#x9.1.2
3415  256. http://www.opengroup.org/onlinepubs/007904975/
3416  257. http://www.columbia.edu/kermit/ckuins.html#x9.1.1
3417  258. http://www.columbia.edu/kermit/ckuins.html#top
3418  259. http://www.columbia.edu/kermit/ckuins.html#contents
3419  260. http://www.columbia.edu/kermit/ckuins.html#x9
3420  261. http://www.columbia.edu/kermit/ckuins.html#x9.1
3421  262. http://www.columbia.edu/kermit/ckuins.html#x9.3
3422  263. http://www.columbia.edu/kermit/ckuins.html#x9.1
3423  264. http://www.columbia.edu/kermit/ckuins.html#top
3424  265. http://www.columbia.edu/kermit/ckuins.html#contents
3425  266. http://www.columbia.edu/kermit/ckuins.html#x9
3426  267. http://www.columbia.edu/kermit/ckuins.html#x9.4
3427  268. http://www.columbia.edu/kermit/ckuins.html#x9.2
3428  269. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c
3429  270. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3430  271. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c
3431  272. http://www.columbia.edu/kermit/ckuins.html#top
3432  273. http://www.columbia.edu/kermit/ckuins.html#contents
3433  274. http://www.columbia.edu/kermit/ckuins.html#x9
3434  275. http://www.columbia.edu/kermit/ckuins.html#x9.5
3435  276. http://www.columbia.edu/kermit/ckuins.html#x9.3
3436  277. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3437  278. ftp://kermit.columbia.edu/kermit/c-kermit/ckcdeb.h
3438  279. http://www.columbia.edu/kermit/ckuins.html#top
3439  280. http://www.columbia.edu/kermit/ckuins.html#contents
3440  281. http://www.columbia.edu/kermit/ckuins.html#x9
3441  282. http://www.columbia.edu/kermit/ckuins.html#x9.6
3442  283. http://www.columbia.edu/kermit/ckuins.html#x9.4
3443  284. ftp://kermit.columbia.edu/kermit/c-kermit/ckcdeb.h
3444  285. ftp://kermit.columbia.edu/kermit/c-kermit/ckuus3.c
3445  286. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3446  287. http://www.columbia.edu/kermit/ckuins.html#top
3447  288. http://www.columbia.edu/kermit/ckuins.html#contents
3448  289. http://www.columbia.edu/kermit/ckuins.html#x9
3449  290. http://www.columbia.edu/kermit/ckuins.html#x9.7
3450  291. http://www.columbia.edu/kermit/ckuins.html#x9.5
3451  292. http://www.columbia.edu/kermit/ckuins.html#top
3452  293. http://www.columbia.edu/kermit/ckuins.html#contents
3453  294. http://www.columbia.edu/kermit/ckuins.html#x9
3454  295. http://www.columbia.edu/kermit/ckuins.html#x9.8
3455  296. http://www.columbia.edu/kermit/ckuins.html#x9.6
3456  297. http://www.columbia.edu/kermit/ckuins.html#top
3457  298. http://www.columbia.edu/kermit/ckuins.html#contents
3458  299. http://www.columbia.edu/kermit/ckuins.html#x9
3459  300. http://www.columbia.edu/kermit/ckuins.html#x9.9
3460  301. http://www.columbia.edu/kermit/ckuins.html#x9.7
3461  302. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3462  303. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3463  304. ftp://kermit.columbia.edu/kermit/c-kermit/ckcdeb.h
3464  305. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c
3465  306. http://www.columbia.edu/kermit/ckuins.html#top
3466  307. http://www.columbia.edu/kermit/ckuins.html#contents
3467  308. http://www.columbia.edu/kermit/ckuins.html#x9
3468  309. http://www.columbia.edu/kermit/ckuins.html#x10
3469  310. http://www.columbia.edu/kermit/ckuins.html#x9.8
3470  311. http://www.columbia.edu/kermit/ckuins.html#top
3471  312. http://www.columbia.edu/kermit/ckuins.html#contents
3472  313. http://www.columbia.edu/kermit/ckuins.html#x11
3473  314. http://www.columbia.edu/kermit/ckuins.html#x9
3474  315. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3475  316. http://www.columbia.edu/kermit/ckuins.html#x11
3476  317. http://www.columbia.edu/kermit/ckuins.html#top
3477  318. http://www.columbia.edu/kermit/ckuins.html#contents
3478  319. http://www.columbia.edu/kermit/ckuins.html#x12
3479  320. http://www.columbia.edu/kermit/ckuins.html#x10
3480  321. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3481  322. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c
3482  323. http://www.columbia.edu/kermit/ckuins.html#top
3483  324. http://www.columbia.edu/kermit/ckuins.html#contents
3484  325. http://www.columbia.edu/kermit/ckuins.html#x13
3485  326. http://www.columbia.edu/kermit/ckuins.html#x11
3486  327. http://www.columbia.edu/kermit/ckuins.html#top
3487  328. http://www.columbia.edu/kermit/ckuins.html#contents
3488  329. http://www.columbia.edu/kermit/ckuins.html#x14
3489  330. http://www.columbia.edu/kermit/ckuins.html#x12
3490  331. ftp://kermit.columbia.edu/kermit/c-kermit/ckubwr.txt
3491  332. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3492  333. http://www.columbia.edu/kermit/ckuins.html#top
3493  334. http://www.columbia.edu/kermit/ckuins.html#contents
3494  335. http://www.columbia.edu/kermit/ckuins.html#x15
3495  336. http://www.columbia.edu/kermit/ckuins.html#x13
3496  337. http://www.columbia.edu/kermit/ckuins.html#top
3497  338. http://www.columbia.edu/kermit/ckuins.html#contents
3498  339. http://www.columbia.edu/kermit/ckuins.html#x16
3499  340. http://www.columbia.edu/kermit/ckuins.html#x14
3500  341. http://www.columbia.edu/kermit/iksd.html#x4.2
3501  342. http://www.columbia.edu/kermit/iksd.html
3502  343. http://www.columbia.edu/kermit/ckermit2.html
3503  344. http://www.columbia.edu/kermit/ckuins.html#top
3504  345. http://www.columbia.edu/kermit/ckuins.html#contents
3505  346. http://www.columbia.edu/kermit/ckuins.html#x17
3506  347. http://www.columbia.edu/kermit/ckuins.html#x15
3507  348. http://www.columbia.edu/kermit/security.html
3508  349. http://www.columbia.edu/kermit/security80.html
3509  350. http://www.columbia.edu/kermit/cuiksd.html
3510  351. ftp://kermit.columbia.edu/kermit/c-kermit/ca_certs.pem
3511  352. http://www.columbia.edu/kermit/ckuins.html#top
3512  353. http://www.columbia.edu/kermit/ckuins.html#contents
3513  354. http://www.columbia.edu/kermit/ckuins.html#x16
3514  355. http://www.columbia.edu/kermit/skermit.html
3515  356. http://www.columbia.edu/kermit/ckuins.html#top
3516  357. http://www.columbia.edu/kermit/ckuins.html#contents
3517  358. http://www.columbia.edu/kermit/ckermit.html
3518  359. http://www.columbia.edu/kermit/ck80.html
3519  360. http://www.columbia.edu/kermit/index.html