|
|
1.1 ! root 1: C-Kermit Version 4C(057): ! 2: Status, Bugs, and Problems ! 3: As of: 2 Aug 85 ! 4: ! 5: Note: Version numbering system changed from decimal notation (like 4.2) ! 6: to number-letter notation (like 4C) to avoid confusion with Berkeley Unix ! 7: version numbers. ! 8: ! 9: See ckuker.upd for list of bugs already fixed. ! 10: ! 11: -- SUPPORT FOR DIFFERENT SYSTEMS: -- ! 12: ! 13: 4.2BSD: "make bsd" works. Should work on VAX, SUN, Pyramid, & others. ! 14: ! 15: 4.1BSD: "make bsd" should work for this too (did not in C-Kermit v4.2). ! 16: ! 17: 4.3BSD: unknown, but "make bsd" should(!) work. ! 18: ! 19: 2.9BSD: Support in but untested: "make bsd29". Should be the same for 2.8. ! 20: ! 21: Version 7: works ok on the systems tested so far using "make v7", but some ! 22: fiddling with the make file is necessary for proc table definitions; see ! 23: the makefile and also ckuv7.hlp for details. ! 24: ! 25: PC/IX: should work ok with "make pcix". ! 26: ! 27: ATT 3Bx systems: should work ok with "make att3bx". ! 28: ! 29: Most other System V or System III based systems can build a working Kermit with ! 30: "make sys3" ! 31: ! 32: PDP-11's running a System III or V based Unix and which have no I & D space ! 33: should use "make sys3nid". ! 34: ! 35: DEC Pro-350 or -380 with Pro/Venix V2 (not V1) -- uses the regular "make sys3" ! 36: or "make sys3nid", but the file ckcfio.c might have to be edited first to ! 37: reduce the value of MAXWLD and/or SSPACE. See below under HINTS for details. ! 38: ! 39: For other Unix systems, see the makefile. ! 40: ! 41: VAX/VMS: support added by Stew Rubenstein at Harvard and Martin Minow at DEC. ! 42: Has to be built with CKV*.COM, needs development to handle all the VMS/RMS ! 43: features and to improve performance. Has its own build procedure. See ! 44: CKV*.*. VMS-specific bugs in CKVKER.BWR. ! 45: ! 46: Macintosh: Support added at Columbia, has own makefile, etc. See CKM*.*. ! 47: ! 48: ! 49: -- HINTS -- ! 50: ! 51: - If the program dies with a message like "malloc fails in splitpath()" ! 52: whenever it tries to parse a filename (as in the "send" command), then ! 53: the amount of space allocated for filename expansion in the module ! 54: ckufio.c must be reduced. This can be done by changing the #defines ! 55: for MAXWLD (the maximum number of filenames) and SSPACE (the size of ! 56: static string space) to make the numbers smaller. ! 57: ! 58: - When modifying or writing KERMIT code, do NOT pass to a function ! 59: (e.g., "signal") the address of a static function. Doing so may ! 60: break VENIX code mapping. If you must pass the address of the ! 61: function, make it global and pick a "non-generic" name for it that ! 62: will hopefully be unique and yet informative. ! 63: ! 64: ! 65: -- BUG LIST -- ! 66: ! 67: First, a disclaimer must be made. C-Kermit attempts to support all post-V6 ! 68: Unix variations on all machines. This is a tall order, and requires careful ! 69: attention to certain details. As changes are made (and C-Kermit is still in ! 70: stage of fairly rapid development), there is always the chance that a change ! 71: -- made to introduce a new feature or fix a bug -- will not work as intended ! 72: on some systems, even though it was tested successfully on others. The main ! 73: area to watch out for is not system differences (which are handled fairly well ! 74: in the system-dependent ck?[ft]io modules), but in compiler differences, ! 75: especially int/char confusion. Characters should be stored in variables of ! 76: type char, not int, and char/int conversion should be avoided because of ! 77: problems introduced by sign extension. And i/o should not be used to read ! 78: characters into int variables, because the way in which the system stores the ! 79: character in an int varies from system to system (e.g. 68000s put them on the ! 80: left, the VAX on the right). ! 81: ! 82: If you have received a C-Kermit release that does not work correctly (except ! 83: for the bugs & restrictions noted below), it is not because the release was ! 84: not thoroughly test -- it was -- but because it was not tested on your system ! 85: since the last time changes were made, because of a lack of such a system to ! 86: test it on. If this happens to you, please try to track down the problem and ! 87: report as specifically as possible back to us. ! 88: ! 89: ! 90: General problems: ! 91: ! 92: - The program is too big, with too many features; source is too large to fit on ! 93: some disks. Needs to be reorganized so that a minimal Kermit can be built ! 94: for any system, and then frills can be added on if desired -- interactive ! 95: command parser, help strings, dial command, script command, etc. ! 96: ! 97: - There's not a full enough set of features available from command line ! 98: invocation. Commands like "bye" are missing. This is mainly to keep the ! 99: "kermit -h" help message small enough to fit on one screen. ! 100: ! 101: - Conditionalizations are not done clearly. In some cases it might be ! 102: better to have compile-time flags for features, rather than systems, or ! 103: generic system names, rather than specific vendor/machine names, to ! 104: avoid excessive nesting or repitition of compile-time variables. ! 105: Constructions like "#ifdef FOO | BAR" are avoided because many compilers ! 106: don't understand them; the alternative is to repeat code under different ! 107: conditionals (to accomplish an OR) or to include it within nested ! 108: conditionals (AND), sometimes applying De Morgan's law to achieve the ! 109: desired result... ! 110: ! 111: - Program's return code might be wrong in some cases (in 4.0, it was always ! 112: zero; in 4C some attempt is made to return correct codes for failure and ! 113: success). ! 114: ! 115: - On some systems (e.g. TRS-80 Model 16 with Xenix V7, or HP-9000 HP-UX) ! 116: C-Kermit reportedly runs VERY SLOWLY. The program could certainly do with ! 117: some tuning -- but not at the expense of modularity and transportability! -- ! 118: but in the meantime, it can probably be sped up a lot by removing the ! 119: -DDEBUG from the makefile, eliminating hundreds of function calls, many of ! 120: them in critical code. Another speedup could come from allowing more ! 121: systems to take advantage of "myread()" -- the nonblocking version of ! 122: read(); see below. ! 123: ! 124: - Micros like the DEC Pro-350, when in "IBM mode" (set flow none, set ! 125: handshake xon), might not be able to keep up with incoming packets, even ! 126: at relatively low baud rates. The Pro-350 OS relies heavily on ! 127: XON/XOFF to avoid losing characters at the port, but XON/XOFF must be ! 128: disabled for communicating with IBM mainframes. The only solution is ! 129: to lower the packet size to 20 or 30 to reduce the probability that ! 130: data is lost in any particular packet, and maybe also reduce the baud rate. ! 131: ! 132: - Need 'set' command for retry-threshhold. ! 133: ! 134: - The program could be a little bit less cavalier in its treatment of files. ! 135: For instance, when receiving a file (with "warning" turned off) it will ! 136: overwrite any existing file of the same name. That's ok, but what if the ! 137: user types ^F or ^B to interrupt the transfer? This does not save the ! 138: existing file -- it's already been destroyed by the open() of the new copy, ! 139: which in turn is discarded as a result of the interruption. Maybe Kermit ! 140: should always make a temporary, unique name for incoming files, and then ! 141: rename them to their real names only after the transfer is complete. But ! 142: that's no good on systems (like the Macintosh) that don't have disk space ! 143: to burn. ! 144: ! 145: - Local versus remote mode is not, and probably can not, be determined ! 146: automatically upon startup. For instance, if you build Kermit with ! 147: "make sys3" on a 3B20 and a 3B2, the program has no way of knowing whether ! 148: it's running on a timesharing system (the 3B20, where it should be remote ! 149: by default) or a workstation (the 3B2, where it should be local by default). ! 150: If you find that Kermit comes up on your system in the wrong mode, you can ! 151: put the appropriate "set line" command in your .kermrc file -- "set line ! 152: /dev/tty" will always put you in remote mode. ! 153: ! 154: - Local mode file transfer display could be improved. On tty-style displays, ! 155: the "percent done" could be shown by doing something like ! 156: "0...1...2...3...4...5...6...7...8...9...". ! 157: ! 158: - If the program crashes or is halted (killed) from outside while it has the ! 159: terminal in a not-normal mode during command parsing or file transfer, the ! 160: terminal mode is not restored, and lock files are not cleaned up. There can ! 161: be no fix for this within C-Kermit itself. ! 162: ! 163: - The shell's interrupt, delete, and kill characters may interfere or ! 164: conflict with those used by the Kermit command parser. In any case, there ! 165: is no way to change Kermit's editing characters to conform to user's taste. ! 166: ! 167: - Status info should be updated only for real file transfers, not transactions ! 168: like "finish". ! 169: ! 170: - "!" command requires a space after, contrary to the Unix user's normal ! 171: expectation. ! 172: ! 173: - Many people have asked for a system-wide startup file similar to ! 174: the user's .kermrc file, perhaps with a conditional way to escape from ! 175: it if the user has her own .kermrc file. This notion might be extended ! 176: to include the entire hierarchy system -- home -- current directory. ! 177: ! 178: - A deeper problem with the initialization files is that the file is only ! 179: taken when the program enters interactive command dialog. To be consistent, ! 180: it should also be taken when the program is run via command line arguments. ! 181: ! 182: - Some users report that it would be more desirable to have an error during ! 183: execution of a take file return directly to command level, rather than ! 184: pop to the invoking take file (why?). ! 185: ! 186: - Some users report that the program should make no internal distinction ! 187: between running in foreground or background (why?). ! 188: ! 189: - Since kermit opens and closes the communication line with each command line ! 190: invocation, it is not convenient to use it in scripts in which it is ! 191: repeatedly invoked (e.g. a print spooler). ! 192: ! 193: - Variable names are sometimes confusing, especially the send/receive parameter ! 194: pairs (spsiz/rpsize, mystch/stchr, npad/mypadn, rtimo/timint, etc). This ! 195: is mostly history... they tend to agree with the names used in other Kermit ! 196: programs. Still, they should probably be changed. Ditto for some of the ! 197: procedure names. ! 198: ! 199: - Some C compilers do not support variable names longer than 6, nor function ! 200: names longer than 5, and some are not case sensitive (the DEC-20 C compiler ! 201: has all these restrictions, and the V6 Unix C compiler has some of them). ! 202: To ensure the widest possible portability, all identifiers should comply ! 203: with these restrictions -- currently many do not. ! 204: ! 205: - When the C-Kermit server is given a host command (or even some generic ! 206: commands like 'space'), it might have to think for a long time before ! 207: returning output. In this case, it should set a timer while waiting for ! 208: input from the fork and whenever the timer goes off, it should send a null ! 209: data packet to prevent the other Kermit from timing out. ! 210: ! 211: - When connecting back to C-Kermit after a transaction, or after finishing ! 212: the server, it may be necessary to type a ^Q to clear up an XOFF deadlock. ! 213: There's not much the Kermit program can do about this... ! 214: ! 215: - When interrupting a send with ^F or ^B, an appropriate message does not ! 216: seem to make it into the transaction log. ! 217: ! 218: ckufio.c: ! 219: ! 220: - ckufio currently goes to a lot of trouble to traverse the directory in ! 221: order to expand "*" and "?" in wildcards. Maybe it should just fork the ! 222: user's customary shell and have it do the expansion. This would allow ! 223: fancier filespecs to be given, like "~/ck*.[cwh]". But it would slow down ! 224: features like filename completion and menus in the interactive command ! 225: parser. (Find out how Unix FTP does it...) ! 226: ! 227: ckutio.c: ! 228: ! 229: - Myread() should be expanded to include systems that can't do nonblocking ! 230: reads, but can find out how many characters are in the input buffer -- this ! 231: would eliminate calling read() in a loop for each character during packet ! 232: transmission (e.g. Pro/Venix V1 could use "ioctl(x,TIOCQCNT,&y)", V7 could ! 233: use its buffer-queue-peeking trick, etc). ! 234: ! 235: - There should be a timed option for ttoc() for use during connect so you ! 236: can escape from XOFF'd or other stuck conditions. ! 237: ! 238: - There's no good way to select baud rates higher than 9600. Most Unix systems ! 239: don't supply symbols for them (unless you use EXTA, EXTB), and even when they ! 240: do, the program has no way of knowing whether a specific port serial ! 241: controller supports those rates. ! 242: ! 243: - Use of RAW|TANDEM in 4.1 BSD gives only unidirectional, not bidirectional, ! 244: flow control -- xoff's from the terminal are treated as data rather than ! 245: control signals. Symptom: possible loss of characters during CONNECT. ! 246: ! 247: - On some systems, there is an undesired interaction between the various ! 248: open() modes, fnctl(), and ioctl() invocations when modem-control lines ! 249: are involved. Some of this due to bugs in some Unix implementations or to ! 250: inconsistencies between them (e.g. as to the behavior of TIOCEXCL, etc). ! 251: ! 252: ckudia.c: ! 253: ! 254: - Some systems do not allow users to manipulate dialers directly. ! 255: - Should support a "phone book" (this would actually go in ckuus*.c). ! 256: - Pro/Venix V2 (and some other Sys V-based systems) are having DTR-dropping ! 257: problems when dialing. With Pro/Venix V2, a workaround is to get the system ! 258: to ignore the modem control signals and treat the line as a direct line by ! 259: issuing a "setline -d xxx" command, where "xxx" is the device node (e.g. ! 260: com1), rather than "setline -m xxx". ! 261: - Hayes modem dial string should be ATD, not ATDT, so that dialing will occur ! 262: in the mode that the modem is set up for (does everyone agree?). ! 263: ! 264: ckuus*.c: ! 265: ! 266: - The send command should have the same syntax as the get command to allow ! 267: multiple filenames to be given on a single line: ! 268: ! 269: send foo bar baz <-- send all these files ! 270: or: ! 271: send ! 272: Local file(s) to send: foo bar baz ! 273: Name(s) to send it/them under: x y z ! 274: ! 275: The latter form could be risky, of course, when mixed with wildcards, ! 276: and in any case would require major rewriting of many parts of the program ! 277: (which probably will never be done). ! 278: ! 279: - Baud rate selection currently requires user to type a number, which is ! 280: then verified against a system-dependent table. Better to have a baud rate ! 281: keyword (cmkey) table defined in the system-dependent module, so user ! 282: can abbreviate (e.g. '9' for '9600'). ! 283: ! 284: - No way to put trailing comments on commands. ! 285: ! 286: - ckuus2.c makes the C optimizer run out of space under PC/IX and some other ! 287: systems. ! 288: ! 289: Protocol (ckcpro.w, ckcfn*.c): ! 290: ! 291: - No way to interrupt a protocol transaction until after it starts ! 292: successfully. For instance, no way to interrupt the timeouts and ! 293: retransmissions of the initial packet when the other side is not ! 294: responding, except for killing the whole program. Cure: check for ! 295: keyboard "interrupts" during the send-init process, set c[xz]seen. ! 296: But doing this will make the state table a lot more complicated... ! 297: Maybe change ^C trap to get back to command mode rather than exit ! 298: the program. ! 299: ! 300: - When parity is in use and the other Kermit cannot do 8th bit prefixing, ! 301: the user is not warned that binary files will not be transferred correctly. ! 302: This can be easily remedied by calling screen(SCR_WM,...) after the ! 303: send-init exchange has occurred, but this would make a dialog box pop ! 304: up during protocol on the Macintosh... ! 305: ! 306: ckucon.c: ! 307: ! 308: - Doesn't do any particular kind of terminal emulation. It wasn't meant to. ! 309: Filters can be used for this. Or a replacement module can be written ! 310: (as has been done for the Macintosh). ! 311: ! 312: - When sending BREAK, should clear output buffer first (this is done in BSD, ! 313: should be added for other systems to ttsndb() in ckutio.c). ! 314: ! 315: - Performance is poor on systems that can't check the input buffer or ! 316: do nonblocking read() calls. See the horrendous code that was added for V7 ! 317: to get around this (peeking into tty buffers in kernel memory). ! 318: ! 319: - As structured, connect mode can't include commands to toggle logging on ! 320: and off or to change settings, because the fork that reads keyboard input ! 321: doesn't share variables with the fork that does port i/o. ! 322: ! 323: - The program may become stuck if the two sides get into an XOFF deadlock. ! 324: There should probably be a timer around (or in) the ttoc() call. ! 325: ! 326: - Reportedly, a control-S typed at the keyboard doesn't always seem to "take" ! 327: when doing terminal emulation under Pro/Venix V2 (DEC micros, terminals, ! 328: devices, systems are notorious for their insistence on doing XON/XOFF and ! 329: attendant problems. Remember the VT180?)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.