# libexpect, by Don Libes, National Institute of Standards and Technology
# WINTERP 2.0 Copyright (C) 1994, Enterprise Integration Technologies Corp. and Niels Mayer.
# WINTERP 1.15-1.99, Copyright (c) 1993, Niels P. Mayer.
# WINTERP 1.0-1.14, Copyright (c) 1989-1992 Hewlett-Packard Co. and Niels Mayer.
# 
# Permission to use, copy, modify, distribute, and sell this software and its
# documentation for any purpose is hereby granted without fee, provided that
# the above copyright notice appear in all copies and that both that
# copyright notice and this permission notice appear in supporting
# documentation, and that the name of National Institute of Standards and
# Technology, Don Libes, Enterprise Integration Technologies, 
# Hewlett-Packard Company, or Niels Mayer not be used in advertising or
# publicity pertaining to distribution of the software without specific,
# written prior permission. National Institute of Standards and Technology,
# Don Libes, Enterprise Integration Technologies, Hewlett-Packard Company,
# and Niels Mayer makes no representations about the suitability of this 
# software for any purpose.  It is provided "as is" without express or
# implied warranty.
# 
# NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY, DON LIBES, ENTERPRISE
# INTEGRATION TECHNOLOGIES, HEWLETT-PACKARD COMPANY AND NIELS MAYER
# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THE NATIONAL
# INSTITUTE OF STANDARDS AND TECHNOLOGY, DON LIBES, ENTERPRISE INTEGRATION
# TECHNOLOGIES, HEWLETT-PACKARD COMPANY OR NIELS MAYER BE LIABLE
# FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
# RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
# CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

This is the HISTORY file for expect.  Unfortunately, certain things
are missing because I didn't think about maintaining a history while
this program was still in its infancy.  In particular, a lot of the
sweat and a lot of the different designs I tried early on are not
recorded. - Don Libes

Date	Version	Description
-------	-------	------------------------------------------------------
5/11/92	3.22.6	Added regression paper to ftp archive - published in the 1992
		USENIX San Antonio Proceedings.

		Swapped setpgrp and fork in disconnect command for sysV88.
		According to Dave Schmitt <daves@techmpc.csg.gss.mot.com>,
		original code (right out of Stevens) starts the child with
		closed stdio fds.

		Fixed bug in interact that changed /dev/tty modes even if
		interact was used to connect two completely different ttys.
		Had never been a problem before, but today I wrote some code
		that actually calls interact from cron!  Also, copied the
		experimental fix from 3.22.5 to inter_poll.

		Jeremy Nussbaum <jeremy@world.std.com> says cat needs "-u" in
		kibitz for his HP 8.0 system to work.  I wonder why this has
		never been a problem on earlier HP and other systems?

		Forced Makefile to mark scripts executable.

4/12/92	3.22.5	Fixed bugs reported by Matt Ranney <mjr@uther.Calvin.EDU>
		including a syntax error (!) in expect.c on ecases_inuse.
		I didn't even compile this before pushing out?  He also noted
		some # were not in column 1.

		I put in an experimental fix to interact (only in select
		version currently) to fix when pattern matching from master
		and user needs to continue typing in order to complete match.

4/3/92	3.22.4	Charles Hannum (mycroft@gnu.ai.mit.edu) pointed out that I
		screwed up a comment in the brand new pty_aix3.c.  He also gave
		me a fix for an arg-less expect, which did a malloc(0).  And
		he said that AIX ptys return EOF in yet a new way - read()
		returns -1 with errno == 0.  Yuck.

3/29/92	3.22.3	Jay Schmidgall gave me yet another pty_aix3.c.  He also gave
		ifdefs for POSIX terminal support.

3/18/92	3.22.2	Jay Schmidgall <shmdgljd+@rchland.ibm.com> modified pty_sgi3.c
		to make a pty interface for recent versions of AIX.

		Steve Summit <scs@adam.mit.edu> noted that "trap 0" could
		actually call signal(0...)

		Martin Leisner <Martin_A._Leisner.Henr801C@xerox.com> noted
		that rftp was broken.  It seems I never handled symlinks.  They
		are interesting.  You can't tell from the listing whether they
		are files or directories, so you just have to blindly go ahead
		and assume it's one or the other and see what happens!

3/11/92 3.22.1	In talking to Dave Schmitt ,daves@techmpc.csg.gss.mot.com>,
		realized the documentation for wait had never been updated
		from the way it used to work in v2 (returning any pid).

3/11/92	3.22.0	Another question from Ron, prompted me to find another bug.
		interact -o wrongly manipulated the user buffer at one point.

3/10/92	3.21.0	Ron Young <ron@nevada.edu> found that spawn failed on a
		DECstation 3100 running Ultrix 4.2.  I had forgotten to test
		that cmdfile was valid before comparing against stdin in fix
		related to fflush in 3.20.0.

		While I was on a DECstation, I noticed that it does not accept
		setpgrp(...,0).  Changed 2nd arg to getpid().

3/6/92	3.20.2	Stefan Farestam <farestam@orion.cerfacs.fr> provided a new
		version of pty_sgi.c which uses _getpty.  I renamed the old
		one pty_sgi3.c

3/3/92	3.20.1	Brian Woodson requested I update the dates and version numbers.

3/1/92	3.20.0	Prompted by a question from Ken Mandelberg, added -raw to
		noidle and kibitz script.

		Fixed fflush(cmdfile) again, having been authoritatively told
		by net wisdom that there is no way to portably fflush a shared
		read-stream. (I take back my claim about a bug in HP's fclose!)

		John Sellens gave me some more fixes for non-DEC MIPS OS.

2/22/92	3.19.1	John Sellens <jmsellen@watmath.waterloo.edu> gave me a bug
		fix for NOWAITPID.

2/21/92 3.19.0	Found a bug in HPUX fclose!!  It moves the I/O pointer in the
		shared file table entry!  This explains the symptoms I reported
		earlier.  Fortunately, it's easy to code around (by me - it is
		no longer necessary to fudge the scripts).

		Added some stuff to the man page to explain why expect behaves
		the way it does in an emacs shell window and how to live with
		it.

