source: trunk/third/kermit/ckuins.txt @ 20081

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