[comp.sources.misc] v16i025: ECU async comm package rev 3.0, Part01/35

wht@n4hgf.uucp (Warren Tucker) (01/06/91)

Submitted-by: wht@n4hgf.uucp (Warren Tucker)
Posting-number: Volume 16, Issue 25
Archive-name: ecu3/part01

This is ECU revision 3.00.00.  ECU is a asynchronous
communications program for SCO UNIX System V/386 or XENIX System
V/286 or 386 on AT-class computer systems.  It incorporates
typical interactive communications capabilities with a rich
procedure language, an extended set of immediate (interactive)
commands, and several file transfer protocols.  The operating
system and development system is expected to be revision 2.3.1 or
later for XENIX and 3.2.0 for UNIX.

Experimental support for non-ANSI consoles has been added.  Bugs
are expected and reports will be greatly appreciated.  Your
non-ANSI terminal must be fairly "smart", with insert/delete-line
features, erase-to-end-of-line, etc..  See the manual.

Many thanks to those who helped me improve the program,
especially tbetz@upaya, jmd@wa4cyb, jts@ki4xo, jsm@n4vu,
cma@tridom, neal@clkwrka, mjb@mjbtn and rob@genrad.

The doc subdirectory has all of the .txt files used to produce
ecu.man, the manual of sorts for the program.  A copy of it is
reluctantly included (net.bandwidth) for those who do not have
nroff.

There have been *MANY* changes to ECU since revision 2.8.  It is
worth re-reading this file and *at least* the table of contents of
the manual to see what's changed.  No effort has been spared to
remain compatible with the previous version, but some changes
were necessary.

Notably, your pre rev-3 ~/.ecu/phone file must have a special
line added manually to the top of it: #ECUPHONE.  See
models/phone for an example.

Bug reports, comments and suggestions are heartily requested.
Also, I will start an ECU mailing list is there is any interest.

My address: Warren H. Tucker                         (404)587-5766
            Tuckerware                     wht@n4hgf.Mt-Park.GA.US
            150 West Lake Drive           {gatech,emory}!n4hgf!wht
            Mountain Park, Ga. 30075 USA

---- Cut Here and feed the following to sh ----
#!/bin/sh
# This is ecu3, a shell archive (shar 3.46)
# made 12/26/1990 10:28 UTC by wht@n4hgf.Mt-Park.GA.US
# Source directory /u1/src/ecu
#
# existing files WILL be overwritten
#
# This shar contains:
# length  mode       name
# ------ ---------- ------------------------------------------
#   8303 -rw-r--r-- README
#  13617 -rw-r--r-- ANCIENTHISTORY
#    835 -rw-r--r-- ESOTERIC
#  13973 -rw-r--r-- Make.ecu
#   4060 -rw-r--r-- afterlint.c
#   1470 -rw-r--r-- bamboozle.c
#    413 -rw-r--r-- cmdtbl.c
#   9953 -rw-r--r-- ecu.c
#  20605 -rw-r--r-- ecuDCE.c
#   3727 -rw-r--r-- ecuLCK.c
#   8377 -rw-r--r-- ecuchdir.c
#   3656 -rw-r--r-- ecudump.c
#   6693 -rw-r--r-- ecufinsert.c
#  12100 -rw-r--r-- ecufkey.c
#  12087 -rw-r--r-- ecufork.c
#   7552 -rw-r--r-- ecuicmaux.c
#  12735 -rw-r--r-- ecuicmd.c
#   7848 -rw-r--r-- ecuicmhelp.c
#   3336 -rw-r--r-- ecuicmhist.c
#  23928 -rw-r--r-- eculine.c
#   4250 -rw-r--r-- eculock.c
#    834 -rw-r--r-- ecunumrev.c
#  48468 -rw-r--r-- ecuphone.c
#   5521 -rw-r--r-- ecuphrase.c
#  30050 -rw-r--r-- ecurcvr.c
#   4434 -rw-r--r-- ecuscrdump.c
#  14649 -rw-r--r-- ecusetup.c
#   7052 -rw-r--r-- ecushm.c
#  11775 -rw-r--r-- ecusighdl.c
#  14554 -rw-r--r-- ecutcap.c
#   4253 -rw-r--r-- ecutime.c
#  23288 -rw-r--r-- ecutty.c
#   5623 -rw-r--r-- ecuuclc.c
#   2642 -rw-r--r-- ecuusage.c
#  25588 -rw-r--r-- ecuutil.c
#   9536 -rw-r--r-- ecuwinutil.c
#  14176 -rw-r--r-- ecuxenix.c
#  23483 -rw-r--r-- ecuxfer.c
#  17780 -rw-r--r-- esdutil.c
#   8287 -rw-r--r-- esiointf.c
#   9617 -rw-r--r-- expresp.c
#  24950 -rw-r--r-- feval.c
#   6629 -rw-r--r-- gint.c
#   5212 -rw-r--r-- gstr.c
#  15942 -rw-r--r-- hdbintf.c
#   2521 -rw-rw-r-- kbdtest.c
#   1295 -rw-r--r-- logevent.c
#   6955 -rw-r--r-- nonansikey.c
#  24203 -rw-r--r-- pcmd.c
#  22839 -rw-r--r-- pcmdfile.c
#  13817 -rw-r--r-- pcmdif.c
#   7941 -rw-r--r-- pcmdtty.c
#   2686 -rw-r--r-- pcmdwhile.c
#  11327 -rw-r--r-- pcmdxfer.c
#   4352 -rw-r--r-- poutput.c
#   3525 -rw-r--r-- pprintf.c
#  16834 -rw-r--r-- proc.c
#   4423 -rw-r--r-- proc_error.c
#   3397 -rw-r--r-- procframe.c
#  10229 -rw-r--r-- regexp.c
#   2206 -rw-r--r-- sysdep.c
#   3906 -rw-r--r-- utmpstat.c
#  10027 -rw-r--r-- var.c
#   1616 -rw-r--r-- dialprog.h
#    545 -rw-r--r-- dlent.h
#    722 -rw-r--r-- dvent.h
#   4010 -rw-r--r-- ecu.h
#  11044 -rw-r--r-- ecucmd.h
#   3939 -rw-r--r-- ecuerror.h
#   1457 -rw-r--r-- ecufkey.h
#    402 -rw-r--r-- ecufork.h
#   1056 -rw-r--r-- ecuhangup.h
#    706 -rw-r--r-- ecukey.h
#    733 -rw-r--r-- ecupde.h
#   3042 -rw-r--r-- ecushm.h
#    955 -rw-r--r-- ecutty.h
#   1052 -rw-r--r-- ecuungetty.h
#    584 -rw-r--r-- ecuvmin.h
#   1534 -rw-r--r-- ecuxkey.h
#    857 -rw-r--r-- esd.h
#   2176 -rw-r--r-- feval.h
#  27009 -rw-r--r-- lint_args.h
#     21 -rw-r--r-- patchlevel.h
#   1199 -rw-r--r-- pc_scr.h
#    938 -rw-r--r-- proc.h
#    516 -rw-r--r-- relop.h
#   1407 -rw-r--r-- smap.h
#   1287 -rw-r--r-- stdio_lint.h
#    592 -rw-r--r-- utmpstatus.h
#    505 -rw-r--r-- var.h
#   2124 -rw-r--r-- help/Makefile
#  24593 -rw-r--r-- help/ecuhelp.src
#  11307 -rw-r--r-- help/helpgen.c
#   2592 -rw-r--r-- help/lint_args.h
#   1304 -rw-r--r-- help/util.c
#    502 -rw-r--r-- ecufriend/Makefile
#   2665 -rw-r--r-- ecufriend/ecufriend.c
#   1331 -rw-r--r-- ecuungetty/Makefile
#   3923 -rw-r--r-- ecuungetty/ecuungetty.c
#   2060 -rw-r--r-- mapkey/README
#   5709 -rw-r--r-- mapkey/keys.usa.ecu.d
#   3558 -rw-r--r-- bperr/bperr.c
#   3163 -rw-r--r-- z/Makefile
#   1509 -rw-r--r-- z/baudtest.c
#  41299 -rw-r--r-- z/ecurz.c
#  41872 -rw-r--r-- z/ecusz.c
#  15601 -rw-r--r-- z/zcommon.c
#  33753 -rw-r--r-- z/zcurses.c
#    174 -rw-r--r-- z/zdebug.c
#   2818 -rw-r--r-- z/zlint.h
#  16442 -rw-r--r-- z/zmodem.c
#   6728 -rw-r--r-- z/zmodem.h
#    913 -rw-r--r-- sea/Makefile
#  35194 -rw-r--r-- sea/ecusea.c
#   2779 -rw-r--r-- sea/lint_args.h
#  22139 -rw-r--r-- sea/scurses.c
#  11247 -rw-r--r-- sea/sealink.doc
#   5213 -rw-r--r-- sea/sealink.imp
#   1713 -rw-r--r-- gendial/Makefile
#   6539 -rw-r--r-- gendial/dialer.h
#  25754 -rw-r--r-- gendial/gendial.c
#  18448 -rw-r--r-- gendial/dceT2500.c
#   9615 -rw-r--r-- gendial/template.c
#  13186 -rw-r--r-- gendial/dceMC9624.c
#  17853 -rw-r--r-- gendial/dceTBPlus.c
#  17704 -rw-r--r-- gendial/dceT1000.c
#  14315 -rw-r--r-- gendial/dceMPAD.c
#   1949 -rw-r--r-- xsel386/fixttiocom.c
#   2981 -rw-r--r-- xsel386/select-update
#   1237 -rw-r--r-- xsel386/select.asm
#  21402 -rw-r--r-- xsel386/select.txt
#    391 -rw-r--r-- xsel386/ttiocom.c
#   2354 -rw-r--r-- shar.fls
#     19 -rw-r--r-- sea/ecusea.fls
#     38 -rw-r--r-- z/comsrc.fls
#  40415 -rw-r--r-- ckermit/ckermit.01
#  40639 -rw-r--r-- ckermit/ckermit.02
#  19216 -rw-r--r-- ckermit/ckermit.03
#   6049 -rw-r--r-- doc/_basic.txt
#     39 -rw-r--r-- doc/_end.txt
#   1767 -rw-r--r-- doc/_exit.txt
#  25444 -rw-r--r-- doc/_features.txt
#   3940 -rw-r--r-- doc/_hdb.txt
#  28501 -rw-r--r-- doc/_icmd.txt
#   2184 -rw-r--r-- doc/_intro.txt
#  44600 -rw-r--r-- doc/_p_cmd.txt
#  11341 -rw-r--r-- doc/_p_ifunc.txt
#   4995 -rw-r--r-- doc/_p_param.txt
#   9865 -rw-r--r-- doc/_p_sfunc.txt
#    171 -rw-r--r-- doc/_proc.txt
#   8276 -rw-r--r-- doc/_startup.txt
#    973 -rw-r--r-- doc/_tech.txt
#    519 -rw-r--r-- doc/_top.txt
#    170 -rw-r--r-- doc/ecu.txt
#    104 -rwxr-xr-x doc/runoff
#    673 -rw-r--r-- models/bsd_uname.ep
#    140 -rw-r--r-- models/colors
#     14 -rw-r--r-- models/dir
#    815 -rw-r----- models/f.ep
#   1667 -rw-r--r-- models/file_test.ep
#    317 -rw-r--r-- models/frame_test.ep
#    198 -rw-r--r-- models/gosub.ep
#    447 -rw-r--r-- models/goto_test.ep
#    420 -rw-r--r-- models/if_test.ep
#    322 -rw-r--r-- models/keys
#    515 -rw-r--r-- models/lookfortest.ep
#    578 -rw-r--r-- models/mhack_test.ep
#     40 -rw-r--r-- models/mkdir.ep
#   5679 -rw-r--r-- models/nonansikeys
#    877 -rw-r--r-- models/oneline.ep
#   2086 -rw-r--r-- models/opuslogin.ep
#   1110 -rw-r----- models/p.ep
#    261 -rw-r--r-- models/phone
#    117 -rw----r-- models/phrases
#    895 -rw-r--r-- models/ps.ep
#   1963 -rw-r--r-- models/put_ecu.ep
#    503 -rw-r--r-- models/root.ep
#   4983 -rw-r--r-- models/rz_update.ep
#    643 -rw-r--r-- models/scm.ep
#    557 -rw-r--r-- models/senddate.ep
#   2489 -rw-r--r-- models/sf_test.ep
#   1465 -rw-r--r-- models/su.ep
#    766 -rw-r----- models/sysname.ep
#   4479 -rw-r--r-- models/sz_update.ep
#    127 -rw-r--r-- models/szall.ep
#    495 -rw-r--r-- models/tty1a.mi
#    446 -rw-r--r-- models/tty2d.mi
#   3689 -rw-r----- models/unixlogin.ep
#    649 -rwxr-xr-x zgcc
#   3418 -rw-r--r-- mkoldproto.l
#
if touch 2>&1 | fgrep 'amc' > /dev/null
 then TOUCH=touch
 else TOUCH=true