2/21/92	3.18.0	Worked on the HP port some more.  The HP causes a real problem
		by insisting SIGCLD be delivered in order for wait to return
		a status.  This royally complicated the code, partly because
		of the special casing all over the place in the trap command,
		the asynchronous delivery of SIGCLD and also because Tcl itself
		is not prepared to have system calls be interrupted.  Cleverly,
		the HP also defines both CLD and CHLD which threw my macros
		off at first.  Thanks, but I don't this kind of help!

		Anyway, the end result is that on the HP, SIGCLD is ignored.
		The manual claims wait status will not be delivered but it
		seems to be anyway.  Good grief!  (Even if it were ignored,
		it would not be such a calamity, since wait is used mainly
		to discard zombies on other systems.)

		A remaining problem is that there appears to be some odd
		interaction, perhaps with fork, such that the script is rolled
		back at eof if a spawned process happens to exit at the same
		time.  The solution for now is to exit all scripts via exit
		rather than letting exit be called implicitly.  There must be
		some real bug, but I'm unable to find anything after lots of
		testing, line and Saber.  At the moment, I'm highly suspicious
		of the HP itself rather than expect.

		Bob Proulx and Jeff Okamoto supplied me with patches for
		inter_select.c.  HP transmits some pty interactions via the
		exception field in select.

		Michael Grant gave me a mod to grok ~ in the logfile and
		debug commands.

2/17/92	3.17.1	Brian Keves <keves@meaddata.com> pointed out that the man page
		still referred to "expect_match" instead of "expect_out".

2/12/92	3.17.0	Eric Arnold <Eric.Arnold@corp.sun.com> ran into a problem
		when running in the background.  interact did ioctl(0...)s to
		change the terminal mode, ignoring the -u flag.

		Fixed a bug in kibitz which blew up when asking for a password
		due to a spelling error.  The drawbacks of interpreters...

2/4/92	3.16.3	Dongchul Lim <lim@doctor.chem.yale.edu> noted that scripts can
		hang in the background.  I had assumed isatty(0) was enough to
		contrast bg/fg but it returns 1 if the script was started with
		a & from the terminal.  I added code to watch if any ioctl(0)s
		were done.  If so, than it is safe to do more, in particular
		in the exit handler to reset the terminal modes.

1/28/92	3.16.2	Fixed a bug on SV systems causing errors when trying to do
		further reads after a SIGCLD had already arrived on a spawn_id.

		Peter Funk <pf@artcom0.north.de> gave mods for SCO XENIX 386.

1/24/92	3.16.1	Oops.  Forgot to add pty_svr4.c to shar.

1/13/92 3.16.0	Karl Lehenbauer <karl@sugar.NeoSoft.Com> a tiny change for
		getting a clean compile on SCO 3.2.2.

		My getimeofday-avoidance code wasn't right, sigh.  Kibitz
		noticed.  Fixed two other bugs in kibitz - password request
		was for wrong user and it timed out but shouldn't have.

		Note: seems to work fine with new version of Tcl: 6.2

1/13/92	3.15.1	Added a bit of code to avoid gettimeofday system calls when
		timeout == -1.  Fixed minor bugs in kibitz relating to cleaning
		up and returning error messages.

		Redid support for stdlib.h including making it default to fix
		problem in Ultrix 4.2 reported by Oliver Kretzschmar <viskretz
		@ikesg1.energietechnik.uni-stuttgart.de>.		

		Ian Johnstone <ianj@sequent.com> said his system (DYNIX 3.2)
		needed an additional include <ctype.h> in inter_select.

		Dave Coombs <cme.nist.gov> added logic to test/weather to
		accomodate a new feature in the weather server.

		Hal Peterson fixed some SV code that I just added for handling
		SIGCLD properly.  He made the Cray-extra-child timeout in half
		the normal timeout to allow distinguishing between eof and real
		timeout.  Finished rest of Jeff Okamoto's fixes for HPUX.  

		Wally Strzelec <packman@tamuts.tamu.edu> provided mods for
		Amdahl which has its own pty-handling functions.  Ifdef'd into
		pty_usg.

12/30/91 3.15.0	Fixed a bug that struck when eof occurred when reading from
		multiple processes simultaneously and no user-supplied eof
		handler.

12/26/91 3.14.1	Ted Gibson <tgibson@logdis11.hq.aflc.af.mil> gave me some mods
		for a 3B2 having to do with termio vs termios, etc.

