4.3BSD/usr/contrib/kermit/ckuker.upd

C-KERMIT FOR UNIX, CHANGES FROM 4C(056) TO 4C(057), 31 JUL 85:

general (many modules affected):
. Change "set send packet-length" to override Send-Init value.
. Change still more global character variables from int or char to CHAR.
. Fix 4.1BSD and C/70 support (Charles Brooks), 2.9 support (Herm Fischer).

ckcfns.c:
. Server always executes generic (but not host) commands in text mode.
. Change calling convention for getchx() to allow better reporting of eof.
  Some earlier changes had apparently broken PDP-11 support for binary
  files because of sign extension...
. Again, several hours after initial announcement of 4C(057) found that above
  change had busted things for 68000s (again) because of still more int/char
  conversion problems.  Changed 'next' from int to char and moved its file
  begin/end function to a new flag variable, 'first'.  Hopefully, not too many
  copies got out; those that did are dated 29 July; the version with this fix
  is dated 31 July.  Sigh...

ckuusr.c:
. Fix timing statistics to work for 16-bit machines too (Dan).
. Change calls to execl() to terminate with "(char *)0", not "0".

ckufio.c:
. Fix bug that sometimes prevented sending files with 14-char long names.

ckutio.c:
. Herm fixed it up so all the changes in previous edits that broke his
  modem control code are now more compatible with it.  Also, myread() -- the
  nonblocking equivalent of read() -- was fixed to report errors better.

ckudia.c:
. Many changes from Herm & Dan, mostly relating to modem control and resetting
  alarms to get the dialing-with-no-carrier-to-connected-with-carrier
  transition working again.


C-KERMIT FOR UNIX, CHANGES FROM 4C(055) TO 4C(056), 11 JUL 85:

ckcpro.w:
. Make new ssfile state, to allow for display of data in ack to file header.
. If data comes in ack to file header, log to transaction file.
. Put local filename in data field of ack to F packet.
. Add calls to new rtimer(), gtimer() to allow transactions to be timed.
. When sending, include D in EOF packet in all cases when interrupted.
  Previously, only "czseen" would do it, but not cxseen.
. Upon receipt of Z packet, send Ack AFTER closing file rather than before.
  If file can't be closed, send Error packet instead of Ack.
. Upon receipt of error packet while receiving file, discard file.
. Upon receipt of unexpected packet type, send Error, not Nak.

ckcfns.c:
. Change clsof() to accept an argument specifying whether to discard.
. Change clsof() to keep incomplete file regardless of arg if keep != 0.
. Change clsof() to return -1 if output file could not be closed.
. Change name of getch() to getchx() to avoid conflict with libraries.
. Fix Yet Another Problem with 8th-bit Quoting Negotation.  The bug was that
  if other side said 'N' we would treat 'N' as quoting prefix rather than "NO"
  (but only if parity was set to other than none).
. Remove input buffer flush from sfile() (why was it ever there???).
. Change seof() to accept an argument to put in the Z-packet data field.
. Add transaction timing statistics to reof(),reot() for transaction log.
. Combine sfile() and sxpack() into one function.

