Annotation of 43BSDTahoe/new/kermit/ckuker.bwr, revision 1.1.1.1

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?)

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.