============= Changes for ECU 3.10 =======================================

This file gives hints about what has changed.  Rereading or skimming
the manual is highly recommended.  My apologies if some changes did
not get reflected in the manual.  Please let me know.

1. Add nice interactive and procedure commands and %nice integer function.

2. Add the %uid and %gid integer function.

3. If ECU starts setuid, always reset the uid to the real uid.
   Previously this only happened if ECU was setuid to root.

4. Made compatible with Metro Link X11R4 xterm under SCO UNIX/386.
   To use:
   a. include -DMETROLINK_X11R4 in CFLAGS of ECU compilation.
   b. edit the models/nonansikeys file patched by this patch
      to comment out the SCO ODT xterm key definiton and
      uncomment the Metro Link X11R4 definition.
      Follow other instructions you see in the nonansikey file.

5. Fixed miscellaneous typos and misspelled words in models/nonansikeys.

6. Environment variables LINES and COLS override termcap li and co
   values like terminfo curses does.  This gives you the correct
   size screen on xterms, but the ecu curses stuff still sees
   the termcap description un altered, giving you shorter (usually 24 line)
   dialing and help menus.

7. Support is provided in nonansikeys for Metro Link's MetroX newest
   xterm (the one that uses pty pseudottys).  (Some of the key
   bindings are differerent and some .xinitrc and xterm resources
   are required; see 'models/nonansikeys'.)

8. The -N switch for the procedure commands sx, sy, sz, rx, ry, and
   rz forces the "no curses" mode for file transfer.  This mode
   uses brief, tty-style reporting of file transfer progress.
   The "no curses" mode is automatically invoked if the console
   is not a pty or multiscreen and has a lower baud rate than the
   attached communication line.

9. I added a dialer for the "generic Hayes-style 2400" (dialgHA24) and
   for the USR Courier 2400 (dialgUSR24).  My USR is at least
   6 years old and I don't even know if they still make them or
   if it is the same modem.

10. A new config procedure greatly simplifies making and installing.

11. I don't know if this will get it or not, but to try and help
    our European friends to be able to use alt_[a-z].ep, the keycodes
    required in the mapkeys file have changed from
      128 through 153 (0x80 through 0x99)     to
      229 through 249 (0xE0 through 0xF9).
    Reread mapkeys/README.

12. Termination of file transfers by SIGINT did not cause termination
    of procedfure execution in pre-3.10 versions.  In this version, it does.

    The appropriate manual sections have been updated to indicate:

    Integer variable $i0 receives the exit status from the transfer.
    Note: procedure execution IS terminated by a SIGINT to the spawned
    file transfer process.  This is different than for versions prior
    to 3.10.  If $i0 is set to -1, the file transfer program did not
    begin.

13. kbdtest3 is included to help figure out nonansikey configurations.
    see models/nonansikeys.

14. SCO UNIX MEMMOVE() AND GCC

memmove() is a very, very fast non-overlapping memory copy, but
since it does not save certain registers it uses, calling from
GCC can be tricky.  GCC does a fabulous job of grinding all it
can out of the available registers; MSC doesn't make very good
use of registers, er, I mean keeps a lot of registers for scratch
use.  I've never seen 386 MSC use dx except as a side effect of
multiply.  I guess that's what somebody (Gates?) meant by "tuning"
one compiler to meet many needs being adequate. Enough philosophy,
though.

I am using of -fcall-save-{ax,bx,cx,dx} since in at least one
case (ecufkey.c display_keyset()), rigorous optimization and
really righteous register usage caused a call to strlen() to
screw up since cx is not preserved by strlen.

strlen:         push    edi
strlen+0x1:     mov     edi,[esp+0x8]
strlen+0x5:     xor     eax,eax               <-- goodbye ax 
strlen+0x7:     mov     ecx,0xffffffff        <-- goodbye cx
strlen+0xc:     repne   scasb
strlen+0xe:     inc     ecx     
strlen+0xf:     mov     eax,ecx 
strlen+0x11:    not     eax
strlen+0x13:    pop     edi
strlen+0x14:    ret

