Article 6041 of alt.sources:
Path: jac.zko.dec.com!pa.dec.com!decwrl!hookup!news.mathworks.com!gatech!news.sprintlink.net!cs.utexas.edu!not-for-mail
From: nygren@ctr.nawcad.navy.mil
Newsgroups: alt.sources
Subject: Tscreen+Tstring uuzip file: C++ terminal control
Date: 26 Jun 1995 15:02:36 -0500
Organization: UTexas Mail-to-News Gateway
Lines: 343
Sender: nobody@cs.utexas.edu
Message-ID: <9506262005.AA00926@worf.ctr.nawcad.navy.mil>
NNTP-Posting-Host: news.cs.utexas.edu

Archive-name:Tscreen+Tstring (uuencoded pkzip file)
Submitted-by:nygren@tecnet1.jcte.jcs.mil (Dan Nygren)

These files are example programs for the article entitled "Controlling
Terminals Sanely Using C++" in the July 1995 issue of "Embedded Systems
Programming" magazine.

<keywords> = terminals, string, screen, C++

Manifest
--------
tstring.cc, tstring.hpp         - A minimal "terminal" string class
tscreen.cc, tscreen.hpp         - A terminal screen class
touch_sc.cc                     - A demo program for a FPA570 touch screen
ansi.cc                         - A demo program for an ANSI terminal
                                  or a PC with the ANSI.SYS driver
mak*                            - Makefiles for UNIX and Turbo C++
readme                          - This file

Dan Nygren
333 Carrsbrook Drive
Charlottesville, VA 22901
nygren@tecnet1.jcte.jcs.mil
nygren@ctr.nawcad.navy.mil

------
begin 777 nygren.zip
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
M2J&A,:I*7<W]ZB( ;<P4:C@C)^+#<[+,#]-AF6#.&*YLA'T[;'@.Q^]X(%XA
M)\ :TT;6=> CG32!C&(:$'VE[>VE:7[8P\+W9W#]Q]75>,J>GQ?&4K)Z?3Z'
M>9'WD:3L5L.^"?E*?^,I//BD*QL<$Y-]\":2L^4#8PF_A77R92Q-FJCI"R<4
MRA<@&=2B#U:G/-#[9Y;2?QI>IZR1YW#!*;:A],:ZV%:7V+]O)?-P/-U^NU<7
M3^%FUVKD^PC<KK5X.*FT\O=@ CY!A0HIL+?O.)#IYQ1'+/_^Q'\U=.%1/P$'
M]*>;@CY[5-!LC76#=G*NL5H[@7KNFVA[31>766\XYYO=IH\W\*/AB<,\.AR/
M8"X7\7#C^YM29LE&T=I$8YZ/SMM"S@-?^@KT2[YJ;7??UF#=> S#V;AM*>'%
M0;<T]HXB$=8$G;JHLZ90V,:[8;IM)K!A]J;;&Q^UY&,*L\]42L/"R&H\S?,W
M+F!E7NR(/E61E0OA\?0^P'0GPY'YS_'W">I*U@?[W_T#4$L#!!0    ( ,."
MR![;;+W%GP$  +$"   &    4D5!1$U%=9+-B]LP$,7/$>@?Z&GPL9LUFPU+
M";2EP=O"%G8).%O:4U'DB:U&'V%&2>K]ZRM_Y58?;*%Y[_?$D[<-,L+>6&10
MA(!_E3M:A".%FI1CV >"V& :1J/3 'TTT6(%61%\I&"M\;446R1GO+(,I?)H
M6WCEM _%S4T&QO>$[Z>TO5BM'L PGQ#"'K*O;H=5E6AERQ$=2[$9@A.LSL"I
M6KT9C[D44GP\8'L)5/%G^ 1QRIL#1TKB]-6$Z.==)G3Z9^7-'CE*<3L^4L1!
MG&L]AVG='(^SV2VL(0&-4Q:R"9Z-;-!6,7?N/F)T#^NK>S*-Y[AZPDDWOUDG
MTVP05NC"U&]?KX)OF_7#ASOHM:-?"N79#*[_V#RL7\JG:[ 4G12@)VX*N)C8
M],5WJKS\54)%YHPDA5.']P/V61UPN/R.^/KR]#-A*]B>:!>Z(J4@5)7#0;UM
M#/?_2E?O8\I_:6OJCKI<+J%01+RC$ [P2.G"BD:1#3$BGXVU.(<?:[B_7]TM
MI/"][4M$[3$N\C\Z8GIQ[HR]#G6DW*N+5E7ZG-MA)L6[?U!+ 0(4 !0    (
M ,."R!Y$S167204  /P.   *          $ (         !44U1224Y'+D-#
M4$L! A0 %     @ PX+('@NKEFP)!0  $@X   L          0 @    <04 
M %130U)%14XN2%!04$L! A0 %     @ PX+('B'V/=QQ!   & H   <     
M     0 @    HPH  $%.4TDN0T-02P$"%  4    " ##@L@>.0]JTXD    :
M 0  "          ! "     Y#P  34%+155.25A02P$"%  4    " ##@L@>
M7"+H#G,"   '!0  "          ! "    #H#P  34%+5$]50TA02P$"%  4
M    " ##@L@>'"8")44"  !U!   !P         ! "    "!$@  34%+04Y3
M25!+ 0(4 !0    ( ,."R!ZLX1G2N@P  .\F   +          $ (    .L4
M  !43U5#2%]30RY#0U!+ 0(4 !0    ( ,."R!Y"[A+^>0L  $ M   *    
M      $ (    ,XA  !44T-2145.+D-#4$L! A0 %     @ PX+('KP6L/<I
M!0  _ P   L          0 @    ;RT  %135%))3D<N2%!04$L! A0 %   
M  @ PX+('MMLO<6? 0  L0(   8          0 @    P3(  %)%041-15!+
4!08     "@ * "4"  "$-       
 
end




