billk@pnet01.UUCP (Bill Kelly) (07/18/87)
# This is a shell archive.
# Remove everything above and including the cut line.
# Then run the rest of the file through sh.
#----cut here-----cut here-----cut here-----cut here----#
#!/bin/sh
# shar: Shell Archiver
# Run the following text with /bin/sh to create:
# README
# WarpText.doc
# Warp.uu
# WarpText.obj.uu
# This archive created: Sat Jul 18 02:45:52 1987
# By: Craig Norborg (Purdue University Computing Center)
cat << \SHAR_EOF > README
ReadMe for WarpText version 2.0 Bill Kelly 07Jul87
Hi. I've been having a few problems with my assembler. I wrote
an example program to open up a window and a screen and then do some
WarpText into it. For some reason, the assembler would do strange
things to the code on the second pass, including not assembling
the data. After a while it would give up with some "Error 500" which
it said was an unknown error and that I should report it. I didn't
see anything about this kind of thing in the manual and haven't
been able to make it work. It did assemble WarpText, however, and
I was able to test the routines interactively with Forth. They all
work fine.
Here is a list of the files that should be in WarpText.ARC:
WarpText.doc WarpText.asm WarpText.h
WarpText.i Warp.C WarpC.asm
Warp WarpText.obj README
WarpText.doc: A small bit of documentation on the routines,
plus a copyright notice, thank-you notes,
information on distributing WarpText,
my address, etc. Please read this file.
(At least the first part, anyway...) Thanks.
WarpText.asm: The WarpText routines. There is documentation
telling how to call each routine at the beginning
of each routine.
WarpText.h: The 'C' include for WarpText, written by Anson Mah.
WarpText.i: The assembler include for WarpText.
Warp.C: A quick test of the original WarpText routines,
written by Anson Mah.
WarpC.asm: A 'C' interface to the WarpText routines. Makes
them easily callable from 'C' -- written by
Anson Mah.
Warp: Executable for the file "Warp.C" -- this program
only demonstrates the pre-release WarpText routines.
The NewWarp (version 2.0) routines did not exixt
when Anson wrote Warp.C. NewWarp is close to
twice as fast as the routines demoed by this
program.
WarpText.obj: Assembley of the file "WarpText.asm" -- assembled
with the symbols, and ready to link! :-)
README: Exactly. That's just what you're doing.
Enjoy the routines --
I hope they will be useful!
Bill Kelly.
SHAR_EOF
cat << \SHAR_EOF > WarpText.doc
WarpText.doc WT 2.0 Bill Kelly
07/06/87
// // ////// ////// ////// //////// ////// ||// ////////
// // // // // // // // // // |// //
// / // ////// ////// ////// // ///// // //
// /// // // // // // // // // //| //
/// /// // // // // // // ////// //|| //
THANK YOU'S: (in alphabetical order)
Thanks to Anson Mah for writing the WarpText 'C' interface.
Without him, there wouldn't be one -- I don't speak C!
Thanks to Aaron Avery for taking my original unreleased WarpText routine,
which was fast but not fancy, and speeding it up immensely. This routine,
(after I sped it up even more by rearranging the font data), and Aaron's
cursor routine, are WarpText 2.0.
Thanks to Hayes C. Haugen who, by writing Blitz, reminded me of what
text on a computer like this *ought* to be like and so got me started
on WarpText.
Thanks to Leon Frankel (sorry if I got the name wrong -- that's what it
sounded like over the phone) for reporting a bug in the wi_Width handling
in the WarpText prerelease routines.
(Please see "BUGS:" for more information.)
If I forgot anyone -- sorry. Thanks to you, too!
COPYRIGHT NOTICE:
The WarpText code, and the name "WarpText,"
is Copyright 1987 by Bill W. Kelly.
DISTRIBUTION INFORMATION:
Feel free to distribute this code, complying with the following
restriction:
Since there are many files in this release of WarpText,
please distribute them in ARCed form so that no files get lost.
(If you need to UUEncode, please UUEncode the ARC file.)
Thanks!
NOTE: IF YOU ARE GOING TO MODIFY THE CODE, please make a little note
containing the date, your comments, and what the original code was.
Thanks.
USING WARPTEXT IN A PROGRAM:
That's why I wrote it!
If you are going to distribute the WarpText source code with your program
please also follow the directions under "DISTRIBUTION INFORMATION."
It would be neat, especially if you aren't distributing the source
with your program, if you could find a place somewhere in your program
(the "ABOUT" menu, for instance) to say something like,
"Using Bill Kelly's WarpText routines for speed!," however if you
don't seem to be able to do this... don't worry about it. I would
really appreciate it, though! Thanks!
PLEASE CONTACT ME BEFORE USING THIS CODE IN A COMMERCIAL PROGRAM!
(My address can be found at the end of this file.)
GENERAL INFORMATION:
The "Old Warp" routines use the WarpInfo structure to keep track
of which bitplane they're writing into, the current X and Y locations,
the TextFont data, etc.
STRUCTURE WarpInfo,0 ; ...the <I> denotes internal use.
APTR wi_TextFont ; Pointer to a TextFont structure.
APTR wi_BitMap ; Pointer to a BitMap structure.
WORD wi_WhichPlane ; Which bitplane to render into.
WORD wi_Left ; Left edge of 'window' in char loc's.
WORD wi_Top ; Top edge of 'window' in char loc's.
WORD wi_Width ; Width of 'window' in char loc's.
WORD wi_Height ; Height of 'window' in char loc's.
APTR wi_WindowTop ; <I> Address of top of 'window.'
APTR wi_CurLine ; <I> Address of start of current line.
APTR wi_LastLine ; <I> Address of start of last line.
WORD wi_CurX ; <I> Current X position.
WORD wi_LastX ; <I> Maximum X position on a line.
WORD wi_BPMod ; <I> # total possible chars on a line in bp
WORD wi_Modulo ; <I> Add this to get to next line.
LABEL wi_SIZE
Call the InitWarpInfo routine before calling any of the other "Old Warp"
routines. The WarpInfo structure you pass InitWarpInfo must be partially
initialized before calling InitWarpInfo. InitWarpInfo prepares
the parts WarpInfo structure marked with "<I>" so that the WarpInfo
structure can be used with GetXY, GotoXY, and WarpText.
The "New Warp" routines use NewWarpInfo structure. It's a lot smaller
than WarpInfo because the new routines have sacrificed features for speed.
STRUCTURE NewWarpInfo,0
WORD nwi_XLoc ; Current X position in char. loc's.
WORD nwi_YLoc ; Current Y position in char. loc's.
APTR nwi_BitPlane ; Address of bitplane to render text into.
APTR nwi_FontData ; Address of 2048 byte array for font data.
LABEL nwi_SIZE
Call the SetupFont routine before calling any of the other "New Warp"
routines. SetupFont unpacks the font passed to it into the 2048 byte
array, the address of which is kept in nwi_FontData. You must allocate
this 2048 byte array and store its address into nwi_FontData before
calling SetupFont. Pass the pointer to an open font to SetupFont on
the stack. The 2048 byte array does not have to be in CHIP ram because
the routines do not use the blitter. After calling SetupFont, the
NewWarpInfo structure can be used with NewWarp and XORCursor.
Please see the file "WarpText.asm" for more information about each
routine.
BUGS:
Known Bugs: Fixed:
----------- ------
WarpText writes to two more columns per line /
than it should. If you specify 10 for wi_Width \/ Yes.
you will get 12 characters per line.
_
If WarpText encounters a character that has not |\ | / \
been defined in the font it's using it will not | \| \_/ Not yet.
output the empty-box character. A garbage
character-pattern will appear.
BUG REPORTS:
I would really appreciate hearing about any problems you find in
my code! Please don't hesitate to drop me a line or send me mail
if you have any suggestions, questions, or comments. I welcome
your input.
Enjoy,
Bill Kelly.
MY ADDRESS:
NAME: Bill W. Kelly
UUCP: {hplabs!hp-sdd, sdcsvax, ihnp4}!crash!pnet01!billk
ARPA: crash!pnet01!billk@nosc
INET: billk@pnet01.CTS.COM | For UUCP, don't do just pnet01!billk;
USPS: 2507 Caminito La Paz | please include the crash!pnet01!billk.
La Jolla, CA 92037 | Thanks!
FONE: (619) 454-1307
* --------------------- *
* End of "WarpText.doc" *
* --------------------- *
SHAR_EOF
cat << \SHAR_EOF > Warp.uu
begin 644 Warp
M #\P $ , " $@ 1@ (1 #Z0 ).
M^0 ^P ! P ( #\@ ^L 2 #\@
M ^H $8
M
M &1O<RYL:6)R87)Y '1O<&%Z
M+F9O;G0 'P " !5V%R<%1E>'0@5&5S= H R ! "
M$ X ) "@ #( %I;G1U:71I;VXN;&EB
M<F%R>0!G<F%P:&EC<RYL:6)R87)Y $AI+"!":6QL(0H (" @5&AA;G@@9F]R
M('EO=7(@5V%R<%1E>'0@<F]U=&EN97,N("!!<R!Y;W4@8V%N('-E92P@=&AI
M<PH :7,@82!Q=6EC:R!T97-T(&]F("=E;2X@(%1H92!O;FQY(')O=71I;F4@
M22!D;VXG="!U<V4@:7,* $=E=%A9+B @06QS;R!N;W1E('1H870@22!H879E
M(&-R96%T960@82!787)P5&5X="YH(&9I;&4@9F]R"@!#('!R;V=R86UM97)S
M(&QI:V4@>6]U<G,@=')U;'D@86YD(&%L<V\@82!#(&EN=&5R9F%C90H ;6]D
M=6QE(&9O<B!T:&4@<V%M92!P96]P;&4A("!0;&5A<V4@9&\@=VAA="!Y;W4@
M=VEL;"!W:71H"@!T:&5M+@H (" @4FEG:'0N("!))W9E(&QO;VME9"!O=F5R
M('EO=7(@8V]D92!A;F0@8V%N)W0@<V5E(&%N>0H :6UM961I871E(&EM<')O
M=F5M96YT<RP@8G5T($D@;6%Y(&EF($D@<W1U9'D@=&AE;2!L;VYG97(N"@!!
M8W1U86QL>2P@22!B96QI979E('EO=2!M:6=H="!G86EN('-O;64@;6]R92!S
M<&5E9"!I9B!Y;W4* '-T87)T('5S:6YG('1H92!";&ET=&5R(&EN<W1E860N
M("!)="!W87,@;6%D92!T;R!H86YD;&4* '-T=69F(&QI:V4@=&AI<RX@(%EO
M=2!S:&]U;&0@8F4@86)L92!T;R!G970@=7!W87)D(&]F"@ S,"PP,# @8VAA
M<G,O<V5C(&EF('EO=2!U<V4@:70N("!4:&ES(&YU;6)E<B!W87,@;65A<W5R
M960* '=I=&@@=&AE('-E="!O9B!R;W5T:6YE<R!M>2!F<FEE;F1S(&-A;64@
M=7 @=VET:"!A('=H:6QE"@!B86-K+B @270G<R!F86ER;'D@86-C=7)A=&4N
M"@ @("!!;GEW87DL(&UO<F4@=VAE;B!)(&AA=F4@;6]R92!T:6UE('1O(&AA
M8VLA"@ @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @
M("!!;G-O;@!(97DL($DG;2!H97)E(0!!;F0@:&5R92$A
M ^P " @ +@ "( _ "7T1/4T)A<V4 1<
M !%]-871H5')A;G-"87-E" 18 U]-871H0F%S90@ !%0
M #\@ ^D (1(\ !0(\@ !4( ](YW[^*D L>0 0CS@
M $ CSP $Q"N0 $B3R4ZN_MHH0"/L )@ X2JP K&< (H@#9"M 0C
MP 1A ',0J=.N0 !WA8CR! (&@ K-'(T<@B: 0T\G3R2 Y 4'(
M$ADCR0 %S0@5* 0F=2@ ) __Z?P%6 0G<( " Y 4"!Y 5"0 4X#4
M@1^P @ %."4<C_]A^\ " @ %."'[$@ " 4<K_^")/+PE@ !T(^P .@
M 1A %(80 !,B/ 2"\ )$ @*@ D9Q8L>0 !%P@0"(H CP0 #A.
MKO^"(BH (&<<)#P /M3J[_XB/ 6&<*Y8@@0"EH @ I"!Y 2"\(
M2'D (&@ )"/H 0 !<3?D 1@(#P 9PI3@'( +,%1R/_\3?D
M 3KD 42< !@!" O 0O " Y +&<$($!.D$ZY '1BQY 0")Y
M $7$ZN_F)*N0 !%1G"B)Y $5$ZN_F)*N0 !%AG"B)Y $6$ZN_F)*
MN0 &!G"B)Y 8$ZN_F)*N0 $AG+"(Y /&<$3J[_W"(Y 6&<$
M3J[_W"QY !$ZN_WPB>0 $A.KOZ&(!\N>0 $Q,WW]^3G5P9& _V!!
M[ !<3J[^@$'L %Q.KOZ,3G5#^0 &1P $ZN_=@CP !%QGU$YU2.?X8'@
M,40 'C%H X (")H 1T #0I Q0@ B."@ ".6$(G%("'8 )&@ #8J !1R
M "("PL,Q00 D> H <CH S8: *)$G5Q"%* !(A2@ 6= T* ,U&@ $"@!
MR,+8: *)$G5Q"%* !I,WP8?3G4Q0 >PN@ )-*H !(A00 63G4B* 6DJ@
M$H+H "1P # H !Y.=4CG?3QX #@H !YZ #HH " O!3HH "0O!21H !T !0J
M "!V !8J "$Z*@ F+P4Z*@ 4+P4D:@ B*&@ $B\,*&@ &B\,)F@ %GX /B@
M(E- <@!31%)$$AD, 0 @9P *K(";0 1K(#;0 -BA*DH+9P2I+V\0J+P (
M4X4:E-GO S;QU'-__:XKP 4;P 0G@ M]=G !"U^\ $& #HH2MG\ !
M &#(#($ *9]X,@0 QG ,#($ -9\Y@VG@ )F\ !& I1R/^"
M8 !E'(_WQ0CU"/4(\Q1 >(4L %DS?/+Y.=0 (&\ !$ZY "-$YU(&\
M!" O @B+P ,3KD *H3G4@;P $3KD *Z(&\ "#" (&\ ##"!3G4@;P $
M(F\ "" O Q.N0 LY.=4JY >&<2<"8O "\Y >$ZY '8%"/2KD
M !T9PXO.0 '1.N0 "!Q8CTJY <&<.+SD !P3KD ?(6(]*N0
M !G#B\Y $ZY 'R%B/0J=.N0 698CTYU<"$O $AY SDZY '
MW%"/(\ 2H!F!&$ _WIP(2\ 2'D #@3KD ?<4(\CP '!*@&8$
M80#_6G !+P!R)B\!3KD =(4(\CP 'A*@&8$80#_/$AY GDZY (
M,%B/(\ !T2H!F!&$ _R!.=4Y5__Q"K?_\(&T "%*M A*$&<&4JW__&#N
M("W__$Y=3G5.5?_N2.< (&$ _U@C_ /$ $(_P #\ ""/\ !
M. PC_ 7( 0(_P &O %"/\ !Y@ !@C_ B$ <
M(_P (H ("/\ "80 "0C_ IP H(_P +7 +"/\ #
M$ # C_ T< T(_P ." ."/\ #O #PC_ ]H !
M(_P 0* 1$AY B$ZY ']%B/('D !X(( D>0 '0B:@ NTOP
MN" )('D !X(4 !$)H @@>0 '@Q? * H@>0 '@Q? # P@>0
M '@Q? \ X@>0 '@Q? 5 ! O.0 'A.N0 \!8CT)M__8P+?_V#$
M$60^2,#E@"! T?P $(D#3_ 0O$2]( QA /Z,6(\O "!O PO$"\Y
M >$ZY #^$_O Q2;?_V8+AP$R\ <ADO 2\Y >$ZY #S$_O QP
M#B\ 2'D 0Z+SD !X3KD /X3^\ #' 4+P!R"B\!+SD !X3KD /,
M3^\ #' *+P!(>0 !$DO.0 'A.N0 _A/[P ,('D !X+Q!.N0 " A8
MCR!Y ="\H %9.N0 ![18CR!Y ="\H %9.N0 !XQ8CR\ *T#__$ZY
M 'H%B/(&W__" H !0K0/_X#( ( 9KIA /S*8+1.=2\.+'D ! 3.\
M P (3J[_.BQ?3G4 "\.+'D ! (F\ "" O Q.KO\N+%].=2\.+'D !
M(F\ "$ZN_MHL7TYU+PXL>0 $ @;P (3J[^C"Q?3G4O#BQY 0")O A.
MKOZ&+%].=2\.+'D ! (&\ "$ZN_H L7TYU+PXL>0 $ B;P (3J[^8BQ?
M3G4O#BQY 0")O @@+P ,3J[]V"Q?3G4O#BQY <"!O A.KO^X+%].
M=2\.+'D !P(F\ "$ZN_[(L7TYU+PXL>0 @;P (3J[_N"Q?3G4O#BQY
M "!O A.KO\T+%].=0 ^P 8 0 "#0 @@ &6 !E
M 7$ %N@ !; 6F %G !9( 6( %?@ !70 5J %8
M!58 5, %0@ !3@ 4N %) !(@ 1< $5 %\ " (
M# !_@ ?@ 'S ![@ >D 'D !WP =D '3 !PX ;\
M &[ !MP ;6 &P@ !JH :D &D !G( 8N &(@ !A8
M 8* %_@ !? 7@ %V !<H 7 %M@ !:P 6B %F
M!8X 6$ %>@ !7 5F %7 !5( 5( %/@ !30 4J %
M( !.( 34 $Q@ !*@ 2: $>@ !$8 0^ $, !"@ 0:
M $#@ :H &B !F 9 %8 !0 BP && [@ B
M '\ !\ =H '. !Q@ ;P &T !@ 6X $Z !+@
M 28 $4 ^@ -X #0 G )8 !\ <@ $P X
M* "( < " ( ; P !R8 <8 '!@ !O0 ;(
M &E@ !N( :P &> !C0 70 $V@ !+X 2@ $@ !&P
M 1B $3 !#8 0@ #Q@ ]H /F $!@ 7H %> 6
M /P U]/<&5N5VEN9&]W" "# #7T-L;W-E5VEN9&]W (
M' -?0VQO<V5&;VYT" @( U]/<&5N1F]N= @ !_0 #
M7T]P96Y,:6)R87)Y 'W 1?0VQO<V5,:6)R87)Y" 'R -?
M5V%I=%!O<G0( >T U]297!L>4US9P@ !Z "7T=E=$US
M9P@ >, U]&:6YD5&%S:P@ !W@ "7T9R965-96T =@
9 U]!;&QO8TUE;0@ !T@ #\G@
end
SHAR_EOF
cat << \SHAR_EOF > WarpText.obj.uu
begin 644 WarpText.obj
M #YP /I NDCG^&!X #%$ !XQ: . " $: ! " B: $= T
M*0 ,4( (C@H CEA")Q2 AV "1H V*@ 4<@ B L+#,4$ )'@ * '(Z ,
MV&@ "B1)U<0A2@ 2(4H %G0 -"@ #-1H ! H <C"V&@ "B1)U<0A2@ :3-\&
M'TYU,4 'L+H "32J 2(4$ %DYU(B@ %I*H !*"Z D< P* >3G5(YWT\
M> X* >>@ Z* @+P4Z* D+P4D: = 4*@ @=@ 6*@ A.BH )B\%.BH
M%"\%)&H (BAH !(O#"AH !HO#"9H !9^ #XH ")30'( 4T121!(9# $ (&<
M "JR FT $:R VT #8H2I*"V<$J2]O$*B\ "%.%&I39[P ,V\=1S?_VN*\
M%&T $)X +?79P 0M?O !!@ Z*$K9_ 0!@R R! "F?>#($ ,
M9P # R! #6?.8-IX "9O 1@ *4<C_@F 91R/]\4(]0CU"/,40
M'B%+ !9,WSR^3G5(YX#P)&\ &")O !P@:0 ((#P ?$/P _A#\ ,80_ #&
M$/P QA#\ ,80_ #&$/P _A#\ !1R/_>)&H (B9*< #4P!#2U/P P!#2U/P
MP!#2U/P P!#2U/P P!#2U/P P!#2U/P P!#2U/P P!#2)$M2 Q -]OR$S?
M#P%.=4CG\/@F+P H)&\ +"AO # P+ UVP %-#,BP B!L 0B; ()DGO
M030!Y4'20M) T,%P ! :YT#2P!"9T/P 4!"9T/P 4!"9T/P 4!"9T/P 4!"9
MT/P 4!"9T/P 4!"9T/P 4!"9D/P"+R)+4<O_Q$S?'P].=4CGP, B;P 4,"D
M B!I 3O0#( Y4#00=!I #0P H0 /_0_ !0"A _]#\ % *$ #_T/P 4 H0
M /_0_ !0"A _]#\ % *$ #_T/P 4 H0 /_0_ !0"A _TS? P-.=0 ^\!
M #6$]20W5R<V]R "B $ ).97=787)P A ! #4V5T=7!&
M;VYT !D $ )787)P5&5X= * ! "1V5T6%D ", 0
M D=O=&]860 >@$ -);FET5V%R<$EN9F\ _ #
M1&].97AT4VEN061D ]@ )$;TYO0VAA<@ 4 !1&]&1@ 68
M #0F]F9F]#:&%R !2@ %$;T-2 !,@ %$;TQ& !,
M )';W1O6%D 'H #4V5T=7!&;VYT !D ).97=787)P
M A #1V]T;T1O3F5X= !< -83U)#=7)S;W( *(
M T1O06YO=&AE<@ =( #5&AE56Y#;VQA !I@ )"
M;&%N:P 2@ "36]V94-H87( $< D1O0VAA<@ !$@
M -$;TYE>'1#:&%R #T TEN:71787)P26YF;P #3VYC
M94%G86EN "1 )'971860 (P "5V%R<%1E>'0 "@
H E=I;F15< !? )';W1O3E-! 7@ #\G0
end
SHAR_EOF
# End of shell archive prin ;