PIPE stands for Python Interactive Process Enabler.  It provides Expect-like
functionality for Python using object-oriented constructs.  PIPE was written
by John F. Croix ([email protected] or [email protected]).

This is version 1.0 of PIPE.  The PIPE distribution consists of the following
two files:
  * pipe-1.0.README (this file)
  * pipe-1.0.tgz (a tar'ed, gzip'ed file)
The source code and documentation can be found in pipe-1.0.tgz and consists
of the following:

-rw-r--r--    1001/10         5460 Aug 13 23:51 ./pipe-1.0/accurate_time.h
-rw-r--r--    1001/10         4363 Aug 13 23:45 ./pipe-1.0/pipe-1.0.README
-rw-r--r--    1001/10         2288 Aug 13 23:51 ./pipe-1.0/builtins.C
-rw-r--r--    1001/10        17900 Aug 13 23:51 ./pipe-1.0/pipe.py
-rw-r--r--    1001/10        17366 Aug 13 23:51 ./pipe-1.0/pipe_ext_type.C
-rw-r--r--    1001/10        17810 Aug 13 23:51 ./pipe-1.0/pipe_process.C
-rw-r--r--    1001/10         3685 Aug 13 23:51 ./pipe-1.0/pipe_process.h
-rw-r--r--    1001/10         5872 Aug 13 23:51 ./pipe-1.0/pipe_pty.C
-rw-r--r--    1001/10         2619 Aug 13 23:51 ./pipe-1.0/pipe_pty.h
-rwxr-xr-x    1001/10         2327 Aug 13 23:51 ./pipe-1.0/test-default
-rwxr-xr-x    1001/10         3257 Aug 13 23:51 ./pipe-1.0/test-echo
-rwxr-xr-x    1001/10         2326 Aug 13 23:51 ./pipe-1.0/test-eof
-rwxr-xr-x    1001/10         2689 Aug 13 23:51 ./pipe-1.0/test-full-buffer
-rwxr-xr-x    1001/10         2317 Aug 13 23:51 ./pipe-1.0/test-interact
-rwxr-xr-x    1001/10         2733 Aug 13 23:51 ./pipe-1.0/test-line-regex
-rwxr-xr-x    1001/10         2733 Aug 13 23:51 ./pipe-1.0/test-regex
-rwxr-xr-x    1001/10         2894 Aug 13 23:51 ./pipe-1.0/test-timeout
drwxr-xr-x    1001/10            0 Aug 13 23:52 ./pipe-1.0/doc/
-rw-r--r--    1001/10          230 Aug 13 23:52 ./pipe-1.0/doc/html.macros
-rw-r--r--    1001/10         7899 Aug 13 23:52 ./pipe-1.0/doc/html.sty
-rw-r--r--    1001/10         5503 Aug 13 23:52 ./pipe-1.0/doc/inheritance.eps
-rw-r--r--    1001/10         1215 Aug 13 23:52 ./pipe-1.0/doc/inheritance.fig
-rw-r--r--    1001/10          368 Aug 13 23:52 ./pipe-1.0/doc/latex.macros
-rw-r--r--    1001/10         4867 Aug 13 23:52 ./pipe-1.0/doc/match-line.eps
-rw-r--r--    1001/10         1611 Aug 13 23:52 ./pipe-1.0/doc/match-line.fig
-rw-r--r--    1001/10         7192 Aug 13 23:52 ./pipe-1.0/doc/overview.eps
-rw-r--r--    1001/10         2810 Aug 13 23:52 ./pipe-1.0/doc/overview.fig
-rw-r--r--    1001/10         6246 Aug 13 23:52 ./pipe-1.0/doc/pipe.aux
-rw-r--r--    1001/10        85968 Aug 13 23:52 ./pipe-1.0/doc/pipe.dvi
-rw-r--r--    1001/10         2516 Aug 13 23:52 ./pipe-1.0/doc/pipe.idx
-rw-r--r--    1001/10          303 Aug 13 23:52 ./pipe-1.0/doc/pipe.ilg
-rw-r--r--    1001/10          401 Aug 13 23:52 ./pipe-1.0/doc/pipe.ind
-rw-r--r--    1001/10          516 Aug 13 23:52 ./pipe-1.0/doc/pipe.lof
-rw-r--r--    1001/10         6076 Aug 13 23:52 ./pipe-1.0/doc/pipe.log
-rw-r--r--    1001/10       572759 Aug 13 23:52 ./pipe-1.0/doc/pipe.ps
-rw-r--r--    1001/10        54144 Aug 13 23:52 ./pipe-1.0/doc/pipe.tex
-rw-r--r--    1001/10         3785 Aug 13 23:52 ./pipe-1.0/doc/pipe.toc


-------------------------------------------------------------------------------
                                   CHANGES
-------------------------------------------------------------------------------

V1.0: Fixed a race condition when reading data line by line.  Sometimes the
     current data in the buffer wouldn't have a carriage return in it to
     distinguish an end-of-line.  The code would read more data from the
     subprocess.  The bug is that, even with this new data, there may still
     not be a carriage return in the data.  The old code simply tried once to
     get new data.  The new code loops until some type of error condition is
     detected (ie TIMEOUT) or until a carriage return can be found.

     Added functions MatchLineAfter() and MatchLineBefore() to supply patterns
     which should be matched after and before any other patterns when
     performing line-by-line pattern matching.  Originally the code used the
     patterns supplied by MatchAfter() and MatchBefore().  The problem was
     that it wasn't necessarily possible to use the same regular expression
     when matching line-by-line as it was when matching against the entire
     input stream.  Now the two are separate from each other.