memmove:        push    ebp
memmove+0x1:    mov     ebp,esp
memmove+0x3:    mov     edx,edi               <-- move rather than push
memmove+0x5:    mov     ebx,esi               <-- move rather than push
memmove+0x7:    mov     esi,[ebp+0xc]
memmove+0xa:    mov     edi,[ebp+0x8]
memmove+0xd:    mov     eax,edi               <-- goodbye ax 
memmove+0xf:    mov     ecx,[ebp+0x10]        <-- goodbye cx (OK w/MSC)
memmove+0x12:   jcxz    memmove+0x43
memmove+0x14:   cmp     edi,esi
memmove+0x16:   jbe     memmove+0x2e
memmove+0x18:   mov     eax,esi
memmove+0x1a:   add     eax,ecx
memmove+0x1c:   cmp     edi,eax
memmove+0x1e:   jae     memmove+0x2e
memmove+0x20:   mov     eax,edi
memmove+0x22:   add     esi,ecx
memmove+0x24:   add     edi,ecx
memmove+0x26:   dec     esi
memmove+0x27:   dec     edi
memmove+0x28:   std
memmove+0x29:   rep     movsb
memmove+0x2b:   cld
memmove+0x2c:   jmp     near memmove+0x43
memmove+0x2e:   mov     eax,edi
memmove+0x30:   test    Byte Ptr 0x1f:0x1,al
memmove+0x36:   je      memmove+0x3a
memmove+0x38:   movsb
memmove+0x39:   dec     ecx
memmove+0x3a:   shr     ecx,1
memmove+0x3c:   rep     movsw
memmove+0x3f:   adc     ecx,ecx
memmove+0x41:   rep     movsb
memmove+0x43:   mov     esi,ebx
memmove+0x45:   mov     edi,edx
memmove+0x47:   pop     ebp
memmove+0x48:   ret
memmove+0x49:   nop
memmove+0x4a:   nop
memmove+0x4b:   nop

15.  A documented feature is that upon connecting to a remote
dialed through the directory, if a 'fkey' key set from ~/.ecu/keys 
matches the directory name, the key set is automatically loaded.
This feature has never worked (I never used it or tested it.)
Recently I told someone they could use it and they reported it
did not work.  It does now.

16. The example file models/sz_update.ep was treating skipped files
as a failed transfer.  This was fixed.

17. Interactive and procedure commands 'pushd' and 'popd' were added.

18.  Adding pushd and popd documentation made ecu.man too long
giving me "word overflow" and a core dump from my nroff.  So,
there are now two documents, ecu.man and exits.man.  The latter
is very short and is just a kludge since the former is as long as
it can be.

19. Added the procedure rlog command for procedure control of
receiver logging.

20. Added _initial.ep, _connect.ep and _hangup.ep. See "Special
Procedures" in the manual.

21. The use of #ifdef GCC140 is made to take advantage of a
assembly source generation bug fix in gcc 1.40.

22. Running ecu with no pre-existing phone directory and specifying
a logical phone number (directory entry) to dial caused erratic
behavior or core dump.  This has been fixed.  Thanks for the report
from mju@mudos.ann-arbor.mi.us.  He did a good job of testing
an alpha version of 3.10.

23. Pressing an invalid function key during interactive command
entry used to destroy the string being entered.  This has
been fixed.

24. The ESCape vs. function key keyboard input discrimination
algorithm has been improved.  Fewer, if any, function keys will now
misinterpreted as ESCape keys followed by "junk."
README.P1           ECU 3.10 Patch 1     Mon Aug 12 03:46:20 EDT 1991

This describes patch 1 to ECU 3.10, bringing the program to
version 3.11.  Due to the manner in which the program builds its
version strings, patchlevel.h should contain #define PATCHLEVEL
11.

To use
------

To apply the patch, unshar all of the parts.  This step will
create patch files and overwrite some files whose diffs were
larger than the new files.

type the command
    sh PATCH1.APPLY

then do the
    Configure
sequence and re-make

Once you are satisfied the patch has been correctly applied,
you may 
    rm PATCH1.*
and
    make neat
