[sub.sources.os9] v02i005: Ptyman 1.3 Binaries - Part 1/1

fkk@stasys.sta.sub.org (Frank Kaefer) (06/22/91)

Posting-number: Volume 2, Issue 5
Submitted-by: ram@ramsys.UUCP (Reimer A. Mellin)
Archive-name: ptyman1.3_bin

#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of shell archive."
# Contents:  COPYRIGHT ptyman.doc pty.uu ptydrv.uu ptyman.uu tty.uu
# Wrapped by ram@ramsys on Sun Jun 23 11:06:03 1991
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'COPYRIGHT' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'COPYRIGHT'\"
else
echo shar: Extracting \"'COPYRIGHT'\" \(1562 characters\)
sed "s/^X//" >'COPYRIGHT' <<'END_OF_FILE'
X*        This software is copyright (C) 1989 by Reimer Mellin        *
X*                                                                    *
X*        Permission is granted to reproduce and distribute           *
X*        this package by any means so long as no fee is charged      *
X*        above a nominal handling fee and so long as this            *
X*        notice is always included in the copies.                    *
X*        Commerical use or incorporation into commercial software    *
X*        is prohibited without the written permission of the         *
X*        author.                                                     *
X*                                                                    *
X*        Other rights are reserved except as explicitly granted      *
X*        by written permission of the author.                        *
X*                Reimer Mellin                                       *
X*                                                                    *
X*                Sulenstr.8                                          *
X*                D-8000 Muenchen 71 (Federal Republic of Germany)    *
X*                                                                    *
X*           EMAIL:                                                   *
X*                mellin@lan.informatik.tu-muenchen.dbp.de            *
X*                ram@altger.UUCP                                     *
X*                ram%ramsys@chiuur.sub.org (home)                    *
X*                                                                    *
END_OF_FILE
if test 1562 -ne `wc -c <'COPYRIGHT'`; then
    echo shar: \"'COPYRIGHT'\" unpacked with wrong size!
