mellin@lan.informatik.tu-muenchen.dbp.de (Reiner Mellin) (07/17/89)
Hello, The following shar-archive contains a beta-version of my pty-filemanager. If you find any undocumented differences to the SCF+driver Version of the ptys or bugs please drop me a message. Highlights: - unlimited number of ptys (memory dependant) - any legal os9-filename for a pty: e.g: '/[pt]ty/any$name_u$like' - faster than the SCF+driver version (faktor 2 and I expect to get a factor of at least 4 soon). To install it , just uudecode all *.uu files and load these via 'load'. I have heard that microware has a PTTY-Filemanger too, how do mine and their version differ ? Have Fun .... Reimer PS: i use ptys mostly for 'screen' and 'mgr'. PPS: all written in C, is there some interest in the sources ? #! /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: MANIFEST COPYRIGHT ptyman.doc pty.uu ptydrv.uu ptyman.uu # tty.uu # Wrapped by ram@ramsys on Mon Jul 17 00:00:38 1989 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'MANIFEST' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'MANIFEST'\" else echo shar: Extracting \"'MANIFEST'\" \(288 characters\) sed "s/^X//" >'MANIFEST' <<'END_OF_FILE' X COPYRIGHT -- a copyright notice X pty.uu -- descriptor for pty-devices X ptydrv.uu -- dummy driver X ptyman.doc -- some documentation X ptyman.uu -- the pty Filemanager X tty.uu -- descriptor for tty-devices X END_OF_FILE if test 288 -ne `wc -c <'MANIFEST'`; then echo shar: \"'MANIFEST'\" unpacked with wrong size! fi # end of 'MANIFEST' fi 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* ....!pyramid!tmpmbx!doitcr!ramsys!ram (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'\" \(9111 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 pty 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 while Xusing only *one* descriptor (device) for each. Server-ptys must be Xopened as "/pty/any_valid_name" , client-ttys must be opened (i.e. Xconnected) with "/tty/any_valid_name". The Open-Call for the client-pty Xwill block until a server-pty with the same name is opened. PTY's can Xbe also implemented with the usage of a special device-driver for the XSCF, but this has serveral 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.). 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). 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 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 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 - The Pause-char, Xon-char and Xoff-char are not supported ! X X - Any signal < 32 and > 1 (SIGWAKE) will abort a pending I/O with an X error-code of the signal. 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 XDescriptions of operation: X X- Read-calls: X absolute raw-read, ignores echo-parameter, but unterstands kbich and X kbach. X X- Write-calls: X absolute raw-write .... X X- Writeln-calls: X recognizes upc, tabch, tabs, alf, pause and returns on recognizing X the eor-char (normaly CR). 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 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. XCAVEAT: X - SS_DCOn, SS_EnRTS and SS_DsRTS are no-ops. X XNot supported are null (for padding), pausechar, xon and xoff. 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 name of the pty into the callers X (a0)-register. 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 no-op X X - SS_DsRTS: X no-op X X - SS_DCOn: X no-op 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 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 XThings to do: X - more speed (a factor of 2 seems easily reachable) ! X - shrinking the code X - treatment of dir-bit as in PipeMan, to see what ptys are open ? X - more lineediting (emacs-style, history ?) X - implementing the pausechar and maybe xon/xoff ? 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 X ....!pyramid!tmpmbx!doitcr!ramsys!ram (home) END_OF_FILE if test 9111 -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'\" \(208 characters\) sed "s/^X//" >'pty.uu' <<'END_OF_FILE' X Xbegin 644 pty XM2OP``0```'X````!````=@55#P"`````````````````````````````````E XM`#]>`````````!L`9`!K```````````````<````````````````````````C XD``````!R`````%!T>4UA;@!0='E$<G8`<'1Y`'!T>0``VA'+D X`` Xend Xsize 126 END_OF_FILE if test 208 -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'\" \(8083 characters\) sed "s/^X//" >'ptyman.uu' <<'END_OF_FILE' X Xbegin 644 ptyman XM2OP``0``%G(````!```69@55#0&@```"````````````````````````````6 XM`!U!````/`````````$``%(`4@`:`!H`&@`D`"H`/@`T`$@`7`!F`'`R/`#+` XM`#P``4YU`CS__DYU2.?__F%*8``#8$CG__YA0&```\1(Y__^839@``1H2.?_) XM_F$L8``$S$CG__YA(F```$I(Y__^81A@``4F2.?__F$.8``&*$CG__YA!&``> XM`CHC3@`B+$D@7R`,(@U.D$J`9PY,WW__(BD`'@`\``%.=4S??_\"//_^3G5." XM50``2.?,L"!O``0D:``@<%"P*@`!9PAP<+`J``%F!'``8`)P`1U``&X@"F$`' XM%`XH`&T``59P+[`R2`!F'"`$4H#5P"`*80`3]"@`;0QP'+"$;09*,D@`9PPMN XM?````-<`'F```28@;P`$'6@``P`">@!@+G!AL#)8`&(6<'JP,E@`90YP`!`RI XM6``$@````"!@!G``$#)8`$'N`.`1@%@`4H6ZA&W.+40`_$HN`&YG2"!N``0@H XM:``$)F@`"F`H2BL`;F8>0>X`X"(((`L&@````.!A`!'&2H!F""U+`"I@``$>. XM)FL`%B`+9M0@%V$`!HQ*@&>\8```E"!N``0@:``$)F@`"F`R2BL`;F8H0>X`_ XM`+?(9R!![@#@(@@@"P:`````X&$`$79*@&8*+7P```#]`!Y@5B9K`!8@"V;*N XM(#P```(`+4``6BU``#X@+@`^80`0XBU``#)G#B`N`%IA`!#4+4``3F8J2JX`S XM3F<,(BX`6B`N`$YA`!#42JX`,F<,(BX`/B`N`#)A`!#"</]@``!V("X`,BU`< XM`#8M0``Z("X`3BU``%(M0`!6(&X`!"!H``0F:``*8$1P`;`K`&YF.$'N`.`B> XM""`+!H````#@80`0S$J`9B)*:P`(9QQ*:P!J9PAP`#`K`&I@`G`!(@!P`#`KK XM``AA`!$*)FL`%B`+9KA/[?_D<`!,[0TP_^Q.74YU3E4``$CGP+!*+@!N9@9!G XM[@`N8`@@;@`J0>@`2B1((%<P*@`4L%!F!$)J`!1*;@`:9@``HDHN`&YF``!N^ XM(&X`!"!H``0F:``*8$1P`;`K`&YF.$'N``"QZP`J9BY"JP`J2FL`:F<(<``P` XM*P!J8`)P!"(`2FL`"&<(<``P*P`(8`9P`#`K`!QA`!!H)FL`%B`+9K@B+@`^P XM("X`,F$`#Z`B+@!:("X`3F`H0>X``"`((&X`*B%``"YG""!N`"I"J``N2JX`S XM#F<.(CP```$`("X`#F$`#VIP`$SM#0#_]$Y=3G5.50``2.?H@&$`!%I*@&9&> XM2BX`;F84+Q<O+P`(0>X`2B((0>X`+B`(8!@O%R\O``@@+@`J<B[0@2(`("X`Q XM*G1*T()A``5D4(\H`$J$;`P@;P`$V:@`!'#_8`H@;P`$F:@`!'``3.T!%/_T+ XM3EU.=4Y5``!(Y^B`80`#[$J`9@``ADJN``YF'B`\```!`&$`#K8M0``.9VXBL XM/````/\@+@`.80`/.B!O``0,J````0``!&,,(&\`!"%\```!```$2BX`;F841 XM+Q<O+P`(0>X`2B((0>X`+B`(8!@O%R\O``@@+@`J<B[0@2(`("X`*G1*T()AL XM``7\4(\H`$J$;`P@;P`$V:@`!'#_8`H@;P`$F:@`!'``3.T!%/_T3EU.=4Y59 XM``!(Y^B`80`#/DJ`9D9*+@!N9A0O%R\O``A![@`N(@A![@!*(`A@&"\7+R\`_ XM""`N`"IR2M"!(@`@+@`J="[0@F$`";A0CR@`2H1L#"!O``39J``$</]@"B!O* XM``29J``$<`!,[0$4__1.74YU3E4``$CGZ(!A``+02H!F1DHN`&YF%"\7+R\`/ XM"$'N`"XB"$'N`$H@"&`8+Q<O+P`(("X`*G)*T($B`"`N`"IT+M""80`*>%"/I XM*`!*A&P,(&\`!-FH``1P_V`*(&\`!)FH``1P`$SM`13_]$Y=3G5.50``2.?(P XMX&$``F)*@&8``*Y@``"N+RX`_$'N`.`B""!O``@@*``@80`-JEB/(&\`!"!H\ XM`"`@+@#\0C`(`&```,!(>``<0>X`@"(((&\`""`H`"!A``U^6(]@``"D2BX`' XM;F8&0>X`+F`((&X`*D'H`$HD2"`J``B0J@`,(&\`!"%```1B``!Z+7P```#V! XM`!Y@+"!O``1"J``$8&0@;P`$(F\`!"-H``@`!"(O``0@%V$`_59@3"U\````# XMT``></]@0"!O``0@*``$`H```/__#(`````&9[IB$@P```%G`/]^8M)*@&<`9 XM_UI@R@R`````%&>H8L`,```.9P#_&F"V<`!,[0<0__!.74YU3E4``$CGP.!AT XM``%62H!F``#D8```Y$AX`!P@;P`((B@`($'N`(`@"&$`#)Y8CV```21*+@!N` XM9@9![@`N8`@@;@`J0>@`2B1(2FH`%&<,+7P```#V`!Y@``"<("H`")"J``QN" XM%"!7-5``%"!O``0U:``*`!9@``#>(&\`!"(H``@@5W``,!!A``R$8```R$HN/ XM`&YF!D'N`"Y@""!N`"I!Z`!*)$@@5S`J`!2P4&8``*9":@`48```GG`!L"X`T XM;F8``)0@;P`$/6@`"@!J8```AB!O``0B;P`$(V@`"``$(B\`!"`780#],F``U XM`&PM?````-``'G#_8%X@;P`$("@`!`*```#__PR`````)&=&8B0,```:9P#_^ XM'&(0#```%6>P8LI*`&<`_O!@P@P``!MG`/]>8+@,@````"9G&&(*#(`````E$ XM9PY@I`R`````)V<`_VA@F'``3.T'`/_T3EU.=4Y5``!(YX``<`&P+@!N9A)*4 XMK@`J9@PM?````-P`'G`!8`)P`$Y=3G5.50``2.?`("1`<`!A``R*2H!F!DIJ% XM`"9G('``,"H`)BU``!YR(+*`;@QP`#`J`!P(```)9P1P_V`"<`!,[00"__A.- XM74YU3E4``$CGS*`H`"1!2BX`A&8&<`%@``"V<``P*@`880`*AC5\``$`&D'NH XM```DB&!&2FH`%&<><``P*@`6(@!P`#`J`!1A``KX<``U0``4<@`R`&`$<``BU XM`"!O`"`U4``8("\`(&$`_U1*@&P$>O]@($IJ`!AFZB`J``30J@`0L*H`"&.L' XM(&H`"%*J``@0A'H!3^W_Z$)J`!@@*@`(L*H`#&,H2FH`%&<><``P*@`6(@!P. XM`#`J`!1A``J&<``U0``4<@`R`&`$<``B`"`%3.T%,/_P3EU.=4Y5``!(Y\BPL XM)$`@;P`@*"@`!"!O`"`F:``@(&\`)#`J`!2P4&80+7P```#V`!X@!$2`8``!A XM"'``,"H`%&$`"9(U?``!`!9@``"H("H`!"5```PE0``(2FH`&&<><``P*@`:3 XM(@!P`#`J`!AA``G\<``U0``8<@`R`&`$<``B`"!O`"0U4``4("\`)&$`_EA*! XM@&T>2FH`%&;N("H`#+"J``ADJ&`:<`-@`G`"+4``'E.$(`1$@"@`8#Q";@!L6 XM8#`@:@`,4JH`#!`0%L!R`!(`(`%A``D,#(````#_8A(,```#9]8,```(9[P,- XM```)9[I3A$J$;J1/[?_H("H`#+"J``AE-"`J``0E0``,)4``"$IJ`!AG'G``" XM,"H`&B(`<``P*@`880`)1'``-4``&'(`,@!@!'``(@!":@`4(`1,[0T0__!.T XM74YU3E4``$CG[+@D0"!O`"PH*``$(&\`+"9H`"`H;@`.(&\`,#`J`!2P4&80Y XM+7P```#V`!X@!$2`8``#Z'``,"H`%&$`"$@U?``!`!9@``.&("H`!"5```PE4 XM0``(2FH`&&<><``P*@`:(@!P`#`J`!AA``BR<``U0``8<@`R`&`$<``B`"!O" XM`#`U4``4("\`,&$`_0Y*@&T``P1*:@`49NP@*@`,L*H`"&2F2BX`@6<P(&H`H XM#%*J``QP8;`08B(@:@`,4JH`#'!ZL!!E%"!J``Q2J@`,<``0$`2`````(&`,H XM(&H`#%*J``QP`!`0&@!@``*T2BX`@F=$+R\`,"(O``AP`!`N`))A`/S>6(\DP XM`"\O`#`B+P`(<"!A`/S,6(_4@"\O`#`B+P`(<``0+@"280#\MEB/U(!P`[""U XM8!@O+P`P(B\`"'``$"X`DF$`_)I8CW(!LH!N``)&4XM3C"!O`"RWZ``@8P0@6 XM2V`((&\`+"!H`"`F2+GN``YC!"!,8`0@;@`.*$@@;P`LN*@`!&80(&\`+"`H4 XM``12@"@`8``"-E2$8``",$)N`&P0!1;`&,`O+P`P(B\`"'``$`5A`/PJ6(]*# XM@&T``=A*+@"%9Q8O+P`P(B\`"'`*80#\#EB/2H!M``&\4X1@``'T<`-@`G`": XM+4``'A:`&(!@``&BN>X`#F8,+7P```#3`!Y@``&22BX`@V<``'9@:DHN`()GS XM1"\O`#`B+P`(<``0+@"280#[NEB/)``O+P`P(B\`"'`@80#[J%B/U(`O+P`P0 XM(B\`"'``$"X`DF$`^Y)8C]2`<`.P@F`8+R\`,"(O``AP`!`N`))A`/MV6(]RQ XM`;*`;@`!(E.,4H2Y[@`.8I!@,"\O`#`B+P`(<``0+@"+80#[3EB/)``O+P`P3 XM(B\`"'`*80#[/%B/U(!P`K"";@``YB!O`"PF:``@*&X`#F``_L@0'!;`&@"P= XM+@"+9@Y*+@"+9PA3BU.,8```\B\O`#`B+P`(<""P!6,$<"Y@!'``$`5A`/KL/ XM6(]*@&T``)A3A$J$;KY@``#&$"X`BQ:`&(`O+P`P(B\`"'``$!1A`/K"6(]*M XM@&T``'!*+@"%9Q0O+P`P(B\`"'`*80#ZIEB/2H!M5%F/+JX`#F`<+R\`-"(O: XM``P@;P`$<``0$&$`^H18CTJ`;3)2E[G78N!8CV!>$`46P!C`+R\`,"(O``AP8 XM(+`%8P1P+F`$<``0!6$`^E18CTJ`;#A3A"`$1(`H`&`V<``0!6$`!/!3@`R`] XM````"&*^T$`P.P`&3OL``OTR_DS]Y/XZ_T[_1O^T_BC^+%.$2H1N`/S(3^W_M XMW$)J`!0@*@`,L*H`"&4T("H`!"5```PE0``(2FH`&&<><``P*@`:(@!P`#`JZ XM`!AA``46<``U0``8<@`R`&`$<``B`"`$3.T=-/_D3EU.=4Y5``!(Y\RP)$`@\ XM;P`D*"@`!"!O`"0F:``@<``P*@`880`$/C5\``$`&D'N```DB&```+)*:@`4. XM9QYP`#`J`!8B`'``,"H`%&$`!*YP`#5``!1R`#(`8`1P`"(`(&\`*#50`!@@_ XM+P`H80#Y"DJ`;`@@!$2`*`!@<$IJ`!AFYB`J``30J@`0L*H`"&.H$!L@:@`(S XM4JH`"!"`&@!*!6=$(&\`!$J09SP@;P`$(%"Z*`"09A)R`R!O``0@4'``,"@`E XM'&$`!#8@;P`$(%"Z*`"19A)R`B!O``0@4'``,"@`'&$`!!A3A$J$;I9/[?_D% XM0FH`&"`J``BPJ@`,8RA*:@`49QYP`#`J`!8B`'``,"H`%&$``^AP`#5``!1RK XM`#(`8`1P`"(`(`1,[0TP_^Q.74YU3E4``$CGSO`D0"!O`"PH*``$(&\`+"9HG XM`"!P`#`J`!AA``,0-7P``0`:0>X``"2(8``"@$IJ`!1G'G``,"H`%B(`<``PN XM*@`480`#@'``-4``%'(`,@!@!'``(@`@;P`P-5``&"`O`#!A`/?<2H!M``(2/ XM2FH`&&;L("H`!-"J`!"PJ@`(8ZY2;@"@2BX`@6<8<&&P&V(2<'JP&V4,<``0W XM&P2`````(&`$<``0&R!J``A2J@`($(`:`$H%9T0@;P`$2I!G/"!O``0@4+HHM XM`)!F$G(#(&\`!"!0<``P*``<80`"ZB!O``0@4+HH`)%F$G("(&\`!"!0<``PV XM*``<80`"S$H%9P`!"KHN`(MF``$"0FX`H$HN`(=G``",<``0+@"(4FX`;'(`F XM,BX`;+"!9G9";@!L(&\`!'``,"@`%&$``?0@;P`$2F@`&&<J(&\`!'``,"@`# XM&B(`(&\`!'``,"@`&&$``FAP`"!O``0Q0``8<@`R`&`$<``B`"!O`#`B;P`$T XM,U``%"`O`#!A`/:\2H!M``#R(&\`!$IH`!1FZ"!O``12J``,2BX`A6=>("H`> XM!-"J`!"PJ@`(8D1*:@`49QYP`#`J`!8B`'``,"H`%&$``?QP`#5``!1R`#(`^ XM8`1P`"(`(&\`,#50`!@@+P`P80#V6$J`;0``CDIJ`!AF["!J``A2J@`($+P`% XM"E.$8```K$HN`)MG``"<2BX`FF<``)2Z+@":9@``C'``,"X`H%.`<@`2+@";2 XM80`!R#P`(&H`"!%\`"#__V!F2FH`%&<><``P*@`6(@!P`#`J`!1A``%N<``U+ XM0``4<@`R`&`$<``B`"!O`#`U4``8("\`,&$`]<I*@&P((`1$@"@`8"Y*:@`81 XM9N8@*@`$T*H`$+"J``ACJ"!J``A2J@`($+P`(%-&2D9NX%.$2H1N`/W"3^W_7 XMW$)J`!@@*@`(L*H`#&,H2FH`%&<><``P*@`6(@!P`#`J`!1A``#J<``U0``44 XM<@`R`&`$<``B`"`$3.T/</_D3EU.=2\*3D``*&0*+4$`'B1?<`!.=2`*)%].A XM=2\*)$`@`4Y``"ED"BU!`!XD7W#_3G4D7W``3G5*0&<(0H%.0``K(`%.=4H`R XM9Q2P/``@;`Y![@")<@BP&&<(4<G_^D*`3G5$0=)\``DP`4YU(D`@07``(@!@' XM!$H19Q"S"&?X4XA3B1`0$A&2@"`!3G4B0"!!("\`!!+84<C__$YU($!#^@`:N XM$!E&``P```UG!A#`4<G_\A#`4<G__$YUWYV&WZV:EI*:C=^^T=^RFI.3EI'R' XM`$I`9P1.0``(3G4O`G0`2H!J!$2`=`-*@6H&1($*`@`!82+B"F0"1(#B"F0"> XM1($D'TJ`3G5AU,%!2H!.=6$&P4%*@$YU2.<X`"0!9@:!_```8&Y3@6=J*`$B" XM`+2!90QG!'``8%QP`9*"8%8F`FOVQH1F$N**=O_BBE7+__Q$@^:HPH1@/'``2 XM=O_C@FH&M(%B"F`,M(%4R__R9P12@^**1(-@!..`XHJ2@F404H!1R__T8`[C] XM@.**TH)E\%'+__;2@DS?`!Q*@$YU3E4``$CG8(!P`$Y```I@``&83E4``$CG3 XM8(`@;0`((A`@0"`73D``%V4``8`@;0`(((%@``%^3E4``$CG8(!.0``/8``!. XM9.&(",``'TY5``!(YV"`3D``"F```4Y.50``2.<`P"!!(D`B+0`(3D``$644Q XM<`!@2DY5``!(Y\#`($!.0``09#8M00`>8"Q.50``2.?`P")`($D,&``N9_H,X XM*``O__]G\E.(3D``$&4*2@!G"@P``"]GWG#_8`0@"9"73.T#`O_T3EU.=4Y5V XM``!(YV"`2.<`8"0M``P@0"`!(BT`"$Y``"5E`B`*3-\&`&```+A.50``2.=@2 XM@"!`3D``&F4``*@@`6```*!.50``2.=@@"!`3D``'V4``)`@`6```(A.50``6 XM2.=@@"!M``A.0``88```=$Y5``!(YV"`($!.0``F8```8DY5``!(YV"`",$`A XM'V`,3E4``$CG8(`D+0`(3D``)V4``$(@`F```#I.50``2.=@@$Y```M@```J# XM3E4``$Y``%).74YU3E4``$CG8(`O"2!M``@B;0`,3D``&R)?8````F0,+4$`U X?'G#_8`1E]G``3.T!!O_T3EU.=5!T>4UA;@```'/+M$``H X`` Xend Xsize 5746 END_OF_FILE if test 8083 -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'\" \(208 characters\) sed "s/^X//" >'tty.uu' <<'END_OF_FILE' X Xbegin 644 tty XM2OP``0```'X````!````=@55#P"`````````````````````````````````E XM`#]>`````````!L`9`!K```````````````<```!`0$!```8"!@-&P0!%P,%K XD"`<```!R```)"%!T>4UA;@!0='E$<G8`='1Y`'1T>0``A6W-5 X`` Xend Xsize 126 END_OF_FILE if test 208 -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 --- -- | Reimer Mellin | mellin@lan.informatik.tu-muenchen.dbp.de | | Sulenstr. 8 | pyramid!tmpmbx!ramsys!ram (home) | | D-8000 Muenchen 71 | Technische Universitaet Muenchen |