X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=ckcplm.txt;h=e00edde746a0c17c0a5fe30dfbef5a60fb4c1689;hb=7cb2740ab75d86ce8de2dde75888d225d7946ca9;hp=9829987ac6d28d65ae357d7071157286a9a5512b;hpb=cc9408cfae863f0f6c1419f98953734eb3d61a99;p=ckermit.git diff --git a/ckcplm.txt b/ckcplm.txt index 9829987..e00edde 100644 --- a/ckcplm.txt +++ b/ckcplm.txt @@ -9,64 +9,115 @@ C-Kermit Program Logic Manual Frank da Cruz [11]The Kermit Project - [12]Columbia University As of: C-Kermit 9.0.300, 30 June 2011 - Last update: Tue Jun 28 08:59:18 2011 + Last update: Fri Jul 1 15:47:34 2011 IF YOU ARE READING A PLAIN-TEXT version of this document, note that this file is a plain-text dump of a Web page. You can visit the original (and possibly more up-to-date) Web page here: - [13]http://www.columbia.edu/kermit/ckcplm.html - - [ [14]C-Kermit Home ] [ [15]Kermit Home ] + [12]http://www.columbia.edu/kermit/ckcplm.html CONTENTS - 1. [16]INTRODUCTION - 2. [17]FILES - 3. [18]SOURCE CODE PORTABILITY AND STYLE - 4. [19]MODULES - 4.A. [20]Group A: Library Routines - 4.B. [21]Group B: Kermit File Transfer - 4.C. [22]Group C: Character-Set Conversion - 4.D. [23]Group D: User Interface - 4.E. [24]Group E: Platform-Dependent I/O - 4.F. [25]Group F: Network Support - 4.G. [26]Group G: Formatted Screen Support - 4.H. [27]Group H: Pseudoterminal Support - 4.I. [28]Group I: Security - I. [29]APPENDIX I: FILE PERMISSIONS + 1. [13]INTRODUCTION + 2. [14]FILES + 3. [15]SOURCE CODE PORTABILITY AND STYLE + 4. [16]MODULES + 4.A. [17]Group A: Library Routines + 4.B. [18]Group B: Kermit File Transfer + 4.C. [19]Group C: Character-Set Conversion + 4.D. [20]Group D: User Interface + 4.E. [21]Group E: Platform-Dependent I/O + 4.F. [22]Group F: Network Support + 4.G. [23]Group G: Formatted Screen Support + 4.H. [24]Group H: Pseudoterminal Support + 4.I. [25]Group I: Security + I. [26]APPENDIX I: FILE PERMISSIONS 1. INTRODUCTION - The Kermit Protocol is specified in the book Kermit, A File Transfer - Protocol by Frank da Cruz, Digital Press / Butterworth Heinemann, - Newton, MA, USA (1987), 379 pages, ISBN 0-932376-88-6. It is assumed - the reader is familiar with the Kermit protocol specification. + The Kermit Protocol is specified in the book [27]Kermit, A File + Transfer Protocol by Frank da Cruz, Digital Press / Butterworth + Heinemann, Newton, MA, USA (1987), 379 pages, ISBN 0-932376-88-6. It is + assumed the reader is familiar with the Kermit protocol specification. This file describes the relationship among the modules and functions of C-Kermit 5A and later, and other programming considerations. C-Kermit is designed to be portable to any kind of computer that has a C compiler. The source code is broken into many files that are grouped - according to their function, as shown in the [30]Contents. + according to their function, as shown in the [28]Contents. C-Kermit has seen constant development since 1985. Throughout its history, there has been a neverending tug-of-war among: a. Functionality: adding new features, fixing bugs, improving performance. - b. Adding support for new platforms. + b. Adding support for new platforms or communication methods. c. "Buzzword 1.0 compliance". The latter category is the most frustrating, since it generally involves massive changes just to keep the software doing what it did before in some new setting: e.g. the K&R-to-ANSIC conversion (which had to be done, of course, without breaking K&R); Y2K (not a big deal in - our case); the many and varied UNIX and other API "standards"; IPv6. + our case); the many and varied UNIX and other API "standards" with + which to "comply". + + Upon first glance at the source code, you will probably be appalled. + Many will be tempted to clean it up and modernize it. But as soon as + you do, you are sure to break something. Remember that above all else, + the C-Kermit code is portable to every Unix platform that ever existed, + going back Unix V7 (1979)*, and to several other completely different + and unrelated operating-system families such as DEC/HP VMS, DG AOS/VS, + and Stratus VOS, as well as to some Unix offshoots like OS-9 and Plan 9 + (from Outer Space). Every release of Kermit has been checked on every + platform available -- the older the better! -- to make sure it still + builds and runs. Even today (2011), there are modern Unix systems that + have non-ANSI C compilers, foremost among them HP-UX (where an ANSI + optimizing C compiler is available, but only as an expensive add-on). + In a way, portability is the most important feature of C-Kermit and + every effort should be made to preserve it through future releases. + + Voluminous edit histories are available going back to May 1985. The + first versions of C-Kermit were done on our [29]DEC VAX-11/750 with + Ultrix 1.0 and 2.0 (as well as departmental 750s with 4.2BSD**), DEC + Pro-380 workstations (desktop PDP-11s) running 2.9BSD, which was + [30]ported to the 380 by us. Later (1988 or so) on a big VAX 8650 with + Ultrix, which became an 8700 (these no doubt weighed several tons), and + finally a succession of non-DEC equipment: an Encore Multimax, 25 years + worth of Suns, and now Linux on [31]HP Blades. We also had our own VMS + development systems for some years. All this plus a generous assortment + of departmental and offsite guest accounts on a multitude of platforms. + Anyway, the edit histories: + + [32]ckc04e.txt C-Kermit 4.2(030) May 1985 to 4E(072) Jan 1989. + [33]ckc04f.txt C-Kermit 4F(077) Arp 1989 to 4F(095) Aug 1989. + [34]ckc168.txt Updates to C-Kermit 5A(168) for VMS Nov 1991 + [35]ckc178.txt C-Kermit 5A(100) Jul 1989 to 5A(178) Jan 1992 + [36]ckc188.txt C-Kermit 5A(188) development, 1992 + [37]ckc189.txt C-Kermit 5A(189) development, 1993 + [38]ckc192.txt C-Kermit 6.0(192) development, 1998 + [39]ckc197.txt C-Kermit 7.0(197) development, 2000 + [40]ckc200.txt C-Kermit 8.0.200 development, 2001 + [41]ckc211.txt C-Kermit 8.0.201 through 8.0.209 2001-2004 + [42]ckc300.txt C-Kermit 9.0.300 June 2011 + + _________________________________ + * C-Kermit 6.0 was the last one to be built on V7, as I recall. The + code should still be good for V7 but it probably has outgrown the + 16-bit address space. In any case there is still a V7 makefile target + and a V7 path through the forest of #ifdefs in the code if anybody is + running V7 on an emulator and would like to try building C-Kermit. + There is no support for V6 but that is only because no V6 system was + ever found for development. Notice that some other 16-bit Unixes are + supported in the code, including 2.9BSD and Tandy Xenix 3.0, but have + not been tried since C-Kermit 6.0 + + ** C-Kermit 9.0.300 was built successfully on 4.2BSD about 25 years + later, in June 2011. - [ [31]Contents ] [ [32]C-Kermit ] [ [33]Kermit Home ] + [ [43]Contents ] [ [44]C-Kermit ] [ [45]Kermit Home ] 2. FILES @@ -89,13 +140,13 @@ CONTENTS k (unused) l Stratus VOS m Macintosh with Mac OS 1-9 - n Microsoft Windows NT/2000/XP - o OS/2 and/or Microsoft Windows 9x/ME/NT/2000/XP + n (unused) + o OS/2 and Microsoft Windows 9x/ME/NT/2000/XP/Vista/etc p Plan 9 from Bell Labs q (reserved) - r DEC PDP-11 with RSTS/E (never used, open for reassigment) + r DEC PDP-11 with RSTS/E (never used, open for reassignment) s Atari ST GEMDOS (last supported in version 5A(189)) - t DEC PDP-11 with RT-11 (never used, open for reassigment) + t DEC PDP-11 with RT-11 (never used, open for reassignment) u Unix-based operating systems (*) v VMS and OpenVMS w Wart (Lex-like preprocessor, platform independent) @@ -106,7 +157,7 @@ CONTENTS 4 IBM AS/400 5-8 (reserved) 9 Microware OS-9 - _ Encryption modules + _ (underscore) Encryption modules (*) In fact there is little distinction between the ckc*.* and cku*.* categories. It would make more sense for all cku*.* modules to be @@ -146,7 +197,7 @@ foo(x,y) int x, y; { $ emacs Esc-X Visit-Tags-Table - (but remember that the source file for ckcpro.c is [34]ckcpro.w!) + (but remember that the source file for ckcpro.c is [46]ckcpro.w!) Also: @@ -157,12 +208,12 @@ foo(x,y) int x, y; { most other stuff (obviously this is not a portability issue, just style). - [ [35]Contents ] [ [36]C-Kermit ] [ [37]Kermit Home ] + [ [47]Contents ] [ [48]C-Kermit ] [ [49]Kermit Home ] 3. SOURCE CODE PORTABILITY AND STYLE C-Kermit was designed in 1985 as a platform-independent replacement for - the earlier Unix Kermit. c-Kermit's design was expected to promote + the earlier Unix Kermit. C-Kermit's design was expected to promote portability, and judging from the number of platforms to which it has been adapted since then, the model is effective, if not ideal (obviously if we had it all to do over, we'd change a few things). To @@ -197,7 +248,7 @@ foo(x,y) int x, y; { way to test the results on all the hundreds of platforms where C-Kermit is supposed to build. - When writing code for the system-indendent C-Kermit modules, please + When writing code for the system-independent C-Kermit modules, please stick to the following coding conventions to ensure portability to the widest possible variety of C preprocessors, compilers, and linkers, as well as certain network and/or email transports. The same holds true @@ -244,8 +295,6 @@ foo(x,y) int x, y; { all the time). * Always cast strlen() in expressions to int: if ((int)strlen(foo) < x)... - * Any variable whose value might exceed 16383 should be declared as - long, or if that is not possible, then as unsigned. * Avoid typedefs; they might be portable but they are very confusing and there's no way to test for their presence or absence at compile time. Use preprocessor symbols instead if possible; at least you @@ -257,7 +306,7 @@ foo(x,y) int x, y; { modifier other than L. * Unsigned char is not portable, use CHAR (a preprocessor symbol defined in the Kermit header files) and always take precautions - against character signage (more about this [38]below). + against character signage (more about this [50]below). * Don't use initializers with automatic arrays or structs: it's not portable. * Don't use big automatic arrays or structs in functions that might @@ -381,12 +430,12 @@ foo(x,y) int x, y; { char * foo" in another, or vice-versa: this causes core dumps. * With compiler makers falling all over themselves trying to outdo each other in ANSI strictness, it has become increasingly necessary - to cast EVERYTHING. This is increasingly true for char vs unsigned - char. We need to use unsigned chars if we want to deal with 8-bit - character sets, but most character- and string-oriented APIs want - (signed) char arguments, so explicit casts are necessary. It would - be nice if every compiler had a -funsigned-char option (as gcc - does), but they don't. + to cast EVERYTHING. Especially char vs unsigned char. We need to + use unsigned chars if we want to deal with 8-bit character sets, + but most character- and string-oriented APIs want (signed) char + arguments, so explicit casts are necessary. It would be nice if + every compiler had a -funsigned-char option (as gcc does), but they + don't. * a[x], where x is an unsigned char, can produce a wild memory reference if x, when promoted to an int, becomes negative. Cast it to (unsigned), even though it ALREADY IS unsigned. @@ -394,7 +443,7 @@ foo(x,y) int x, y; { arguments; for ANSI compilers you MUST use ANSI declarations to avoid promotion problems, but you can't use ANSI declarations with non-ANSI compilers. Thus declarations of such functions must be - hideously entwined in #ifdefs. Example: latter: + hideously entwined in #ifdefs. Example: int /* Put character in server command buffer */ #ifdef CK_ANSIC putsrv(char c) @@ -451,7 +500,7 @@ foo(x,y) int x, y; { certain not to apply. For example, in VMS-specific code, it is OK to use #if, because VAX C, DEC C, and VMS GCC all support it. - [ [39]Contents ] [ [40]C-Kermit ] [ [41]Kermit Home ] + [ [51]Contents ] [ [52]C-Kermit ] [ [53]Kermit Home ] 3.1. Memory Leaks @@ -503,9 +552,9 @@ foo(x,y) int x, y; { ckmakxmsg() Like ckmakmsg() but accepts up to 12 items - More about library functions in [42]Section 4.A. + More about library functions in [54]Section 4.A. - [ [43]Contents ] [ [44]C-Kermit ] [ [45]Kermit Home ] + [ [55]Contents ] [ [56]C-Kermit ] [ [57]Kermit Home ] 3.2. The "char" vs "unsigned char" Dilemma @@ -533,7 +582,7 @@ foo(x,y) int x, y; { whereas our character data is unsigned. Fine, we can can use casts here too -- but who knows what happens inside these routines. - [ [46]Contents ] [ [47]C-Kermit ] [ [48]Kermit Home ] + [ [58]Contents ] [ [59]C-Kermit ] [ [60]Kermit Home ] 4. MODULES @@ -550,8 +599,8 @@ foo(x,y) int x, y; { conxxx() (console i/o) routines. Protocol State - Reading and writing from the communicatons device. In this mode, - all i/o is handled by the Group E ttxxx() (terminal i/o) + Reading and writing from the communications device. In this + mode, all i/o is handled by the Group E ttxxx() (terminal i/o) routines. Terminal State @@ -567,17 +616,17 @@ foo(x,y) int x, y; { console or interruptions from it (except for "in-band" interruptions such as ^C^C^C). - [ [49]Contents ] [ [50]C-Kermit ] [ [51]Kermit Home ] + [ [61]Contents ] [ [62]C-Kermit ] [ [63]Kermit Home ] 4.A. Group A: Library Functions Library functions, strictly portable, can be used by all modules on all - platforms: [52]ckclib.h, [53]ckclib.c. + platforms: [64]ckclib.h, [65]ckclib.c. - (To be filled in... For now, see [54]Section 3.1 and the comments in + (To be filled in... For now, see [66]Section 3.1 and the comments in ckclib.c.) - [ [55]Contents ] [ [56]C-Kermit ] [ [57]Kermit Home ] + [ [67]Contents ] [ [68]C-Kermit ] [ [69]Kermit Home ] 4.B. Group B: Kermit File Transfer @@ -591,72 +640,72 @@ foo(x,y) int x, y; { contain any library calls except from the standard C library (e.g. printf()). They most certainly do not contain any system calls. Files: - [58]ckcsym.h + [70]ckcsym.h For use by C compilers that don't allow -D on the command line. - [59]ckcasc.h + [71]ckcasc.h ASCII character symbol definitions. - [60]ckcsig.h + [72]ckcsig.h System-independent signal-handling definitions and prototypes. - [61]ckcdeb.h + [73]ckcdeb.h Originally, debugging definitions. Now this file also contains all definitions and prototypes that are shared by all modules in all groups. - [62]ckcker.h + [74]ckcker.h Kermit protocol symbol definitions. - [63]ckcxla.h + [75]ckcxla.h Character-set-related symbol definitions (see next section). - [64]ckcmai.c + [76]ckcmai.c The main program. This module contains the declarations of all the protocol-related global variables that are shared among the other modules. - [65]ckcpro.w + [77]ckcpro.w The protocol module itself, written in "wart", a lex-like preprocessor that is distributed with Kermit under the name CKWART.C. - [66]ckcfns.c, [67]ckcfn2.c, [68]ckcfn3.c + [78]ckcfns.c, [79]ckcfn2.c, [80]ckcfn3.c The protocol support functions used by the protocol module. - [69]Group B modules may call upon functions from [70]Group E, but not - from [71]Group D modules (with the single exception that the main + [81]Group B modules may call upon functions from [82]Group E, but not + from [83]Group D modules (with the single exception that the main program invokes the user interface, which is in Group D). (This last assertion is really only a conjecture.) - [ [72]Contents ] [ [73]C-Kermit ] [ [74]Kermit Home ] + [ [84]Contents ] [ [85]C-Kermit ] [ [86]Kermit Home ] 4.C. Group C: Character-Set Conversion - Character set translation tables and functions. Used by the [75]Group + Character set translation tables and functions. Used by the [87]Group B, protocol modules, but may be specific to different computers. (So far, all character character sets supported by C-Kermit are supported - in [76]ckuxla.c and [77]ckuxla.h, including Macintosh and IBM character + in [88]ckuxla.c and [89]ckuxla.h, including Macintosh and IBM character sets). These modules should be completely portable, and not rely on any kind of system or library services. - [78]ckcxla.h + [90]ckcxla.h Character-set definitions usable by all versions of C-Kermit. ck?xla.h - Character-set definitions for computer "?", e.g. [79]ckuxla.h - for UNIX, [80]ckmxla.h for Macintosh. + Character-set definitions for computer "?", e.g. [91]ckuxla.h + for UNIX, [92]ckmxla.h for Macintosh. - [81]ck?xla + [93]ck?xla Character-set translation tables and functions for computer "?", For example, CKUXLA.C for UNIX, CKMXLA.C for Macintosh. So far, these are the only two such modules. The UNIX module is used for all versions of C-Kermit except the Macintosh version. - [82]ckcuni.h + [94]ckcuni.h Unicode definitions - [83]ckcuni.c + [95]ckcuni.c Unicode module Here's how to add a new file character set in the original (non-Unicode @@ -718,7 +767,7 @@ foo(x,y) int x, y; { + (To be filled in...) - [ [84]Contents ] [ [85]C-Kermit ] [ [86]Kermit Home ] + [ [96]Contents ] [ [97]C-Kermit ] [ [98]Kermit Home ] 4.D. Group D: User Interface @@ -742,7 +791,7 @@ foo(x,y) int x, y; { such as the CONNECT command, local file management commands, parameter-setting commands, FTP client commands, etc. - If you plan to imbed the [87]Group B, files into a program with a + If you plan to embed the [99]Group B, files into a program with a different user interface, your interface must supply an appropriate screen() function, plus a couple related ones like chkint() and intmsg() for handling keyboard (or mouse, etc) interruptions during @@ -757,38 +806,38 @@ foo(x,y) int x, y; { combination, and it can even be built with no user interface at all (in which case it runs as a remote-mode Kermit server). - [88]ckucmd.h - [89]ckucmd.c + [100]ckucmd.h + [101]ckucmd.c The command parsing primitives used by the interactive command parser to parse keywords, numbers, filenames, etc, and to give help, complete fields, supply defaults, allow abbreviations and editing, etc. This package is totally independent of Kermit, but - does depend on the [90]Group E functions. + does depend on the [102]Group E functions. - [91]ckuusr.h + [103]ckuusr.h Definitions of symbols used in Kermit's commands. ckuus*.c Kermit's interactive command parser, including the script - programming language: [92]ckuusr.c (includes top-level keyword - tables); [93]ckuus2.c (HELP command text); [94]ckuus3.c (most of - the SET command); [95]ckuus4.c (includes variables and + programming language: [104]ckuusr.c (includes top-level keyword + tables); [105]ckuus2.c (HELP command text); [106]ckuus3.c (most + of the SET command); [107]ckuus4.c (includes variables and functions); ckuus[567].c (miscellaneous); - [96]ckuusy.c + [108]ckuusy.c The command-line-option parser. - [97]ckuusx.c + [109]ckuusx.c User interface functions common to both the interactive and command-line parsers. - [98]ckuver.h + [110]ckuver.h Version heralds for different implementations. - [99]ckuscr.c + [111]ckuscr.c The (old, uucp-like) SCRIPT command - [100]ckudia.c + [112]ckudia.c The DIAL command. Includes specific knowledge of many types of modems. @@ -802,8 +851,8 @@ foo(x,y) int x, y; { The CONNECT command. Terminal connection, and in some cases (Macintosh, Windows) also terminal emulation. NOTE: As of C-Kermit 7.0, there are two different CONNECT modules for UNIX: - [101]ckucon.c -- the traditional, portable, fork()-based version - -- and [102]ckucns.c, a new version that uses select() rather + [113]ckucon.c -- the traditional, portable, fork()-based version + -- and [114]ckucns.c, a new version that uses select() rather than forks so it can handle encryption. ckucns.c is the preferred version for Unix; ckucon.c is not likely to keep pace with it in terms of upgrades, etc. However, since select() is @@ -836,7 +885,7 @@ foo(x,y) int x, y; { existence of C library features like fopen, fgets, feof, (f)printf, argv/argc, etc. Other functions that are likely to vary among operating systems -- like setting terminal modes or interrupts -- are invoked via - calls to functions that are defined in the [103]Group E + calls to functions that are defined in the [115]Group E platform-dependent modules, ck?[ft]io.c. The command line parser processes any arguments found on the command line, as passed to main() via argv/argc. The interactive parser uses the facilities of the cmd @@ -845,7 +894,7 @@ foo(x,y) int x, y; { requirements for the Kermit command parser are these: 1. Set parameters via global variables like duplex, speed, ttname, - etc. See [104]ckcmai.c for the declarations and descriptions of + etc. See [116]ckcmai.c for the declarations and descriptions of these variables. 2. If a command can be executed without the use of Kermit protocol, then execute the command directly and set the sstate (start state) @@ -893,7 +942,7 @@ foo(x,y) int x, y; { defined). The intmsg() and chkint() functions provide the user i/o for interrupting file transfers. - [ [105]Contents ] [ [106]C-Kermit ] [ [107]Kermit Home ] + [ [117]Contents ] [ [118]C-Kermit ] [ [119]Kermit Home ] 4.E. Group E: Platform-Dependent I/O @@ -901,10 +950,10 @@ foo(x,y) int x, y; { including the command package, call upon these functions, which are designed to provide system-independent primitives for controlling and manipulating devices and files. For Unix, these functions are defined - in the files [108]ckufio.c (files), [109]ckutio.c (communications), and - [110]ckusig.c (signal handling). + in the files [120]ckufio.c (files), [121]ckutio.c (communications), and + [122]ckusig.c (signal handling). - For VMS, the files are [111]ckvfio.c, ckvtio.c, and [112]ckusig.c (VMS + For VMS, the files are [123]ckvfio.c, ckvtio.c, and [124]ckusig.c (VMS can use the same signal handling routines as Unix). It doesn't really matter what the files are called, except for Kermit distribution purposes (grouping related files together alphabetically), only that @@ -1018,7 +1067,7 @@ foo(x,y) int x, y; { int dfflow; Default flow control. 0 = none, 1 = Xon/Xoff, ... (see FLO_xxx symbols in ckcdeb.h) - Set by Group E module. Used by [113]ckcmai.c to initialize flow + Set by Group E module. Used by [125]ckcmai.c to initialize flow control variable. int dfloc; @@ -1033,7 +1082,7 @@ foo(x,y) int x, y; { char *dftty; Default communication device. Set by Group E module. Used in - many places. This variable should be initialized the the symbol + many places. This variable should be initialized the symbol CTTNAM, which is defined in ckcdeb.h, e.g. as "/dev/tty" for UNIX, "TT:" for VMS, etc. Example: char *dftty = CTTNAM; @@ -1070,7 +1119,7 @@ foo(x,y) int x, y; { mode. Since this is not implemented everywhere, references to it are in #ifdef CK_TTYFD..#endif. - [ [114]Contents ] [ [115]C-Kermit ] [ [116]Kermit Home ] + [ [126]Contents ] [ [127]C-Kermit ] [ [128]Kermit Home ] 4.E.2. Functions @@ -1080,8 +1129,8 @@ foo(x,y) int x, y; { 4.E.2.1. File-Related Functions In most implementations, these are collected together into a module - called ck?fio.c, where ? = "u" ([117]ckutio.c for Unix), "v" - ([118]ckvtio.c for VMS), [119]etc. To be totally platform-independent, + called ck?fio.c, where ? = "u" ([129]ckutio.c for Unix), "v" + ([130]ckvtio.c for VMS), [131]etc. To be totally platform-independent, C-Kermit maintains its own file numbers, and provides the functions described in this section to deal with the files associated with them. The file numbers are referred to symbolically, and are defined as @@ -1098,7 +1147,7 @@ foo(x,y) int x, y; { #define ZSYSFN 8 /* Input from a system function (pipe) */ #define ZRFILE 9 /* Local file for READ command */ (NEW) #define ZWFILE 10 /* Local file for WRITE command */ (NEW) - #define ZMFILE 11 /* Auxilliary file for internal use */ (NEW) + #define ZMFILE 11 /* Auxiliary file for internal use */ (NEW) #define ZNFILS 12 /* How many defined file numbers */ In the descriptions below, fn refers to a filename, and n refers to one @@ -1623,7 +1672,7 @@ foo(x,y) int x, y; { the given argument vector, which follows the conventions of UNIX argv[]: the name of the command pointed to by element 0, the first arg by element 1, and so on. A null args[] pointer - indicates the end of the arugment list. All open files must + indicates the end of the argument list. All open files must remain open so the exec'd process can use them. Returns only if unsuccessful. @@ -1669,7 +1718,7 @@ foo(x,y) int x, y; { is a date of the form yyyymmdd hh:mm:ss, e.g. 19900208 13:00:00, which is to be used for setting or comparing the file date. Other attributes in the struct can also be set, such as the protection/permission (See - [120]Appendix I), when it makes sense (e.g. "yy->lprotect.val" can be + [132]Appendix I), when it makes sense (e.g. "yy->lprotect.val" can be set if the remote system ID matches the local one). x: A function code: 0 means to set the file's creation date as given. 1 means compare the date from the yy struct with the file's date. @@ -1788,7 +1837,7 @@ foo(x,y) int x, y; { In UNIX, the only need Kermit has for privileged status is access to the UUCP lockfile directory, in order to read, create, and destroy lockfiles, and to open communication devices that are normally - protected against the user (see the [121]Unix C-Kermit Installation + protected against the user (see the [133]Unix C-Kermit Installation Instructions for discussion). Therefore, privileges should only be enabled for these operations and disabled at all other times. This relieves the programmer of the responsibility of putting expensive and @@ -1839,7 +1888,7 @@ foo(x,y) int x, y; { Attempts to turns privileges off in such a way that they can be turned on again later. Then checks to make sure that they were really turned off. If they were not really turned off, then they - are cancelled permanently. Returns: + are canceled permanently. Returns: 0 on success nonzero on failure @@ -2200,9 +2249,9 @@ foo(x,y) int x, y; { modem: Less than zero: this is the negative of the network type, and ttname is a network host name. Network - types (from [122]ckcnet.h: + types (from [134]ckcnet.h: - NET_TCPB 1 TCP/IP Berkeley (socket) (implemented in [123]ckutio.c) + NET_TCPB 1 TCP/IP Berkeley (socket) (implemented in [135]ckutio.c) NET_TCPA 2 TCP/IP AT&T (streams) (not yet implemented) NET_DEC 3 DECnet (not yet implemented) @@ -2437,8 +2486,8 @@ foo(x,y) int x, y; { the data it points to is not safe, so should be copied to a safe place before use. ztime() has no return value. As a side effect, this routine can also fill in the following two external - variables (which must be defined in the system-dependendent - modules for each platform): + variables (which must be defined in the system-dependent modules + for each platform): long ztusec: Fraction of seconds of clock time, microseconds. long ztmsec: Fraction of seconds of clock time, milliseconds. If these variables are not set by zstime(), they remain at their @@ -2507,21 +2556,21 @@ foo(x,y) int x, y; { -1: if this function is not supported. 0: on success. - [ [124]Contents ] [ [125]C-Kermit ] [ [126]Kermit Home ] + [ [136]Contents ] [ [137]C-Kermit ] [ [138]Kermit Home ] 4.F. Group F: Network Support As of version 5A, C-Kermit includes support for several networks. Originally, this was just worked into the ttopen(), ttclos(), ttinc(), - ttinl(), and similar routines in [127]ckutio.c. But this made it + ttinl(), and similar routines in [139]ckutio.c. But this made it impossible to share this code with non-UNIX versions, like VMS, AOS/VS, OS/2, etc. So as of edit 168, network code has been separated out into its own module and header file, ckcnet.c and ckcnet.h: - [128]ckcnet.h: Network-related symbol definitions. - [129]ckcnet.c: Network i/o (TCP/IP, X.25, etc), shared by most + [140]ckcnet.h: Network-related symbol definitions. + [141]ckcnet.c: Network i/o (TCP/IP, X.25, etc), shared by most platforms. - [130]cklnet.c: Network i/o (TCP/IP, X.25, etc) specific to Stratus + [142]cklnet.c: Network i/o (TCP/IP, X.25, etc) specific to Stratus VOS. The routines and variables in these modules fall into two categories: @@ -2606,7 +2655,7 @@ foo(x,y) int x, y; { contain code to test for the network type, which is available via the global variable ttnet. - [ [131]Contents ] [ [132]C-Kermit ] [ [133]Kermit Home ] + [ [143]Contents ] [ [144]C-Kermit ] [ [145]Kermit Home ] 4.F.1. Telnet Protocol @@ -2616,8 +2665,8 @@ foo(x,y) int x, y; { it can be implemented in remote mode, which does not have a network connection: - [134]ckctel.h: Telnet protocol symbol definitions. - [135]ckctel.c: Telnet protocol. + [146]ckctel.h: Telnet protocol symbol definitions. + [147]ckctel.c: Telnet protocol. The Telnet protocol is supported by the following variables and routines: @@ -2643,7 +2692,7 @@ foo(x,y) int x, y; { 4.F.2. FTP Protocol - (To be filled in...) + (To be filled in...) See the [148]source file 4.F.3. HTTP Protocol @@ -2694,7 +2743,7 @@ foo(x,y) int x, y; { x25inl() Read a Kermit packet from X.25 circuit. - [ [136]Contents ] [ [137]C-Kermit ] [ [138]Kermit Home ] + [ [149]Contents ] [ [150]C-Kermit ] [ [151]Kermit Home ] 4.F.5. Adding New Network Types @@ -2755,14 +2804,14 @@ foo(x,y) int x, y; { You can NOT use constructions like "#if defined (HPX25 || IBMX25)"; they are not portable. - [ [139]Contents ] [ [140]C-Kermit ] [ [141]Kermit Home ] + [ [152]Contents ] [ [153]C-Kermit ] [ [154]Kermit Home ] 4.G. Group G: Formatted Screen Support So far, this is used only for the fullscreen local-mode file transfer display. In the future, it might be extended to other uses. The fullscreen display code is in and around the routine screenc() in - [142]ckuusx.c. + [155]ckuusx.c. In the UNIX version, we use the curses library, plus one call from the termcap library. In other versions (OS/2, VMS, etc) we insert dummy @@ -2808,17 +2857,18 @@ foo(x,y) int x, y; { management service keeps a copy of the entire screen, as curses and SMG do. C-Kermit does not do this itself. - [ [143]Contents ] [ [144]C-Kermit ] [ [145]Kermit Home ] + [ [156]Contents ] [ [157]C-Kermit ] [ [158]Kermit Home ] 4.H. Group H: Pseudoterminal Support - (To be filled in...) + (To be filled in...) But see: [159]these comments, and the source files + [160]ckupty.h and [161]ckupty.c. 4.I. Group I: Security - (To be filled in...) + (To be filled in...) Meanwhile, see [162]security.html. - [ [146]Contents ] [ [147]C-Kermit ] [ [148]Kermit Home ] + [ [163]Contents ] [ [164]C-Kermit ] [ [165]Kermit Home ] APPENDIX I. FILE PERMISSIONS @@ -2880,13 +2930,13 @@ I.2. Handling of Generic Protection etc), except that no non-Owner field should give more permissions than the Owner field. - [ [149]Top ] [ [150]Contents ] [ [151]C-Kermit Home ] [ [152]Kermit + [ [166]Top ] [ [167]Contents ] [ [168]C-Kermit Home ] [ [169]Kermit Home ] __________________________________________________________________ - C-Kermit Program Logic Manual / [153]The Kermit Project / - [154]kermit@columbia.edu / 30 June 2011 + C-Kermit Program Logic Manual / [170]The Kermit Project / + [171]kermit@columbia.edu / 30 June 2011 References @@ -2901,146 +2951,163 @@ References 9. http://www.columbia.edu/kermit/ckfaq.html 10. http://www.columbia.edu/kermit/support.html 11. http://www.columbia.edu/kermit/ - 12. http://www.columbia.edu/ - 13. http://www.columbia.edu/kermit/ckcplm.html - 14. http://www.columbia.edu/kermit/ckermit.html - 15. http://www.columbia.edu/kermit/index.html - 16. http://www.columbia.edu/kermit/ckcplm.html#x1 - 17. http://www.columbia.edu/kermit/ckcplm.html#x2 - 18. http://www.columbia.edu/kermit/ckcplm.html#x3 - 19. http://www.columbia.edu/kermit/ckcplm.html#x4 - 20. http://www.columbia.edu/kermit/ckcplm.html#x4.A - 21. http://www.columbia.edu/kermit/ckcplm.html#x4.B - 22. http://www.columbia.edu/kermit/ckcplm.html#x4.C - 23. http://www.columbia.edu/kermit/ckcplm.html#x4.D - 24. http://www.columbia.edu/kermit/ckcplm.html#x4.E - 25. http://www.columbia.edu/kermit/ckcplm.html#x4.F - 26. http://www.columbia.edu/kermit/ckcplm.html#x4.G - 27. http://www.columbia.edu/kermit/ckcplm.html#x4.H - 28. http://www.columbia.edu/kermit/ckcplm.html#x4.I - 29. http://www.columbia.edu/kermit/ckcplm.html#xa1 - 30. http://www.columbia.edu/kermit/ckcplm.html#contents - 31. http://www.columbia.edu/kermit/ckcplm.html#contents - 32. http://www.columbia.edu/kermit/ckermit.html - 33. http://www.columbia.edu/kermit/index.html - 34. ftp://kermit.columbia.edu/kermit/c-kermit/ckcpro.w - 35. http://www.columbia.edu/kermit/ckcplm.html#contents - 36. http://www.columbia.edu/kermit/ckermit.html - 37. http://www.columbia.edu/kermit/index.html - 38. http://www.columbia.edu/kermit/ckcplm.html#x3.2 - 39. http://www.columbia.edu/kermit/ckcplm.html#contents - 40. http://www.columbia.edu/kermit/ckermit.html - 41. http://www.columbia.edu/kermit/index.html - 42. http://www.columbia.edu/kermit/ckcplm.html#x4.A + 12. http://www.columbia.edu/kermit/ckcplm.html + 13. http://www.columbia.edu/kermit/ckcplm.html#x1 + 14. http://www.columbia.edu/kermit/ckcplm.html#x2 + 15. http://www.columbia.edu/kermit/ckcplm.html#x3 + 16. http://www.columbia.edu/kermit/ckcplm.html#x4 + 17. http://www.columbia.edu/kermit/ckcplm.html#x4.A + 18. http://www.columbia.edu/kermit/ckcplm.html#x4.B + 19. http://www.columbia.edu/kermit/ckcplm.html#x4.C + 20. http://www.columbia.edu/kermit/ckcplm.html#x4.D + 21. http://www.columbia.edu/kermit/ckcplm.html#x4.E + 22. http://www.columbia.edu/kermit/ckcplm.html#x4.F + 23. http://www.columbia.edu/kermit/ckcplm.html#x4.G + 24. http://www.columbia.edu/kermit/ckcplm.html#x4.H + 25. http://www.columbia.edu/kermit/ckcplm.html#x4.I + 26. http://www.columbia.edu/kermit/ckcplm.html#xa1 + 27. http://www.amazon.com/gp/product/0932376886?ie=UTF8&tag=aleidmoreldom-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=0932376886 + 28. http://www.columbia.edu/kermit/ckcplm.html#contents + 29. http://www.columbia.edu/kermit/vax_11-750.jpg + 30. http://www.columbia.edu/cu/computinghistory/hermit.html + 31. http://www.columbia.edu/kermit/cudocs/ilosetup.html + 32. ftp://kermit.columbia.edu/kermit/f/ckc04e.txt + 33. ftp://kermit.columbia.edu/kermit/f/ckc04f.txt + 34. ftp://kermit.columbia.edu/kermit/f/ckc168.txt + 35. ftp://kermit.columbia.edu/kermit/f/ckc178.txt + 36. ftp://kermit.columbia.edu/kermit/f/ckc188.txt + 37. ftp://kermit.columbia.edu/kermit/f/ckc189.txt + 38. ftp://kermit.columbia.edu/kermit/f/ckc192.txt + 39. ftp://kermit.columbia.edu/kermit/f/ckc197.txt + 40. ftp://kermit.columbia.edu/kermit/f/ckc200.txt + 41. ftp://kermit.columbia.edu/kermit/f/ckc211.txt + 42. ftp://kermit.columbia.edu/kermit/f/ckc300.txt 43. http://www.columbia.edu/kermit/ckcplm.html#contents 44. http://www.columbia.edu/kermit/ckermit.html 45. http://www.columbia.edu/kermit/index.html - 46. http://www.columbia.edu/kermit/ckcplm.html#contents - 47. http://www.columbia.edu/kermit/ckermit.html - 48. http://www.columbia.edu/kermit/index.html - 49. http://www.columbia.edu/kermit/ckcplm.html#contents - 50. http://www.columbia.edu/kermit/ckermit.html - 51. http://www.columbia.edu/kermit/index.html - 52. ftp://kermit.columbia.edu/kermit/c-kermit/ckclib.h - 53. ftp://kermit.columbia.edu/kermit/c-kermit/ckclib.c - 54. http://www.columbia.edu/kermit/ckcplm.html#x3.1 + 46. ftp://kermit.columbia.edu/kermit/c-kermit/ckcpro.w + 47. http://www.columbia.edu/kermit/ckcplm.html#contents + 48. http://www.columbia.edu/kermit/ckermit.html + 49. http://www.columbia.edu/kermit/index.html + 50. http://www.columbia.edu/kermit/ckcplm.html#x3.2 + 51. http://www.columbia.edu/kermit/ckcplm.html#contents + 52. http://www.columbia.edu/kermit/ckermit.html + 53. http://www.columbia.edu/kermit/index.html + 54. http://www.columbia.edu/kermit/ckcplm.html#x4.A 55. http://www.columbia.edu/kermit/ckcplm.html#contents 56. http://www.columbia.edu/kermit/ckermit.html 57. http://www.columbia.edu/kermit/index.html - 58. ftp://kermit.columbia.edu/kermit/c-kermit/ckcsym.h - 59. ftp://kermit.columbia.edu/kermit/c-kermit/ckcasc.h - 60. ftp://kermit.columbia.edu/kermit/c-kermit/ckcsig.h - 61. ftp://kermit.columbia.edu/kermit/c-kermit/ckcdeb.h - 62. ftp://kermit.columbia.edu/kermit/c-kermit/ckcker.h - 63. ftp://kermit.columbia.edu/kermit/c-kermit/ckcxla.h - 64. ftp://kermit.columbia.edu/kermit/c-kermit/ckcmai.c - 65. ftp://kermit.columbia.edu/kermit/c-kermit/ckcpro.w - 66. ftp://kermit.columbia.edu/kermit/c-kermit/ckcfns.c - 67. ftp://kermit.columbia.edu/kermit/c-kermit/ckcfn2.c - 68. ftp://kermit.columbia.edu/kermit/c-kermit/ckcfn3.c - 69. http://www.columbia.edu/kermit/ckcplm.html#x4.B - 70. http://www.columbia.edu/kermit/ckcplm.html#x4.E - 71. http://www.columbia.edu/kermit/ckcplm.html#x4.D - 72. http://www.columbia.edu/kermit/ckcplm.html#contents - 73. http://www.columbia.edu/kermit/ckermit.html - 74. http://www.columbia.edu/kermit/index.html - 75. http://www.columbia.edu/kermit/ckcplm.html#x4.B - 76. ftp://kermit.columbia.edu/kermit/c-kermit/ckuxla.c - 77. ftp://kermit.columbia.edu/kermit/c-kermit/ckuxla.h - 78. ftp://kermit.columbia.edu/kermit/c-kermit/ckcxla.h - 79. ftp://kermit.columbia.edu/kermit/c-kermit/ckuxla.h - 80. ftp://kermit.columbia.edu/kermit/c-kermit/ckmxla.h - 81. ftp://kermit.columbia.edu/kermit/c-kermit/ck?xla - 82. ftp://kermit.columbia.edu/kermit/c-kermit/ckcuni.h - 83. ftp://kermit.columbia.edu/kermit/c-kermit/ckcuni.c + 58. http://www.columbia.edu/kermit/ckcplm.html#contents + 59. http://www.columbia.edu/kermit/ckermit.html + 60. http://www.columbia.edu/kermit/index.html + 61. http://www.columbia.edu/kermit/ckcplm.html#contents + 62. http://www.columbia.edu/kermit/ckermit.html + 63. http://www.columbia.edu/kermit/index.html + 64. ftp://kermit.columbia.edu/kermit/c-kermit/ckclib.h + 65. ftp://kermit.columbia.edu/kermit/c-kermit/ckclib.c + 66. http://www.columbia.edu/kermit/ckcplm.html#x3.1 + 67. http://www.columbia.edu/kermit/ckcplm.html#contents + 68. http://www.columbia.edu/kermit/ckermit.html + 69. http://www.columbia.edu/kermit/index.html + 70. ftp://kermit.columbia.edu/kermit/c-kermit/ckcsym.h + 71. ftp://kermit.columbia.edu/kermit/c-kermit/ckcasc.h + 72. ftp://kermit.columbia.edu/kermit/c-kermit/ckcsig.h + 73. ftp://kermit.columbia.edu/kermit/c-kermit/ckcdeb.h + 74. ftp://kermit.columbia.edu/kermit/c-kermit/ckcker.h + 75. ftp://kermit.columbia.edu/kermit/c-kermit/ckcxla.h + 76. ftp://kermit.columbia.edu/kermit/c-kermit/ckcmai.c + 77. ftp://kermit.columbia.edu/kermit/c-kermit/ckcpro.w + 78. ftp://kermit.columbia.edu/kermit/c-kermit/ckcfns.c + 79. ftp://kermit.columbia.edu/kermit/c-kermit/ckcfn2.c + 80. ftp://kermit.columbia.edu/kermit/c-kermit/ckcfn3.c + 81. http://www.columbia.edu/kermit/ckcplm.html#x4.B + 82. http://www.columbia.edu/kermit/ckcplm.html#x4.E + 83. http://www.columbia.edu/kermit/ckcplm.html#x4.D 84. http://www.columbia.edu/kermit/ckcplm.html#contents 85. http://www.columbia.edu/kermit/ckermit.html 86. http://www.columbia.edu/kermit/index.html 87. http://www.columbia.edu/kermit/ckcplm.html#x4.B - 88. ftp://kermit.columbia.edu/kermit/c-kermit/ckucmd.h - 89. ftp://kermit.columbia.edu/kermit/c-kermit/ckucmd.c - 90. http://www.columbia.edu/kermit/ckcplm.html#x4.E - 91. ftp://kermit.columbia.edu/kermit/c-kermit/ckuusr.h - 92. ftp://kermit.columbia.edu/kermit/c-kermit/ckuusr.c - 93. ftp://kermit.columbia.edu/kermit/c-kermit/ckuus2.c - 94. ftp://kermit.columbia.edu/kermit/c-kermit/ckuus3.c - 95. ftp://kermit.columbia.edu/kermit/c-kermit/ckuus4.c - 96. ftp://kermit.columbia.edu/kermit/c-kermit/ckuusy.c - 97. ftp://kermit.columbia.edu/kermit/c-kermit/ckuusx.c - 98. ftp://kermit.columbia.edu/kermit/c-kermit/ckuver.h - 99. ftp://kermit.columbia.edu/kermit/c-kermit/ckuscr.c - 100. ftp://kermit.columbia.edu/kermit/c-kermit/ckudia.c - 101. ftp://kermit.columbia.edu/kermit/c-kermit/ckucon.c - 102. ftp://kermit.columbia.edu/kermit/c-kermit/ckucns.c - 103. http://www.columbia.edu/kermit/ckcplm.html#x4.E - 104. ftp://kermit.columbia.edu/kermit/c-kermit/ckcmai.c - 105. http://www.columbia.edu/kermit/ckcplm.html#contents - 106. http://www.columbia.edu/kermit/ckermit.html - 107. http://www.columbia.edu/kermit/index.html - 108. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c - 109. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c - 110. ftp://kermit.columbia.edu/kermit/c-kermit/ckusig.c - 111. ftp://kermit.columbia.edu/kermit/c-kermit/ckvfio.c - 112. ftp://kermit.columbia.edu/kermit/c-kermit/ckusig.c - 113. ftp://kermit.columbia.edu/kermit/c-kermit/ckcmai.c - 114. http://www.columbia.edu/kermit/ckcplm.html#contents - 115. http://www.columbia.edu/kermit/ckermit.html - 116. http://www.columbia.edu/kermit/index.html - 117. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c - 118. ftp://kermit.columbia.edu/kermit/c-kermit/ckvtio.c - 119. http://www.columbia.edu/kermit/ckcplm.html#x2 - 120. http://www.columbia.edu/kermit/ckcplm.html#xa1 - 121. http://www.columbia.edu/kermit/ckuins.html - 122. ftp://kermit.columbia.edu/kermit/c-kermit/ckcnet.h - 123. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c - 124. http://www.columbia.edu/kermit/ckcplm.html#contents - 125. http://www.columbia.edu/kermit/ckermit.html - 126. http://www.columbia.edu/kermit/index.html - 127. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c - 128. ftp://kermit.columbia.edu/kermit/c-kermit/ckcnet.h - 129. ftp://kermit.columbia.edu/kermit/c-kermit/ckcnet.c - 130. ftp://kermit.columbia.edu/kermit/c-kermit/cklnet.c - 131. http://www.columbia.edu/kermit/ckcplm.html#contents - 132. http://www.columbia.edu/kermit/ckermit.html - 133. http://www.columbia.edu/kermit/index.html - 134. ftp://kermit.columbia.edu/kermit/c-kermit/ckctel.h - 135. ftp://kermit.columbia.edu/kermit/c-kermit/ckctel.c + 88. ftp://kermit.columbia.edu/kermit/c-kermit/ckuxla.c + 89. ftp://kermit.columbia.edu/kermit/c-kermit/ckuxla.h + 90. ftp://kermit.columbia.edu/kermit/c-kermit/ckcxla.h + 91. ftp://kermit.columbia.edu/kermit/c-kermit/ckuxla.h + 92. ftp://kermit.columbia.edu/kermit/c-kermit/ckmxla.h + 93. ftp://kermit.columbia.edu/kermit/c-kermit/ck?xla + 94. ftp://kermit.columbia.edu/kermit/c-kermit/ckcuni.h + 95. ftp://kermit.columbia.edu/kermit/c-kermit/ckcuni.c + 96. http://www.columbia.edu/kermit/ckcplm.html#contents + 97. http://www.columbia.edu/kermit/ckermit.html + 98. http://www.columbia.edu/kermit/index.html + 99. http://www.columbia.edu/kermit/ckcplm.html#x4.B + 100. ftp://kermit.columbia.edu/kermit/c-kermit/ckucmd.h + 101. ftp://kermit.columbia.edu/kermit/c-kermit/ckucmd.c + 102. http://www.columbia.edu/kermit/ckcplm.html#x4.E + 103. ftp://kermit.columbia.edu/kermit/c-kermit/ckuusr.h + 104. ftp://kermit.columbia.edu/kermit/c-kermit/ckuusr.c + 105. ftp://kermit.columbia.edu/kermit/c-kermit/ckuus2.c + 106. ftp://kermit.columbia.edu/kermit/c-kermit/ckuus3.c + 107. ftp://kermit.columbia.edu/kermit/c-kermit/ckuus4.c + 108. ftp://kermit.columbia.edu/kermit/c-kermit/ckuusy.c + 109. ftp://kermit.columbia.edu/kermit/c-kermit/ckuusx.c + 110. ftp://kermit.columbia.edu/kermit/c-kermit/ckuver.h + 111. ftp://kermit.columbia.edu/kermit/c-kermit/ckuscr.c + 112. ftp://kermit.columbia.edu/kermit/c-kermit/ckudia.c + 113. ftp://kermit.columbia.edu/kermit/c-kermit/ckucon.c + 114. ftp://kermit.columbia.edu/kermit/c-kermit/ckucns.c + 115. http://www.columbia.edu/kermit/ckcplm.html#x4.E + 116. ftp://kermit.columbia.edu/kermit/c-kermit/ckcmai.c + 117. http://www.columbia.edu/kermit/ckcplm.html#contents + 118. http://www.columbia.edu/kermit/ckermit.html + 119. http://www.columbia.edu/kermit/index.html + 120. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c + 121. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c + 122. ftp://kermit.columbia.edu/kermit/c-kermit/ckusig.c + 123. ftp://kermit.columbia.edu/kermit/c-kermit/ckvfio.c + 124. ftp://kermit.columbia.edu/kermit/c-kermit/ckusig.c + 125. ftp://kermit.columbia.edu/kermit/c-kermit/ckcmai.c + 126. http://www.columbia.edu/kermit/ckcplm.html#contents + 127. http://www.columbia.edu/kermit/ckermit.html + 128. http://www.columbia.edu/kermit/index.html + 129. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c + 130. ftp://kermit.columbia.edu/kermit/c-kermit/ckvtio.c + 131. http://www.columbia.edu/kermit/ckcplm.html#x2 + 132. http://www.columbia.edu/kermit/ckcplm.html#xa1 + 133. http://www.columbia.edu/kermit/ckuins.html + 134. ftp://kermit.columbia.edu/kermit/c-kermit/ckcnet.h + 135. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c 136. http://www.columbia.edu/kermit/ckcplm.html#contents 137. http://www.columbia.edu/kermit/ckermit.html 138. http://www.columbia.edu/kermit/index.html - 139. http://www.columbia.edu/kermit/ckcplm.html#contents - 140. http://www.columbia.edu/kermit/ckermit.html - 141. http://www.columbia.edu/kermit/index.html - 142. ftp://kermit.columbia.edu/kermit/c-kermit/ckuusx.c + 139. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c + 140. ftp://kermit.columbia.edu/kermit/c-kermit/ckcnet.h + 141. ftp://kermit.columbia.edu/kermit/c-kermit/ckcnet.c + 142. ftp://kermit.columbia.edu/kermit/c-kermit/cklnet.c 143. http://www.columbia.edu/kermit/ckcplm.html#contents 144. http://www.columbia.edu/kermit/ckermit.html 145. http://www.columbia.edu/kermit/index.html - 146. http://www.columbia.edu/kermit/ckcplm.html#contents - 147. http://www.columbia.edu/kermit/ckermit.html - 148. http://www.columbia.edu/kermit/index.html - 149. http://www.columbia.edu/kermit/ckcplm.html#top - 150. http://www.columbia.edu/kermit/ckcplm.html#contents - 151. http://www.columbia.edu/kermit/ckermit.html - 152. http://www.columbia.edu/kermit/index.html - 153. http://www.columbia.edu/kermit/index.html - 154. mailto:kermit@columbia.edu + 146. ftp://kermit.columbia.edu/kermit/c-kermit/ckctel.h + 147. ftp://kermit.columbia.edu/kermit/c-kermit/ckctel.c + 148. ftp://kermit.columbia.edu/kermit/c-kermit/ckcftp.c + 149. http://www.columbia.edu/kermit/ckcplm.html#contents + 150. http://www.columbia.edu/kermit/ckermit.html + 151. http://www.columbia.edu/kermit/index.html + 152. http://www.columbia.edu/kermit/ckcplm.html#contents + 153. http://www.columbia.edu/kermit/ckermit.html + 154. http://www.columbia.edu/kermit/index.html + 155. ftp://kermit.columbia.edu/kermit/c-kermit/ckuusx.c + 156. http://www.columbia.edu/kermit/ckcplm.html#contents + 157. http://www.columbia.edu/kermit/ckermit.html + 158. http://www.columbia.edu/kermit/index.html + 159. http://www.columbia.edu/kermit/ckermit90.html#LooseEnd + 160. ftp://kermit.columbia.edu/kermit/f/ckupty.h + 161. ftp://kermit.columbia.edu/kermit/f/ckupty.c + 162. http://www.columbia.edu/kermit/security.html + 163. http://www.columbia.edu/kermit/ckcplm.html#contents + 164. http://www.columbia.edu/kermit/ckermit.html + 165. http://www.columbia.edu/kermit/index.html + 166. http://www.columbia.edu/kermit/ckcplm.html#top + 167. http://www.columbia.edu/kermit/ckcplm.html#contents + 168. http://www.columbia.edu/kermit/ckermit.html + 169. http://www.columbia.edu/kermit/index.html + 170. http://www.columbia.edu/kermit/index.html + 171. mailto:kermit@columbia.edu