to remove the usual crud and peanut hulls left on the floor after
a patch operation.

This patch fixes the following problems:
----------------------------------------

1.  ISC lock files are placed in /usr/spool/locks.  ECU now has a
configurable lock file directory whose name is automatically selected
depending upon the machine type.

1.  1.  Several problems with compiling the the makedirs program under
XENIX were fixed.

3.  The 'w' (wait) subcommand of the dialing directory screen was not
asking for both single and multiple entry list weait values, but only
the first.

4.  VT220 and perhaps other terminals insist upon generating the CSI
(ESCape plus 0x80) character as a function prefix.  To handle the need
for eight bit keryboard support for nonansikeys, I did the following:

   a. fixed the ECU code to honor the full eight bits of keyboard
      code sequences when processing function key reads.

   b. removed other code that masks the parity bit of various data items.

   c. added code the kbdtest3.c that includes an stty -a listing for
      the keyboard at the time it is run.  I also specify in clearer
      terms what parity was in use and that may be required to use
      the keyboard.

5.  Previously, you had to have a copy of nonansikeys in each user's
.ecu directory who use non-ANSI consoles.  You may now put a single copy
in the ECU library directory (usually /usr/local/lib/ecu).  ECU searches
first in ~/.ecu then in the library directory.

5a. The manual stated a number of restrictions regarding
the codes which can be transmitted by a keyboard to be supported
by the non-ANSI console feature.  I missed updating that manual part
when I released 3.10.  ECU 3.10 merely requires the code sequence
to be free of nulls and less than 33 characters in length.

6.  The models/nonansikeys file has been updated to include an entry for
the latest Metro Link X11R4 server.  The new server has improved default
key bindings and the previously dead KP_5 (unshifted Keypad 5) lives.

7.  In previous revisions of ECU, when editing an existing string on a
screen, the cursor was placed at the end of the line at the commencement
of editing.  This was untrue of 3.10 and this patch restores the
behavior.

8.  Baud rates below 300 now get two stop bits.  I doubt anyone is using
110 baud but if you ever get the hankering, it will work now.

9.  In the respond function of the expect-respond handler, \n sent CR
not NL as documented.

10.  The test for an environment HZ was incorrect causing the
sys/param.h value to be used always.

11.  The 'nap' procedure command napped for the wrong amount of time if
the -m option was used.

12. Under some conditions, ecuungetty would find a lock file created by
its (parent) ECU and report that the line was in use by another dial out.
This has been around for a long time.

13. The command history mechanism got botched up by some last minute
changes to the tty line input editor. 

14. Some work (largely in the dark) has been done to handle
differences between ISC and SCO tty naming.  The new manual entry says
of the -l startup switch:

  The argument to the switch is the base name of the tty (e.g., "tty1a" or
  "acu0").  On SCO, since ttys are all named consistently according to the
  "/dev/ttyxx" form, you may omit the "tty" (e.g., "1a" or "4g").

The new manual entry says of the tty name fierld in the dialing directory:

  A specific line is specified by using the base name of the tty (e.g.,
  "tty1a" or "acu0").  On SCO, since ttys are all named consistently
  according to the "/dev/ttyxx" form, you may omit the "tty" (e.g., "1a"
  or "4g").

This means than on ISC you must now fully specify the base name
of the tty.  On SCO, you now have the -option- of doing the same or
you may continue to use the two character suffix.

I believe that now:

  on SCO, you may use any tty name whose base name begins with "tty".
  on ISC, add tty names whose base name begins with "acu"

15. Miscellaneous other (nonvisible or debugging) changes were made.