ckcfn2.c:
. Improve performance of rpack by reducing scan for soh to number of chars
  read rather than whole buffer (required changing inlin()'s return code).
. Allow rpack to skip over "blank lines" without failing; this was preventing
  file transfer with some systems that always sent CRLF before transmitting
  anything (e.g. UCLA's MVS/TSO VTAM).
. Don't flush input buffer at end of rpack(), because if the packet that we
  just read is a repeat or an echo, the one we want might be queued up after
  it.  Instead, flush in input() only after the desired packet arrives.
. Allow user to type ^A^C^C to interrupt rpack and exit cleanly from program.

ckuusr.c:
. Add "incomplete" to "set" parse table and display incomplete in "show".
. Add "%" command for comment lines.
. Add elapsed time and effective baud rate display to "statistics" command.
. Fix "show parameters", had send/receive end-of-packet reversed.
. Make modem-type lookup in "show" a little cleaner.
. Fix "echo" to interpret \ooo escapes in its argument.

ckuus2.c:
. Add "help set incomplete".
. Fix help message for "set line".

ckuus3.c:
. Add "set incomplete" support.
. Allow "set prompt" argument in doublequotes and strip quotes if used, to
  allow specification of prompt with leading &/or trailing blanks.
. Fix "set send/receive padding/pad-character" -- they had variables reversed.

ckufio.c:
. For Pro/Venix V1, make MAXWILD and SSPACE even smaller, so malloc() still
  has some space left to allocate...
. Change zclose() to return -1 if file could not be closed.

ckutio.c:
. Use Sys III/V nonblocking read() technique also for 4.xBSD -- improves
  performance noticably!
. Add rtimer() and gtimer() functions for resetting/getting elapsed time.
. Don't return failure from tthang() if line wasn't open.
. Print warning message if tthang() or ttunlk() fail.
. In ttclos(), relinquish exclusive access.
. Change some #ifdefs so they depend on features, like FIONREAD, rather than
  system, like BSD4.  This allows collapsing a lot of redundant code.

ckucon.c:
. Add hangup (h) option to escape character arguments.

ckuscr.c:
. Change static timeInt() to global scrtime() to avoid problems on code
  mapped systems.


C-KERMIT FOR UNIX, CHANGES FROM 4C(054) TO 4C(055), 28 JUNE 85:

ckudia.c (all changes by Dan Schullman, DEC):
. Add support for US Robotics modem (untested) from Joe Orost at Berkeley.
. Reorganize MDMINF data structure to accommodate US Robotics (some char
   fields had to become strings).
. Allow interrupts (SIGINT, e.g. ^C) to cancel dialing in progress.
. Ring bell when connection made successfully.
. Close line on failures.
. Allow stored numbers with DF100 and 200 modems.

ckudia.c now supports the following modems:
. Cermetek Info-Mate 212 A
. DEC DF03-AC
. DEC DF100 Series
. DEC DF200 Series
. General Data Comm 212A/ED
. Hayes Smartmodem 1200 & compatibles
. Penril
. Racal Vadic
. US Robotics 212A
. Ventel
Plus "unknown" modems and direct (modemless) connections.


C-KERMIT FOR UNIX, CHANGES FROM 4C(053) TO 4C(054), 25 JUNE 85:

ckuker.mak (makefile):
. Add "make ft17" for Fortune 16:32 For:Pro 1.7.
. Add "make uts24" for Amdahl UTS 2.4
. Add "make valid" for Valid Scaldstar CAD system
. Add "make c70" for BBN C/70 IOS 2.4

ckcmai.c:
. Add call to sysinit()

ck[uvm]tio.c:
. Add sysinit() function.  For VMS, open console.  For others, null for now.

ckutio.c, ckufio.c:
. Add support for Fortune 16:32, mostly like 4.1bsd.
. Ditto for Amdahl UTS 2.4, mostly like V7.

ckuus2.c:
. Expand a couple tabs in hlp1 (-h help message) so things line up right.


C-KERMIT FOR UNIX, CHANGES FROM 4C(052) TO 4C(053), 21 JUNE 85:

ckcfn2.c:
. Change dopar() to be of type CHAR.
. Fix dopar() to calculate odd parity correctly.

ckucon.c, ckuscr.c:
. Add "extern CHAR dopar();" declarations.


C-KERMIT FOR UNIX, CHANGES FROM 4C(050) TO 4C(052), 18 JUNE 85:

ckcfns.c:
. Repair rpar() and spar() handling of 8th bit prefix negotiation.
. In sinit(), when sending from stdin, allow "-a name" to work.
. In rcvfil(), guard against receiving a null F packet.

ckcmai.c:
. Change hlptxt[] to contain less than 256 characters (for Xenix)

ckcpro.c:
. In proto() call ttopen() with a temp, x, rather than "local", then only
  set local if x was set.

ckucmd.c:
. In cmifi(), make y long rather than int.  This was making some 16-bit
  machines erroneously report that files longer than 32K could not be found.

ckuker.mak (makefile): 
. Change symbol 3BX to ATT3BX (has to start with letter)
. Remove line continuations in the middle of strings
. Add entry for sys3nid (System III/V on PDP-11 with no I&D space)

ckufio.c:
. Add appropriate #ifdef for TOWER1 in zkself()
. Add 2.9bsd identification string

ckutio.c: 
. Move definition of CTTNAM from here to ckcdeb.h, so it can be shared.
. In initrawq() (for V7 only) read the proc table again after fork().
. Change symbol 3BX to ATT3BX.
. Get rid of the (void) casts in strxxx() invocations -- the proliferation
  of conditionals was getting ridiculous, and it was only to please lint.
. In conbin() for Sys III/V, open terminal in 7-bit, parity-enabled mode rather
  than 8-bit, no-parity mode (some sites actually use parity).
. In conint(), trap and ignore QUIT signal, trap SIGHUP and handle like SIGINT.
  This prevents lock files from being left behind after hangup or quit.
. In connoi(), turn off traps for SIGQUIT, SIGHUP.
. In ttopen(), add Sys III/V code using ctermid() to better determine remote/
  local status when stdin redirected.  If not Sys III/V and stdin redirected,
  assume local, rather than remote, so that "set speed" and other local-mode
  only commands will work.
. Add 2.9bsd identification string
. Make new ANYBSD symbol to select 4.1, 4.2, and 2.9.  In some cases, all 3
  work the same, in others, 2.9 and 4.2 are the same, 4.1 special.

ckuus*.c:
. In command line invocation, base local/remote determination on CTTNAM.
. In "set line" only ask ttopen() to set local/remote if not default tty.
. Ignore SIGQUIT and SIGINT signals while inferior shell active in XXSHE:.
  Previously, both Kermit and the inferior shell would catch them.
. In XYLINE: call ttopen() with a temp, x, rather than "local", then only
  set local if x was set.
. Change message "status report..." to "status report:" to avoid dot confusion.


C-KERMIT FOR UNIX, CHANGES FROM VERSION 4.2(030) TO 4C(050), 30 May 85:

All files except ckwart.* have been renamed according to a consistent
convention, see ckaaaa.hlp for an explanation.

Copyright notices added to every module, so we can't be enjoined from
distributing our own program if we give the right to other organizations,
like Berkeley, to distribute it.

ckwart.c

. Move the #define in the txt1 string to not start on a new line.
. Fix the comments printed by wart so they can't be construed as comments
  by the compiler that compiles wart.
. Include formfeed among the skipped-over whitespace characters.
. Add wart version information. 

ckcdeb.h (formerly ckdebu.h):

Forget about typedefing LONG to be unsigned long -- it causes too many
problems for PDP-11 C compilers, etc.  Just let LONG be long.

If symbols DEBUG and TLOG not defined (e.g. in Makefile), then define
null macros to replace calls to the debug() and tlog() functions, to save
space and execution time.  Program is too big for Macintosh with these
functions compiled in.

Establish a symbol NLCHAR.  If this symbol is defined, then text (ascii)
files are stored with a single character (such as lf or cr) terminating
each line, and this character is the value of NLCHAR.  If not defined,
then the system uses CRLF.  When NLCHAR is defined, C-Kermit maps between
that character and CRLF.

ckcfns.c, ckcfn2.c (formerly ckfns.c, ckfns2.c):

. change all calls to screen() to new form.
. fix bug in sfile() that sometimes prevented literal names from working.
. don't translate send-as names in sfile, always use them literally.
. change input() to always resend() after getting a NAK.
. change getpkt to clear leftovers when starting new file (next = -1),
  so that filenames in F pkt wouldn't have garbage after previous file
  was interrupted.
. Change call to zchin() to use new calling convention so bytes with
  hi bit on won't be confused with eof on some systems.
. Reset czseen in seof, not in clsif, so that remote ^X while C-Kermit
  sending will result in correct Z packet with D in data.
. In resend(), don't send any packet if packet buffer is empty.
. Un-hardwire getch() from Unix newline text file convention.
. Fix bug that sometimes resulted in contents of R or X packet
  having first character doubled.
. Fix bug in getpkt that prevented leftovers from being transmitted
  after end of file.
. Have tinit() clear c[xz]seen and filnam to prevent bad things happening
  after interruption or emergency protocol exit.
. Have syscmd() return 0 if called with null string.  This allows single
  process systems like the Macintosh to act as servers, even if they can't do
  commands like remote directory.
. Send out initial nak when doing receive, so that there will be something
  in the packet buffer to resend.
. Check for failure return code from zchout, to catch disk full errors, etc.
. When server getting input from a system function, call zopeni() on new
  ZSYSFN channel, rather than circumventing zopeni() by calling zopen().
. Clean up inlin() a little, use maxt vs MAXTRY consistently. 
. Change rpack,spack,rpar,spar,etc to use the new, separated send/receive
  packet parameters (padding,timeout,eol,soh,etc).

ckcker.h (formerly ckermi.h):

. Removed #include <stdio.h> and <ctype.h> from ckermi.h.  Macintosh does not
  need all that... (thanks, Bill)
. Remove include of ckdebu.h (now ckcdeb.h).
. Add defs for LF and NUL.
. Add def for new ZSYSFN file i/o channel.

ckcpro.w (formerly ckprot.w) Protocol Module:

. Add "a" state to cancel any transaction.
. Remove entries for input='N', since this is now handled by input().
. Fix "a" state to not cause "OK" message when files closed.

ckucmd.c (formerly ckcmd.c) Unix Command Package:

. Set global cmerrp (error prefix) to be same as prompt, but with '>' stripped.
. Allow interactive command continuation using trailing '\'.
. Change "*bp++ == NUL;" in getwd() to simply "bp++;".
. Test for CR as well as NL for line termination (for Apollo Aegis).
. In ckucmd.h, #define getchar specially for VMS and Aegis.
. In cmfld, return(0) from filling out default when ESC typed; this prevents
  "log trans <ESC>transact.log <ESC>transact.log <ESC>transact.log ..."
. In cmtxt, preserve pointers & counts across calls in case of reparse.
. In getwd, return -1, NOT -2, if ^U (line kill) is typed.

ckucon.c (formerly ckconu.c) Connect module:

. When writing to session log, make some minimal attempt to recover
  from disk full or other i/o errors (just turn off logging flag).
. Add baud and parity info to status display.

ckudia.c (formerly ckdial.c) Dial command:

. Support added for Racal-Vadic, Cermetek, Penril, General Datacomm.
. Use msleep() for higher precision timing.

ckufio.c (formerly ckzunx.c, and before that ckzbsd.c):

Started from Charles Brooks's 4.2 ckzunx.c, which is the original C-Kermit
release 4.2 version, to which he added 4.1bsd support.

. Fixed zltor() to only count dots after the last '/'.
. Declared malloc as "char *malloc()".
. Change fprintf(fp[n],s) to fputs(s, fp[n]) in zsout & zsoutl.
. Added zkself() function to log self out, for use by server "bye".
. Changed calling convention for zchin() to allow 68000's etc to return EOF.
. Make zopeno() chown the file to self, in case program set[ug]id'd.
. Changed znewn() to try not to contruct a name that is too long.
. Merge in Gregg Wonderly's v7 support.
. Make various changes to v7 support to fit proc table stuff to other systems.

. (023) Changed zopeni(), when called with new ZSYSFN channel number,
  to invoke zxcmd() to start a fork and get its fd; also changed zclose()
  and chkfn() accordingly.

. (024) In zchki(), allowed 0 as well as S_IFREG as S_IFMT value for ordinary
  file; Sys V stat() can return either of these values for an ordinary file.
  Also, insert missing #else in zkself().

. (025) declare zchki() to be of type 'long', so that it can return valid
  file sizes for big files.  Also fix internal variables that hold size to
  also be long.  (Same change to ckvfio.c.)  Also, change ckcfns.c and ckucmd.c
  to declare 'long zchki();'.

ckutio.c (formerly ckxunx.c and ckxbsd.c):

Started from Charles Brooks's 4.2 ckxunx.c, which is the original C-Kermit
release 4.2 version, to which he added 4.1bsd support.

. Added the following for Pro/Venix Version 1:
   - Filled in msleep() using alarm(-clockticks).
   - Filled in conchk() and ttchk() using TIOCQCNT.
   - Changed default tty name (dftty) to be "/dev/com1.dout".
   - Added line locking via /usr/spool/uucp/LCK..devname and TIOCEXCL.
. Changed local variable c from int to CHAR in ttinl().
. Let CEB's code to hangup line upon close in 4.1bsd also work for 4.2bsd.
. Removed flock() from ttopen(), call ttlock() before trying to open tty.
. Corrected some places where alarms & signals were not turned off.

. Changed calling convention for ttopen() to allow it to set the "local"
  variable, since ttopen can call the system to figure out whether a given
  device is the job's controlling tty.  Also had to change all modules that
  call ttopen() to pass this variable by reference instead of by value.

. In ttopen, copy ttname string into a static ttnmsv string global to ckutio
  module, rather than just copying the pointer (which is pointing at a moving
  target).  Should fix PC/IX tthang() problem.

. Add support for AT&T 3B-series under 3BX conditional; initially, it just
  follows UXIII conditional, but uses special uucp lock file name.

ckuusr.c, ckuus2.c, ckuus3.c (formerly ckuser.c, ckusr2.c, ckusr3.c):

. all occurrences of printf(s) replaced by printf("%s",s) or puts(s).
. shortening of remaining long strings.
. continuation lines now allowed in commands if line ends with "\".
. make "dir" command arg default to ".", not "*", to prevent recursive listing.
. make "!" command with no args do system("$SHELL").
. removed redundant definitions of ncmd, nrmt, nprm.
. totally redefined and rewrote screen() function.
. Change send-as to use cmtxt, not cmfld; remove cmcfm.
. Fix send command to wait for confirmation after wild filespec (this was
  broken by send-as change above, few people saw it).
. Put 'log debug' command in #ifdef DEBUG
. Put 'log transaction' command in #ifdef TLOG
. Use 'transact.log' as default name for transaction log, rather than
  'transaction.log', which is too long for all but 4.2bsd Unixes.
. Use symbols for exit() & doexit() return codes, not hardwired 0 and 1.
. Use symbol for name of init file.
. Put Unix-specific messages in #ifdef's
. In 'set line', put speed back to -1 if not local.
. Change "*xargv++;" in cmdlin() to simply "xargv++;".
. Change all "if (x = (cmcfm()) < 0)" to "if ((x = cmcfm()) < 0)".
. In ckuus3, change "turnch == y" to "turnch = y"; this bug prevented
  "set handshake" from working.
. Add code in shopar() to look up and display modem type correctly.
. Change "set line" code to have ttopen() figure out local/remote mode.
. Fix "set line" not to erroneously set ttname if it ttopen fails.
. In remote cwd parsing, accept CR as well as NL as password terminator.
. In local directory command, use DIRCMD rather than "ls -l ".
. In screen() function SCR_QE, print long argument with %ld so the ^A
  status report doesn't show all 0's on systems where ints and longs
  are different length (%ld was already used in the other screen functions).
. Fix multiline 'get' parsing to allow editing (required fixes to ckucmd.c).
. Add conditionals for init file name for various systems.
. Phase out the following set commands:
  set end-of-packet, set start-of-packet, set timeout, set padding & pad-ch.
  Replace by set send (each of these) and set receive (each of these), to
  allow inbound & outbound packet parameters to be set separately.
. Put new set send/receive params in show command display.
. Add version info for ckudia and ckuscr to 'sho ver'.
. Add init file name to 'sho param'.
. Replace system("pwd") in XXCWD code with system(PWDCMD), defined in ckufio.