fi
# end of 'COPYRIGHT'
fi
if test -f 'ptyman.doc' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'ptyman.doc'\"
else
echo shar: Extracting \"'ptyman.doc'\" \(11966 characters\)
sed "s/^X//" >'ptyman.doc' <<'END_OF_FILE'
X                   Pseudo-Terminal (PTY) File-Manager
X                   ==================================
XOverview:
X
X        Pseudo-Terminals (PTY's) are a kind of Interprocess
XCommunication (IPC), which are known on a wide variety of UN*X
Xcomputers, mostly BSD-like systems.  They behave like any other SCF
Xdevices like terminals and printer but are in fact pseudo-devices i.e. 
Xexists only in the memory the system. 
X
X        PTY's have two distinct end-points, namely server-pty and
Xclient-pty, which behaves by default differently.  A server-pty
Xsymbolizes the terminal and a client-pty forms the connection to the
Xapplication programs.  This implies, that the server-pty provides RAW
Xinput and output whereas the client-pty can handle line-editing, echoing
Xand so on. 
X
X        With this mechanism many programms can share one real device,
Xlike a real terminal, via one server which multiplexes all connected
Xserver-pty's.  Something similar can be reached with the usage of pipes,
Xbut pipes have the disadvantage of being not a tty-device with echo,
Xline-editing, interrupt-chars etc. 
X
XExamples:
X    - virtual Terminals: one program multiplexes ptys and displays the
X      outputs on a real Terminal (there exist a programm called 'screen'
X      which does exactly this). 
X    - In a TCP/IP environment, the program 'rlogin' starts a
X      login-process on a tty on the remote machine.
X
X___________________________________________________________________________
X
X                      /***********\             /**************\
X                      *           *             *              *
X                      *   Server- * ----------> *  real Device *
X                      *    Prg.   *             *              *
X                      \***********/             \**************/
X                    ___+  +  +  +_______
X                ___/       \  \         \_______
X            ___/            \  \________        \________
X           /                 \          \_______         \__________
X          |                   |                 |                   |
X    /***********\       /***********\       /***********\       /***********\
X    *           *       *           *       *           *       *           *
X    *  1st Prg. *       *  2nd Prg. *       *  3rd Prg. *       *  4th Prg. *
X    *           *       *           *       *           *       *           *
X    \***********/       \***********/       \***********/       \***********/
X
X'|' meaning client-pty
X'+' meaning server-pty
X
XFig. 1:  Typical Server-Client Application
X
X
XImplementation:
X
X        With OS9-68000 (OSK) a own File-Manager was written, which
Xhandles both types of PTY's : the client-ptys, and the server-ptys
Xwhile using only *one* descriptor (device) for each.  Server-ptys must
Xbe opened as "/pty/any_valid_name" , client-ttys must be opened (i.e. 
Xconnected) with "/tty/any_valid_name".  PTY's can be also implemented
Xwith the usage of a special device-driver for the SCF, but this has
Xserveral draw-backs :
X
X        - A System-Global Variable has to be introduced for the rendezvous
X          of the PTY-pairs (not implementation independent). 
X
X        - For each pair of PTY's there must exist two Device-Descriptors
X          (waste of memory and Device-Table-entries).
X
X        - The number of PTY's pairs are limited !!
X
X        - Block-writes in RAW modus has still to be done on a char-by-char
X          basis with single calls to the driver, as required by the SCF
X
X        When creating a server-PTY the Filemanager searches a list of
Xalready openend server-ptys for the same name.  The name can be any
Xlegal OS-9/68000 Filename (no distinction between upper- and
Xlower-case).  When a identical name is found, the Filemanager return a
XE_CEF-error (File already exists), otherwise the Pathdescriptor (PD) is
Xinserted into this list and some initialisation is done (allocating
XData-Buffers etc.).  Then the list of client-PTYs is searched for any
Xalready opened tty; iff found, the pair is connected and a DCOn-Signal
Xis sent, if specified by the client-PTY.
X
X        When opening a client-PTY the Filemanager looks thru the above
Xmentioned list for a already openend server-pty.  If found, it sets a
Xspecial pointer pointing to the PD of the server-pty.  (the Filemanager
Xbasicly distincts server-pty's and client-pty's by the value of this
Xpointer).  If a server-PTY couldn't be found, the open-call returns, but
Xnearly any further i/o call will issue an E_HANGUP error.  Only the
Xfollowing calls will return without an error:
X    - close()
X    - getstat: SS_DevNm and SS_OPT
X    - setstat: SS_EnRTS/SS_DCOn, SS_DsRTS/SS_DCOff and SS_OPT
XIf the client-tty has specified an DCOn-signal, the later connecting pty
Xwill send it to the tty 'hanging around'.
X
XRemark:
X    There exist only *one* named server-pty but there can be many
X    client-ptys listening (although its possibly to I$DUP a
X    server-pty-fd). 
X
XA client-tty may be opened with the S_ISHARE-bit on; in this case
Xthere is only one client-tty allowed.
X
X        When closing a Server-Pty, the Filemanager searches for all
Xclient-pty's and sets the special pointer to NULL indicating a
XHANGUP-condition.  He also tries to send a SIGHUP-Signal (value is
Xchangeable via the _ss_dcoff()-Call) to the last/current user of a
Xclient-pty.  Any further I/O calls to a disconnected client-pty will
Xissue a E_HANGUP-Error!
X
X        Closing a client-pty requires no special tasks but clearing all
Xpending Signals (e.g.  pending _ss_signl() ), which is done automaticly. 
X
XIf a server-pty is opened with the S_IFDIR-bit set, further reads will
Xreturn pseudo-directory-entries for all opened server-ptys. A command
X'dir /pty' will therefore return the names of all current opened
Xserver-ptys.
X
X        Although total compatibility to a SCF-Device was intended, the
XPTY-Filemanager does differ in some small aspects from the SCF.  The
Xreason for that were some features of the SCF, which I do consider
Xfaulty e.g.  with a ReadLn-count of one the only character you can read
Xis CR and nothing else (:-( ). 
X
XDifferences:
X    - a Readln-Call with a character count of 1 will return the next
X      character available.
X
X    - The Read-Call may behave differently: kbich and kbach will
X      abort with the appropriate Error-codes. No Echo, but raw-byte-transfer.
X
X    - Any signal < 32 and > 1 (SIGWAKE) will abort a pending I/O with an
X      error-code of the signal (this should be made standard).
X
X    - A close of a server-pty will only generate a SIGHUP (see SS_DCOff)
X      and will *not* abort the reading processes (the program 'com'
X      seems to have problems with that !).
X
X    - the special IOSTOP or IOCONT SetStats blocks transmisson
X      of data in any direction (read and write). Read/Writes are still
X      possibly, but will block if the internal buffers are full.
X      Beware of Deadlocks !!!
X
XDescriptions of operation:
X
X- Read-calls:
X    absolute raw-read, ignores echo-parameter, but unterstands kbich,
X    kbach, xon, xoff and psc of the other end.
X
X- Write-calls:
X    absolute raw-write .... but sends QUIT and INT if set, and handles
X    xoff/xon and psc handling of the other side.
X
X- Writeln-calls:
X    recognizes upc(only if required via -DUPCHAR), tabch, tabs, alf,
X    pause and returns on recognizing the eor-char (normaly CR).
X    Sends QUIT and INT if set.
X
X- Readln-calls:
X    recognition of echo, upc, bso, bse, bspchar, eorchar, alf (when
X    echoing), kbich, kbach, eof, delchar, rprchar, dupchar and pause.
XCAVEAT:
X    - A final EOR in the input-stream is not necessary and this was
X      deliberatly avoided !!!
X    - The maximum readln-count is 256 Bytes (like in the SCF). You can
X      specify more but the Filemanger will cut it to 256...
X
X- GetStat-calls:
X    supported codes are: SS_Opt, SS_Ready, SS_EOF, SS_DevNm (returns the
X    complete path-name of the pty), SS_BlkRd.
X
X- SetStat-calls:
X    supported codes are: SS_Opt, SS_SSig, SS_Relea, SS_EnRTS, SS_DsRTS,
X    SS_DCOn, SS_DCOff, SS_BlkWr, SS_IOSTOP and SS_IOCONT.
X
XNot supported are null (for padding).
X
X
XDescription of GetStat-Codes:
X
X    - SS_Opt:
X        copy the first 28 Bytes of the option part to the users
X        (a0)-register.
X
X    - SS_Ready:
X        return number of chars available for reading in users d1
X        register, or return E_NOTRDY if no input is available.
X
X    - SS_EOF:
X        always returns 0 in callers d1 register (like SCF).
X
X    - SS_DevNm:
X        return the null-terminated path-name of the pty into the callers
X        (a0)-register (e.g '/tty/testtty').
X
X    - SS_BlkRd:
X        Read x (in users d2-register) Bytes into buffer, users
X        (a0)-register is pointing to.
X
X
XDescription of SetStat-Codes:
X
X    - SS_Opt:
X        copy the first 28 Byte from users (a0)-register into the option
X        part of the pathdescriptor.
X
X    - SS_SSig:
X        Send signal in users d2-register on receiving the next
X        available character. If another Process is waiting for input,
X        return an E_NOTRDY error.
X
X    - SS_Relea:
X        Clear a SS_SSig action...
X
X    - SS_EnRTS:
X        see SS_DCOn
X
X    - SS_DsRTS:
X        see SS_DCOff
X
X    - SS_DCOn:
X        if a connection between a pty/tty pair is occurring, this signal
X        will be sent (will be ignored if not set)!
X
X    - SS_DCOff:
X        Send Signal in users d2-register on closing the server-pty
X        (Carrier-lost condition). The Default signal is SIGHUP (Value: 4).
X
X    - SS_BlkWr:
X        Write x ( in users d2-register ) Bytes from buffer users
X        (a0)-register is pointing to.
X
X    - SS_Screen (Subfunction ScrOut):
X        Optional, like BlkWr. exists only on ST's (Cumana Implementation).
X 
X    - SS_IOSTOP:
X        sets a flag, which blocks any handshake. If you still write/read
X        to/from a stopped connection, deadlock may occur when the internal
X        buffers are full/empty, due to the missing handshake!!
X
X    - SS_IOCONT:
X        Reallow further handshake by activating any reading process of
X        either side.
X
XExample of SS_IOSTOP/SS_IOCONT:
X  write( tty, "Hello ", 6);       /* transfer 'Hello ' to the other side
X                                   * if a read is pending transfer it
X                                   * immediatily
X                                   */
X  _ss_iostop(tty);                /* freeze any reading from/to pty/tty
X                                   * the maximum the reading process can
X                                   * read without blocking is up to the
X                                   * string 'Hello' (not the blank)
X                                   */
X  write( tty, "World\n", 6);      /* this write will not block if there is
X                                   * enough room in the internal buffer
X                                   */
X  sleep (10);                     /* wait .. not I/O will occur */
X  _ss_iocont(tty);                /* reallow further transmission,
X                                   * any pending read will be continued;
X                                   * by completion of the read() the block on
X                                   * the writing process will be released
X                                   */
X
XFinal Thoughts:
X
X        Some tests have shown, that this Filemanager is about 100%
Xfaster than an orthodox implementation with a special device Driver for
Xthe SCF when doing readln/writeln calls.  By using only read/write calls
Xsome can expect even much more throughput (no line-editing stuff etc..). 
X
XBUGS:
X
X        This Filemanager seems to have problems in OSK-Versions lower
Xthan 2.0 (-> e.g. 1.2).  I think the 'openend-Path'-list isnt supported
Xby the Kernel (IOMan); maybe the Filemanager should do it itself ??
X
XThings to do:
X    - more lineediting (emacs-style, history ?)
X
XPlease send any suggestions/Bug-reports to:
X    Reimer Mellin
X    Sulenstr. 8
X    D-8000 Muenchen 71
X
X    UUCP: mellin@lan.informatik.tu-muenchen.dbp.de (preferred)
X          mellin@altger.UUCP
END_OF_FILE
if test 11966 -ne `wc -c <'ptyman.doc'`; then
    echo shar: \"'ptyman.doc'\" unpacked with wrong size!
fi
# end of 'ptyman.doc'
fi
if test -f 'pty.uu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'pty.uu'\"
else
echo shar: Extracting \"'pty.uu'\" \(204 characters\)
sed "s/^X//" >'pty.uu' <<'END_OF_FILE'
X
Xbegin 644 pty
XM2OP``0```'H````!````<@55#P"`````````````````````````````````=
XM`#]>`````````/L`9`!K```````````````<````````````````````````#
X@`````````````%!T>4UA;@!0='E$<G8`<'1Y```8?EL`0
X``
Xend
Xsize 122
END_OF_FILE
if test 204 -ne `wc -c <'pty.uu'`; then
    echo shar: \"'pty.uu'\" unpacked with wrong size!
fi
# end of 'pty.uu'
fi
if test -f 'ptydrv.uu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'ptydrv.uu'\"
else
echo shar: Extracting \"'ptydrv.uu'\" \(187 characters\)
sed "s/^X//" >'ptydrv.uu' <<'END_OF_FILE'
X
Xbegin 644 ptydrv
XM2OP``0```&P````!````8`55#@&@````````````````````````````````=
XM`!Y;````/``````````N`%``4`!0`%8`5@!0```````````P/```3G4R/`#0\
X2`#P``4YU4'1Y1')V````&/)TG
X``
Xend
Xsize 108
END_OF_FILE
if test 187 -ne `wc -c <'ptydrv.uu'`; then
    echo shar: \"'ptydrv.uu'\" unpacked with wrong size!
fi
# end of 'ptydrv.uu'
fi
if test -f 'ptyman.uu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'ptyman.uu'\"
else
echo shar: Extracting \"'ptyman.uu'\" \(9933 characters\)
sed "s/^X//" >'ptyman.uu' <<'END_OF_FILE'
X
Xbegin 644 ptyman
XM2OP``0``&YH````````;C@55#0&@```"````````````````````````````O
XM`!U`````/`````````$``%(`4@`:`!H`&@`D`"H`/@`T`$@`7`!F`'`R/`#+_
XM`#P``4YU`CS__DYU2.?__F%*8``&)DCG__YA0&``!K1(Y__^839@``>02.?_P
XM_F$L8``(($CG__YA(F```$I(Y__^81A@``BF2.?__F$.8``*4DCG__YA!&``G
XM`X(C3@`B+$D@7R`,(@U.D$J`9PY,WW__(BD`'@`\``%.=4S??_\"//_^3G5.+
XM50``2.?,\"!O``0D:``@(`IA`!DR*`!L```(</]@``,L#"H`4``!9P``#`PJ?
XM`'```68```AP`&````1P`1U``'P@;P`$(F\`!!`I``/`+@`"L"@``V<``!`M0
XM?````,L`'G#_8``"YB!O``0=:``#``(,+@`!`'QG```,""X`!P`"9@``2@PR0
XM`"](`&<``!`M?````-<`'G#_8``"L"`$4H#5P"`*80`8GB@`;0``$G`<L(1MM
XM```*2C)(`&<``!`M?````-<`'G#_8``"@'H`8```+@PR`&%8`&4``!8,,@!ZF
XM6`!B```,<.#0,E@`8```!A`R6`!![@#@$8!8`%*%NH1M`/_0(`13@$'N`.`('
XM\``'"``M1`#\""X`!P`"9@`"%DHN`'QG``#*(&X`!"!H``0F:``*8```JDHK#
XM`'QF``">0>X`X"(((#P```#@T(MA`!922H!F``"&+4L`*B9K`"Y@```D$"L`O
XM`H`N``((```&9P``$"U\````_0`></]@``'*)FL`+B`+9@#_VB!N`"HM:``NY
XM`"Y![@``(FX`*B-(`"X@;@`J2F@`=F<``"H@;@`J<``P*`!V(@!*:P`(9P``=
XM#'``,"L`"&````AP`#`K`!QA`!8R<`!@``%P)FL`%B`+9@#_5'``8``!8&``T
XM`4(@;@`$(&@`!"9H``I@```^2BL`?&8``#)![@``L<MG```H0>X`X"(((#P`O
XM``#@T(MA`!6`2H!F```0+7P```#]`!YP_V```10F:P`6(`MF`/_`(#P```(`N
XM+4``8BU``$(@+@!"80`4V"U``#9G```2("X`8F$`%,@M0`!69@``,$JN`%9GR
XM```.(BX`8B`N`%9A`!3"2JX`-F<```XB+@!"("X`-F$`%*YP_V```*X@+@`VX
XM+4``.BU``#X@+@!6+4``6BU``%X@;@`$(&@`!"9H``I@``!F#"L``0!\9@``>
XM6$'N`.`B""`\````X-"+80`4PDJ`9@``0$'N```G2``J)VX`+@`N+4L`+DIKC
XM`'9G```F<``P*P!V(@!*:P`(9P``#'``,"L`"&````AP`#`K`!QA`!3B)FL`@
XM%B`+9@#_F&```!`@;@`$(&@`!"UH``H`+G``8```!$YQ3.T/,/_H3EU.=4Y5<
XM``!(Y\#P""X`!P`"9@`!4DHN`'QG```*2JX`*F8```I![@`R8```"B!N`"I!2
XMZ`!2)$@@5S`J`!BP4&8```9":@`82FX`&F8``11*+@!\9@``9B9N`"Y@```\J
XM0JL`*DIK`'AG```,<``P*P!X8```!'`$(@!*:P`(9P``#'``,"L`"&````AP/
XM`#`K`!QA`!0B)FL`+B`+9@#_PB(N`$(@+@`V80`32B(N`&(@+@!680`3/F``;
XM`*A*K@`J9P``BB9N`"I@```80>X``+'K`"YF```()VX`+@`N)FL`+B`+9@#_8
XMYD'N```B;@`JL>D`,F8```H@;@`J0J@`,B!N`"I*J``N9@``0B!N`"I*:`!X!
XM9P``-B!N`"IP`#`H`'@B`"!N`"I*:``(9P``$"!N`"IP`#`H``A@```,(&X`B
XM*G``,"@`'&$`$VQ*K@`.9P``$"(\```!`"`N``YA`!*48```!D*N`"YP`&``!
XM``1.<4SM#P#_\$Y=3G5.50``2.?`@$J7;```$B`7(&\`!-&H``1P_V```!0@C
XM%R!O``21J``$<`!@```$3G%,[0$`__Q.74YU3E4``$CGR(!@```,(&X`+BUHT
XM`!8`+DJN`"YG```>0>X``+'N`"YG`/_D(&X`+A`N`'RP*`!\9@#_U$JN`"YG%
XM``!"(%=P(+"H``1D```(<"!@```((%<@*``$*``O!"`\````X-"N`"XB`"!O`
XM``0@*``@80`22%B/(%<A1``$8```$"U\````TP`></]@```4(&X`+BUH`!8`"
XM+G``8```!$YQ3.T!$O_T3EU.=4Y5``!(Y^"`""X`!P`"9P``#B`O``1A`/\\#
XM8```<B`780`&R$J`9P``"'#_8```8$HN`'QF```N(B\`!"0!+Q<O+P`(0>X`]
XM4B((0>X`,B`(80`'Q%"/(@)A`/[`8```,&```"PB+P`$)`$O%R\O``AP,M"NU
XM`"HB`'!2T*X`*F$`!Y90CR("80#^DF````),[0$$__A.74YU3E4``$CGX(`(G
XM+@`'``)G```.("\`!&$`_J1@``#`(!=A``8P2H!G```(</]@``"N2JX`#F8`2
XM`"P@/````0!A`!"D+4``#F8```QP_V```(Y@```0(CP```#_("X`#F$`$2@@+
XM;P`$#*@```$```1C```.(&\`!"%\```!```$2BX`?&8``"XB+P`$)`$O%R\OX
XM``A![@!2(@A![@`R(`AA``@<4(\B`F$`_=I@```P8```+"(O``0D`2\7+R\`V
XM"'`RT*X`*B(`<%+0K@`J80`'[E"/(@)A`/VL8````DSM`03_^$Y=3G5.50``I
XM2.?@@`@N``<``F<``!`M?````,L`'G#_8```<B`780`%2$J`9P``"'#_8```%
XM8$HN`'QF```N(B\`!"0!+Q<O+P`(0>X`,B((0>X`4B`(80`+9%"/(@)A`/U`S
XM8```,&```"PB+P`$)`$O%R\O``AP4M"N`"HB`'`RT*X`*F$`"S90CR("80#];
XM$F````),[0$$__A.74YU3E4``$CGX(`(+@`'``)G```0+7P```#+`!YP_V``@
XM`'(@%V$`!*Y*@&<```AP_V```&!*+@!\9@``+B(O``0D`2\7+R\`"$'N`#(B5
XM"$'N`%(@"&$`##I0CR("80#\IF```#!@```L(B\`!"0!+Q<O+P`(<%+0K@`J*
XM(@!P,M"N`"IA``P,4(\B`F$`_'A@```"3.T!!/_X3EU.=4Y5``!(Y\#@8``!5
XM:$AX``1!^@0@(@@@;P`(("@`(&$`#SY8CTHN`'QF```.(&\`!"!H`"`0O`!PH
XM+RX`_$'N`.`B""!O``@@*``@6(!A``\06(\@;P`$(&@`("`N`/Q",`@$8``!T
XM0$AX`!Q![@"`(@@@;P`(("@`(&$`#N18CV```20(+@`'``)G```(<"!@```(9
XM(#P```(`(&\`!"%```A@``$"(!=A``.02H!G```(</]@``#X8```@DHN`'QFD
XM```*0>X`,F````H@;@`J0>@`4B1(<`?`J@`49@``%B`J``B0J@`,(&\`!"%`Q
XM``1F```0+7P```#V`!YP_V```*Y@``!L(&\`!$*H``1@``!@(&\`!")O``0C,
XM:``(``0B+P`$(!=A`/PH8```@BU\````T``></]@``!T(&\`!"`\``#__\"H6
XM``0,@````/]B`/_<#````6<`_V(,```&9P#_I`P``!1G`/^H8`#_P&```#0@^
XM;P`$(#P``/__P*@`!`R`````_V(`_QQ*`&<`_M@,```"9P#^[`P```YG`/YN4
XM8`#_`G``8```!$YQ3.T'`/_T3EU.=4Y5``!(Y\#P8``"$"!O``0]:``*`'9@A
XM``)2(&\`!#UH``H`>&```D1(>``<(&\`""(H`"!![@"`(`AA``UL6(]@``(HS
XM(!=A``(Z2H!G```(</]@``(>8``!8DHN`'QF```*0>X``&````8@;@`J)D@(F
XMZP```$D(ZP```&E@``&82BX`?&8```I![@``8```!B!N`"HF2'#^P:L`1G``X
XM,"L`3"(`<``P*P!*80`-0$)K`$IP_L&K`&9P`#`K`&PB`'``,"L`:F$`#21"E
XM:P!J8``!1DHN`'QF```*0>X`,F````H@;@`J0>@`4B1(2FH`&&8```QP!\"JI
XM`!1G```0+7P```#V`!YP_V```6@@*@`(D*H`#&X``!8@5S50`!@@;P`$-6@`@
XM"@`:8```%"!O``0B*``((%=P`#`080`,L&```-9*+@!\9@``"D'N`#)@```*F
XM(&X`*D'H`%(D2"!7,"H`&+!09@``!D)J`!A@``"H(&\`!`QH`!``"F<```9@N
XM``"6(&\`!")O``0C:``,``@@;P`$(F\`!"-H``@`!"(O``0@%V$`^W!@``#(<
XM+7P```#0`!YP_V```+H@;P`$(#P``/__P*@`!`R`````R&<`_Z!B```F#```G
XM&F<`_O9B```.#```%6<`_ZA@`/_`#```&V<`_TY@`/^T#(````,!9P#^6&(`0
XM_Z8,@````P!G`/YP8`#_F&```%(@;P`$(#P``/__P*@`!`R`````)6<`_>IBL
XM```:#(`````D9P#]SF(`_@)*`&<`_>!@`/WX#(`````G9P#]Q&(`_>H,@```Q
XM`"9G`/VH8`#]W'``8```!$YQ3.T/`/_P3EU.=71T>2\``$Y5``!(YX`@)$`,5
XM+@`!`'QF$DJN`"IF#"U\````W``><`%@`G``3.T$`/_\3EU.=4Y5``!(Y\`@U
XM)$!P`&$`#$!*@&8&2FH`)F<><``P*@`F+4``'G(@LH!N"C`\`P#`:@`<9P1P=
XM_V`"<`!,[00"__A.74YU3E4``$CGS*`H`"1!2BX`A&8&<`%@``"8<``P*@`<W
XM80`*+C5\``$`'D'N```DB&`\<`?`J@`49A9P`#`J`!HB`'``,"H`&&$`"JY"4
XM:@`8(&\`(#50`!P@+P`@80#_8$J`;`1Z_V`@2FH`'&;J("H`!-"J`!"PJ@`(.
XM8[8@:@`(4JH`"!"$>@%/[?_H0FH`''`'P*H`%&86<``P*@`:(@!P`#`J`!AAC
XM``I00FH`&"`%3.T%,/_P3EU.=4Y5``!(Y^RX)$`F02!O`"P@/'_____`J``$.
XM*``@;P`L*&@`("!O`#`P*@`8L%!F$"U\````]@`>(`1$@&```/9P`#`J`!AAX
XM``E.-7P``0`:8```H"`J``0E0``,)4``"'`'P*H`%&86<``P*@`>(@!P`#`J4
XM`!QA``G&0FH`'"!O`#`U4``8("\`,&$`_GA*@&T^2FH`&&;N("H`#+"J``ADW
XMLD'N```B""!J``Q2J@`,$!`8P'0`%``@`F$`".@:`&<N8!IP`V`"<`(M0``>7
XM4X0@!$2`*`!@'D)N`'I@$@P%``-G]`P%``AGV@P%``EGV%.$2H1NHD_M_]Q"Q
XM:@`8("H`#+"J``AE*B`J``0E0``,)4``"'`'P*H`%&86<``P*@`>(@!P`#`JZ
XM`!QA``D20FH`'"`$3.T=-/_D3EU.=4Y5``!(Y^ZX)$`@;P`P(#Q_____P*@`Z
XM!"@`(&\`,"9H`"`H;@`.(&\`-#`J`!BP4&80+7P```#V`!X@!$2`8``#F'``X
XM,"H`&&$`"`XU?``!`!I@``-`("H`!"5```PE0``(<`?`J@`49A9P`#`J`!XB_
XM`'``,"H`'&$`"(9":@`<(&\`-#50`!@@+P`T80#].$J`;0`"PDIJ`!AF["`JY
XM``RPJ@`(9+`@:@`,4JH`#!H08``"K$HN`()G1"\O`#0B+P`(<``0+@"280#]&
XM0%B/)``O+P`T(B\`"'`@80#]+EB/U(`O+P`T(B\`"'``$"X`DF$`_1A8C]2`I
XM<`.P@F`8+R\`-"(O``AP`!`N`))A`/S\6(]R`;*`;@`"/E.+4XP@;P`PM^@`V
XM(&,$($M@""!O`#`@:``@)DBY[@`.8P0@3&`$(&X`#BA((&\`,+BH``1F$"!O/
XM`#`@*``$4H`H`&```C14A&```BY";@!Z%L48Q2\O`#0B+P`(<``0!6$`_(Y8)
XMCTJ`;0`!TDHN`(5G%B\O`#0B+P`(<`IA`/QR6(]*@&T``;93A&```?06A1B%`
XM<`-@!A:%&(5P`BU``!Y@``&8N>X`#F8,+7P```#3`!Y@``&(2BX`@V<``'9@I
XM:DHN`()G1"\O`#0B+P`(<``0+@"280#\&EB/)``O+P`T(B\`"'`@80#\"%B/#
XMU(`O+P`T(B\`"'``$"X`DF$`^_)8C]2`<`.P@F`8+R\`-"(O``AP`!`N`))AQ
XM`/O66(]R`;*`;@`!&%.,4H2Y[@`.8I!@,"\O`#0B+P`(<``0+@"+80#[KEB/E
XM)``O+P`T(B\`"'`*80#[G%B/U(!P`K"";@``W"!O`#`F:``@*&X`#F``_L80O
XM'!;`&@"P+@"+9@Y*+@"+9PA3BU.,8```[B\O`#0B+P`(#`4`(&0$<"Y@!'``<
XM$`5A`/M,6(]*@&T``(Y3A$J$;KY@``#"$"X`BQ:`&(`O+P`T(B\`"'``$!1AS
XM`/LB6(]*@&UF2BX`A6<4+R\`-"(O``AP"F$`^PA8CTJ`;4PL+@`.8!HO+P`T`
XM(B\`""!&<``0$&$`^NI8CTJ`;2Y2AKR,9>)@8A;%&,4O+P`T(B\`"`P%`"!D!
XM!'`N8`1P`!`%80#ZOEB/2H!L/E.$(`1$@"@`8#Q![@``(@AP`!`%80`$_%.`4
XM#(`````(8KK00#`[``9.^P`"_33^4/WF_C[_4O]*_[#^*/XP4X1*A&X`_01/:
XM[?_80FH`&"`J``RPJ@`(92H@*@`$)4``#"5```AP!\"J`!1F%G``,"H`'B(`V
XM<``P*@`<80`%,$)J`!P@!$SM'73_X$Y=3G5.50``2.?/N"1`)D$@;P`P(#Q_]
XM____P*@`!"@`(&\`,"AH`"`J$R`J``30J@`0+@!P`#`J`!QA``0^-7P``0`><
XM0>X``"2(8```YG`'P*H`%&86<``P*@`:(@!P`#`J`!AA``2\0FH`&"!O`#0U7
XM4``<("\`-&$`^6Y*@&P*(`1$@"@`8```L$IJ`!QFY+ZJ``ACN"!J``A2J@`(2
XM$!P0@!P`2H5G``"(8%P(ZP`!`!=@!@CK``(`%U.J``A@<'#[8"0@1;PH`)!F2
XM!'(#8`)R`B!%<``P*``<80`$1@@K``$`%V=*</W!JP`44ZH`"'``,"L`'B(`\
XM<``P*P`<80`$(D)K`!Q@*"(%<``0!F$``WA?@`R`````!&+"T$`P.P`&3OL`E
XM`O^&_Y[_GO^._YI3A$J$;@#_6D_M_]A":@`<("H`"+"J``QC'G`'P*H`%&868
XM<``P*@`:(@!P`#`J`!AA``/`0FH`&"`$3.T=\/_@3EU.=4Y5``!(Y\^X)$`FJ
XM02!O`#`@/'_____`J``$*``@;P`P*&@`("H3("H`!-"J`!`N`'``,"H`'&$`E
XM`LXU?``!`!Y![@``)(A@``),<`?`J@`49A9P`#`J`!HB`'``,"H`&&$``TQ"T
XM:@`8(&\`-#50`!P@+P`T80#W_DJ`;0`!YDIJ`!QF[+ZJ``ACP%)N`*`@:@`($
XM4JH`"!`<$(`<`$H&9P`!\DJ%9P``B&!<".L``0`78`8(ZP`"`!=3J@`(8'!P"
XM^V`D($6\*`"09@1R`V`"<@(@17``,"@`'&$``M0(*P`!`!=G2G#]P:L`%%.JS
XM``AP`#`K`!XB`'``,"L`'&$``K!":P`<8"@B!7``$`9A``(&7X`,@`````1B%
XMPM!`,#L`!D[[``+_AO^>_Y[_CO^:O"X`BV8``,A";@"@2BX`AV=<4FX`>G``2
XM$"X`B+!N`'IF3$)N`'IP`#`K`!AA``&J<`?`JP`49A9P`#`K`!XB`'``,"L`Q
XM'&$``CA":P`<(&\`-#=0`!@@+P`T80#VZDJ`;0``TDIK`!AF[%*K``Q*+@"%4
XM9U0@*@`$T*H`$+"J``AB.G`'P*L`%&86<``P*@`:(@!P`#`J`!AA``'F0FH`?
XM&"!O`#0U4``<("\`-&$`]IA*@&T``(!*:@`<9NP@:@`(4JH`"!"\``I3A&``J
XM`*!*+@";9P``D$HN`)IG``"(O"X`FF8``(!5CW``,"X`H%.`<@`2+@";80`!I
XMO#Z`4ZH`"&!<<`?`J@`49A9P`#`J`!HB`'``,"H`&&$``69":@`8(&\`-C50J
XM`!P@+P`V80#V&$J`;`@@!$2`*`!@,$IJ`!QFYB`J``30J@`0L*H`"&.R(&H`C
XM"%*J``@0O``@4U=*5V[@5(]3A$J$;@#][$_M_]A":@`<("H`"+"J``QC'G`'[
XMP*H`%&86<``P*@`:(@!P`#`J`!AA``#J0FH`&"`$3.T=\/_@3EU.=2\*3D``O
XM*&0*+4$`'G``)%].=2`*8/@O"B1`(`%.0``I9`HM00`></\D7TYU<`!@^$I`0
XM9PAR`$Y``"L@`4YUL#P`(&PB2@!G'B!!0>@`B7((L!AG%E')__I<B'("L!AG3
XM#'(!L!AG!D*`3G5$0=)\``DP`4YU(D`@07``(@!@!$H19Q"S"&?X4XA3B1`0%
XM$A&2@"`!3G4B0"!!("\`!!+84<C__$YU($!#^@`:$!E&``P```UG!A#`4<G_%
XM\A#`4<G__$YUWYV&WZV:EI*:C=^^T=^RFI.3EI'R`$I`9P1.0``(3G4O`G0`<
XM2H!J!$2`=`-*@6H&1($*`@`!82+B"F0"1(#B"F0"1($D'TJ`3G5AU,%!2H!./
XM=6$&P4%*@$YU2.<X`"0!9@:!_```8&Y3@6=J*`$B`+2!90QG!'``8%QP`9*"@
XM8%8F`FOVQH1F$N**=O_BBE7+__Q$@^:HPH1@/'``=O_C@FH&M(%B"F`,M(%4P
XMR__R9P12@^**1(-@!..`XHJ2@F404H!1R__T8`[C@.**TH)E\%'+__;2@DS?"
XM`!Q*@$YU3E4``$CG8(!P`$Y```I@``&V3E4``$CG8(`@;0`((A`@0"`73D``8
XM%V4``9X@;0`(((%@``&<3E4``$CG8(!.0``/8``!@N&(",``'TY5``!(YV"`"
XM3D``"F```6Q.50``2.<`P"!!(D`B+0`(3D``$65@<`!@:$Y5``!(Y\#`($!.M
XM0``09%1@2DY5``!(Y\#`($`B2!`9#```+V<:#```+F8B#!D`+F?Z$"%G+@P`[
XM`"]F$B!)8-X0&0P``"]G!@P``"YGWDY``!!E"$H`9PP@26#"+4$`'G#_8`0@P
XM"9"73.T#`O_T3EU.=4Y5``!(YV"`2.<`8"0M``P@0"`!(BT`"$Y``"5E`B`*)
XM3-\&`&```+A.50``2.=@@"!`3D``&F4``*@@`6```*!.50``2.=@@"!`3D``1
XM'V4``)`@`6```(A.50``2.=@@"!M``A.0``88```=$Y5``!(YV"`($!.0``FD
XM8```8DY5``!(YV"`",$`'V`,3E4``$CG8(`D+0`(3D``)V4``$(@`F```#I.Y
XM50``2.=@@$Y```M@```J3E4``$Y``%).74YU3E4``$CG8(`O"2!M``@B;0`,2
XM3D``&R)?8````F0,+4$`'G#_8`1E]G``3.T!!O_T3EU.=5!T>4UA;@````\O>
X!?T``_
X``
Xend
Xsize 7066
END_OF_FILE
if test 9933 -ne `wc -c <'ptyman.uu'`; then
    echo shar: \"'ptyman.uu'\" unpacked with wrong size!
fi
# end of 'ptyman.uu'
fi
if test -f 'tty.uu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'tty.uu'\"
else
echo shar: Extracting \"'tty.uu'\" \(204 characters\)
sed "s/^X//" >'tty.uu' <<'END_OF_FILE'
X
Xbegin 644 tty
XM2OP``0```'H````!````<@55#P"`````````````````````````````````=
XM`#]>`````````/L`9`!K```````````````<```!`0$!```8"!@-!``!%P,%P
X@"`<`````$1,)"%!T>4UA;@!0='E$<G8`='1Y```X9?(!W
X``
Xend
Xsize 122
END_OF_FILE
if test 204 -ne `wc -c <'tty.uu'`; then
    echo shar: \"'tty.uu'\" unpacked with wrong size!
fi
# end of 'tty.uu'
fi
echo shar: End of shell archive.
exit 0
-- 
| Frank Kaefer | fkk@stasys.sta.sub.org | Starnberg, Germany |
| Compuserve: 72427,2101   | Internet: fkk@Germany.Sun.COM   |
| unido!sunde!fkaefer      |    postmaster@Germany.Sun.COM   |