:EDITS: summary:
----------------
Configure                   change FASI_IN_USE to FASI
ecu.c                       add memstat 
ecu.c                       jpm@logixwi fix: HZ getenv test wrong sense 
ecu.c                       soup up -l for ISC vs. SCO 
ecu.h                       configurable lock directory 
ecuLCK.c                    SCO_TTY_NAMING considerations 
ecuLCK.c                    configurable lock directory 
ecuLCK.c                    race with ecuungetty over lock resolved 
ecucmd.h                    add memstat 
ecuicmd.c                   add memstat 
ecuicmd.c                   turn off memstat after frustrating evening 
ecuicmhelp.c                when editing string, set cursor to end 
ecuicmhist.c                new ttygets botched command history handler 
eculine.c                   SCO_TTY_NAMING considerations 
eculine.c                   baud rates below 300 get two stop bits 
eculine.c                   remove unused externs 
eculock.c                   US_WEGOTIT handling 
eculock.c                   configurable lock directory 
ecuphone.c                  soup up tty name for ISC vs. SCO 
ecuphone.c                  w subcommand was not asking both questions 
ecuphone.c                  when editing string, set cursor to end 
ecusetup.c                  ISC tty names 
ecuungetty/ecuungetty.c     US_WEGOIT handling 
ecuungetty/ecuungetty.c     add debug log event code 
ecuwinutil.c                when editing string, set cursor to end 
expresp.c                   \n sent CR not NL 
expresp.c                   detect NULL expect string 
expresp.c                   nap min of hzmsec if \m 
hdbintf.c                   US_WEGOTIT handling 
kbdtest3.c                  add parity reporting 
kbdtest3.c                  some terminals reinvent parity bit's use 
lint_args.h                 afterlint-creation 
logevent.c                  use static logname 
makedirs.c                  need smart_fork for XENIX 
mkdirs.c                    how did compile succeed without signal.h? 
mkdirs.c                    no need for sys/wait.h + XENIX doesn't have it 
models/nonansikeys          add new Metro Link server entry
nonansikey.c                allow any code as first in key sequence 
nonansikey.c                look for nonansikeys in ECULIBDIR too 
pcmd.c                      add nap -1 return and proctrace 
pcmd.c                      nap -m test wrong sense ... old bug! 
utmpstat.c                  US_WEGOTIT handling 
utmpstatus.h                add US_WEGOTIT 
z/Make.src                  neat used wrong rm args
zgcc                        thanks for the -p1 suggestion to sef@kithrup.com

README.P2           ECU 3.10 Patch 2        Tue Aug 13 16:29:11 EDT 1991

This describes patch 2 to ECU 3.10, bringing the program to
version 3.12. 

The majority of this patch deals with the way SCO and ISC misimplement
the nap() system call.  A lingering problem with the interactive
command history handler is also fixed (pressing erroneous function keys
caused the display to become garbaged).

ISC and SCO UNIX nap() misbehave.  This kludge doesn't return the
proper value (the actual time slept), but at least it does not make
a mockery of the manual page.  It says:

     NAP(S)		       UNIX System V			NAP(S)

     Name
	  nap -	suspends execution for a short interval

     Syntax
	  long nap(period)
	  long period;

     Description
	  The current process is suspended from	execution for at least
	  the number of	milliseconds specified by period, or until a
	  signal is received.

     Return Value
	  On successful	completion, a long integer indicating the
	  number of milliseconds actually slept	is returned. If	the
	  process received a signal while napping, the return value
	  will be -1, and errno	will be	set to EINTR.

     See Also
	  sleep(S)

     Notes
	  This function	is driven by the system	clock, which in	most
	  cases	has a granularity of tens of milliseconds.  This
	  function must	be linked with the linker option -lx.

It appears nap() under UNIX 3.2.x has departed virtually entirely from
the manual page.  I'm beginning to look rather silly in several
milleus since I keep telling people SCO UNIX is a viable upgrade from
XENIX.  But process control people need some kind of timing capability
less than one second and we can't do it with nap or select.

nap(msec) is supposed to nap *at least* msec milliseconds.  However,
if msec is specified less than 1000/HZ + 1, it will not nap at all.
This was true for 3.2.0 and 3.2.1.

It is supposed to return the number of milliseconds it actually
slept.  Instead, it appears to "save up" the values and return them in
lots of 1000. This behavior is true for 3.2.2.

As it is nap() is nearly useless.  I believe select() suffers
from the same deficiency (< 1000 msec timeout becomes 1000 msec) but
I haven't "proven" it yet.

README.P3           ECU 3.10 Patch 3        Tue Aug 27 03:36:04 EDT 1991