12/24/91 3.14.0	Deprecated expect 2.  Expect 3 is now the official version.

		Parag Patel <parag@netcom.netcom.com> gave me some #includes
		necessary for A/UX 2.

		Brian Woodson noticed "send a b" generates incorrect debug
		output.

		Working with Jeff Okamoto to run expect on HP/UX 8.0, we fixed
		SIGCLD catching (he says HPUX doesn't ignore them by default?),
		obviating longjmp from stomping locals, fixed a bug in cmdWait
		that would prevent the wait status from being collected in
		rare situations.

12/17/91 3.13.1	James Davis suggested fixing Makefile to handle case where no
		example scripts should be installed.  I added similar logic
		for script man pages.

		Pete Siemsen fixed a bunch of things in the Makefile including
		where to get expect when invoking fixline1.  He suggested defs
		for supporting install and multiple MAN targets.

12/12/91 3.13.0	Matthew Freedman <mattf@cac.washington.edu> noted mismatch
		between lib man page (said "stty_init") and lib code (said
		"exp_stty").  He also found a screwup in the library such that
		the pty slave wasn't being set up correctly.

		Added note to kibitz man page on how to kibitz with 3 or more.

12/12/91 3.12.0	"expect *" worked incorrectly if it was first expect after
		spawn, due to buffer not being initialized.

		Added a good example for "expect -continue" to man page.
		Added an FAQ about a gcc problem that seems to be common.

12/11/91 3.11.2	James Davis noted I forgot to put kibitz.man in distribution.
		I changed kibitz to read domain from resolv.conf instead of
		calling domainname(1) for systems upon which NIS domainname
		differs from Internet.

		Pete Siemsen <siemsen@barnard.usc.edu> noted slight error in
		libexpect man page.

12/10/91 3.11.1	A couple tiny mods to the Makefile courtesy of James B. Davis
		and Michael Grant (guest worker from Sun, temporarily at
		<mgrant@xdr.ncsl.nist.gov>.  Both of them also noted a problem
		caused by incorrect installation of gcc that caused expect to
		say "ioctl(set): Invalid something or other" upon exit.

		Fixed complaint about exit() while compiling without STDC.

12/9/91 3.11.0	beta!

		Hal Peterson provided fixes for UNICOS 6.1 and 7.0 on both
		CRAY-2 and CRAY Y-MP.  He also fixed a problem in interact
		where malloc(0) could've occurred.

		Added support for allowing user to set interpreter prompt.

		Added forgotten -d flag to match_max in rftp script. 
		Made kibitz understand user@host.

		Expect's internal buffer-full-handling incorrectly copied
		the latter buffer half beginning from the end of the buffer.

12/5/91 3.10.1	Massaged Makefile to allow for more flexibility in
		installation, especially with regards to scripts.  #! is now
		reset.

		Added "kibitz", a really cute script to let two people control
		one program.  Example users are for one person to help another
		remotely, logging a conversation (run emacs or whatever inside
		kibitz and your conversation can be logged, scrolled backwards,
		etc., or of course, playing games together.

12/4/91	3.10.0	Tightened up arg checking for "wait" - it core dumped when it
		should've said "syntax error".

		Rick Cady <rickc@nsd.3com.com> noted minor inconsistency in man
		page describing strace.

		I fixed a bug that prevented "system stty -echo raw" from
		working.  The raw data was clobbering the -echo data.

12/3/91	3.9.0	Brian Woodson noted that "close -i ..." evoked a syntax error.
		I had parsed the arguments incorrectly.

		After the nth request, I finally set up pub/expect/scripts as
		a directory for scripts.

12/2/91 3.8.0	Phil Sheperd <pshepher@loki.uni.edu.au> fixed a major bug in
		exp_spawnv() preventing one side of the pty from being set up
		correctly.  Thus nothing worked!  He also reported that his
		system didn't have strdup, so I added an explicit defn of it.

		James B. Davis fixed a couple nroff-bugs on the man page, and
		said someone already gave him a dump script (see below).

		Richard (R.C.) Vieregge <richv@bnr.ca> found a $ was missing
		from test/ftp.exp.

11/22/91 3.7.2	James B. Davis <james@solbourne.com> straightened out a couple
		things in the Makefile and asked if anyone had written a script
		for dump.

		Jeff Okamoto <okamoto@hpcc25.corp.hp.com> had a couple changes
		for HPUX 7 and 8 compat, involving termio stuff.

		Prompted by Andy Norman, added note to man page describing how
		to disable all argv processing while using #!.

		Converted passmass and rftp over to new version.

11/15/91 3.7.1	Brian Woodson asked me about the Tcl_WaitPids "got unknown
		process" panic.  This is a Tcl bug that John has promised
		to fix.  I'll document how to avoid it in the man page.

		Incidentally, I'm going under the knife tomorrow for three
		torn cartilage in my wrist.  The doctors say it may be a couple
		days to couple months.  Until I get back, hang in there.

11/13/91 3.7.0	Yet another bug discovered (and fixed).  "expect eof" was
		failing to remember the buffer, and expect_out(buffer) was
		empty upon return.

		Brian Woodson noted I forgot to document the -i flag of close.

11/12/91 3.6.0	Sean Cunningham <sean@moorenet.com> reported that he couldn't
                open /dev/tty from 'at'.  'spawn' was incorrectly not executing
		code to claim it was a controlling tty.  BSD only.

11/11/91 3.5.1	Brian Woodson notes that version 2 and 3 treat the following
		differently.

			proc p {} {spawn s}; expect

		In v3, spawn_id is locallized by the proc, and thrown away when
		p returns.  Unfortunately, in v2 due to some sloppy coding on
		my part, spawn always affected the global value of spawn_id.
		This differed from the handling of other variables, and in v3,
		this unusual behavior had to go, because the multiprocess
		handling and the large number of variables implicitly set
		(especially by the expect command) demanded that I be more
		systematic about how this was done.

		Since I never depended on this behavior, I never documented it
		as being something you should rely upon.  Alas.  To fix it, add
		the line

			global spawn_id

		to the beginning of any proc that calls spawn and needs the
		value of spawn_id implicitly defined outside of the proc.

11/6/91	3.5.0	Drew Whitehouse <Drew.Whitehouse@anu.edu.au> hit a bad pointer.
		I forgot an initialization in expect.c which caused problems
		when an EOF occurred which had no eof pattern.

11/2/91	3.4.0	Added FAQ from various questions people have sent me and my
		replies.  Made CONVERTING file on converting from 2 to 3.

		Nelson H. F. Beebe <beebe@math.utah.edu> found a missing
		declaration for exp_tty_original in bye() of main.c.  How come
		the Sun C compiler doesn't complain about this!?!!?

		Nelson also reported that SunOS 4.0.3 had a problem including
		varargs.  It turned out that old varargs had check for
		reinclusion, and tclInt.h also includes it.  So I added an
		#ifdef va_dcl and put my inclusion after tclInt.h.

10/31/91 3.3.0	Converted most of the examples.  Three more to go.
		Worked on man page some more.

		Modified expect so that if timeout > 0, and nothing in the
		buffer matched, it will force a read, no matter how long the
		preceeding code took.  This may be hard to understand, but is
		the intuitive behavior that I always desired.

10/30/91 3.2.0	Fixed bug in eof handling.  Converted some more of the
		examples, and added to Makefile.

10/29/91 3.1.0	Fixed slight bugs in tty mode switching, pty initialization
		(via stty).

		Fixed expect library.  Fixed compatibility code for non-BSD
		systems.  As usual, I could only test it so far, not having
		all these systems at my disposal.  I don't expect major
		problems though, since the basic functions I depend on haven't
		changed.

		Completely rewrote handling of continue, return, etc in
		expect, interact, interpreter.  It's actually systematic now.

		Checked with John O. about some code to bounce wild return
		codes, which he said was a mistake and would remove, so now I
		can pass my own return codes different from Tcl's.

To get | to return ->	TCL_RETURN	TCL_OK		(no return)
       V
    expect		return		default		continue -expect
    interact		return -tcl	return		default
    interpreter		return -tcl	return		default

		What this table says is, to get "interpreter" (for example) to
		return TCL_RETURN to its caller, you must say "return -tcl",
		because "return" makes it return TCL_OK.

		The "argumented" versions are considered to be the uncommon
		form.  In particular, I'd be surprised if anyone ever uses
		the -tcl argument, but it's there for completeness and
		consistency now.

		Put together a FAQ.  Needs more work, but hopefully worthwhile
		as is.

		Computing Systems with Expect article appeared a couple days
		ago.  How ironic that it describes the old version of Expect.
		Nonetheless, it looks ok.

10/25/91 3.0.0	alpha!
		First release of Tcl-6.0-ready code.
		It might fly for a couple seconds.

	Here is a quick list of changes.  Besides Tcl incompatibilities, Expect
	incompatibilities are flagged below as:

	**	major - scripts definitely won't run if they depend on this
	*	minor - scripts probably will run but there is some subtle
		change that should be examined).

	**	Select renamed 'ready' and undocumented.  Seems pointless now.

		Added support to expect command for waiting on patterns from
		different processes.  The old version implemented this via
		'select' but but it is much simpler via expect.  Added -i to
		a number of commands to signify a spawn_id which overrides
		the variable.

		Added any_spawn_id to match any spawn_id.
		An explicit null pattern, forces a spawn_id to be considered
		when all it can possibly match are any_spawn_id patterns.

	*	output is no longer flushed to expect_match upon timeout. 
		May be multiple buffers now, so it doesn't make sense to
		flush just one.)  -n was added to disable transfers from input
		buffer to expect_match var.  I suspect it will only be used
		for experimentation.

		Added expect -re for regular expressions.  Added expect_out
		array to retain indices and strings of partial matches for
	**	for both glob and re.  expect_match has been renamed
		expect_out(buffer).

		A la Tcl, added -nocase for both types of patterns.  (Oddly,
		Tcl's case only does it for regexps.)

		By popular demand, unanchored glob patterns.  Old patterns
		will continue to work, since earlier interpretation was much
		stricter.  Unfortunately, unanchored matches make certain user
		errors easier.  For instance, people will send answers before
		seeing all of the question.  Typically, output can 'look'
		ugly, as answers land in the middle of other things.

		To anchor patterns, use ^ in beginning and/or $ at end.

		Added expect_out(spawn_id) to report which spawn_id was read.

		Made expect and variants understand all args as one arg.

		Added 'default' pattern.

		Added continue_expect command.

		Added expect_before, expect_after commands which take same
		args as expect, but continue to stay in effect for all expects.

	**	Added match_max command, deleted it as a variable.  The old
		way was too coarse for use over multiple spawn_ids.  With no
		arg, returns current max.  Takes -i flag and -d for default.

		Added globbing to spawn command.

		Added optional -i spawn_id to wait.

		Added optional -i to send (and all it's variants).

		Renamed trace to 'strace' since it conflicts with Tcl's new
		trace command.  Since 'trace' traces variables, I figured
		'strace' wasn't too bad (for "statement trace").  I felt
		obliged to make it short and not as obliged to make it as
		meaningful since it will probably invariably be typed by hand.

		Made timeout == -1 mean infinity.

		Made interact do pattern matching in both directions via
		use of -o flag.

		Added -F flag for convenience.  If -f or -F used, interact
		can no longer be overrun.  In particular, if more characters
		arrive then match a pattern, remaining characters will be
		buffered rather than thrown away (old behavior).

		Patterns may now be substrings of one another.

		Made interact optionally take all args as one.

		Default action is now 'interpreter' (see below).
		interpreter now forces cooked mode, and echos results
		so you don't have to constantly say "send_user [...]\n"

	*	Interact reads characters that have been buffered but not
		matched by expect.  And vice versa.  Does anyone care?
		(My rogue script did.)

		From discussion with John Conti, I decided to make
		'interpreter' a separate command to start up interactive
		command processor.  Changed default action in interact to this.
		Added eval depth and event id to prompt to interpreter.

		Added expect_library which contains path for commonly
		sourced expect scripts.  Automatically source expect.rc
		out of expect_library unless -N given.  Automatically source
		~/.expect.rc unless -n given.

		Added expect_version command to print and/or verify script
		is compatible with running expect.  Tcl version is also tested.
		Felt it was worth making this a command because it's such a
		pain to tear apart version strings.

		Tcl's close and exit are both subsumed by expect's commands
		of the same name.

		Rewrote mode switching code so that "system stty" is handled
		specially.  This allows interact and interpret to get the modes
		they want, without burning the user.  It is now much easier
		to leave expect in raw mode all the time, but the choice is
		up to the user.

		Added vgrindefs, courtesy of Brian Fitzgerald.

9/23/91		Tcl 6.0 released.  This new Tcl has some incompatibilities
		with the old Tcl, so as long as everyone is changing their
		scripts already, I'm taking the opportunity to make some
		incompatible changes to Expect that I've wanted to do for a
		long time.

9/11/91 2.67	Ed Klein <eklein@syrinx.umd.edu> added support for SVR4 in the
		form of pty_svr4.c and mods to command.c.

		Added explanation to man page of how to create unreadable but
		executable scripts.  (No, chmod 111 doesn't work.)

		Mark Diekhans <markd@grizzly.COM> pointed out to me that there
		is a potential problem with the trap command:

		"There is no control over when the signal will cause Tcl_Eval
		to be executed.  There is a chance that code in the Tcl library
		will be executing when the signal comes in and the interpreter
		data structure will be in an inconsistent state.  This could
		cause all sorts of nasty things to happen.  In our Extended Tcl
		(4.0) we added signal handling. but the way we implemented it
		was to have the signal handler set a global flag.  We modified
		Tcl_Eval to check the flag after it finishs executing each
		command.  If the signal came in, Tcl_Eval then returns an error
		such as: "SIGINT signal received".  Signals may then be caught
		with the catch command and processed."

9/10/91 2.66	Don Jackson <Don.Jackson@Eng.Sun.COM> found a syntax error in
		the usage error message of the example ftp-rfc script.

		Marty Olevitch <marty%cosray@wuphys.wustl.edu> provided mods to
		support MORE/bsd.  Namely, added #include types.h to expect.c
		and extern int errno to a number of files.

		Scott Hess <scott@nic.gac.edu> noted a potential problem in
		interact.  Since interact only checks patterns at beginning
		of reads, user can conceivably type fast enough so that
		patterns are typed in the middle of a read.  In reality this
		doesn't happen, but Scott was driving one expect with another
		expect and in this way provoked the behavior.

		The solution is to read chars one at a time, either by
		read(,,1) or buffering in a stdio-like way, but I'm not going
		to do that because the code should really be rewritten entirely
		and it just isn't worth it, since it is so easy to get around
		at the user level.

		Steve Legowik found that spawn-disconnect sequences fail.  The
		pty testing I added in version 2.55 causes expect to regain the
		slave as a controlling tty, which generated SIGHUPs.  If anyone
		knows a clean way to avoid regain controlling ttys, let me
		know.  For now, I just set SIGHUP to SIG_IGN in the disconnect
		command.

8/14/91 2.65	Old passmass script changed root password.  I renamed it to
		passmass.old, and made a new one which works for any account.
		It also supports yppasswd, telnet/rlogin, different names for
		accounts on different machines.  Handles VMS machines, too.

		Added Computing Systems paper to expect distribution and moved
		all expect-related things to separate expect directory in our
		ftp directory.

8/5/91	2.64	Achille Petrilli <achille@miss.cern.ch> found that on an SGI,
		the expect command ocassionally returned "no more processes".
		He traced the problem back to O_NDELAY in the open, which was
		taken as-is from the man page, by someone else who's code I
		didn't look at too closely at the time.  The result works now.
		Oddly I thought I fixed this error myself when the SGI support
		was first installed, but I cannot find it.  I evidentally
		screwed up.

7/31/91	2.63	Steve Legowik <legowik@cme.nist.gov> wanted to implement
		callback by having a modem dial out and NOT go away, but
		interact in the reverse direction.  I added "interact -u" to
		support the idea of changing the user from the default stdio
		to a second spawned process.  The result is that we can now
		write a modem callback program that doesn't depend on the cute
		trick of having getty recognize DTR which only worked when the
		modem was directly connected to the computer.  In Steve's case,
		there were several network switches in the way.

		Added "overlay" function which is similar to plain "exec" in
		shell.  (Too bad Tcl took the name already.)

		Added robohunt scripts to the test directory.  I wrote these
		back in January, '91 and forgot about them til now.  But I
		suppose they are illustrative (at the very least of how to
		generate truly random numbers).  Ha.

7/20/91	2.62	Carl Witty <cwitty@jessica.stanford.edu> pointed out my fdset
		implementation (for systems that don't have it) wasted some
		space.  I had commented it correctly, however, making the
		incorrect code obvious (except to me).

		Robert Howland <howland@rahjr.ame.nd.edu> pointed out that
		expect complained about not running from a real terminal under
		cron.  Oops!  So I added a test to skip saving/restoring
		terminal modes when fd 0 is not a tty, since this is obviously
		pointless.

7/19/91	2.61	Oops.  Forgot to include getline and getline.exp examples even
		though they have been documented!

7/17/91	2.60	UMich changed interface to weather system necessitating change
		to weather script.

7/9/91	2.59	Didn't correctly comment things right in Makefile.  Fixed.

		Changed 'close' in gethostbyaddr example to 'catch close'.

6/22/91	2.58	Made new file (pty_sgi.c) for supporting Silicon Graphics ptys.
		Silicon Graphics select fails to see eof immediately but poll
		works ok.  Unfortunately, there was an error in inter_poll
		(bad_io was uninitialized).  Silicon Graphics works now.

		Andy Norman <ange@hplb.hpl.hp.com> notes that linking expect
		with the BSD compatibility library under HP-UX, libc.a must
		be loaded before libBSD.a.  Modified Makefile to reflect this.
		He notes that there is a problem with expect not reading an EOF
		from the current process.  This should go away with HP-UX 8.0
		when select has been enhanced to flag exceptions in the readfds
		argument.  Probably inter_poll would work.

		Edward Haines <haines@bbn.com> notes that close returns EPERM
		("Not owner") on his Sun 4.0.3.  This is rather startling!
		(That's what I get for checking the return value of close!)
		He said it is possible that they have modified things (viz.
		DDN X.25 is loaded), but it still sounds incredible.  For now,
		I told him to either "catch" all closes or to remove the check
		in the source code.  

		Added example scripts: ftp-rfc retrieves an RFC from uunet
		via ftp.  archie mails back a listing from the archie server.

		Add the rest of Hal Peterson's changes for Cray support, 1)
		fixing a problem where spawned processes flushed unread I/O
		upon process exit, and 2) creating processes with the correct
		uid.  See his comments in command.c for more info.

6/6/91	2.57	(On Cray) made signal handler declarations right.  Added
		missing #endif.  Added includes to pty_unicos.c.  Fixed bug
		in two bugs in CmdSend, one involving send_stderr, the other
		send_user.  All of these are from Hal Peterson.

		Added gethostbyaddr as example script.  Given an internet
		address, it returns the domain name.  By querying neighboring
		hosts if the name server fails, a much higher probability of
		returning the name is obtained.

5/30/91	2.56	Mispelled "match_max" as "max_match" in rftp script.  This
		caused files after the 2000 byte mark (per directory) to be
		skipped.

5/21/91	2.55	Revisited BSD pty code to reject ptys that have either slave or
		master side already open.  This fixes problems rare problems
		such as expect not being able to see EOFs from the child proc.
		(because another process still has the pty slave side open).
		USG and Cray pty code could probably use this code, too.

		Fixed bug in expect library (lib_exp.c) which caused output to
		be copied to stderr instead of logfile when logfile_all was
		set.  Per Sreedhar Muppala <muppalla@nssdca.gsfc.nasa.gov>.

5/16/91	2.54	Fixed weather script to accomodate occasional Weather Watch
		that would cause an unexpected initial question to pop up.

5/15/91 2.53	Added comment to BUG section of man page describing pty
		misbehavior with non-interactive programs (search for "553061"
		below), as per Hal Peterson <hrp@cray.com>.

		Removed note from README about asking Ousterhout for SV TCL
		at his request.

5/11/91	2.52	Fixed a syntax error that Bruce Larson <ires@kaspar.ires.com>
		found in inter_poll.c

4/23/91		Computing Systems accepted paper on Expect for issue 4.2.

4/18/91	2.51	Added some example scripts:
		weather - retrieves weather forecasts from National Weather
		Service via University of Michigan server.
		rftp - ftp a directory hierarchy (i.e., recursively).

4/18/91	2.50	Changed timeout to apply to total time in expect rather than
		per read().  Original behavior hung forever when my modem test
		script started listening to a modem than spit out 1 spurious
		character every 10 seconds (very consistently).

		Hal Peterson <hrp@pecan.cray.com> noted that exp_spawnv's args
		didn't match documentation.  Fixed in favor of documentation.
		Several other funcs don't match header file (but typechecking
		is avoided during compilation), because it was too hard for me
		to make the header file ANSI compliant and support varargs 
		(which is undeniably more portable than stdargs at this point).
		Fixed prototype declarations (again) in expect.h for C++ and
		Standard C.  Verified with GNU, G++ and Sun C (proto-less).

		Added exp_disconnect to library.  Moved alarm calls closer
		to read() to tighten windows.

4/11/91	2.49	Changed passmass script to use timeout of 1000000 instead of
		10000000000 after discovering that Ultrix sleep(3) doesn't
		sleep at all for large values!

		Added support for systems without dup2 (SVR2) per
		<elston@edwards-tems.af.mil>.

		Added test/Makefile to shar as per Chris Pribe
		<cpribe@park.bu.edu>.

4/4/91	2.48	Fixed possible problem with poll in inter_poll.c for systems
		that check for a valid address even though no members are used.

3/27/91	2.47	Added support for Cray Unicos 6.0, which of course is different
		from Unicos 5.1 (which was different from everything else)!
		This and other minor bugs fixed courtesy of Pete Termaat.

3/19/91	2.46	Removed a "feature" which caused patterns with no whitespace
		not to be run through SplitList.  While not documented not to
		do so, this was mystifying even to me when I saw it.  For
		William Waite.  The result actually simplified the internal
		handling of multiple patterns, removing some excessively
		complex logic that I thought would be helpful for speed, but
		that in retrospect, was not that important.

3/16/91	2.45	Added my own definition of FD_SET, fd_set, etc, test for
		SIGABRT, and support different types of signal arg func
		definitions to support SunOS 3.5 as requested by William Waite
		<waite@scotty.colorado.edu>.

3/14/91	2.44	Removed redundant def'n of pty_stty in pty_usg.c, redef of
		sprintf and added signal.h to command.c to make compiles
		cleaner on SV3 and HPUX machines.  All compliments of Mike
		Gourlay.

3/10/91	2.43	Added -s (for slow) and -h (for human) flags to send.  This
		had been requested by several people including Frank Terhaar-
		Yonkers (who actually wrote and tested a "send_slow" command),
		and Steve Simmons who suggested the "human" option (over a year
		ago), and Brian Woodson (brianw@swqa-sun.ESD.3com.com), who
		requested both!  Thanks to NIST statistician, Keith Eberhardt,
		who taught me about the Weibull Distribution.

		According to Jim Thomas <jthomas@nmsu.edu>, 3b2 requires
		defines for R_OK and W_OK.  Added to pty_usg.c.

		Added support for "-" as file name on command line to mean
		stdin as requested by Steve Clark <clark@cme.nist.gov>.

		Wrote passmass (change root password on a set of machines) as
		requested by Ken Manheimer <klm@cme.nist.gov>.  Added to test
		directory.

2/21/91 2.42	Removed reinstallation of signal 0 in signal handler.

		Added hook for setting initial pty parameters when started in
		the background.  Should've done this a long time ago, but I
		was never really happy with my solution and had hoped I would
		think of a nicer method.  I only hope this is clean enough.

2/10/91	2.41	Added buffer_full keyword to solve Brian Fitzgerald's problem.
		It disables "forgetfullness" so that when expect's internal
		buffer hits match_max, whatever it has returns at that point.
		Didn't add this to the library version, because I want to think
		for awhile about the cleanest way to do it.

2/4/91	2.40	Per Brian Fitzgerald (fitz@mml0.meche.rpi.edu), fixed error in
		interact example on man page which incorrectly implied that
		"kill" was built-in.

		Added fork/disconnect functions.  This solved the problem of
		Jerry Friesen (jafries@snll-arpagw.llnl.gov) who wanted to run
		an expect script that asks for a password and then goes to
		sleep for awhile before waking up to run in the background (to
		run a program using Kerberos).

1/30/91	2.39	Per Jim Johnson (jaj@mlb.semi.harris.com), added declaration
		and documentation for exp_pid in libexpect.

1/10/91	2.38	More mods from Frank Terhaar-Yonkers.  Also, some requests
		from Pete TerMaat (pete@willow.cray.com) for features:

		1) a single-step facility.  Yeah, that would be nice.  No
		ideas on how to do this easily.

		2) Generate scripts automatically after watching a session.  
		This is hard.  Read more about this in the FAQ.

1/10/91	2.37	Added support for Cray Unicos 5.1, all courtesy of Frank
		Terhaar-Yonkers (fty@sunvis.rtpnc.epa.gov).  Most of it had to
		do with pty support.

1/8/91	2.36	Modified expect.h to support C++ and ANSI prototypes.  Added
		appropriate example in test directory based on chesslib.c.

1/7/91	2.35	At the request of Jan Norden (jano@imdpy1.im.se) added
		NO_MEMCPY and NO_STRING_H defines for Pyramid.

1/3/91	2.34	Added a check to protect against a longjmp occurring between
		i_read and alarm(0).  Didn't think this would be a problem but
		evidentally a function return modifies the stack, so it cannot
		be returned to again.  Drat!  This appeared in the robohunt
		script I wrote which plays hunt automatically and uses 1
		second timeouts.

12/19/90 2.33	Add signal to sighandler, to reinstall signal for those systems
		that need it.

12/12/90 2.32	Removed test for args to expect.  I only recently realized that
		no args still allows a valid way to check for timeout and eof!

12/6/90	2.30-1	Mike Gourlay (mike@penguin.gatech.edu) found and fixed quite a
		few SV-related problems that I had introduced since Clem's
		fixes.  We eventually got it to run on his HPUX machine, a
		mixed breed of BSD/USG stuff.  But spawning a shell worked but
		always produced a complaint about "no access to tty" which we
		were never able to get rid of, and he had a problem with
		exp_fexpect (but not exp_expect), although it still isn't clear
		if that was expect's fault.  He said he would speak to some HP
		engineers about what he found.

12/5/90	2.29	Fixed a malloc off-by-one bug in new C library.  After
		contemplation, revised interfaces.  Decided that rather	than
		following the original 'expect' style, it should be more like
		what a C programmer is used to, so I made the file descriptors
		be parameters to exp_expect rather than globals, added an
		exp_popen which is a popen equivalent, and added exp_fexpect
		versions which are stream equivalents.

		Am not happy with exp_fexpect.  It is much less efficient than
		exp_expect, because there is no way to (portably) get fread()
		to return the way read() does, with less then the number of
		characters you supplied a buffer for.  Instead, I have to call
		fgetc for every char.  Ugh.

		Add a couple new examples, including lpunlock, time.exp,
		chesslib.c (using file descriptors) and chesslib2.c (which uses
		stream pointers).
			
12/3/90	2.28	Created C library version of expect.

11/29/90 2.27	Fixed bug in interact - when no string actions were defined,
		the mapping table length wasn't set at all.

		Made interact call printify when debugging so that crlf and
		other nonprintables are visible.  Fixed bug in printify which
		interpreted some characters wrong due to parity.

		Added some more examples to the distribution (lpunlock,	dvorak,
		timed_read) and put in another tip in the TCL HINTS section of
		the man page.

11/18/90 2.26	Fixed mismatched comment per Craig Warren (ccw@deakin.oz.au).
		Also improved man page entry for "interact".

11/17/90 2.25	Added -f (fast) on interact options, and made default case a
		little more efficient.  Added explicit support for SIG_IGN and
		SIG_DFL in trap command.  Added ability to specify signals
		symbolically for portability.

11/15/90 2.24	Craig Warren (ccw@deakin.oz.au) wanted to exit expect while in
		interact with a single character.  Dan Bernstein
		(brnstnd@kramden.acf.nyu.edu) wanted to suspend with a single
		character.  So I generalized interact's escape character to
		string-action pairs.

11/7/90	2.23	Tired of getting reports that various (Ultrix 3.1, BSD4.3) C
		compilers can't handle ternary conditionals returning ptr to
		func returning void.  Made all (2) such statements into
		if-then-elses.  Per Steve Simmons (scs@iti.org).

10/8/90	2.22	Allow "log_file" even when no log is open.  This makes user
		programming a little simpler - they don't have to remember
		whether they opened the log or not.

9/27/90	2.21	Fixed bug, v2.19 introduced.  debuglog(unknown string) requires
		a "%s" as formatting for protection against %'s in the unknown
		string.

9/17/90	2.20	4 syntax errors in interact_poll.c, vik@sequent.com.  Added
		quotes to all the sends (now that this is more efficient) in
		the examples and man pages.  Also removed a misstatement in the
		man page about the behavior of double quotes.

9/15/90 2.19	Removed buffering from send command.  Originally, I buffered
		the args, so I could do it all in one write.  But to send
		variables bigger than the buffer didn't work.  I didn't think
		about this before.  But Joe Gorman
		(Joe.Gorman@elab-runit.sintef.no) asked me if you could "send"
		a file in one command, and of course you can using [exec cat]
		as the argument to send, but the damn buffering prevented big
		files from being sent.  Anyway, now it works.

9/14/90		Fixed the declarations of nflog and nferrlog.  Added a #define
		so lack of pid_t could be controlled from the Makefile.  Per
		Andy Holyer (and@ux.rfhsm.lon.ac.uk)

9/4/90	2.18	Added trap command to catch signals.  This is nice as (among
		other things) it allows you to turn off the conversion of ^C to
		timeout which was requested by John Conti <jconti@cisco.com>.

8/21/90 2.17	Fixed bug in printify.  Forgot to reset ptr to beginning of
		print buffer.  Made debugging info wrong.  Possibly screwing up
		other things on overflow.

		Paper accepted into USENIX LISA!

8/15/90		libes	Cleaned up man page.  Made tabs line things up
		correctly, finally.

		Found another problem with ptys (at least under SunOS 4.1 and
		earlier).  When last pty-slave fd closed, any unread output is
		lost after a short window of time (around 10 seconds on a
		Sun 3/60).  Sent example ptybug.c to Sun demonstrating this and
		EIO problem found earlier.  (Service Order #553061)

8/6/90	2.16	Added -f to debug command, -a to log_file command.  This
		required significant changes, including revisiting all the
		logging routines, plus miscellaneous output done in special
		places.  Noted that it cannot be done with getopt, since it
		could be called during main's getopt, and getopt is not
		reentrant!  (Guess how I discovered this!!)

		I'm not particularly happy with the design, but maybe others
		won't be.  In any case, I like the benefit of it and am now
		glad that -a was asked for.  Per Harry Bochner and Ira Fuchs
		(fuchs@pucc.bitnet).

		Changed behavior of argv, so that 0 == [length $argv] when no
		script/args supplied.

8/4/90	2.15	Added debug command, so -d-ness could be changed while expect
		is running.

7/20/90	2.14	Fixed small bug in -d output from expect, which	printed ^Z as
		^:

7/18/90	2.13	Added wait command.  A waitpid/waitspawnid would be nice and
		cleaner, too, but since csh doesn't need it, it is probably not
		worth much.

		Consequently, removed SIGCHLD handling from command.c.  It
		worked under SV but not BSD.  By forcing users to explicitly
		code waits, resulting scripts are more portable.

		Rewrote rogue example.  rogue sometimes misses EOF (generated
		by close on our side) and continues reading.

7/16/90	2.12	Removed buffering from variadic log routines.  This was
		faulting when the buffers overflowed.

		Cleaned up the -d output from expect, so it is much more
		readable.  For example, control characters are now visible.

7/14/90	2.11	Added declaration for errno, to support 4.3BSD.  Per Alan
		Crosswell.  Added -i flag and related behavior.

7/12/90	2.10	Fixed bug where timeout = 0 waited forever rather than not
		waiting at all.

7/11/90		Fixed man page example which didn't include the blank on the
		end of an ftp prompt.

7/9/90	2.9	Fixed bug in send when spawn_id = $user_spawn_id.

6/27/90	2.8	Integrated some mods from clem cole (clemc@ccc.com) to support
		System V.3 (386/ix Version 2.02).  Unfortunately, he didn't do
		"select".

6/25/90	2.7	Test that cmdfile and logfile are open before fclosing in child
		while spawning.  Per Corey Satten.

6/24/90	2.6	Pty master returns EIO instead of EOF when pty slave closes.
		Bug in pty driver?  Until I figure this out, I have put in code
		to interpret EIO to EOF.

6/21/90		Added new section to expect man page - Tcl hints.

6/14/90		Spoke at USENIX.  Went well.  Added USENIX paper as separate
		ftp archive.

6/4/90 	2.5	Fixed bug in ^C catching during expect.  Changed man page to
		accurately describe what ^C does.  Fixed bug that caused "send"
		to screw up when handed 0 arguments.  All per Harry Bochner.

6/1/90	2.4	Made trailing empty action in expect optional, primarily to
		make straightline code easier to read.

5/15/90	2.3	Changed expect to strip nulls from program output since there
		is no way for Tcl to handle them, per Harry Bochner.

5/5/90		Added "send_error" command.

4/26/90		Got USENIX paper back from Kolstad to proof.  Am depressed at
		how awfully they formatted it.

4/25/90	2.2	Eric Newton found that expect's special variables weren't being
		found inside of user subroutines.  Had to do with new Tcl,
		which now differentiates between variables that are undefined
		vs. empty.

4/24/90		Upgraded Tcl from 2.1 to 3.3.

4/22/90		Added special behaviors of ^C in expect, and when profiling.
		Profiled rogue (at urging of Ousterhout).

4/10/90	2.1	Added select command.  Added support for user_spawn_id so that
		you could treat user just like another process (i.e. with send
		and expect).  Decided to leave send_user/expect, since scripts
		are more readable with them.

4/2/90	2.0	Changed syntax of expect to provide alternatives (a la Tcl
		case), per suggestion of John Ousterhout.  Note that this
		breaks pre-2.0 scripts.

3/31/90		Got great comments from Ousterhout.  (This time he said that he
		really liked the idea.  Maybe he realizes how much it will
		promote Tcl!)

3/30/90		Got comments from dpk.  Made me think more about Perl.

3/28/90		Evi said I should turn the paper in unformatted and they will
		format it.  (She's kidding, I hope.)

3/27/90	1.8	Rewrote interface so that raw arguments can be passed in like a
		shell.  I'd been thinking about this for some time, but Eric
		Newton finally prodded me into action.

3/25/90		Got first corrections for paper - from Sue Mulroney!

3/24/90		Observed that it is possible to use the #! syntax with expect.
		I asked John O. about this (his choice of # as a comment
		character), and he said it was pure coincidence.  Deprecated
		request to end scripts in ".exp".

		Ted Hopp volunteered to be my Center WERB reader.

3/23/90		Finished 1st draft of USENIX paper and sent copies to John
		Ousterhout and panel chair, dpk@morgan.com.

3/20/90	1.7	Deprecated "stty", and added more general "system" command.

		Sent Evi some complaints about the business of not allowing
		camera-ready at USENIX.

3/17/90		Sent copies of man page to Doug Gwyn and Larry Wall for
		comments.  Note that gwyn downloaded it.

3/16/90		Am really irritated by USENIX.  My paper has been put in a
		session against another session, the BSD people.  Furthermore,
		they called my paper an application, when it is no more so than
		any other shell or language.  Better I should be in "lessons
		learned".  Mashey said take a hike, i.e., it was too late to
		change the schedule.  On top of that, our session has four
		people in it, so I'll have very little time to speak.  Grrrr.

3/13/90	1.6	Added "stty", because without it you can't do things like
		turning off echo to accept a password.

3/8/90	1.5	Abstract was accepted into USENIX!!!!  Time to start writing
		it!  Sent man page to Ousterhout.  He didn't seem too
		impressed.

		Added "send_user/expect_user" after listening to Ken complain
		about how shell could not do timed reads.  Actually it can, but
		expect does it much more naturally.  Deprecated echo.  Now, I
		realize that expect can be viewed as a shell!

		Changed logfile/loguser to log_file/log_user to match all the
		variables with underscores in them.

		Barry Warsaw asked if there was any way one could execute any
		command from interact (apparently without any reason in mind).
		Nonetheless, it is a wonderful idea, and I changed the "abort
		character" in interact to an "escape mechanism".  After
		escaping, you may execute any command.  return duplicates the
		old action of the abort character.  Now you can do interactive
		job control, recursive interacts, etc.  You can bet I didn't
		get this right the first time!

		At Scott's request, fixed bug related to pty initializing.
		Scott was putting expect in the background which disassociated
		it from a tty, and I was blindly copying the tty parameters
		without checking to see if they were meaningful or not.

		Tightened up exit code.  Fixed bug in spawn so it would print
		error messages when it failed.  Spawn sends back the error
		message in the pty, if the fork succeeds but exec fails.  Cute!

		Added "close" command.  Makes scripts much shorter and cleaner.

		Return string matched by expect directly, rather than setting a
		special variable.

		Added "match_max" feature.  Probably no one will ever use it.

		Added trace command.

3/6/90	1.4	Rob Densock was the second user, and suggested (demanded?) the
		idea of the loguser command.  I added it and changed "log" to
		"logfile" making the first incompatibility with existing
		scripts (sorry, Steve).

3/1/90	1.3	Trying to make pty code more robust.  Many questions unanswered
		by manuals.  Did a lot of guessing.  While debugging, looked
		through pty code in gnuemacs to see if I might increase
		portability somehow.  I almost barfed when I saw all the funky
		ifdefs on weird ioctls.  Found lots of comments like "this
		might work".

2/28/90		Sent a short Tcl bug list to John Ousterhout.  He thanked me!

2/22-3/90 1.2	Hooked my first user, Steve Ray.  Surprisingly, he only	found
		one bug in the code (exit didn't handle args correctly), but it
		was obvious that I need to put more explanation in the man
		page.  Many of the examples in the man page are based upon his
		probl..  questions.  Thanks, Steve!

2/20/90		Posted news about expect to "general" newsgroup locally.

2/15-20/90	Talked to local POSIX reps and then to Steve Albert (AT&T)
		about portability of select, wait and other system calls.  I'm
		not impressed by 1003.1.

2/9/90		John Ousterhout answered some questions I had about Tcl	syntax.
		I like this language!

2/8/90	1.1	Sandy Ressler suggested the idea of being able to spawn
		multiple programs at the same time although he didn't say how.

		It took about a day to design and code the spawn_id hook.
		Extremely difficult to support this with uucp-style kludge.
		Switched to using select.  So much for portability.

		I investigated how to do this portably, and spent some time
		talking to NIST & AT&T POSIX representatives.  Unfortunately,
		portability (especially when it comes to select()) remains a
		dream.  Provided multiple versions of "interact" depending upon
		what OS you are running.

2/7/90	1.0	Completed first cut of "sex" (for "Smart EXec" or
		"Send/EXpect").  Supports send, expect, echo, log, spawn,
		interact.

		Spent a lot of time making "log" write to log in just the right
		order (across fork and while debug flag enabled).  Ended up
		writing a bunch of variadic log routines.

		Fooled around with uucp-style multiple processes versus one
		process doing select() to read asynchronously.  Using
		uucp-style for now, since it is more portable.

		Gave up on pipes, and switched to ptys.  Pipes seem to be
		messed up by ftp, perhaps because it goes into raw mode?  Ptys
		are more efficient and cleaner to program albeit less
		well-documented and portable from system to system.

		Ken Manheimer helped me explain what the program does.  I kept
		saying it does "send/expect" processing, and he kept insisting
		that was meaningless to everyone.  (In fact, it comes from
		uucp, and I guess uucp hackers are indeed a dying breed.)  Ken
		gave me an elegant enough sentence that I expanded it into an
		abstract and sent it in to the USENIX conference the following
		day (two days after the deadline).

		I noted that the uucp documentation I referenced in the
		submission is dated October 31, 1978!

1/30/90	0.0	Got a copy of Tcl and went to work.  Tcl was exactly what I
		need.  Plus, it is easy to use, AND it is documented.

1/25/90		Attended Winter 1990 USENIX in DC, with the goal of banging
		heads with some other gurus in hopes of finding a good
		send/expect language for a generalized stelnet.  Had looked at
		uucp and kermit but found nothing general enough.

		Listened to John Ousterhout's presentation on Tcl.  By the
		middle of the talk, I had found religion.  At the end when he
		said it was public-domain, I was ready to orgasm.

*/*/88-89	Spent a lot of time telling Scott how useful his program could
		be if he made it more general.  I thought it wouldn't be that
		difficult to make more generic.  Scott was interested but not
		enough to do it.

9/25/87 	Helped Scott Paisley write a program called stelnet, that
		forked a telnet and did very simple send/expect processing.
		It used pipes, not ptys.  It had no pattern matching, and only
		straight-line control without error handling.  Nonetheless,
		this got me to thinking about making stelnet more generic.