fi
# ============= README ==============
echo 'x - extracting README (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'README' &&
X.--------------------------------------------------------.
X| ECU README - last revised Sat Dec 22 00:10:12 EDT 1990 |
X`--------------------------------------------------------'
X
XThis is ECU revision 3.00.00.  ECU is a asynchronous
Xcommunications program for SCO UNIX System V/386 or XENIX System
XV/286 or 386 on AT-class computer systems.  It incorporates
Xtypical interactive communications capabilities with a rich
Xprocedure language, an extended set of immediate (interactive)
Xcommands, and several file transfer protocols.  The operating
Xsystem and development system is expected to be revision 2.3.1 or
Xlater for XENIX and 3.2.0 for UNIX.
X
XExperimental support for non-ANSI consoles has been added.  Bugs
Xare expected and reports will be greatly appreciated.  Your
Xnon-ANSI terminal must be fairly "smart", with insert/delete-line
Xfeatures, erase-to-end-of-line, etc..  See the manual.
X
XMany thanks to those who helped me improve the program,
Xespecially tbetz@upaya, jmd@wa4cyb, jts@ki4xo, jsm@n4vu,
Xcma@tridom, neal@clkwrka, mjb@mjbtn and rob@genrad.
X
XThe doc subdirectory has all of the .txt files used to produce
Xecu.man, the manual of sorts for the program.  A copy of it is
Xreluctantly included (net.bandwidth) for those who do not have
Xnroff.
X
X--------------------------------------------------------------------
X
XNOTE TO PRE-REVISION-3 USERS:
X
XThere have been *MANY* changes to ECU since revision 2.8.  It is
Xworth re-reading this file and *at least* the table of contents of
Xthe manual to see what's changed.  No effort has been spared to
Xremain compatible with the previous version, but some changes
Xwere necessary.
X
XNotably, your pre rev-3 ~/.ecu/phone file must have a special
Xline added manually to the top of it: #ECUPHONE.  See
Xmodels/phone for an example.
X
XIn general:
X
X    $i0 = 5
X    whilei $i0 != 0
X    {
X        do 'read-new-man'
X        ifs %logname != 'confused'
X            break
X        $i0 = $i0 - 1
X    } 
X    ifs %logname == 'confused'
X		system 'mail -s help wht@n4hgf.Mt-Park.GA.US < flame.txt'
X
X--------------------------------------------------------------------
X
XTTY devices must be named in the style of:
X
X     /dev/tty#N
X             ^^
X             ||
X             |`------ uppercase letter for modem control
X             |        lowercase for non-modem control
X             `--------digit (1-4)
X
X
XA future version of ECU will address this limitation.
X
XIf you are using FAS or other third-party driver, you may use ECU
Xwith ports not normally named in the /dev/tty#N style in one of two
Xways under UNIX and one way under XENIX:
X
X
X     1.  Under XENIX or UNIX, create a link to the port
X         with a compatible name:
X
X               ln /dev/ttyF00 /dev/tty1a
X               ln /dev/ttyFM00 /dev/tty1A
X
X     2.  Under UNIX, add additional lines to the
X         /etc/conf/node.d file and rebuild the kernel
X         environment (this is the recommended approach
X         for UNIX):
X
X     fas ttyF00  c   48
X     fas tty1a   c   48
X     fas ttyF01  c   49
X     fas tty1b   c   49
X     fas ttyFM00 c   208
X     fas tty1A   c   208
X     fas ttyFM01 c   209
X     fas tty1B   c   209
X
X--------------------------------------------------------------------
X
XNOTE: SEAlink is provided as-is. I haven't used it since I
Xtested it in 1989.
X
X--------------------------------------------------------------------
X
XIf you are using an xterm to run ecu, 
X
X1. the maximum geometry is 80x43
X2. 4014 emulation is untested
X3. you should use the following resources:
X
XXTerm*titeInhibit:     true # enable screen clear functions normally
XXTerm*curses:          true # curses bug fix
X
X--------------------------------------------------------------------
X
XTo make and install the program:
X
X1.   unshar all of the shars
X
X2.   copy Make.ecu to Makefile
X
X3.   edit ./Makefile to match your local system and requirements
X
X4.   If your username is root or you have write access to your
X     local bin directory (LBIN in Makefile) just type 'make tools'
X     If needed, su to root, 'make tools', then exit the root shell.  
X
X     Just a note: on 286 systems you make have to use makeL, since
X     make is a small model (medium?) and makeL is a large model
X     program.  marks@msge reported that under XENIX 286, it was
X     necessary to use:
X
X              make -n tools | sh
X
X     If the above fails, try 'makeL' or 'makeL -n | sh'.
X     It has been a while since I had a 286 to check this
X     out on. Please let me know what works for you.
X
X5.   Type 'make'.  Wait and watch a while.  This is a good time to
X     be reading over doc/ecu.man. 
X
X6.   Su to root, if not already and type 'make install'.
X
X7.   Create a subdirectory in your home directory called '.ecu' (~/.ecu).
X
X8.   Copy models/* to ~/.ecu.  NOTE:  if you have used pre rev-3 versions
X     of ECU, skip this step, but you might want to look through the
X     models directory, since new examples have been added and some
X     have been revised.
X
X9.   The 'make install' doesn't do it, because *you* should make the
X     informed choice to do it, but you must make the /dev/tty??
X     and /usr/spool/uucp world readable and writable for ECU
X     to create lock files and to access serial lines.
X
X     Under XENIX:  chmod +rw /usr/spool/uucp /dev/tty?[A-Za-z]
X     Under UNIX:   chmod +rw,g+s /usr/spool/uucp
X                   chmod +rw /dev/tty?[A-Za-z]
X
X10.  The gendial subdirectory contains some rigorous, yet
X     experimental, dialer programs for use with ECU, cu and uucico.
X     They are currently undocumented and "as-is."
X
X--------------------------------------------------------------------
XNotes:
X
X1.  KERMIT:
XA XENIX/286 (lowest common denominator) binary of a suitable
Xckermit is compress-shared in the ckermit subdirectory.  You
Xshould unshar it and place it in the same directory as ECU.
XAlas, I do not have full source for it.  I plan to support the
X(excellent) C-Kermit 5 as soon as it is released.
X
X2.  SELECT(S)
XSCO XENIX V/386 Release 2.3.1 (and evidently 2.3.2) have a
Xbroken-dead, yet fixable, BSD-style select() feature.  Also,
Xselect() is missing from libc.a.  While ECU does not *require*
Xselect(S), it is much more efficient to use it.  The x386sel
Xsubdirectory in this release has information (thanks to
Xcsch@netcs, ivar@acc, and ag@elgar) on how to fix the kernel and
Xto add select() to libc.a.
X
XSelect(S) is fully functional in UNIX.
X
X3.  CRYPT
XCrypt may be used to make the ecuungetty function more secure.
XIf your system has no untrusted users, or even some relatively
Xlazy untrusted users, leave CRYPT and LCRYPT commented in the
XMakefile.  Since somewhat unlazy users can read the source as
Xreleased and still wreak havoc with your ttys, you might want to
Xchange the non-CRYPT "encryption" algorithm in bamboozle.c to
Xmake your installation unique.
X
X4.  MULTISCREEN BUG
XThere has been a bug in the multiscreen driver for some time
Xwherein a MEDIA COPY (screen dump) sequence ("ESC [ 2 i") leaves
Xthe "ESC [ 2" part "active".  When a screen dump (Cursor 5)
Xcommand is given, I do the sacreen dump, then send a "l" to the
Xscreen to work around the bug ("ESC 2 [ l" unlocks the keyboard,
Xessentially a no-op).  If and when it gets fixed, you'll see an
X"l" show up on your screen after a screen dump sequence.  To fix
Xthis, comment out the
X#define MULTISCREEN_DUMP_BUG
Xat the top of ecuscrdump.c.
X
XNote that from multiscreens, screen dump produces a dump of the
Xactual screen contents, including ECU-generated output.  When
Xusing a non-multiscreen terminal, screen dump dumps only the 
Xshared memory virtual screen as received from the host.
X
XIf, at a multiscreen, you wish a screen dump free of ECU output
X"pollution," use Shift-Tab (BkTab) to redraw the screen, then
Xperform the screen dump.
X
X--------------------------------------------------------------------
X
XThis program, it sources, objects and utilities are placed in the
Xpublic domain.  No GNU, no Copydown, just FREE. That saved 2Kb per
Xmodule, didn't it?
X
X--------------------------------------------------------------------
XMy address: Warren H. Tucker                         (404)587-5766
X            Tuckerware                     wht@n4hgf.Mt-Park.GA.US
X            150 West Lake Drive           {gatech,emory}!n4hgf!wht
X            Mountain Park, Ga. 30075 USA
X--------------------------------------------------------------------
SHAR_EOF
$TOUCH -am 1226043890 'README' &&
chmod 0644 README ||
echo 'restore of README failed'
Wc_c="`wc -c < 'README'`"
test 8303 -eq "$Wc_c" ||
	echo 'README: original size 8303, current size' "$Wc_c"
# ============= ANCIENTHISTORY ==============
echo 'x - extracting ANCIENTHISTORY (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'ANCIENTHISTORY' &&
XChanges and fixes since 'unet1' alt.sources release:
X
X1. The uucp lock file code has been upgraded.  When I added uucp dialer
Xsupport a while back, I just hacked the necessities needed for
XecuLCK.c and put the new code into hdbintf.c.  Also, I don't try
Xto create two lock files anymore because there is no need.
X
X2. In esdutil.c, skip_paren could return a wrong error code.
X
X3.  ctype.h style integer functions were added to the procedure
Xlanguage: %isalnum, %isalpha, %isascii, %iscntrl, %isdigit, %isgraph,
X%islower, %isprint, %ispunct, %isspace, %isupper and %isxdigit.
X
X4. Logical operators were added to the ifi, ifs, whilei and whiles
Xsyntax, making possible:
X   ifi $i0 ==5 || %i30 == 6
X       statement(s)
XThis still ain't perl, but things are a little better.
X
X5.  %right() was broken.  strfunc_right() in feval.c returned a random
Xerror code on success.
X
X6.  A copy of the screen as received from the line is now kept in shared
Xmemory.  Three new functions use this feature: integer functions %curx
Xand %cury and string function %screen().  There are limitations, so read
Xthe appropriate manual sections.
X
X7.  Since some program may want to use the shared memory segment to read
Xthe screen, the shared memory segment is no longer RMID'd as soon as it
Xis created.  The integer function %shmid returns the shared memory
Xsegment id for passing to a called program.  Many other interesting
Xthings are kept in shared memory to enable efficient use of auxiliary
Xprograms.  See echshm.h and ecufriend/ecufriend.c.
X
X8.  Procedure tracing of string variable assignment prints "unprintable"
Xcharacters in the style of '^A' rather than clobbering your screen.
X
X9.  kill_rcvr_process is better at terminating the receiver process.
X
X10.  Screen dumps having extra repeated lines at the bottom won't happen
Xany more.  (The restarted rcvr process was getting a copy of the stdio
Xbuffers to flush too :-/).
X
X11.  By modifying the mapkey file to return certain codes for ALT-A
Xthrough ALT-Z, it is possible to have 26 procedures (named
X'alt_[a-z].ep') to execute "silently" by pressing one key (OK, two keys:
XALT and a-z).  See mapkeys/README, /usr/lib/keybord/keys and mapkey(ADM).
X
X12.  The receiver was not getting properly informed when the parity of
Xthe line was changed with the interactive or procedure parity command.
XSo it could improperly mask or fail to mask incoming characters.
X
X13.  The crypt library is no longer required.  Indeed, the default is
Xnot to use crypt.  The paranoia required for "safe" big systems is not
Xalways warranted on smaller PCs.  You can still get extra protection
Xagainst false ecuungetty action by using crypt if you want (and in the
Xcase of non-USA user, if you CAN).
X
X14.  A running count is displayed on the screen of the number of files
Xskipped during a ZMODEM transfer.
X
X15.  You can now specify the colors used by ecu when it makes an
Xinternal choice to change colors.  See ecu.man.
X
X16.  UNIX, thanks to POSIX, is loathe to accept a filename of greater
Xthan 14 characters when creating a file.  The XMODEM, YMODEM and
XZMODEM file receive protocols have been modified to truncate long
Xfilenames.  A patch to UNIX libsys.a to put the POSIX people back in
Xtheir place has been floating around the net.
X
X--------------------------------------------------------------------
X
XChanges and fixes since '2.10' patch level 6:
X
X1.  The nap procedure command has an additional feature, the -m
X    switch.  -m specifies the <int> parameter is a period of
X    milliseconds to suspend execution.  Without -m, <int> is
X    tenths of seconds.
X
X    nap 2 suspends execution .2 seconds
X    nap -m 250 suspends execution 250 milliseconds.
X
X
X--------------------------------------------------------------------
X
XChanges and fixes since '2.10' patch level 7:
X
X1.  added rname procedure command to allow overriding connected
X    remote name.
X
X2.  improve banner at top of session log file
X
X3.  add popen and pclose procedure commands
X
X4.  Added facility for restoring receiver display after the
X    interactive help command, or on demand using the BkTab key
X    (shift TAB).
X
X5.  fix bug whereby partial function names could be enetered
X    (e.g., '%col', '%colo', '%color' all recognized for '%colors').
X
X6.  Add the %mhack integer function, returning the life of the
X    ecu process in milliseconds.  (added mhack_test.ep to models)
X
X7.  A better representation of the received screen is kept in
X    shared memory.
X
X8.  The X, Y and ZMODEM transfer screens show per-file elapsed
X    time transfers as well as session elapsed time.
X
X9.  A modified TBIT UUCP dialer, IMHO highly optimized, is is the
X    uucp directory.
X
X10. A bug in automatic creation of string variables was fixed.
X
X11. Certain endless loops in procedure execution could not be
X    interrupted.
X
X--------------------------------------------------------------------
X
XChanges and fixes since '2.72'
X
X1.  The 'expresp' procedure command has been added:
X    usage: expresp [-v[v...]] <exp-resp-str> [<timeout_msecs>]
X    a.  -v turns on script debugging
X    b.  multiple v's (e.g., -v -vv, -vvv) up to 3 'v's produce
X        more verbose debug output
X    c.  <exp-resp-str> is as defined in /usr/lib/ecu/Dialers:
X        Meaning of some of the escape characters:
X        \p - pause (approximately 1/4-1/2 second delay)
X        \d - delay (2 seconds)
X        \D - phone number/token
X        \T - phone number with Dialcodes and character translation
X        \N - null byte
X        \K - insert a BREAK
X        \E - turn on echo checking (for slow devices)
X        \e - turn off echo checking
X        \r - carriage return
X        \c - no new-line
X        \n - send new-line
X        \nnn - send octal number
X        Speed - Hayes-specific speed-adaptive connect handler
X    d.  <timeout_msecs> specifies the optional delay for waiting
X        on expect strings;  it defaults to 10 seconds; the timeout
X        for 'Speed' expects is fixed at 90 seconds
X
X2.  Added partial support for HDB Dialers scripts
X    a.  \E echo checking is not actually performed, but
X        essentially the same effect is achieved by pacing
X        output to the modem
X    b.  The Speed expect string works only for modems
X        which return "CONNECT xxxx" connect result codes.
X    c.  Modems which return status codes during dialing, such
X        as the Trailblazer RRING, will cause Speed processing
X        to fail. Fortunately, RRING can be disabled (you should use 
X        the dialTBIT program anyway)
X    d.  the timeout for non-Speed expects is 10 seconds
X    e.  the timeout for 'Speed' expects is 90 seconds
X
X
X3.  Note, the SCO HDB documentation states that a dialer
X    program may be specified by either a complete pathname
X    or a partial pathname in /usr/lib/uucp.  Ecu requires a
X    complete pathname.
X
X4.  The string functions %dayz, %monthz, %datez, %timez and %timesz
X    have been added to retreive UTC (Z) date and time values.
X
X5.  If no dialing action results from a visit to the dialing directory,
X    the previous receiver screen contents is redisplayed.
X
X6.  The 'P' option to the 'fi' (file insert) interactive command
X    has been added.  In this mode, the file is sent character-by-
X    character to the line with 20 milliseconds pacing between each
X    character.
X
X7.  Previously, if you started ecu on an HDB machine and no line was
X    available at the specified (or default) baudrate, ecu would exit
X    with an error message.  The workaround was to explicitly state the
X    desired device with a -l argument.  The error (now as a warning) is
X    still printed, but the setup screen or initial procedure is allowed
X    to execute with tty1a forced to be the line (though this will likely
X    fail if tty1a is in Devices since ecu has already determined tty1a
X    is busy).
X
X8.  When a string is requested from the keyboard, the Cursor Left,
X    Cursor Right and Ins keys are functional, allowing editing of the
X    string.  Pressing Ins toggles insert mode.  In non-curses modes,
X    (e.g., after HOME pressed and before Enter) ^L (or ^R) displays the
X    insert mode state and redisplays the string, after which editing may
X    continue.
X
X9.  Though not appearing on the help line, the cursor up and cursor down
X    keys work in the dialing directory in a fashion similar to 'u' and 'd',
X    respectively.
X
X10. Warning: using vidi(C) to change the screen configuration while
X    ecu is running, (e.g. Home !vidi xxx) can cause the ecu to later
X    fault and dump core.  Why this occurs is not known yet.
X
X11. After pressing Home, pressing it again gives you access to a 
X    command history mechanism.  Pressing cursor up and cursor down
X    while in this mode causes less and more recent commands to be displayed.
X    You can use Ins, Cursor Left, Cursor Right and Backspace, ^L/^R to
X    edit the old entry as desired, and then press Enter. (see #8 above).
X    Users of ksh will find this a familiar feature.
X
X--------------------------------------------------------------------
X
XChanges and fixes since '2.80'
X
X1.  It was not possible to interrupt the built-in modem dialer
X    modem initialization sequence.  SIGINT will do it now.
X
X2.  A Zmodem window size may now be specified when sending files.
X    The file transfer status screen shows the number of unacknowleged
X    bytes which have been sent.  If full streaming is allowed (window
X    size of zero), then this size will match the file position until
X    the transfer is complete or the receiver sends a ZRPOS.
X
X3.  Output generated by procedures is now written to any active receiver
X    log file in addition to any active procedure log file.
X
X4.  Just a note: on 286 systems you make have to use makeL, since
X    make is a small model (medium?) and makeL is a large model
X    program.
X
X5.  The dependency of eculine.c on sys/select.h has been removed.
X    If you re-'make depend', you probably won't have this problem
X    show up again (a side effect of make depend is that it misses
X    '# include' and I have patched eculine.c to use this).
X
X6.  A new command, xon, has been added (both interactive and procedure
X    versions).  The format is:
X         xon <arg>
X    where <arg> is on    input and output flow control
X                   off   no flow control
X                   in    input flow control
X                   out   output flow control
X    If <arg> is omitted from the interactive command, the current
X    flow control status is displayed.  This command is documented in
X    the patched built-in help file and nroff txt files, but no pre-
X    printed manual changes were issued with this release.
X
X7.  If you are not using a 43-line screen, the list of commands
X    displayed by the interactive 'help' command is truncated.  I
X    apologize; this problem will be solved Real Soon Now.
X
XChanges since ecu 2.80 patchlevel 1
X
X1.  The built-in help system was reworked.  Interactive commands are
X    now divided into four categories: general, communications-related,
X    transfer-related and procedure-related.  The help command asks for
X    a category and displays the appropriate subset.
X
X2.  The built-in help file (ecuhelp.data) was revised.
X
XChanges since ecu 2.80 patchlevel 2
X
X1.  Patch 3 added a window mode selection to the sz file transfer menu;
X    also, the unacknowledged data quantity (called "window") was
X    added to the sz file transfer display.
X
XChanges since ecu 2.80 patchlevel 3
X
X1.  A problem with passing arguments to an initial procedure was
X    fixed.  Getopt() is now used, which requires that all switch
X    command arguments must precede the non-switch arguments.
X    This was not true in previous revisions of ecu.
X
X2.  A new (non-standard) escape sequence has been added to the
X    expresp procedure command.  \m### causes a ### millisecond delay.
X    Note this adds an ambiguity to the syntax of the send string:
X    you may not follow an \m delay with a literal digit to send.
X    For example, suppose you wish to delay 300 missileconds then
X    send "4A".  \m3004A will delay for 3004 (approximately) milliseconds,
X    then send an "A".  You must, instead, use \m300\034A to achieve
X    the desired result.
X
X    Also, a string of the form ~t[##] or ~m[##] may be prepended to
X    any expect vstring to change the timeout to ## seconds or milliseconds,
X    respectively.  '~t[8]gin:--~m[800]gin:' waits 8 seconds for
X    'gin:' and if not found, sends a carriage return and waits
X    an additional 800 milliseconds.
X
X3.  The method of choosing a shared memory segment key changed.
X    Previously, ftok() was used.  Now, the algorithm is 
X        0xEC000000L | getpid();
X
X4.  The -D switch has been added to cause ecu to terminate
X    unconditionally upon completion of an initial procedure (-p).
X
XChanges since ecu 2.80 patchlevel 4
X
X1.  The malloc library is used, resulting in faster procedure
X    execution.
X
X2.  Restrictions on string operations limiting useful string length
X    to 256 characters have been lifted.  New restrictions limit
X    strings to 5120 characters in length :-).  This required some
X    major redesign and is responsible for the reissue of the entire
X    ECU program rather than merely patches.
X
X3.  A new procedure command, 'gosub' has been added, allowing
X    subroutines within a procedure file.
X
X    #---------
X    # example
X    #---------
X        echo 'main'; gosub SUB; echo 'back to main'
X        return           | return from proc
X
X    SUB
X        echo 'sub'
X        gosub SUB2
X        echo 'back to sub'
X        return           | return from subroutine
X
X
X    SUB2
X        echo 'sub2'
X        return           | return from subroutine
X
X4.  Other minor unreported bugs were fixed.
X
SHAR_EOF
$TOUCH -am 1124202690 'ANCIENTHISTORY' &&
chmod 0644 ANCIENTHISTORY ||
echo 'restore of ANCIENTHISTORY failed'
Wc_c="`wc -c < 'ANCIENTHISTORY'`"
test 13617 -eq "$Wc_c" ||
	echo 'ANCIENTHISTORY: original size 13617, current size' "$Wc_c"
# ============= ESOTERIC ==============
echo 'x - extracting ESOTERIC (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'ESOTERIC' &&
XThis interesting article appeared last summer:  much of the wisdom
Xapplys to the ECU procedure language :-)
X
X> From: guy@auspex.auspex.com (Guy Harris)
X> Newsgroups: comp.unix.questions
X> Subject: Re: Funny kill -9 behaviour
X> Message-ID: <3920@auspex.auspex.com>
X> Date: 18 Aug 90 21:27:07 GMT
X> References: <909@sagpd1.UUCP>
X> Organization: Auspex Systems, Santa Clara
X> Lines: 16
X> 
X> >What I want to know is why in the hay does this happen?
X> 
X> Because the C shell is flakier than a snowstorm.  To quote the BUGS
X> section of the SunOS 4.0.3 manual page (this quote is also in the S5R4
X> "csh" manual page):
X> 
X>      Although robust enough for general use, adventures into  the
X>      esoteric  periphery  of  the  C  shell may reveal unexpected
X>      quirks.
X> 
X> which translates as "the C shell is flakier than a snowstorm."
SHAR_EOF
$TOUCH -am 1226052890 'ESOTERIC' &&
chmod 0644 ESOTERIC ||
echo 'restore of ESOTERIC failed'
Wc_c="`wc -c < 'ESOTERIC'`"
test 835 -eq "$Wc_c" ||
	echo 'ESOTERIC: original size 835, current size' "$Wc_c"
# ============= Make.ecu ==============
echo 'x - extracting Make.ecu (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'Make.ecu' &&
X#  CHK=0x71D0
X#+-------------------------------------------------------------------
X# Makefile - Makefile for ecu and related programs
X# wht@n4hgf.Mt-Park.GA.US
X#--------------------------------------------------------------------
X# to make, cp this file to Makefile and edit it (see README),
X# su root (if necessary to get write access to $(LBIN))
X# make tools
X# back to 'ordinary mortal'
X# make
X# su root (necessary)
X# make install
X#--------------------------------------------------------------------
X# NOTE: under UNIX, cc defines both M_UNIX and M_XENIX.  ecu.h and
X# sysdep.c remove M_XENIX under UNIX makes so that it is defined
X# only on XENIX systems.  Nevertheless, every effort is made to
X# use M_UNIX over M_XENIX in code so that this feature is not
X# counted on too much.
X#
X# If you are not using cc, be sure to define in CFLAGS
X#   M_UNIX for UNIX
X#   M_XENIX for XENIX (alone)
X#   M_I86 for every target
X#   M_I286 for 286 targets
X#   M_I386 for 386 targets
X#
X# This list may be incomplete and the header files and this code make
X# free use of the excellent SCO cc-provided #defines, so you may lose
X# if you are not using cc, but then you probably already are familiar
X# with the problem.
X#--------------------------------------------------------------------
X# -Oi (thus -Ox) is _BROKEN_ as of this writing.  strcpy() often fails
X# if the second argument is other than a simple character pointer
X# e.g. strcpy(str1,strarray[x+1]);
X#--------------------------------------------------------------------
X# VERY IMPORTANT: This make file has the ability to remake 
X# lint_args.h by 'make lint'' ... but don't do it on a UNIX system
X# since MSC 5 -Zg has been broken since forever and cannot do the
X# job .... it works OK on XENIX systems .... if you plan to remake
X# lint_args.h, please do squirrel away the release copy first
X#--------------------------------------------------------------------
X#+:EDITS:
X#:11-28-1990-19:45-wht@n4hgf-improve M_ dependency description
X#:10-20-1990-14:30-wht@n4hgf-fix bugs found by tbetz@upaya
X#:08-14-1990-20:42-wht@n4hgf-ecu3.00-flush old edit history
X
X#-------------------- configurable parameters -----------------------
X#--> set LBIN to your local bin directory path
XLBIN = /usr/local/bin
X
X#--> set ECULIBDIR to the desired location of the ecu library
X#    directory (normally /usr/lib/ecu)
X#    you may have to make /usr/local/lib by hand
X#    IF YOU CHANGE IT, ALSO CHANGE IT IN ecu.h
XECULIBDIR = /usr/local/lib/ecu
X
X#--> leave commented unless you have my morse speaker driver
X#MORSE=-DMORSE
X
X#--> uncomment if you have the crypt library. NOTE: minimal use is
X#    made of crypt ... Read the note in README.  You probably want
X#    to leave this commented unless you want the best protection you
X#    can get against deviant mutant ninja hackers :-)
X#CRYPT=-DCRYPT
X#LCRYPT=-lcrypt
X
X#--> comment out if you have a working select(S) (for serial lines;
X#    2.3.1 has a broken one that may be fixable: see README; 2.3.2
X#    has a working select(S) for serial lines and a fix from SCO
X#    for pipes [ecu doesn't select() on pipes])
X#    This is ignored for UNIX, where select(S) works fine
XNOSEL=-DNO_SELECT
X
X#--> comment out if you do not want the automatic procedure execution
X#    feature when connecting to a system (see ecu.man dial command)
XADPROC=-DAUTO_DIAL_PROC
X
X#--> uncomment out if you want source-level debugging information
X#    (386 only)
X#ZI=-Zi
X#--------------------------------------------------------------------
X
X#make some composites based on above
XSYSTEM = `sysdep =M_UNIX UNIX/386 =M_I386 Xenix/386 =M_I286 Xenix/286`
XU3C = $(ZI) -Octl -CSON
XX3C = $(ZI) -Ot -CSON
XX2C = -M2let32 -LARGE -F 8000 -Ot
XCURSES = -DM_TERMCAP
XCURSES_LIB = -ltcap -ltermlib
XCOMFLAGS = -i `sysdep =M_UNIX $(U3C) =M_I386 $(X3C) =M_I286 $(X2C)`
XCFLAGS = -DLINT_ARGS $(CURSES) $(CRYPT) $(MORSE) $(NOSEL) $(ADPROC) $(COMFLAGS)
XLDFLAGS = `sysdep =M_I386 =M_I286 -SEG 256` -lx -lmalloc $(LCRYPT) $(CURSES_LIB)
X
XECUSHARNAME=ecux3
XMANSHARNAME=ecumanx3
X
X.SUFFIXES:
X.SUFFIXES: .o .c .h .l
XSHELL = /bin/sh
X
X.c.o:;	/bin/time $(CC) -c $(CFLAGS) $*.c 
X
XSHARFLS = \
XREADME \
XANCIENTHISTORY \
XESOTERIC \
XMakefile *.c *.h \
Xhelp/Makefile  help/*.{h,c,src} \
Xecufriend/{Makefile,*.{c,h}} \
Xecuungetty/Makefile ecuungetty/*.{c,h} \
Xmapkey/README mapkey/keys.usa.ecu.d\
Xbperr/bperr.c \
Xz/Makefile z/*.{c,h} sea/Makefile sea/*.{c,h,doc,imp} \
Xgendial/Makefile  gendial/*.{h,c} \
Xxsel386/* \
Xshar.fls */*.fls \
Xckermit/* doc/{*.txt,runoff} models/* zgcc mkoldproto.l'
X
XSRC	= \
X	bamboozle.c\
X	cmdtbl.c\
X	ecu.c\
X	ecuLCK.c\
X	ecuchdir.c\
X	ecudump.c\
X	ecufinsert.c\
X	ecufkey.c\
X	ecufork.c\
X	ecuDCE.c\
X	eculine.c\
X	eculock.c\
X	ecunumrev.c\
X	ecuicmaux.c\
X	ecuicmhelp.c\
X	ecuicmhist.c\
X	ecuicmd.c\
X	ecuphone.c\
X	ecuphrase.c\
X	ecurcvr.c\
X	ecuscrdump.c\
X	ecusetup.c\
X	ecushm.c\
X	ecusighdl.c\
X	ecutcap.c\
X	ecutime.c\
X	ecutty.c\
X	ecuuclc.c\
X	ecuusage.c\
X	ecuutil.c\
X	ecuwinutil.c\
X	ecuxenix.c\
X	ecuxfer.c\
X	esdutil.c\
X	esiointf.c\
X	expresp.c\
X	feval.c\
X	gint.c\
X	gstr.c\
X	hdbintf.c\
X	logevent.c\
X	nonansikey.c\
X	pcmd.c\
X	pcmdif.c\
X	pcmdfile.c\
X	pcmdtty.c\
X	pcmdwhile.c\
X	pcmdxfer.c\
X	poutput.c\
X	pprintf.c\
X	proc.c\
X	proc_error.c\
X	procframe.c\
X	regexp.c\
X	utmpstat.c\
X	var.c
X
XOBJ	= \
X	bamboozle.o\
X	cmdtbl.o\
X	ecu.o\
X	ecuLCK.o\
X	ecudump.o\
X	ecuchdir.o\
X	ecufinsert.o\
X	ecufkey.o\
X	ecufork.o\
X	ecuDCE.o\
X	eculine.o\
X	eculock.o\
X	ecunumrev.o\
X	ecuicmaux.o\
X	ecuicmhelp.o\
X	ecuicmhist.o\
X	ecuicmd.o\
X	ecuphone.o\
X	ecuphrase.o\
X	ecurcvr.o\
X	ecuscrdump.o\
X	ecusetup.o\
X	ecushm.o\
X	ecusighdl.o\
X	ecutcap.o\
X	ecutime.o\
X	ecutty.o\
X	ecuuclc.o\
X	ecuusage.o\
X	ecuutil.o\
X	ecuwinutil.o\
X	ecuxenix.o\
X	ecuxfer.o\
X	esdutil.o\
X	esiointf.o\
X	expresp.o\
X	feval.o\
X	gint.o\
X	gstr.o\
X	hdbintf.o\
X	logevent.o\
X	nonansikey.o\
X	pcmd.o\
X	pcmdif.o\
X	pcmdfile.o\
X	pcmdtty.o\
X	pcmdwhile.o\
X	pcmdxfer.o\
X	poutput.o\
X	pprintf.o\
X	proc.o\
X	proc_error.o\
X	procframe.o\
X	regexp.o\
X	utmpstat.o\
X	var.o
X
Xall: check_tools ecuhelp ecu ecuug ecuz ecus
X
Xtools: $(LBIN)/sysdep $(LBIN)/afterlint $(LBIN)/mkoldproto
X
Xcheck_tools:
X	@[ -x $(LBIN)/sysdep ] || echo '"make tools" first, with write access to $(LBIN)'
X	@[ -x $(LBIN)/sysdep ] || exit 1
X	touch check_tools
X
Xecuhelp: check_tools
X	cd help;make
X
Xecuz: check_tools
X	cd z;make
X
Xecus: check_tools
X	cd sea;make
X
Xbperr/bperr: check_tools bperr/bperr.c
X	cd bperr;make bperr
X
Xecu: check_tools $(OBJ)
X	echo 'char *makedate="'`date` $(SYSTEM)'";'  >makedate.c
X	$(CC) -c $(CFLAGS) makedate.c; rm makedate.c
X	rm -rf $@
X	$(CC) -o $@ $(COMFLAGS) makedate.o $(OBJ) $(LDFLAGS)
X	rm makedate.o
X
Xecuug: check_tools
X	cd ecuungetty;make CRYPT=$(CRYPT) LCRYPT=$(LCRYPT)
X
Xproc_error.c: ecuerror.h
X	make bperr/bperr
X	bperr/bperr
X
X$(OBJ): ecushm.h
X
Xecu.fls: $(SRC) Makefile
X	ls $(SRC) >ecu.fls
X
Xlint: ecu.fls
X	echo ' ' > lint_args.h
X	csh zgcc ecu.fls lint_args.h $(CFLAGS)
X
Xinstall: all ecuhelp ecuz ecus #run as root
X	cp ecu z/ecusz z/ecurz sea/ecusea $(LBIN)
X	chmod 755 $(LBIN)/ecu $(LBIN)/ecusz $(LBIN)/ecurz $(LBIN)/ecusea
X	-mkdir $(ECULIBDIR)
X	-chmod 755 $(ECULIBDIR)
X	cd ecuungetty;make CRYPT=$(CRYPT) LCRYPT=$(LCRYPT) ECULIBDIR=$(ECULIBDIR)\
X		install
X	cp help/ecuhelp.data $(ECULIBDIR)
X	@echo "--------------------------------------------------------------------"
X	@echo "| edit $(ECULIBDIR)/*.mi for your tty lines per ecu.man"
X	@echo "--------------------------------------------------------------------"
X
Xshar.fls:
X	csh -c 'ls $(SHARFLS) | sort > shar.fls'
X
X# for shar 3
Xshar:
X	csh -c 'shar -c -s "wht@n4hgf.Mt-Park.GA.US" -a \
X-n$(ECUSHARNAME) -l55 -o/tmp/$(ECUSHARNAME) $(SHARFLS) 
X	shar -c -s "wht%n4hgf@gatech.ecu" -a \
X-n$(MANSHARNAME) -L55 -o/tmp/$(MANSHARNAME) doc/ecu.man
X
X# tools for making ecu
X$(LBIN)/sysdep: sysdep.c	# uname -p undocumented on UNIX but works
X	@echo 'building sysdep for' `uname -p`
X	[ `uname -p` != i80286 ] || $(CC) -O -M2 sysdep.c -o $@
X	[ `uname -p`  = i80286 ] || $(CC) -O     sysdep.c -o $@
X
X$(LBIN)/afterlint: afterlint.c
X	$(CC) -O afterlint.c -o $@
X
X$(LBIN)/mkoldproto: mkoldproto.l
X	lex mkoldproto.l
X	$(CC) lex.yy.c -ll -o $@
X	rm lex.yy.?
X
X#
X#
X#
X# MAKE DEPEND: regenerate .o:.h dependencies automatically
X#
Xdepend:
X		rm -f depend.tmp
X		if test '$(SRC)' ;\
X		then (grep '^#include' $(SRC) \
X		| sed	-e 's?:[^<]*<\([^>]*\)>.*?: /usr/include/\1?'\
X			-e 's?:[^"]*"\([^"]*\)".*?: \1?'\
X			-e 's?\(.*\)\.c?\1.o?'\
X			-e 's?ecuerror.h?ecu.h?'\
X		 >> depend.tmp) ;\
X		fi
X
X		echo '/^# DO NOT DELETE THIS LINE' >exdep.tmp
X		echo '.+1,$$d' >>exdep.tmp
X		echo 'r depend.tmp' >> exdep.tmp
X		echo 'w' >> exdep.tmp
X		cp Makefile Makefile.new
X		ex Makefile.new < exdep.tmp
X		rm exdep.tmp depend.tmp
X		echo '#	DEPENDENCIES MUST END AT END OF	FILE' >>Makefile.new
X		echo '#	IF YOU PUT STUFF HERE IT WILL GO AWAY'>>Makefile.new
X		echo '#	see make depend	above'>>Makefile.new
X		mv Makefile Makefile.bak
X		mv Makefile.new Makefile
X
X# DO NOT DELETE THIS LINE
Xcmdtbl.o: ecucmd.h
Xecu.o: ecu.h
Xecu.o: esd.h
Xecu.o: proc.h
Xecu.o: ecukey.h
Xecu.o: ecuxkey.h
Xecu.o: ecuhangup.h
Xecu.o: patchlevel.h
Xecu.o: /usr/include/sys/param.h
XecuLCK.o: ecu.h
XecuLCK.o: utmpstatus.h
Xecuchdir.o: ecu.h
Xecuchdir.o: ecukey.h
Xecuchdir.o: /usr/include/pwd.h
Xecudump.o: ecu.h
Xecufinsert.o: ecu.h
Xecufinsert.o: ecukey.h
Xecufkey.o: ecu.h
Xecufkey.o: ecukey.h
Xecufkey.o: ecufkey.h
Xecufkey.o: ecuxkey.h
Xecufkey.o: ecufork.h
Xecufork.o: ecu.h
Xecufork.o: ecufork.h
XecuDCE.o: ecu.h
XecuDCE.o: ecukey.h
XecuDCE.o: esd.h
XecuDCE.o: var.h
XecuDCE.o: ecupde.h
XecuDCE.o: ecu.h
XecuDCE.o: relop.h
Xeculine.o: ecu.h
Xeculine.o: ecukey.h
Xeculine.o: ecuhangup.h
Xeculock.o: ecu.h
Xeculock.o: utmpstatus.h
Xecuicmaux.o: ecu.h
Xecuicmaux.o: ecu.h
Xecuicmaux.o: ecucmd.h
Xecuicmhelp.o: /usr/include/curses.h
Xecuicmhelp.o: ecu.h
Xecuicmhelp.o: ecucmd.h
Xecuicmhelp.o: ecukey.h
Xecuicmhelp.o: pc_scr.h
Xecuicmhelp.o: stdio_lint.h
Xecuicmhist.o: /usr/include/curses.h
Xecuicmhist.o: pc_scr.h
Xecuicmhist.o: ecu.h
Xecuicmhist.o: ecukey.h
Xecuicmhist.o: ecuxkey.h
Xecuicmd.o: ecu.h
Xecuicmd.o: esd.h
Xecuicmd.o: ecufkey.h
Xecuicmd.o: patchlevel.h
Xecuicmd.o: ecucmd.h
Xecuphone.o: /usr/include/curses.h
Xecuphone.o: ecu.h
Xecuphone.o: pc_scr.h
Xecuphone.o: ecupde.h
Xecuphone.o: ecukey.h
Xecuphone.o: ecuxkey.h
Xecuphone.o: ecuhangup.h
Xecuphone.o: utmpstatus.h
Xecuphone.o: dvent.h
Xecuphone.o: esd.h
Xecuphone.o: var.h
Xecuphrase.o: ecu.h
Xecurcvr.o: ecu.h
Xecurcvr.o: ecukey.h
Xecuscrdump.o: ecu.h
Xecuscrdump.o: ecukey.h
Xecuscrdump.o: pc_scr.h
Xecusetup.o: /usr/include/curses.h
Xecusetup.o: patchlevel.h
Xecusetup.o: ecu.h
Xecusetup.o: ecukey.h
Xecusetup.o: ecuxkey.h
Xecusetup.o: pc_scr.h
Xecushm.o: ecu.h
Xecushm.o: /usr/include/sys/ipc.h
Xecushm.o: /usr/include/sys/shm.h
Xecusighdl.o: ecu.h
Xecusighdl.o: ecufork.h
Xecutcap.o: ecu.h
Xecutcap.o: ecukey.h
Xecutcap.o: pc_scr.h
Xecutime.o: /usr/include/sys/types.h
Xecutime.o: /usr/include/time.h
Xecutime.o: /usr/include/sys/timeb.h
Xecutty.o: ecu.h
Xecutty.o: esd.h
Xecutty.o: ecufkey.h
Xecutty.o: ecukey.h
Xecutty.o: ecuxkey.h
Xecutty.o: ecu.h
Xecutty.o: ecuhangup.h
Xecutty.o: /usr/include/sys/machdep.h
Xecutty.o: ecutty.h
Xecuusage.o: /usr/include/stdio.h
Xecuusage.o: ecuhangup.h
Xecuutil.o: ecu.h
Xecuutil.o: ecuhangup.h
Xecuutil.o: ecufork.h
Xecuutil.o: /usr/include/pwd.h
Xecuwinutil.o: /usr/include/curses.h
Xecuwinutil.o: ecukey.h
Xecuwinutil.o: ecuxkey.h
Xecuwinutil.o: ecuhangup.h
Xecuwinutil.o: pc_scr.h
Xecuxenix.o: ecu.h
Xecuxenix.o: ecukey.h
Xecuxenix.o: ecufkey.h
Xecuxenix.o: ecuxkey.h
Xecuxenix.o: ecufork.h
Xecuxenix.o: esd.h
Xecuxfer.o: /usr/include/curses.h
Xecuxfer.o: ecu.h
Xecuxfer.o: ecukey.h
Xecuxfer.o: ecuxkey.h
Xecuxfer.o: ecu.h
Xecuxfer.o: pc_scr.h
Xesdutil.o: /usr/include/ctype.h
Xesdutil.o: ecu.h
Xesdutil.o: ecu.h
Xesdutil.o: esd.h
Xesiointf.o: ecu.h
Xesiointf.o: ecu.h
Xesiointf.o: esd.h
Xexpresp.o: ecu.h
Xexpresp.o: ecu.h
Xexpresp.o: esd.h
Xexpresp.o: var.h
Xexpresp.o: proc.h
Xfeval.o: ecu.h
Xfeval.o: ecu.h
Xfeval.o: esd.h
Xfeval.o: proc.h
Xfeval.o: var.h
Xgint.o: ecu.h
Xgint.o: ecu.h
Xgint.o: esd.h
Xgint.o: var.h
Xgstr.o: ecu.h
Xgstr.o: ecu.h
Xgstr.o: esd.h
Xgstr.o: var.h
Xhdbintf.o: ecu.h
Xhdbintf.o: esd.h
Xhdbintf.o: var.h
Xhdbintf.o: ecuhangup.h
Xhdbintf.o: utmpstatus.h
Xhdbintf.o: ecuungetty.h
Xhdbintf.o: dvent.h
Xhdbintf.o: dlent.h
Xhdbintf.o: dialprog.h
Xhdbintf.o: /usr/include/errno.h
Xhdbintf.o: /usr/include/utmp.h
Xlogevent.o: /usr/include/stdio.h
Xlogevent.o: /usr/include/sys/locking.h
Xlogevent.o: stdio_lint.h
Xlogevent.o: lint_args.h
Xnonansikey.o: ecu.h
Xnonansikey.o: ecukey.h
Xnonansikey.o: ecufkey.h
Xnonansikey.o: ecuxkey.h
Xnonansikey.o: ecufork.h
Xpcmd.o: ecu.h
Xpcmd.o: ecu.h
Xpcmd.o: ecuhangup.h
Xpcmd.o: ecukey.h
Xpcmd.o: esd.h
Xpcmd.o: var.h
Xpcmd.o: proc.h
Xpcmdif.o: /usr/include/ctype.h
Xpcmdif.o: ecu.h
Xpcmdif.o: ecu.h
Xpcmdif.o: esd.h
Xpcmdif.o: var.h
Xpcmdif.o: proc.h
Xpcmdif.o: relop.h
Xpcmdfile.o: ecu.h
Xpcmdfile.o: ecukey.h
Xpcmdfile.o: ecu.h
Xpcmdfile.o: esd.h
Xpcmdfile.o: var.h
Xpcmdfile.o: proc.h
Xpcmdtty.o: ecu.h
Xpcmdtty.o: ecu.h
Xpcmdtty.o: esd.h
Xpcmdtty.o: ecutty.h
Xpcmdwhile.o: /usr/include/ctype.h
Xpcmdwhile.o: ecu.h
Xpcmdwhile.o: ecu.h
Xpcmdwhile.o: esd.h
Xpcmdwhile.o: var.h
Xpcmdwhile.o: proc.h
Xpcmdwhile.o: relop.h
Xpcmdxfer.o: ecu.h
Xpcmdxfer.o: ecukey.h
Xpcmdxfer.o: ecu.h
Xpcmdxfer.o: esd.h
Xpcmdxfer.o: var.h
Xpcmdxfer.o: proc.h
Xpoutput.o: ecu.h
Xpoutput.o: ecukey.h
Xpoutput.o: ecu.h
Xpoutput.o: esd.h
Xpprintf.o: /usr/include/stdio.h
Xpprintf.o: /usr/include/varargs.h
Xproc.o: /usr/include/ctype.h
Xproc.o: ecu.h
Xproc.o: ecu.h
Xproc.o: esd.h
Xproc.o: var.h
Xproc.o: proc.h
Xproc.o: ecucmd.h
Xproc_error.o: ecu.h
Xproc_error.o: ecu.h
Xprocframe.o: /usr/include/ctype.h
Xprocframe.o: ecu.h
Xprocframe.o: ecukey.h
Xprocframe.o: ecu.h
Xprocframe.o: esd.h
Xprocframe.o: var.h
Xprocframe.o: proc.h
Xregexp.o: /usr/include/stdio.h
Xregexp.o: stdio_lint.h
Xregexp.o: lint_args.h
Xregexp.o: ecu.h
Xregexp.o: esd.h
Xregexp.o: var.h
Xregexp.o: /usr/include/setjmp.h
Xutmpstat.o: ecu.h
Xutmpstat.o: ecuhangup.h
Xutmpstat.o: utmpstatus.h
Xutmpstat.o: ecuungetty.h
Xutmpstat.o: dialprog.h
Xutmpstat.o: /usr/include/errno.h
Xutmpstat.o: /usr/include/utmp.h
Xvar.o: ecu.h
Xvar.o: esd.h
Xvar.o: var.h
Xvar.o: proc.h
Xvar.o: ecukey.h
Xvar.o: ecu.h
X#	DEPENDENCIES MUST END AT END OF	FILE
X#	IF YOU PUT STUFF HERE IT WILL GO AWAY
X#	see make depend	above
SHAR_EOF
$TOUCH -am 1226052690 'Make.ecu' &&
chmod 0644 Make.ecu ||
echo 'restore of Make.ecu failed'
Wc_c="`wc -c < 'Make.ecu'`"
test 13973 -eq "$Wc_c" ||
	echo 'Make.ecu: original size 13973, current size' "$Wc_c"
# ============= afterlint.c ==============
echo 'x - extracting afterlint.c (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'afterlint.c' &&
X/* CHK=0xC2C5 */
X/*+-------------------------------------------------------------------------
X	afterlint.c -- process -Zg output
X
XUse with zgcc:
X
X	#!/bin/csh
X	#zgcc -- build prototyping "LINT_ARGS"
X	echo C sources in $1';' result file $2
X	rm -f zg.t
X	foreach i(`cat $1`)
X	cc -DBUILDING_LINT_ARGS -Zg $argv[3-] $i > zg1.t
X	sort zg1.t > zg2.t
X	echo '/ *' $i '* /' >> zg.t    #remove spaces inside comment markers
X	cat zg2.t >> zg.t
X	end
X	afterlint zg.t $2
X	rm -f zg.t zg?.t
X	echo Output in $2
X
X--------------------------------------------------------------------------*/
X/*+:EDITS:*/
X/*:11-18-1990-21:15-wht@n4hgf-clobber 'extern  ' in prototypes */
X/*:07-13-1988-19:50-wht-creation */
X
X#include <stdio.h>
X
X#define ff fprintf
X
X#ifdef BSD4
X#include <sys/time.h>
X#define strchr index
X#define strrchr rindex
Xchar *index();
Xchar *rindex();
X/**************************/
X#else	/* assuming XENIX */
X/**************************/
X#include <time.h>
X#include <sys/types.h>
X#include <sys/timeb.h>
Xchar *strchr();
Xchar *strrchr();
X#endif	/* system dependencies */
X
Xlong time();
Xstruct tm *localtime();
X
X/*+-------------------------------------------------------------------------
X	emit_editnote(fp)
X--------------------------------------------------------------------------*/
Xvoid
Xemit_editnote(fp)
XFILE	*fp;
X{
X	struct tm *ltime;
X	long cur_time;
X#ifdef XENIX
X#ifdef MESSED_UP_DST
X	struct timeb tp;
X#endif
X#endif
X
X	cur_time = time((long *)0);
X
X#ifdef XENIX
X#ifdef MESSED_UP_DST
X	ftime(&tp);				/* localtime() does not know about DST */
X	if(tp.dstflag)			/* so we adjust with ftime, which does know */
X		cur_time += 3600L;	/* problem in BSD too, but no ftime there */
X#endif
X#endif
X
X	ltime = localtime(&cur_time);
X
X	fputs("/*+:EDITS:*/\n",fp);
X
X	ff(fp,"/*:%02d-%02d-%04d-%02d:%02d-afterlint-creation */\n",
X	    ltime->tm_mon+1,ltime->tm_mday,ltime->tm_year + 1900,
X	    ltime->tm_hour,ltime->tm_min);
X
X}	/* end of emit_editnote */
X
X/*+-------------------------------------------------------------------------
X	main(argc,argv,envp)
X--------------------------------------------------------------------------*/
Xmain(argc,argv,envp)
Xint argc;
Xchar	**argv;
Xchar	**envp;
X{
X	register char *cptr;
X	register FILE *fpin;
X	register FILE *fpout;
X	char	buf[256];
X	char	*basename;
X
X	if(argc < 2)
X	{
X		ff(stderr,"usage: afterlint <infile> [<outfile>]\n");
X		ff(stderr,"if outfile not supplied, output is to stdout\n");
X		exit(1);
X	}
X
X	if(!(fpin = fopen(argv[1],"r")))
X	{
X		perror(argv[1]);
X		exit(1);
X	}
X
X	if(argc > 2)
X	{
X		if(!(fpout = fopen(argv[2],"w")))
X		{
X			perror(argv[2]);
X			exit(1);
X		}
X		basename = argv[2];
X	}
X	else
X		fpout = stdout;
X
X	ff(fpout,
X	    "/*+-----------------------------------------------------------------------\n");
X	if(argc > 2)
X		ff(fpout,"\t%s\n",basename);
X	else
X		ff(fpout,"\tfunction declarations\n",basename);
X	ff(fpout,
X	    "------------------------------------------------------------------------*/\n");
X
X	emit_editnote(fpout);
X	ff(fpout,"\n");
X	ff(fpout,"#ifndef BUILDING_LINT_ARGS\n");
X	ff(fpout,"#ifdef LINT_ARGS\n\n");
X
X	while(fgets(buf,sizeof(buf),fpin))
X	{
X		cptr = (strncmp(buf,"/*global*/  ",12)) ? buf : buf + 12;
X		cptr = (strncmp(buf,"extern  ",8)) ? cptr : cptr + 8;
X		cptr = (strncmp(buf,"static  ",8)) ? cptr : cptr + 8;
X		fputs(cptr,fpout);
X	}
X
X	ff(fpout,"\n#else\t\t/* compiler doesn't know about prototyping */\n\n");
X
X	fclose(fpin);
X	fpin = fopen(argv[1],"r");
X
X	while(fgets(buf,sizeof(buf),fpin))
X	{
X		cptr = (strncmp(buf,"/*global*/  ",12)) ? buf : buf + 12;
X		cptr = (strncmp(buf,"extern  ",8)) ? cptr : cptr + 8;
X		cptr = (strncmp(buf,"static  ",8)) ? cptr : cptr + 8;
X		if(strncmp(cptr,"int ",4))
X		{
X			if(strchr(cptr,'('))
X			{
X				while(*cptr != '(')
X					fputc(*cptr++,fpout);
X				fputs("();\n",fpout);
X			}
X			else
X				fputs(cptr,fpout);
X		}
X	}
X
X	ff(fpout,"\n#endif /* LINT_ARGS */\n");
X	ff(fpout,"#endif /* BUILDING_LINT_ARGS */\n");
X	ff(fpout,"\n/* end of %s */\n",
X	    (argc > 2) ? basename : "function declarations");
X
X	fclose(fpin);
X	fclose(fpout);
X	exit(0);
X}	/* end of main */
X
X/* vi: set tabstop=4 shiftwidth=4: */
SHAR_EOF
$TOUCH -am 1224222690 'afterlint.c' &&
chmod 0644 afterlint.c ||
echo 'restore of afterlint.c failed'
Wc_c="`wc -c < 'afterlint.c'`"
test 4060 -eq "$Wc_c" ||
	echo 'afterlint.c: original size 4060, current size' "$Wc_c"
# ============= bamboozle.c ==============
echo 'x - extracting bamboozle.c (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'bamboozle.c' &&
X/*+-------------------------------------------------------------------------
X	bamboozle.c - ecu/ecuungetty protection scheme
X	wht@n4hgf.Mt-Park.GA.US
X--------------------------------------------------------------------------*/
X/*+:EDITS:*/
X/*:08-14-1990-20:39-wht@n4hgf-ecu3.00-flush old edit history */
X
Xchar *crypt(char *,char *);
X
X
X/*+-------------------------------------------------------------------------
X	bamboozle(pid) - build encrypted string based on 'pid'
X
XIf crypt not used, do something pretty basic  (probably enough)
XIf you are paranoid, don't use _ANY_ of these algorithms exactly
X--------------------------------------------------------------------------*/
Xchar *
Xbamboozle(pid)
Xint pid;
X{
X#if defined(CRYPT)
Xchar pidstr[16];
Xchar *cptr;
X
X	sprintf(pidstr,"z%08d",pid);
X	pidstr[0] = 'G';	/* fool strings searchers */
X	cptr = crypt(pidstr,"ba");
X	return(cptr);
X#else				/* probably enough */
Xstatic char pidstr[16];
X	sprintf(pidstr,"b%09da",(int)(((long)pid * 4) / 5));
X	return(pidstr);
X#endif
X
X#ifdef VARIANT_1	/* very paranoid */
Xchar pidstr[16];
Xchar *cptr;
X	sprintf(pidstr,"z%08d",pid);
X	pidstr[0] = 0xFF;	/* fool strings searchers */
X	cptr = crypt(pidstr,pidstr);
X	return(cptr);
X#endif
X#ifdef VARIANT_2	/* not paranoid at all */
Xchar pidstr[16];
X	sprintf(pidstr,"z%08d",pid - 2);
X#endif
X#ifdef VARIANT_3	/* invite trouble :-) */
X	return("I_am_easy");
X#endif
X
X}	/* end of bamboozle */
X
X
X/* vi: set tabstop=4 shiftwidth=4: */
X/* end of bamboozle.c */
SHAR_EOF
$TOUCH -am 1224222690 'bamboozle.c' &&
chmod 0644 bamboozle.c ||
echo 'restore of bamboozle.c failed'
Wc_c="`wc -c < 'bamboozle.c'`"
test 1470 -eq "$Wc_c" ||
	echo 'bamboozle.c: original size 1470, current size' "$Wc_c"
# ============= cmdtbl.c ==============
echo 'x - extracting cmdtbl.c (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'cmdtbl.c' &&
X/*+-------------------------------------------------------------------------
X	cmdtbl.c - interactive/procedure command table data
X	wht@n4hgf.Mt-Park.GA.US
X--------------------------------------------------------------------------*/
X/*+:EDITS:*/
X/*:08-14-1990-20:39-wht@n4hgf-ecu3.00-flush old edit history */
X
X#define DECLARE_P_CMD
X#include "ecucmd.h"
X
X/* vi: set tabstop=4 shiftwidth=4: */
X/* end of cmdtbl.c */
SHAR_EOF
$TOUCH -am 1224222690 'cmdtbl.c' &&
chmod 0644 cmdtbl.c ||
echo 'restore of cmdtbl.c failed'
Wc_c="`wc -c < 'cmdtbl.c'`"
test 413 -eq "$Wc_c" ||
	echo 'cmdtbl.c: original size 413, current size' "$Wc_c"
true || echo 'restore of ecu.c failed'
echo End of part 1, continue with part 2
exit 0
--------------------------------------------------------------------
Warren Tucker, TuckerWare emory!n4hgf!wht or wht@n4hgf.Mt-Park.GA.US
Hacker Extraordinaire  d' async PADs,  pods,  proteins and protocols

exit 0 # Just in case...
-- 
Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
Sterling Software, IMD           UUCP:     uunet!sparky!kent
Phone:    (402) 291-8300         FAX:      (402) 291-4362
Please send comp.sources.misc-related mail to kent@uunet.uu.net.