This describes patch 3 to ECU 3.10, bringing the program to
version 3.13. 

Overview
--------

The patch fixes some problems with the previous release, adds new
functionality and adds support for SunOS 4.1 and ISC System V
Release 4.  I have tested it fairly well on a Sparc 1+ under
X11R4 (MIT Sun server and xterm at PL18) and SunOS 4.1.  I did my
best to integrate patches supplied by Lothar Hirschbiegel
(aega!lh).  Lothar has ISC SVR4 and his changes worked for him,
but I had to hack them since his patches were against the
"official" 3.12 and I applied them to sources already half-ported
to the Sun.  I hope they go well, but write if they don't.  I want
to hear of any success you might have with other SVR4 systems, too.

System V Release 4
------------------

> I cannot offer much information on this, since Lothar sent little more than
> patches and I have no access to a system for testing. 
> This is what I have:
> I've just finished porting ecu3.12 to SVR4. I have added my changes
> as a diff file, maybe this is of interest for you.
> The following points were added/changed:
> 
> 1. I have included a configuration option for SVR4 in config.c
> 2. ecu works fine with "ttymon" under SVR4. This means you don't need
>    FAS or something like this - bidirectional access to the serial ports
>    with the stock asy drivers is ok.
> 3. Because of some strange(?) behaviour in SVR4 curses I had to use
>    some terrible kludges to make it work clean. It's working as it is,
>    but there is obvilously room for improvement...
> 4. SVR4 has the same set of hardware handshake ioctl's as SCO does.
>    It's named differently (RTSXOFF and CTSXON), but it seems to work exactly
>    the same way. I have enabled the "RTS" option for SVR4 - hopefully this
>    is a standard feature (termiox) in *all* SVR4 versions, not just in
>    my ISC release... :-)
> 5. I'm still working on ecusz/ecurz. Outgoing transfer is doing fine, but
>    incoming transfer locks up the connection sometimes.
>    As soon as I have finished this, I could send you the cdiffs too.

SunOS
-----

I brought this up in relatively short order.  I may have gotten
what I paid for :-), but it seems stable.  The System V support
under SunOS was pleasingly similar to the SVR3 environment ECU came
from.  This release works on my Sparc 1+ with SunOS 4.1.1 and X11R4.
Some xterm VT100.Translations overrides are necessary to enable use of
certain keys unrecognized by the default xterm configuration.
Details are provided in the updated models/nonansikeys.  If the
recommended changes, you can do what I did to figure out how to
get this guy going:

  1. run xev and press the various function keys to see the
names you need to specify in the xterm translations.  
  2. edit the translations in nonansikeys example and put them in
your .Xdefaults file
  3. run kbdtest3 to get a kbdtest3.out file
  4. put this file's output into your ~/.ecu/nonansikeys file
(near the top, ahead of other xterm defs so it will be found first).
  5. try it
  6. when it works, send me the kbdtest3.out file along with the
VT100.Translations overrides you casme up with and a description of
the X environment you used.

There is also a new entry named 'sun' in models/nonansikeys for the
console.

Note on 'nonansikeys'
---------------------

This file was named when support was added to the original
SCO-only version to support keyboard/screens other than the
native multiscreen console.  Since the TERM name for multiscreens
is "ansi", it seemed reasonable to name the file nonansikeys.  It
now should probably be called 'nonSCOmultiscreenskeys', but that
name is too long for System V :-).  Before too many more
revisions, even SCO multiscreen key definitions will be read from
nonansikeys and maybe then will be a good time to rename the
file.  Anyway, this file and a good termcap definition takes you
a long way to supporting ecu on a wide variety of System V{,-ish}
platforms.

Fixes
-----

1.  The ANSI SD (scroll down) sequence was broken for consoles
other than SCO multiscreens.  It scrolled down n * COLS lines
instead of n lines.

2.  Editing the null phone directory entry (pressing 'e' in an
empty directory, editing and exiting) caused a core dump.  Now
you are prevented from editing a non-existent entry.

3.  Procedure commands with switch arguments longer than 8
characters caused stack corruption (unpredictable behavior
including core dump).  There is no call for switches this long,
but if present, the program should not explode.  Now, switches
longer thasn 8 characters (including the hyphen) are silently
truncated.  Should commands ever be added which could conceivably
evoke switch arguments that might approach the limit, either the
limit will be extended or error reporting will be added, or both,
as appropriate.

4.  # comments to the right of nonansikey key definition lines
erroneously included the # in the definition.  This may not have
been a bug in 3.12.  I may have added it during 3.13 development,
but it is gone now in any case.

5.  Previously, if the console line baud rate was not at least 4
times the tty line rate (roughly), the "no curses" mode was
forced during file transfer and could not be overridden.  Since
various video driver implimentations express verious pseudo-"baud
rate" settings, this was more often a problem than a feature.  If
the change causes you trouble, write me (or trying using Home pc
sz -N in lieu of Home pc sz, etc.).

6.  Previously, an effort was made to editorialize on your choice
of a tty device name.  This is no longer done.  On SCO, you
should use the lower case (direct) names, like tty1a, to get the
expected lock file names, but trying to second guess all the
vendor and third-party names was an unnecessary and
counter-productive stumpling block.  If you want to go for
/dev/swap, go ahead (I don't expect the ioctls to work -- or your
system :-> ).

7.  Andrew A. Chernov (ache@hq.demos.su) said:

1) HDB dialers may return connect speed as return code (!= 0)
 [ and the CONNECT string built by hdbintf.c prints this code -- wht]
 [his patch used - wht]
2) Using HDB Dialcodes file for phone numbers translation now
   (\D,\T escape sequence)
 [his patch used - wht]

In other mail he wrote:

I just found  little bugs:
1) XENIX standard cc doesn't understand prototypes with names:
"FILE *" is ok, but "FILE *fp" is bad. (patched sea/lint_args.h)
 [fixed - wht]
2) 'makedirs' program NEED last '/' in path name to make directory.
All Make.src patched to add '/' at the end of dirs.
 [fixed n a different way; makedirs now works as advertised - wht]
3) Some HDB dialers looks in argv[0] and change some parameters
(f.e. speed, etc.), so name "ECUdial" is invalid, and need change to
dve->dialprog. WARNING: this patch required my previous patch
(use 'token' instead of 'stripped_num')
 [his patch used - wht]

8. Jan-Piet Mens <logixwi.uucp!jpm> reported problems
with VT-220 support due to it's necessity of passing characters
with the sign bit set.  As of now, characters are read by ecu and kept
8-bit intact until they have been passed through the key mapping filter.
Keys actually input to the program or sent over the line are
limited to 7 bits for now (sorry to my international friends) since
characters with the sign-bit have internal significance to ECU.
This is a primary example of "American's Disease" (7-bit ASCII) and I'll get
it out of here as soon as I get over "Warren's Disease" (laziness).

He also reported:
> In README.P1, you write that the "nonansikeys" file may be put in
> ECULIBDIR.  This is incorrect: it is searched for in
> ECULIBDIR/.ecu [Line 193 nonansikey.c]

Acknowledgments
---------------

I've already mentioned Lothar's work in a matter-of-fact manner,
but here is the place for extreme words of appreciation. SVR4 is
very important and kudos to him for the leg up.

Robert E.  Laughlin, Naval Ocean Systems Center (NOSC), bel@trout.nosc.mil,
reported various successes and failures.  We had a good and continuing
dialog.  His interest, suggestions and moral support did more for me than my
support of ECU did for him.

Andrew Chernov, of Relcom fame, made important suggestions and
fixes for XENIX support and for the product as a whole.  He made
some important suggestions for an older revision as well, some of
which I put in and some not (Variously, I was too lazy, busy or
the code had gone too far away from what he was patching from).
His work is laudable and important for many reasons far exceeding
his support of this little program.  Keep him in your thoughts
through these strange and wonderous times.

It was good to hear from these folks for their comments asnd fixes:

 Andy Hall <relay.EU.net!ncduk!andyh>
 Dave Hammond <dsix2!daveh
 Greg Wilkins <sir-alan!gregw>
 Michael P. Deignan <anomaly.sbs.com!mpd>
 Michael Traub <rtf.bt.co.uk!traub>
 cmcl2.NYU.EDU!panix!tbetz (Tom Betz)
 Jan-Piet Mens <logixwi.uucp!jpm>
 mudos.ann-arbor.mi.us!mju (Marc Unangst)
 lll-winken.llnl.gov!abhg!tao!tempest!whitemp
 ucsd!jadpc.cts.com!jdeitch

This file is harder to write than all of the code changes.  Not
only is it hard to remember what all bugs were reported by whom
and what changes were fixed by whom, I hope I haven't missed
crediting anyone.  if I did, please forgive me.

Keep dem cards and letters coming.


README.P4           ECU 3.10 Patch 4       Wed Aug 28 09:43:44 EDT 1991

This describes patch 4 to ECU 3.10, bringing the program to
version 3.14.

The majority of this patch deals with good work done by Paul
Slootman (slootman@dri.nl) on the SVR4 port.  From what he
encountered, I am very very disappointed in some of the more anal
ANSI C implementations out there.  Trigraphs suck and we all knew
that, but having to cast a constant in a comparison with
strlen???  (Excuse me -- that is a trigraph -- I must learn to
say \?\?\?).

Oh well, there are a few other kinds of fixes in here too: ISC
should be better off.  Some of the conditionally compiled code
that was running for SCO only should have been in for ISC too.

I thought I had fixed the bad search for nonansikeys in
ECULIBDIR/.ecu/ instead of ECULIBDIR/, but it is fixed now.

To use:
       patch -p < PATCH4.01
       Configure
       make
       su root (may not be necessary on Sun or SVR4 if you
               have write access to the installed directories)
       make install

README.P6           ECU 3.10 Patch 6     Wed Sep  4 00:41:23 EDT 1991

This describes patch 5 to ECU 3.15, bringing the program to
version 3.15.

Files in Patch 5:
README.P5
PATCH5.01
fasi/fas.h
ckermit/ckutio-ecu.dif
memmove/README
memmove/memmove.s
memmove/memmove286.asm
memmove/memmove386.asm
timetest/Makefile
timetest/naptest.c
timetest/naptest2.c
timetest/naptest3.c
timetest/seltest.c

First, a note of apology to Sun users.  I used the -mm nroff macros
to write the manuals.  Sun provides -ms and -me, but not -mm.
I'm looking for some PD replacements, but haven't succeeded yet.
I'll be glad to mail an updated manual to anyone who asks.  I'm
also looking for a friendly ftp site to hold updates, hence manuals.

1. Improvements in the SVR4 port have been made, but now
SVR4 almost certainly means an AT&T/Intel/ISC 386 port,
                                              ^^^
since we expect to find /usr/include/sys/at_ansi.h and
/usr/include/sys/sys/kd.h files for console color capability.
(Color is not yet supported on Sun -- only monochrome xterms
and the console without color manipulation).

If you have trouble with compiling ecutty.c for SVR4 (complaints
about not finding either of these header files), temporarily remove the
SVR4 condition for inclusion of them and for using the CONS_GET code
near the bottom of the source.

2.  Many improvements were made in the area of system independence.
The build procedure configures the location of HDB Devices,
Dialcodes and Dialers files among the various environments:
SCO   /usr/lib/uucp
ISC   /usr/lib/uucp
Sun   /etc/uucp
SVR4  /etc/uucp

3. A new feature of Configure is the inclusion of local configuration
in the Makefiles it builds.  If you build a file named "config.local"
in the base source directory, it's contents will be placed ahead of
all other make statements in each Makefile.

Example customization include:
CFLAGS_EXTRA  = -Dwhatever
GCC_CFLAGS_EXTRA = -fsoft-float  #just an example :-)
CC_CGLAGS_EXTRA = -p
SYMBOLIC = -g             # if you want sdb/dbx/gdb symbols in programs
BINTIME = /bin/time       # if you want stats on each make step
LDFLAGS_EXTRA  = -ljuicier-malloc

Judicious use of this may help you avoid changing Make.src files
thus making patch complain about future patches, but 

4. A patch from Andrew Chernov that fell out of the last version
was reapplied:  Many SCO-style dialer programs do not care
what is in argument 0 (the command name) when they are executed,
but some do.  Before this patch, the argument passed was "ECUdial"
since the gendial dialers *can* make use of it.  This usage
conflicted with some of Andrew's dialers which need the actual
name passed.  So, starting with this edition, if you invoke
a dialer program, its complete pathname will appear in argv[0].
If you want the old behavior, add a file to the base directory
called config.local and place in it the line:

  CFLAGS_EXTRA = -DECUdial
 
3. The usefulness of _rc.ep has been enhanced by adding the
'setline' procedure command.	This command is only valid during the
execution of _rc.ep.  It allows you to override the selection of
a default line as if you had used the -l switch.  In fact, using
the commabnd overrides -l.

Usage: setline <filename>

This command is an exact analog of the -l command line switch.
<filename> is used on the setup screen (if it is presented)
as the default filename. If you do not edit this name, ECU will
attempt to open the line when you press End or ^D. 

<filename> has the format of a complete pathanme in /dev or simple
tty name. 

Example:
  setline '/dev/tty1a'
  setline 'tty1a'
  setline 'cua0'

5. Similarly, using the 'baud' and 'parity' procedure commands in
_rc.ep serve as an exact analog of the -b, -e and -e command line switches.
Using 'baud' and 'parity' in rc_ep override the equivalent
command line switches.

6.  On the Sun, STREAMS termios is used in lieu of termio.  The code
used for draining the line output queue ("wait for all transmitted
data to be sent over the line") has been improved, making
expect-respond, file transfer and other highly interactive operations
more reliable.

7.  The following files normally found in a personal ~/.ecu
directory may now have a systedm default in ECULIBDIR:

   colors
   keys
   nonansikeys

8. Unreported bugs in the format of the keys and nonansikeys files have
bben fixed.  Specifically, whitespace and comments are allowed after keyset
or terminal names.

9. On ISC 2.2 systems, the console was left in standout or bold
mode at exit from ECU.  I believe this problem is now fixed.

10. The GCC compilation flags for 386 versions have been updated to use
-fcall-used-bx rather than -fcall-used-{ax,bx,cs,dx].

It turns out the only problem ECU had with strenuously optimized GCC
options was that SCO's memmove clobbers the bx register, which is
supposed to be reserved for use as a register variable by all
compilers, MSC or otherwise.

If you use the new memmove routines supplied with this patch, you may
omit this switch as well.  It is probably not worth fooling with any
of that unless you are just interested in the problem.

11. I forgot to include the version 4F kermit diff file.  It's included
in here.

12. In patch 2, I reported nap() in SCO UNIX systems to be faulty in varying
manners depending on x in the 3.2.x version number.  ISC 2.2.1 nap also
misbehaves in a similar manner. 

SCO very promptly supplied me with an /etc/conf/pack.d/kernel/os.o for
relinking the kernel which fixes the problem somewhat, but not
completely.  Watch this space.  Some testing programs can be found in
timetest/ as of this patch.

13.  I've thought for some time SCO select might also be buggy.  I finally
wrote some test programs and proved it.  SCO select may appear to work
correctly for a few iterations, but rapidly degenerates into rounding
all timeout specifications to the nearest second.  Run timetest/seltest
for a visual feel of what's going on.

The #define WORKING_SELECT is now supploied by the Configure procedure
for systems that have a usable select.  See the updated README file 
note 3 and ecuutil.c Nap() for details.


README.P5           ECU 3.10 Patch 5     Wed Sep  4 00:41:23 EDT 1991

This describes patch 6 to ECU 3.16, bringing the program to
version 3.16.

Two quick fixes here:
The configuration procedure screws up when you cc on SVR4, Sun or ISC
1. I forgot to put -DWORKING_SELECT in for cc on these machines.
2. A '(' got changed to a '*' somewhere in the process.

Bad QA.  Sorry.
