Home » Archimedes archive » Archimedes World » AW-1995-04-Disc1.adf » Disk1Apr95 » !AWApr95/Goodies/Draw/!DrawBasic/Resources/Transforms

!AWApr95/Goodies/Draw/!DrawBasic/Resources/Transforms

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Archimedes archive » Archimedes World » AW-1995-04-Disc1.adf » Disk1Apr95
Filename: !AWApr95/Goodies/Draw/!DrawBasic/Resources/Transforms
Read OK:
File size: 17F8 bytes
Load address: 0000
Exec address: 0000
Duplicates

There are 3 duplicate copies of this file in the archive:

File contents
   10REM > DrawBasic:Resources.Transforms
   20
   30REM =======================================================
   40REM
   50REM copyright Joe Taylor June 1994
   60REM
   70REM N.B. For ERROR THROWBACK to work The first line above
   80REM      MUST have the correct pathname of this file.
   90REM      If you move the location of the file remember to
  100REM      alter this pathname.
  110REM
  120REM =======================================================
  130
  140REM ************************
  150REM
  160REM TRANSFORMS & OBJECTS
  170REM
  180REM ************************
  190
  200DEF FNTransformStore=HIMEM+184
  210
  220DEF FNCreateTransform(A(),b())
  230LOCAL _transform,_a,_b,_A,_B
  240 _a=FNFRAME_x-FNFrame_x/FNX_Scale : _b=FNFRAME_y-FNFrame_y/FNY_Scale
  250 _A=b(0)+A(0,0)*_a+A(0,1)*_b-_a
  260 _B=b(1)+A(1,0)*_a+A(1,1)*_b-_b
  270 _transform=FNTransformStore
  280 _transform!0=INT(A(0,0)*2^16+.5)
  290 _transform!4=INT(A(1,0)*2^16+.5)
  300 _transform!8=INT(A(0,1)*2^16+.5)
  310 _transform!12=INT(A(1,1)*2^16+.5)
  320 _transform!16=INT(_A*FNX_Scale+.5)
  330 _transform!20=INT(_B*FNY_Scale+.5)
  340=_transform
  350
  360REM ================
  370REM 1.1 Copying
  380REM ================
  390
  400DEF FNCopy(path%)
  410 REM ---------------------------------
  420 REM
  430 REM Makes copy of path or text object
  440 REM
  450 REM ----------------------------------
  460 LOCAL _length%,_Path%,_i%
  470  _length%=(path%!4)
  480  IF (!(HIMEM+4))-(!HIMEM)<_length%+1 THEN ERROR 0,"Out of memory"
  490  !(HIMEM+4)-=4 : _Path%=!(HIMEM+4) : !_Path%=!HIMEM 
  500  FOR _i%=0 TO _length%-4 STEP 4
  510   PROCDraw_AddWord(path%!_i%)
  520   NEXT
  530  OTHERWISE : ERROR 0,"Object to copy not text/path!"
  540 ENDCASE
  550=_Path%
  560
  570REM ================
  580REM 1.2 Affine
  590REM ================
  600
  610DEF FNTransform(path,A(),b())
  620LOCAL _Path
  630_Path=FNCopy(!path)
  640 PROCTransform(_Path,A(),b())
  650=_Path
  660
  670DEF PROCTransform(path,A(),b())
  680 REM --------------------------------
  690 REM
  700 REM Replaces path/text using
  710 REM       X()=A().x()+b()
  720 REM
  730 REM --------------------------------
  740 LOCAL _transform,_dx,_dy
  750 CASE FNObjectType(path) OF
  760  WHEN 2   : PROCTransformPath(path,A(),b())
  770  WHEN 12  : PROCTransformText(path,A(),b())
  780  OTHERWISE : ERROR 0,"Can't transform. Must be path/text."
  790 ENDCASE
  800ENDPROC
  810
  820DEF PROCTransformPath(path,A(),b())
  830LOCAL _path%,_Style%,_transform
  840_transform=FNCreateTransform(A(),b())
  850_path%=!path : _Style%=_path%!36 : _path%+=40
  860IF (_Style% AND (1<<7))<>0 THEN _path%+=4*(_path%!4)+8
  870SYS "Draw_TransformPath",_path%,0,_transform,0
  880PROCDrawPath(path)
  890ENDPROC
  900
  910DEF PROCTransformText(path,A(),b())
  920LOCAL _A(),_x(),_i%,_x%,_y%,_text$,_path%
  930_path%=!path
  940DIM _A(1,1),_x(1)
  950_x(0)=(_path%!72-FNFrame_x)/FNX_Scale+FNFRAME_x
  960_x(1)=(_path%!76-FNFrame_y)/FNY_Scale+FNFRAME_y
  970_A(0,0)=(_path%!24)/(1<<16) : _A(0,1)=(_path%!32)/(1<<16)
  980_A(1,0)=(_path%!28)/(1<<16) : _A(1,1)=(_path%!36)/(1<<16)
  990_x()=A()._x() : _x()=_x()+b()
 1000 _path%!72=FNDraw_X(_x(0))
 1010 _path%!76=FNDraw_Y(_x(1))
 1020 A()=A()._A()
 1030 _path%!24=INT(A(0,0)*2^16+.5) : _path%!32=INT(A(0,1)*2^16+.5)
 1040 _path%!28=INT(A(1,0)*2^16+.5) : _path%!36=INT(A(1,1)*2^16+.5)
 1050 _i%=80
 1060  WHILE (_path%?_i%)<>0 : _text$+=CHR$(_path%?_i%) : _i%+=1 : ENDWHILE
 1070  _x%=_path%!72 : _x%+=!(HIMEM+112)  : _x%=400*(_x%>>8)
 1080  _y%=_path%!76 : _y%+=!(HIMEM+116)  : _y%=400*(_y%>>8)
 1090  SYS "Font_Paint",,_text$,%1000000,_x%,_y%,,_path%+24
 1100  _path%!52=FNFontColour
 1110  _path%!60=FNCurrentFont
 1120  _path%!64=FNFontSize
 1130  _path%!68=FNFontSize
 1140ENDPROC
 1150
 1160REM ================
 1170REM 1.3 Translation
 1180REM ================
 1190
 1200DEF PROCTranslate(path,dx,dy)
 1210 REM ------------------------------------
 1220 REM
 1230 REM Translates in (x,y) plane
 1240 REM
 1250 REM ------------------------------------
 1260 LOCAL _A(),_b()
 1270 DIM _A(1,1),_b(1) : _A()=1,0,0,1 : _b()=dx,dy
 1280 PROCTransform(path,_A(),_b())
 1290 ENDPROC
 1300
 1310DEF FNTranslate(path,dx,dy)
 1320LOCAL _Path%
 1330_Path%=FNCopy(!path)
 1340PROCTranslate(_Path%,dx,dy)
 1350=_Path%
 1360
 1370REM ================
 1380REM 1.4 Magnify
 1390REM ================
 1400
 1410DEF PROCMagnify(path,a,b,factor)
 1420 REM ---------------------------------
 1430 REM Magnifies
 1440 REM I.e.
 1450 REM           -     -        -     -
 1460 REM           | a b |  = m * | a b |
 1470 REM           | c d |        | c d |
 1480 REM           -     -        -     -
 1490 REM ---------------------------------
 1500 LOCAL _transform,_A(),_b()
 1510 DIM _A(1,1),_b(1)
 1520 a=a*(1-factor)
 1530 b=b*(1-factor)
 1540 _A()=factor,0,0,factor
 1550 _b()=a,b
 1560 PROCTransform(path,_A(),_b())
 1570 ENDPROC
 1580
 1590DEF FNMagnify(path,a,b,factor)
 1600LOCAL _Path%
 1610_Path%=FNCopy(!path)
 1620PROCMagnify(_Path%,a,b,factor)
 1630=_Path%
 1640
 1650REM ===========
 1660REM 1.5 Rotate
 1670REM ===========
 1680
 1690DEF PROCRotate(path,a,b,angle)
 1700 REM ---------------------------------
 1710 REM
 1720 REM Creates a rotation
 1730 REM
 1740 REM ---------------------------------
 1750 LOCAL _transform,_A(),_b(),_c,_s
 1760 DIM _A(1,1),_b(1)
 1770 _c=COS angle : _s=SIN angle
 1780 _A(0,0)=_c : _A(0,1)=-_s : _A(1,0)=_s : _A(1,1)=_c
 1790 _b(0)=a-_c*a+_s*b
 1800 _b(1)=b-_s*a-_c*b
 1810 PROCTransform(path,_A(),_b())
 1820 ENDPROC
 1830
 1840DEF FNRotate(path,a,b,angle)
 1850LOCAL _Path%
 1860_Path%=FNCopy(!path)
 1870PROCRotate(_Path%,a,b,angle)
 1880=_Path%
 1890
 1900REM ================
 1910REM 1.4 Tesselation
 1920REM ================
 1930
 1940DEF PROCTile(path,rows%,columns%)
 1950 REM --------------------------------
 1960 REM
 1970 REM Tiles the path
 1980 REM
 1990 REM --------------------------------
 2000 LOCAL _i%,_j%,_Path,_dx,_dy
 2010 CASE FNObjectType(path) OF
 2020 WHEN 2
 2030  PROCDraw_BoundingBox(path,_dx,_dy)
 2040  _dx=_dx/FNX_Scale : _dy=_dy/FNY_Scale
 2050  FOR _i%=0 TO rows%
 2060  FOR _j%=0 TO columns%
 2070   IF _i%+_j%<>0 THEN _Path=FNTranslate(path,_i%*_dx,_j%*_dy)
 2080   NEXT
 2090   NEXT
 2100 OTHERWISE
 2110  ERROR 0,"Only path objects can be tiled."
 2120 ENDCASE
 2130 ENDPROC
 2140
 2150
 2160DEF PROCDraw_BoundingBox(path,RETURN dx%,RETURN dy%)
 2170LOCAL _path%,_Style%,_xmin%,_xmax%,_ymin%,_ymax%,_i%,_length%
 2180 _path%=!path : _length%=_path%+(_path%!4)
 2190 _Style%=_path%!36 : _path%+=40
 2200 IF (_Style% AND (1<<7))<>0 THEN _path%+=4*(_path%!4)+8
 2210 _xmin%=2^30:_xmax%=-_xmin%
 2220 _ymin%=2^30:_ymax%=-_ymin%
 2230 _i%=_path%
 2240 REPEAT
 2250  CASE !_i% OF
 2260   WHEN 0,5 :
 2270   WHEN 2,8 : PROCDraw_Bound
 2280   WHEN 6   : PROCDraw_Bound : PROCDraw_Bound : PROCDraw_Bound
 2290   OTHERWISE : ERROR 0,"Something wrong!"
 2300  ENDCASE
 2310  _i%+=4
 2320 UNTIL _i%>=_length%
 2330 dx%=_xmax%-_xmin%
 2340 dy%=_ymax%-_ymin%
 2350ENDPROC
 2360
 2370DEF PROCDraw_Bound
 2380_i%+=4
 2390IF !_i%<_xmin% THEN _xmin%=!_i%
 2400IF !_i%>_xmax% THEN _xmax%=!_i%
 2410_i%+=4
 2420IF !_i%<_ymin% THEN _ymin%=!_i%
 2430IF !_i%>_ymax% THEN _ymax%=!_i%
 2440ENDPROC
 2450
 2460

&� > DrawBasic:Resources.Transforms

=� =======================================================
(�
2$� copyright Joe Taylor June 1994
<�
F;� N.B. For ERROR THROWBACK to work The first line above
P7�      MUST have the correct pathname of this file.
Z;�      If you move the location of the file remember to
d�      alter this pathname.
n�
x=� =======================================================
�
�� ************************
��
�� TRANSFORMS & OBJECTS
��
�� ************************
�
�� �TransformStore=�+184
�
�� �CreateTransform(A(),b())
�� _transform,_a,_b,_A,_B
�B _a=�FRAME_x-�Frame_x/�X_Scale : _b=�FRAME_y-�Frame_y/�Y_Scale
�# _A=b(0)+A(0,0)*_a+A(0,1)*_b-_a
# _B=b(1)+A(1,0)*_a+A(1,1)*_b-_b
 _transform=�TransformStore
# _transform!0=�(A(0,0)*2^16+.5)
"# _transform!4=�(A(1,0)*2^16+.5)
,# _transform!8=�(A(0,1)*2^16+.5)
6$ _transform!12=�(A(1,1)*2^16+.5)
@$ _transform!16=�(_A*�X_Scale+.5)
J$ _transform!20=�(_B*�Y_Scale+.5)
T=_transform
^
h� ================
r� 1.1 Copying
|� ================
�
�� �Copy(path%)
�( � ---------------------------------
� �
�( � Makes copy of path or text object
� �
�) � ----------------------------------
� � _length%,_Path%,_i%
�  _length%=(path%!4)
�6  � (!(�+4))-(!�)<_length%+1 � � 0,"Out of memory"
�-  !(�+4)-=4 : _Path%=!(�+4) : !_Path%=!� 
�  � _i%=0 � _length%-4 � 4
�   �Draw_AddWord(path%!_i%)
   �
-   : � 0,"Object to copy not text/path!"
 �
&=_Path%
0
:� ================
D� 1.2 Affine
N� ================
X
b� �Transform(path,A(),b())
l� _Path
v_Path=�Copy(!path)
� �Transform(_Path,A(),b())
�
=_Path
�
�� �Transform(path,A(),b())
�' � --------------------------------
� �
� � Replaces path/text using
� �       X()=A().x()+b()
� �
�' � --------------------------------
� � _transform,_dx,_dy
� Ȏ �ObjectType(path) �
�*  � 2   : �TransformPath(path,A(),b())
*  � 12  : �TransformText(path,A(),b())
3   : � 0,"Can't transform. Must be path/text."
 �
 �
*
4"� �TransformPath(path,A(),b())
>� _path%,_Style%,_transform
H(_transform=�CreateTransform(A(),b())
R1_path%=!path : _Style%=_path%!36 : _path%+=40
\4� (_Style% � (1<<7))<>0 � _path%+=4*(_path%!4)+8
f1ș "Draw_TransformPath",_path%,0,_transform,0
p�DrawPath(path)
z�
�
�"� �TransformText(path,A(),b())
�)� _A(),_x(),_i%,_x%,_y%,_text$,_path%
�_path%=!path
�� _A(1,1),_x(1)
�0_x(0)=(_path%!72-�Frame_x)/�X_Scale+�FRAME_x
�0_x(1)=(_path%!76-�Frame_y)/�Y_Scale+�FRAME_y
�=_A(0,0)=(_path%!24)/(1<<16) : _A(0,1)=(_path%!32)/(1<<16)
�=_A(1,0)=(_path%!28)/(1<<16) : _A(1,1)=(_path%!36)/(1<<16)
�!_x()=A()._x() : _x()=_x()+b()
� _path%!72=�Draw_X(_x(0))
� _path%!76=�Draw_Y(_x(1))
� A()=A()._A()
> _path%!24=�(A(0,0)*2^16+.5) : _path%!32=�(A(0,1)*2^16+.5)
> _path%!28=�(A(1,0)*2^16+.5) : _path%!36=�(A(1,1)*2^16+.5)
 _i%=80
$=  ȕ (_path%?_i%)<>0 : _text$+=�(_path%?_i%) : _i%+=1 : �
.7  _x%=_path%!72 : _x%+=!(�+112)  : _x%=400*(_x%>>8)
87  _y%=_path%!76 : _y%+=!(�+116)  : _y%=400*(_y%>>8)
B9  ș "Font_Paint",,_text$,%1000000,_x%,_y%,,_path%+24
L  _path%!52=�FontColour
V  _path%!60=�CurrentFont
`  _path%!64=�FontSize
j  _path%!68=�FontSize
t�
~
�� ================
�� 1.3 Translation
�� ================
�
�� �Translate(path,dx,dy)
�+ � ------------------------------------
� �
�  � Translates in (x,y) plane
� �
�+ � ------------------------------------
� � _A(),_b()
�0 � _A(1,1),_b(1) : _A()=1,0,0,1 : _b()=dx,dy
 �Transform(path,_A(),_b())

 �

� �Translate(path,dx,dy)
(� _Path%
2_Path%=�Copy(!path)
<�Translate(_Path%,dx,dy)
F=_Path%
P
Z� ================
d� 1.4 Magnify
n� ================
x
�� �Magnify(path,a,b,factor)
�( � ---------------------------------
� � Magnifies
� � I.e.
�' �           -     -        -     -
�' �           | a b |  = m * | a b |
�' �           | c d |        | c d |
�' �           -     -        -     -
�( � ---------------------------------
� � _transform,_A(),_b()
� � _A(1,1),_b(1)
� a=a*(1-factor)
� b=b*(1-factor)
 _A()=factor,0,0,factor

 _b()=a,b
 �Transform(path,_A(),_b())
" �
,
6� �Magnify(path,a,b,factor)
@� _Path%
J_Path%=�Copy(!path)
T�Magnify(_Path%,a,b,factor)
^=_Path%
h
r� ===========
|� 1.5 Rotate
�� ===========
�
�� �Rotate(path,a,b,angle)
�( � ---------------------------------
� �
� � Creates a rotation
� �
�( � ---------------------------------
�! � _transform,_A(),_b(),_c,_s
� � _A(1,1),_b(1)
� _c=� angle : _s=� angle
�7 _A(0,0)=_c : _A(0,1)=-_s : _A(1,0)=_s : _A(1,1)=_c
� _b(0)=a-_c*a+_s*b
 _b(1)=b-_s*a-_c*b
 �Transform(path,_A(),_b())
 �
&
0� �Rotate(path,a,b,angle)
:� _Path%
D_Path%=�Copy(!path)
N�Rotate(_Path%,a,b,angle)
X=_Path%
b
l� ================
v� 1.4 Tesselation
�� ================
�
� � �Tile(path,rows%,columns%)
�' � --------------------------------
� �
� � Tiles the path
� �
�' � --------------------------------
� � _i%,_j%,_Path,_dx,_dy
� Ȏ �ObjectType(path) �
� � 2
�%  �Draw_BoundingBox(path,_dx,_dy)
�)  _dx=_dx/�X_Scale : _dy=_dy/�Y_Scale
  � _i%=0 � rows%
  � _j%=0 � columns%
<   � _i%+_j%<>0 � _Path=�Translate(path,_i%*_dx,_j%*_dy)
    �
*   �
4 
>+  � 0,"Only path objects can be tiled."
H �
R �
\
f
p)� �Draw_BoundingBox(path,� dx%,� dy%)
z=� _path%,_Style%,_xmin%,_xmax%,_ymin%,_ymax%,_i%,_length%
�. _path%=!path : _length%=_path%+(_path%!4)
�# _Style%=_path%!36 : _path%+=40
�5 � (_Style% � (1<<7))<>0 � _path%+=4*(_path%!4)+8
� _xmin%=2^30:_xmax%=-_xmin%
� _ymin%=2^30:_ymax%=-_ymin%
� _i%=_path%
� �
�  Ȏ !_i% �
�   � 0,5 :
�   � 2,8 : �Draw_Bound
�6   � 6   : �Draw_Bound : �Draw_Bound : �Draw_Bound
�!    : � 0,"Something wrong!"
�  �
	  _i%+=4
	 � _i%>=_length%
	 dx%=_xmax%-_xmin%
	$ dy%=_ymax%-_ymin%
	.�
	8
	B� �Draw_Bound
	L
_i%+=4
	V� !_i%<_xmin% � _xmin%=!_i%
	`� !_i%>_xmax% � _xmax%=!_i%
	j
_i%+=4
	t� !_i%<_ymin% � _ymin%=!_i%
	~� !_i%>_ymax% � _ymax%=!_i%
	��
	�
	�
�
00000000  0d 00 0a 26 f4 20 3e 20  44 72 61 77 42 61 73 69  |...&. > DrawBasi|
00000010  63 3a 52 65 73 6f 75 72  63 65 73 2e 54 72 61 6e  |c:Resources.Tran|
00000020  73 66 6f 72 6d 73 0d 00  14 04 0d 00 1e 3d f4 20  |sforms.......=. |
00000030  3d 3d 3d 3d 3d 3d 3d 3d  3d 3d 3d 3d 3d 3d 3d 3d  |================|
*
00000060  3d 3d 3d 3d 3d 3d 3d 0d  00 28 05 f4 0d 00 32 24  |=======..(....2$|
00000070  f4 20 63 6f 70 79 72 69  67 68 74 20 4a 6f 65 20  |. copyright Joe |
00000080  54 61 79 6c 6f 72 20 4a  75 6e 65 20 31 39 39 34  |Taylor June 1994|
00000090  0d 00 3c 05 f4 0d 00 46  3b f4 20 4e 2e 42 2e 20  |..<....F;. N.B. |
000000a0  46 6f 72 20 45 52 52 4f  52 20 54 48 52 4f 57 42  |For ERROR THROWB|
000000b0  41 43 4b 20 74 6f 20 77  6f 72 6b 20 54 68 65 20  |ACK to work The |
000000c0  66 69 72 73 74 20 6c 69  6e 65 20 61 62 6f 76 65  |first line above|
000000d0  0d 00 50 37 f4 20 20 20  20 20 20 4d 55 53 54 20  |..P7.      MUST |
000000e0  68 61 76 65 20 74 68 65  20 63 6f 72 72 65 63 74  |have the correct|
000000f0  20 70 61 74 68 6e 61 6d  65 20 6f 66 20 74 68 69  | pathname of thi|
00000100  73 20 66 69 6c 65 2e 0d  00 5a 3b f4 20 20 20 20  |s file...Z;.    |
00000110  20 20 49 66 20 79 6f 75  20 6d 6f 76 65 20 74 68  |  If you move th|
00000120  65 20 6c 6f 63 61 74 69  6f 6e 20 6f 66 20 74 68  |e location of th|
00000130  65 20 66 69 6c 65 20 72  65 6d 65 6d 62 65 72 20  |e file remember |
00000140  74 6f 0d 00 64 1f f4 20  20 20 20 20 20 61 6c 74  |to..d..      alt|
00000150  65 72 20 74 68 69 73 20  70 61 74 68 6e 61 6d 65  |er this pathname|
00000160  2e 0d 00 6e 05 f4 0d 00  78 3d f4 20 3d 3d 3d 3d  |...n....x=. ====|
00000170  3d 3d 3d 3d 3d 3d 3d 3d  3d 3d 3d 3d 3d 3d 3d 3d  |================|
*
000001a0  3d 3d 3d 0d 00 82 04 0d  00 8c 1e f4 20 2a 2a 2a  |===......... ***|
000001b0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
000001c0  2a 2a 2a 2a 2a 0d 00 96  05 f4 0d 00 a0 1a f4 20  |*****.......... |
000001d0  54 52 41 4e 53 46 4f 52  4d 53 20 26 20 4f 42 4a  |TRANSFORMS & OBJ|
000001e0  45 43 54 53 0d 00 aa 05  f4 0d 00 b4 1e f4 20 2a  |ECTS.......... *|
000001f0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
00000200  2a 2a 2a 2a 2a 2a 2a 0d  00 be 04 0d 00 c8 1b dd  |*******.........|
00000210  20 a4 54 72 61 6e 73 66  6f 72 6d 53 74 6f 72 65  | .TransformStore|
00000220  3d 93 2b 31 38 34 0d 00  d2 04 0d 00 dc 1f dd 20  |=.+184......... |
00000230  a4 43 72 65 61 74 65 54  72 61 6e 73 66 6f 72 6d  |.CreateTransform|
00000240  28 41 28 29 2c 62 28 29  29 0d 00 e6 1c ea 20 5f  |(A(),b())..... _|
00000250  74 72 61 6e 73 66 6f 72  6d 2c 5f 61 2c 5f 62 2c  |transform,_a,_b,|
00000260  5f 41 2c 5f 42 0d 00 f0  42 20 5f 61 3d a4 46 52  |_A,_B...B _a=.FR|
00000270  41 4d 45 5f 78 2d a4 46  72 61 6d 65 5f 78 2f a4  |AME_x-.Frame_x/.|
00000280  58 5f 53 63 61 6c 65 20  3a 20 5f 62 3d a4 46 52  |X_Scale : _b=.FR|
00000290  41 4d 45 5f 79 2d a4 46  72 61 6d 65 5f 79 2f a4  |AME_y-.Frame_y/.|
000002a0  59 5f 53 63 61 6c 65 0d  00 fa 23 20 5f 41 3d 62  |Y_Scale...# _A=b|
000002b0  28 30 29 2b 41 28 30 2c  30 29 2a 5f 61 2b 41 28  |(0)+A(0,0)*_a+A(|
000002c0  30 2c 31 29 2a 5f 62 2d  5f 61 0d 01 04 23 20 5f  |0,1)*_b-_a...# _|
000002d0  42 3d 62 28 31 29 2b 41  28 31 2c 30 29 2a 5f 61  |B=b(1)+A(1,0)*_a|
000002e0  2b 41 28 31 2c 31 29 2a  5f 62 2d 5f 62 0d 01 0e  |+A(1,1)*_b-_b...|
000002f0  1f 20 5f 74 72 61 6e 73  66 6f 72 6d 3d a4 54 72  |. _transform=.Tr|
00000300  61 6e 73 66 6f 72 6d 53  74 6f 72 65 0d 01 18 23  |ansformStore...#|
00000310  20 5f 74 72 61 6e 73 66  6f 72 6d 21 30 3d a8 28  | _transform!0=.(|
00000320  41 28 30 2c 30 29 2a 32  5e 31 36 2b 2e 35 29 0d  |A(0,0)*2^16+.5).|
00000330  01 22 23 20 5f 74 72 61  6e 73 66 6f 72 6d 21 34  |."# _transform!4|
00000340  3d a8 28 41 28 31 2c 30  29 2a 32 5e 31 36 2b 2e  |=.(A(1,0)*2^16+.|
00000350  35 29 0d 01 2c 23 20 5f  74 72 61 6e 73 66 6f 72  |5)..,# _transfor|
00000360  6d 21 38 3d a8 28 41 28  30 2c 31 29 2a 32 5e 31  |m!8=.(A(0,1)*2^1|
00000370  36 2b 2e 35 29 0d 01 36  24 20 5f 74 72 61 6e 73  |6+.5)..6$ _trans|
00000380  66 6f 72 6d 21 31 32 3d  a8 28 41 28 31 2c 31 29  |form!12=.(A(1,1)|
00000390  2a 32 5e 31 36 2b 2e 35  29 0d 01 40 24 20 5f 74  |*2^16+.5)..@$ _t|
000003a0  72 61 6e 73 66 6f 72 6d  21 31 36 3d a8 28 5f 41  |ransform!16=.(_A|
000003b0  2a a4 58 5f 53 63 61 6c  65 2b 2e 35 29 0d 01 4a  |*.X_Scale+.5)..J|
000003c0  24 20 5f 74 72 61 6e 73  66 6f 72 6d 21 32 30 3d  |$ _transform!20=|
000003d0  a8 28 5f 42 2a a4 59 5f  53 63 61 6c 65 2b 2e 35  |.(_B*.Y_Scale+.5|
000003e0  29 0d 01 54 0f 3d 5f 74  72 61 6e 73 66 6f 72 6d  |)..T.=_transform|
000003f0  0d 01 5e 04 0d 01 68 16  f4 20 3d 3d 3d 3d 3d 3d  |..^...h.. ======|
00000400  3d 3d 3d 3d 3d 3d 3d 3d  3d 3d 0d 01 72 11 f4 20  |==========..r.. |
00000410  31 2e 31 20 43 6f 70 79  69 6e 67 0d 01 7c 16 f4  |1.1 Copying..|..|
00000420  20 3d 3d 3d 3d 3d 3d 3d  3d 3d 3d 3d 3d 3d 3d 3d  | ===============|
00000430  3d 0d 01 86 04 0d 01 90  12 dd 20 a4 43 6f 70 79  |=......... .Copy|
00000440  28 70 61 74 68 25 29 0d  01 9a 28 20 f4 20 2d 2d  |(path%)...( . --|
00000450  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00000460  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 0d  |---------------.|
00000470  01 a4 06 20 f4 0d 01 ae  28 20 f4 20 4d 61 6b 65  |... ....( . Make|
00000480  73 20 63 6f 70 79 20 6f  66 20 70 61 74 68 20 6f  |s copy of path o|
00000490  72 20 74 65 78 74 20 6f  62 6a 65 63 74 0d 01 b8  |r text object...|
000004a0  06 20 f4 0d 01 c2 29 20  f4 20 2d 2d 2d 2d 2d 2d  |. ....) . ------|
000004b0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
000004c0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 0d 01 cc 1a  |------------....|
000004d0  20 ea 20 5f 6c 65 6e 67  74 68 25 2c 5f 50 61 74  | . _length%,_Pat|
000004e0  68 25 2c 5f 69 25 0d 01  d6 18 20 20 5f 6c 65 6e  |h%,_i%....  _len|
000004f0  67 74 68 25 3d 28 70 61  74 68 25 21 34 29 0d 01  |gth%=(path%!4)..|
00000500  e0 36 20 20 e7 20 28 21  28 93 2b 34 29 29 2d 28  |.6  . (!(.+4))-(|
00000510  21 93 29 3c 5f 6c 65 6e  67 74 68 25 2b 31 20 8c  |!.)<_length%+1 .|
00000520  20 85 20 30 2c 22 4f 75  74 20 6f 66 20 6d 65 6d  | . 0,"Out of mem|
00000530  6f 72 79 22 0d 01 ea 2d  20 20 21 28 93 2b 34 29  |ory"...-  !(.+4)|
00000540  2d 3d 34 20 3a 20 5f 50  61 74 68 25 3d 21 28 93  |-=4 : _Path%=!(.|
00000550  2b 34 29 20 3a 20 21 5f  50 61 74 68 25 3d 21 93  |+4) : !_Path%=!.|
00000560  20 0d 01 f4 1e 20 20 e3  20 5f 69 25 3d 30 20 b8  | ....  . _i%=0 .|
00000570  20 5f 6c 65 6e 67 74 68  25 2d 34 20 88 20 34 0d  | _length%-4 . 4.|
00000580  01 fe 1f 20 20 20 f2 44  72 61 77 5f 41 64 64 57  |...   .Draw_AddW|
00000590  6f 72 64 28 70 61 74 68  25 21 5f 69 25 29 0d 02  |ord(path%!_i%)..|
000005a0  08 08 20 20 20 ed 0d 02  12 2d 20 20 7f 20 3a 20  |..   ....-  . : |
000005b0  85 20 30 2c 22 4f 62 6a  65 63 74 20 74 6f 20 63  |. 0,"Object to c|
000005c0  6f 70 79 20 6e 6f 74 20  74 65 78 74 2f 70 61 74  |opy not text/pat|
000005d0  68 21 22 0d 02 1c 06 20  cb 0d 02 26 0b 3d 5f 50  |h!".... ...&.=_P|
000005e0  61 74 68 25 0d 02 30 04  0d 02 3a 16 f4 20 3d 3d  |ath%..0...:.. ==|
000005f0  3d 3d 3d 3d 3d 3d 3d 3d  3d 3d 3d 3d 3d 3d 0d 02  |==============..|
00000600  44 10 f4 20 31 2e 32 20  41 66 66 69 6e 65 0d 02  |D.. 1.2 Affine..|
00000610  4e 16 f4 20 3d 3d 3d 3d  3d 3d 3d 3d 3d 3d 3d 3d  |N.. ============|
00000620  3d 3d 3d 3d 0d 02 58 04  0d 02 62 1e dd 20 a4 54  |====..X...b.. .T|
00000630  72 61 6e 73 66 6f 72 6d  28 70 61 74 68 2c 41 28  |ransform(path,A(|
00000640  29 2c 62 28 29 29 0d 02  6c 0b ea 20 5f 50 61 74  |),b())..l.. _Pat|
00000650  68 0d 02 76 16 5f 50 61  74 68 3d a4 43 6f 70 79  |h..v._Path=.Copy|
00000660  28 21 70 61 74 68 29 0d  02 80 1e 20 f2 54 72 61  |(!path).... .Tra|
00000670  6e 73 66 6f 72 6d 28 5f  50 61 74 68 2c 41 28 29  |nsform(_Path,A()|
00000680  2c 62 28 29 29 0d 02 8a  0a 3d 5f 50 61 74 68 0d  |,b())....=_Path.|
00000690  02 94 04 0d 02 9e 1e dd  20 f2 54 72 61 6e 73 66  |........ .Transf|
000006a0  6f 72 6d 28 70 61 74 68  2c 41 28 29 2c 62 28 29  |orm(path,A(),b()|
000006b0  29 0d 02 a8 27 20 f4 20  2d 2d 2d 2d 2d 2d 2d 2d  |)...' . --------|
000006c0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
000006d0  2d 2d 2d 2d 2d 2d 2d 2d  0d 02 b2 06 20 f4 0d 02  |--------.... ...|
000006e0  bc 1f 20 f4 20 52 65 70  6c 61 63 65 73 20 70 61  |.. . Replaces pa|
000006f0  74 68 2f 74 65 78 74 20  75 73 69 6e 67 0d 02 c6  |th/text using...|
00000700  1c 20 f4 20 20 20 20 20  20 20 58 28 29 3d 41 28  |. .       X()=A(|
00000710  29 2e 78 28 29 2b 62 28  29 0d 02 d0 06 20 f4 0d  |).x()+b().... ..|
00000720  02 da 27 20 f4 20 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |..' . ----------|
00000730  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00000740  2d 2d 2d 2d 2d 2d 0d 02  e4 19 20 ea 20 5f 74 72  |------.... . _tr|
00000750  61 6e 73 66 6f 72 6d 2c  5f 64 78 2c 5f 64 79 0d  |ansform,_dx,_dy.|
00000760  02 ee 1b 20 c8 8e 20 a4  4f 62 6a 65 63 74 54 79  |... .. .ObjectTy|
00000770  70 65 28 70 61 74 68 29  20 ca 0d 02 f8 2a 20 20  |pe(path) ....*  |
00000780  c9 20 32 20 20 20 3a 20  f2 54 72 61 6e 73 66 6f  |. 2   : .Transfo|
00000790  72 6d 50 61 74 68 28 70  61 74 68 2c 41 28 29 2c  |rmPath(path,A(),|
000007a0  62 28 29 29 0d 03 02 2a  20 20 c9 20 31 32 20 20  |b())...*  . 12  |
000007b0  3a 20 f2 54 72 61 6e 73  66 6f 72 6d 54 65 78 74  |: .TransformText|
000007c0  28 70 61 74 68 2c 41 28  29 2c 62 28 29 29 0d 03  |(path,A(),b())..|
000007d0  0c 33 20 20 7f 20 3a 20  85 20 30 2c 22 43 61 6e  |.3  . : . 0,"Can|
000007e0  27 74 20 74 72 61 6e 73  66 6f 72 6d 2e 20 4d 75  |'t transform. Mu|
000007f0  73 74 20 62 65 20 70 61  74 68 2f 74 65 78 74 2e  |st be path/text.|
00000800  22 0d 03 16 06 20 cb 0d  03 20 05 e1 0d 03 2a 04  |".... ... ....*.|
00000810  0d 03 34 22 dd 20 f2 54  72 61 6e 73 66 6f 72 6d  |..4". .Transform|
00000820  50 61 74 68 28 70 61 74  68 2c 41 28 29 2c 62 28  |Path(path,A(),b(|
00000830  29 29 0d 03 3e 1f ea 20  5f 70 61 74 68 25 2c 5f  |))..>.. _path%,_|
00000840  53 74 79 6c 65 25 2c 5f  74 72 61 6e 73 66 6f 72  |Style%,_transfor|
00000850  6d 0d 03 48 28 5f 74 72  61 6e 73 66 6f 72 6d 3d  |m..H(_transform=|
00000860  a4 43 72 65 61 74 65 54  72 61 6e 73 66 6f 72 6d  |.CreateTransform|
00000870  28 41 28 29 2c 62 28 29  29 0d 03 52 31 5f 70 61  |(A(),b())..R1_pa|
00000880  74 68 25 3d 21 70 61 74  68 20 3a 20 5f 53 74 79  |th%=!path : _Sty|
00000890  6c 65 25 3d 5f 70 61 74  68 25 21 33 36 20 3a 20  |le%=_path%!36 : |
000008a0  5f 70 61 74 68 25 2b 3d  34 30 0d 03 5c 34 e7 20  |_path%+=40..\4. |
000008b0  28 5f 53 74 79 6c 65 25  20 80 20 28 31 3c 3c 37  |(_Style% . (1<<7|
000008c0  29 29 3c 3e 30 20 8c 20  5f 70 61 74 68 25 2b 3d  |))<>0 . _path%+=|
000008d0  34 2a 28 5f 70 61 74 68  25 21 34 29 2b 38 0d 03  |4*(_path%!4)+8..|
000008e0  66 31 c8 99 20 22 44 72  61 77 5f 54 72 61 6e 73  |f1.. "Draw_Trans|
000008f0  66 6f 72 6d 50 61 74 68  22 2c 5f 70 61 74 68 25  |formPath",_path%|
00000900  2c 30 2c 5f 74 72 61 6e  73 66 6f 72 6d 2c 30 0d  |,0,_transform,0.|
00000910  03 70 13 f2 44 72 61 77  50 61 74 68 28 70 61 74  |.p..DrawPath(pat|
00000920  68 29 0d 03 7a 05 e1 0d  03 84 04 0d 03 8e 22 dd  |h)..z.........".|
00000930  20 f2 54 72 61 6e 73 66  6f 72 6d 54 65 78 74 28  | .TransformText(|
00000940  70 61 74 68 2c 41 28 29  2c 62 28 29 29 0d 03 98  |path,A(),b())...|
00000950  29 ea 20 5f 41 28 29 2c  5f 78 28 29 2c 5f 69 25  |). _A(),_x(),_i%|
00000960  2c 5f 78 25 2c 5f 79 25  2c 5f 74 65 78 74 24 2c  |,_x%,_y%,_text$,|
00000970  5f 70 61 74 68 25 0d 03  a2 10 5f 70 61 74 68 25  |_path%...._path%|
00000980  3d 21 70 61 74 68 0d 03  ac 13 de 20 5f 41 28 31  |=!path..... _A(1|
00000990  2c 31 29 2c 5f 78 28 31  29 0d 03 b6 30 5f 78 28  |,1),_x(1)...0_x(|
000009a0  30 29 3d 28 5f 70 61 74  68 25 21 37 32 2d a4 46  |0)=(_path%!72-.F|
000009b0  72 61 6d 65 5f 78 29 2f  a4 58 5f 53 63 61 6c 65  |rame_x)/.X_Scale|
000009c0  2b a4 46 52 41 4d 45 5f  78 0d 03 c0 30 5f 78 28  |+.FRAME_x...0_x(|
000009d0  31 29 3d 28 5f 70 61 74  68 25 21 37 36 2d a4 46  |1)=(_path%!76-.F|
000009e0  72 61 6d 65 5f 79 29 2f  a4 59 5f 53 63 61 6c 65  |rame_y)/.Y_Scale|
000009f0  2b a4 46 52 41 4d 45 5f  79 0d 03 ca 3d 5f 41 28  |+.FRAME_y...=_A(|
00000a00  30 2c 30 29 3d 28 5f 70  61 74 68 25 21 32 34 29  |0,0)=(_path%!24)|
00000a10  2f 28 31 3c 3c 31 36 29  20 3a 20 5f 41 28 30 2c  |/(1<<16) : _A(0,|
00000a20  31 29 3d 28 5f 70 61 74  68 25 21 33 32 29 2f 28  |1)=(_path%!32)/(|
00000a30  31 3c 3c 31 36 29 0d 03  d4 3d 5f 41 28 31 2c 30  |1<<16)...=_A(1,0|
00000a40  29 3d 28 5f 70 61 74 68  25 21 32 38 29 2f 28 31  |)=(_path%!28)/(1|
00000a50  3c 3c 31 36 29 20 3a 20  5f 41 28 31 2c 31 29 3d  |<<16) : _A(1,1)=|
00000a60  28 5f 70 61 74 68 25 21  33 36 29 2f 28 31 3c 3c  |(_path%!36)/(1<<|
00000a70  31 36 29 0d 03 de 21 5f  78 28 29 3d 41 28 29 2e  |16)...!_x()=A().|
00000a80  5f 78 28 29 20 3a 20 5f  78 28 29 3d 5f 78 28 29  |_x() : _x()=_x()|
00000a90  2b 62 28 29 0d 03 e8 1d  20 5f 70 61 74 68 25 21  |+b().... _path%!|
00000aa0  37 32 3d a4 44 72 61 77  5f 58 28 5f 78 28 30 29  |72=.Draw_X(_x(0)|
00000ab0  29 0d 03 f2 1d 20 5f 70  61 74 68 25 21 37 36 3d  |).... _path%!76=|
00000ac0  a4 44 72 61 77 5f 59 28  5f 78 28 31 29 29 0d 03  |.Draw_Y(_x(1))..|
00000ad0  fc 11 20 41 28 29 3d 41  28 29 2e 5f 41 28 29 0d  |.. A()=A()._A().|
00000ae0  04 06 3e 20 5f 70 61 74  68 25 21 32 34 3d a8 28  |..> _path%!24=.(|
00000af0  41 28 30 2c 30 29 2a 32  5e 31 36 2b 2e 35 29 20  |A(0,0)*2^16+.5) |
00000b00  3a 20 5f 70 61 74 68 25  21 33 32 3d a8 28 41 28  |: _path%!32=.(A(|
00000b10  30 2c 31 29 2a 32 5e 31  36 2b 2e 35 29 0d 04 10  |0,1)*2^16+.5)...|
00000b20  3e 20 5f 70 61 74 68 25  21 32 38 3d a8 28 41 28  |> _path%!28=.(A(|
00000b30  31 2c 30 29 2a 32 5e 31  36 2b 2e 35 29 20 3a 20  |1,0)*2^16+.5) : |
00000b40  5f 70 61 74 68 25 21 33  36 3d a8 28 41 28 31 2c  |_path%!36=.(A(1,|
00000b50  31 29 2a 32 5e 31 36 2b  2e 35 29 0d 04 1a 0b 20  |1)*2^16+.5).... |
00000b60  5f 69 25 3d 38 30 0d 04  24 3d 20 20 c8 95 20 28  |_i%=80..$=  .. (|
00000b70  5f 70 61 74 68 25 3f 5f  69 25 29 3c 3e 30 20 3a  |_path%?_i%)<>0 :|
00000b80  20 5f 74 65 78 74 24 2b  3d bd 28 5f 70 61 74 68  | _text$+=.(_path|
00000b90  25 3f 5f 69 25 29 20 3a  20 5f 69 25 2b 3d 31 20  |%?_i%) : _i%+=1 |
00000ba0  3a 20 ce 0d 04 2e 37 20  20 5f 78 25 3d 5f 70 61  |: ....7  _x%=_pa|
00000bb0  74 68 25 21 37 32 20 3a  20 5f 78 25 2b 3d 21 28  |th%!72 : _x%+=!(|
00000bc0  93 2b 31 31 32 29 20 20  3a 20 5f 78 25 3d 34 30  |.+112)  : _x%=40|
00000bd0  30 2a 28 5f 78 25 3e 3e  38 29 0d 04 38 37 20 20  |0*(_x%>>8)..87  |
00000be0  5f 79 25 3d 5f 70 61 74  68 25 21 37 36 20 3a 20  |_y%=_path%!76 : |
00000bf0  5f 79 25 2b 3d 21 28 93  2b 31 31 36 29 20 20 3a  |_y%+=!(.+116)  :|
00000c00  20 5f 79 25 3d 34 30 30  2a 28 5f 79 25 3e 3e 38  | _y%=400*(_y%>>8|
00000c10  29 0d 04 42 39 20 20 c8  99 20 22 46 6f 6e 74 5f  |)..B9  .. "Font_|
00000c20  50 61 69 6e 74 22 2c 2c  5f 74 65 78 74 24 2c 25  |Paint",,_text$,%|
00000c30  31 30 30 30 30 30 30 2c  5f 78 25 2c 5f 79 25 2c  |1000000,_x%,_y%,|
00000c40  2c 5f 70 61 74 68 25 2b  32 34 0d 04 4c 1b 20 20  |,_path%+24..L.  |
00000c50  5f 70 61 74 68 25 21 35  32 3d a4 46 6f 6e 74 43  |_path%!52=.FontC|
00000c60  6f 6c 6f 75 72 0d 04 56  1c 20 20 5f 70 61 74 68  |olour..V.  _path|
00000c70  25 21 36 30 3d a4 43 75  72 72 65 6e 74 46 6f 6e  |%!60=.CurrentFon|
00000c80  74 0d 04 60 19 20 20 5f  70 61 74 68 25 21 36 34  |t..`.  _path%!64|
00000c90  3d a4 46 6f 6e 74 53 69  7a 65 0d 04 6a 19 20 20  |=.FontSize..j.  |
00000ca0  5f 70 61 74 68 25 21 36  38 3d a4 46 6f 6e 74 53  |_path%!68=.FontS|
00000cb0  69 7a 65 0d 04 74 05 e1  0d 04 7e 04 0d 04 88 16  |ize..t....~.....|
00000cc0  f4 20 3d 3d 3d 3d 3d 3d  3d 3d 3d 3d 3d 3d 3d 3d  |. ==============|
00000cd0  3d 3d 0d 04 92 15 f4 20  31 2e 33 20 54 72 61 6e  |==..... 1.3 Tran|
00000ce0  73 6c 61 74 69 6f 6e 0d  04 9c 16 f4 20 3d 3d 3d  |slation..... ===|
00000cf0  3d 3d 3d 3d 3d 3d 3d 3d  3d 3d 3d 3d 3d 0d 04 a6  |=============...|
00000d00  04 0d 04 b0 1c dd 20 f2  54 72 61 6e 73 6c 61 74  |...... .Translat|
00000d10  65 28 70 61 74 68 2c 64  78 2c 64 79 29 0d 04 ba  |e(path,dx,dy)...|
00000d20  2b 20 f4 20 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |+ . ------------|
00000d30  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00000d40  2d 2d 2d 2d 2d 2d 2d 2d  0d 04 c4 06 20 f4 0d 04  |--------.... ...|
00000d50  ce 20 20 f4 20 54 72 61  6e 73 6c 61 74 65 73 20  |.  . Translates |
00000d60  69 6e 20 28 78 2c 79 29  20 70 6c 61 6e 65 0d 04  |in (x,y) plane..|
00000d70  d8 06 20 f4 0d 04 e2 2b  20 f4 20 2d 2d 2d 2d 2d  |.. ....+ . -----|
00000d80  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00000d90  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 0d  |---------------.|
00000da0  04 ec 10 20 ea 20 5f 41  28 29 2c 5f 62 28 29 0d  |... . _A(),_b().|
00000db0  04 f6 30 20 de 20 5f 41  28 31 2c 31 29 2c 5f 62  |..0 . _A(1,1),_b|
00000dc0  28 31 29 20 3a 20 5f 41  28 29 3d 31 2c 30 2c 30  |(1) : _A()=1,0,0|
00000dd0  2c 31 20 3a 20 5f 62 28  29 3d 64 78 2c 64 79 0d  |,1 : _b()=dx,dy.|
00000de0  05 00 1f 20 f2 54 72 61  6e 73 66 6f 72 6d 28 70  |... .Transform(p|
00000df0  61 74 68 2c 5f 41 28 29  2c 5f 62 28 29 29 0d 05  |ath,_A(),_b())..|
00000e00  0a 06 20 e1 0d 05 14 04  0d 05 1e 1c dd 20 a4 54  |.. .......... .T|
00000e10  72 61 6e 73 6c 61 74 65  28 70 61 74 68 2c 64 78  |ranslate(path,dx|
00000e20  2c 64 79 29 0d 05 28 0c  ea 20 5f 50 61 74 68 25  |,dy)..(.. _Path%|
00000e30  0d 05 32 17 5f 50 61 74  68 25 3d a4 43 6f 70 79  |..2._Path%=.Copy|
00000e40  28 21 70 61 74 68 29 0d  05 3c 1c f2 54 72 61 6e  |(!path)..<..Tran|
00000e50  73 6c 61 74 65 28 5f 50  61 74 68 25 2c 64 78 2c  |slate(_Path%,dx,|
00000e60  64 79 29 0d 05 46 0b 3d  5f 50 61 74 68 25 0d 05  |dy)..F.=_Path%..|
00000e70  50 04 0d 05 5a 16 f4 20  3d 3d 3d 3d 3d 3d 3d 3d  |P...Z.. ========|
00000e80  3d 3d 3d 3d 3d 3d 3d 3d  0d 05 64 11 f4 20 31 2e  |========..d.. 1.|
00000e90  34 20 4d 61 67 6e 69 66  79 0d 05 6e 16 f4 20 3d  |4 Magnify..n.. =|
00000ea0  3d 3d 3d 3d 3d 3d 3d 3d  3d 3d 3d 3d 3d 3d 3d 0d  |===============.|
00000eb0  05 78 04 0d 05 82 1f dd  20 f2 4d 61 67 6e 69 66  |.x...... .Magnif|
00000ec0  79 28 70 61 74 68 2c 61  2c 62 2c 66 61 63 74 6f  |y(path,a,b,facto|
00000ed0  72 29 0d 05 8c 28 20 f4  20 2d 2d 2d 2d 2d 2d 2d  |r)...( . -------|
00000ee0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00000ef0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 0d 05 96 10 20 f4  |----------.... .|
00000f00  20 4d 61 67 6e 69 66 69  65 73 0d 05 a0 0b 20 f4  | Magnifies.... .|
00000f10  20 49 2e 65 2e 0d 05 aa  27 20 f4 20 20 20 20 20  | I.e....' .     |
00000f20  20 20 20 20 20 20 2d 20  20 20 20 20 2d 20 20 20  |      -     -   |
00000f30  20 20 20 20 20 2d 20 20  20 20 20 2d 0d 05 b4 27  |     -     -...'|
00000f40  20 f4 20 20 20 20 20 20  20 20 20 20 20 7c 20 61  | .           | a|
00000f50  20 62 20 7c 20 20 3d 20  6d 20 2a 20 7c 20 61 20  | b |  = m * | a |
00000f60  62 20 7c 0d 05 be 27 20  f4 20 20 20 20 20 20 20  |b |...' .       |
00000f70  20 20 20 20 7c 20 63 20  64 20 7c 20 20 20 20 20  |    | c d |     |
00000f80  20 20 20 7c 20 63 20 64  20 7c 0d 05 c8 27 20 f4  |   | c d |...' .|
00000f90  20 20 20 20 20 20 20 20  20 20 20 2d 20 20 20 20  |           -    |
00000fa0  20 2d 20 20 20 20 20 20  20 20 2d 20 20 20 20 20  | -        -     |
00000fb0  2d 0d 05 d2 28 20 f4 20  2d 2d 2d 2d 2d 2d 2d 2d  |-...( . --------|
00000fc0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00000fd0  2d 2d 2d 2d 2d 2d 2d 2d  2d 0d 05 dc 1b 20 ea 20  |---------.... . |
00000fe0  5f 74 72 61 6e 73 66 6f  72 6d 2c 5f 41 28 29 2c  |_transform,_A(),|
00000ff0  5f 62 28 29 0d 05 e6 14  20 de 20 5f 41 28 31 2c  |_b().... . _A(1,|
00001000  31 29 2c 5f 62 28 31 29  0d 05 f0 13 20 61 3d 61  |1),_b(1).... a=a|
00001010  2a 28 31 2d 66 61 63 74  6f 72 29 0d 05 fa 13 20  |*(1-factor).... |
00001020  62 3d 62 2a 28 31 2d 66  61 63 74 6f 72 29 0d 06  |b=b*(1-factor)..|
00001030  04 1b 20 5f 41 28 29 3d  66 61 63 74 6f 72 2c 30  |.. _A()=factor,0|
00001040  2c 30 2c 66 61 63 74 6f  72 0d 06 0e 0d 20 5f 62  |,0,factor.... _b|
00001050  28 29 3d 61 2c 62 0d 06  18 1f 20 f2 54 72 61 6e  |()=a,b.... .Tran|
00001060  73 66 6f 72 6d 28 70 61  74 68 2c 5f 41 28 29 2c  |sform(path,_A(),|
00001070  5f 62 28 29 29 0d 06 22  06 20 e1 0d 06 2c 04 0d  |_b())..". ...,..|
00001080  06 36 1f dd 20 a4 4d 61  67 6e 69 66 79 28 70 61  |.6.. .Magnify(pa|
00001090  74 68 2c 61 2c 62 2c 66  61 63 74 6f 72 29 0d 06  |th,a,b,factor)..|
000010a0  40 0c ea 20 5f 50 61 74  68 25 0d 06 4a 17 5f 50  |@.. _Path%..J._P|
000010b0  61 74 68 25 3d a4 43 6f  70 79 28 21 70 61 74 68  |ath%=.Copy(!path|
000010c0  29 0d 06 54 1f f2 4d 61  67 6e 69 66 79 28 5f 50  |)..T..Magnify(_P|
000010d0  61 74 68 25 2c 61 2c 62  2c 66 61 63 74 6f 72 29  |ath%,a,b,factor)|
000010e0  0d 06 5e 0b 3d 5f 50 61  74 68 25 0d 06 68 04 0d  |..^.=_Path%..h..|
000010f0  06 72 11 f4 20 3d 3d 3d  3d 3d 3d 3d 3d 3d 3d 3d  |.r.. ===========|
00001100  0d 06 7c 10 f4 20 31 2e  35 20 52 6f 74 61 74 65  |..|.. 1.5 Rotate|
00001110  0d 06 86 11 f4 20 3d 3d  3d 3d 3d 3d 3d 3d 3d 3d  |..... ==========|
00001120  3d 0d 06 90 04 0d 06 9a  1d dd 20 f2 52 6f 74 61  |=......... .Rota|
00001130  74 65 28 70 61 74 68 2c  61 2c 62 2c 61 6e 67 6c  |te(path,a,b,angl|
00001140  65 29 0d 06 a4 28 20 f4  20 2d 2d 2d 2d 2d 2d 2d  |e)...( . -------|
00001150  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00001160  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 0d 06 ae 06 20 f4  |----------.... .|
00001170  0d 06 b8 19 20 f4 20 43  72 65 61 74 65 73 20 61  |.... . Creates a|
00001180  20 72 6f 74 61 74 69 6f  6e 0d 06 c2 06 20 f4 0d  | rotation.... ..|
00001190  06 cc 28 20 f4 20 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |..( . ----------|
000011a0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
000011b0  2d 2d 2d 2d 2d 2d 2d 0d  06 d6 21 20 ea 20 5f 74  |-------...! . _t|
000011c0  72 61 6e 73 66 6f 72 6d  2c 5f 41 28 29 2c 5f 62  |ransform,_A(),_b|
000011d0  28 29 2c 5f 63 2c 5f 73  0d 06 e0 14 20 de 20 5f  |(),_c,_s.... . _|
000011e0  41 28 31 2c 31 29 2c 5f  62 28 31 29 0d 06 ea 1c  |A(1,1),_b(1)....|
000011f0  20 5f 63 3d 9b 20 61 6e  67 6c 65 20 3a 20 5f 73  | _c=. angle : _s|
00001200  3d b5 20 61 6e 67 6c 65  0d 06 f4 37 20 5f 41 28  |=. angle...7 _A(|
00001210  30 2c 30 29 3d 5f 63 20  3a 20 5f 41 28 30 2c 31  |0,0)=_c : _A(0,1|
00001220  29 3d 2d 5f 73 20 3a 20  5f 41 28 31 2c 30 29 3d  |)=-_s : _A(1,0)=|
00001230  5f 73 20 3a 20 5f 41 28  31 2c 31 29 3d 5f 63 0d  |_s : _A(1,1)=_c.|
00001240  06 fe 16 20 5f 62 28 30  29 3d 61 2d 5f 63 2a 61  |... _b(0)=a-_c*a|
00001250  2b 5f 73 2a 62 0d 07 08  16 20 5f 62 28 31 29 3d  |+_s*b.... _b(1)=|
00001260  62 2d 5f 73 2a 61 2d 5f  63 2a 62 0d 07 12 1f 20  |b-_s*a-_c*b.... |
00001270  f2 54 72 61 6e 73 66 6f  72 6d 28 70 61 74 68 2c  |.Transform(path,|
00001280  5f 41 28 29 2c 5f 62 28  29 29 0d 07 1c 06 20 e1  |_A(),_b()).... .|
00001290  0d 07 26 04 0d 07 30 1d  dd 20 a4 52 6f 74 61 74  |..&...0.. .Rotat|
000012a0  65 28 70 61 74 68 2c 61  2c 62 2c 61 6e 67 6c 65  |e(path,a,b,angle|
000012b0  29 0d 07 3a 0c ea 20 5f  50 61 74 68 25 0d 07 44  |)..:.. _Path%..D|
000012c0  17 5f 50 61 74 68 25 3d  a4 43 6f 70 79 28 21 70  |._Path%=.Copy(!p|
000012d0  61 74 68 29 0d 07 4e 1d  f2 52 6f 74 61 74 65 28  |ath)..N..Rotate(|
000012e0  5f 50 61 74 68 25 2c 61  2c 62 2c 61 6e 67 6c 65  |_Path%,a,b,angle|
000012f0  29 0d 07 58 0b 3d 5f 50  61 74 68 25 0d 07 62 04  |)..X.=_Path%..b.|
00001300  0d 07 6c 16 f4 20 3d 3d  3d 3d 3d 3d 3d 3d 3d 3d  |..l.. ==========|
00001310  3d 3d 3d 3d 3d 3d 0d 07  76 15 f4 20 31 2e 34 20  |======..v.. 1.4 |
00001320  54 65 73 73 65 6c 61 74  69 6f 6e 0d 07 80 16 f4  |Tesselation.....|
00001330  20 3d 3d 3d 3d 3d 3d 3d  3d 3d 3d 3d 3d 3d 3d 3d  | ===============|
00001340  3d 0d 07 8a 04 0d 07 94  20 dd 20 f2 54 69 6c 65  |=....... . .Tile|
00001350  28 70 61 74 68 2c 72 6f  77 73 25 2c 63 6f 6c 75  |(path,rows%,colu|
00001360  6d 6e 73 25 29 0d 07 9e  27 20 f4 20 2d 2d 2d 2d  |mns%)...' . ----|
00001370  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
00001380  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 0d 07 a8 06  |------------....|
00001390  20 f4 0d 07 b2 15 20 f4  20 54 69 6c 65 73 20 74  | ..... . Tiles t|
000013a0  68 65 20 70 61 74 68 0d  07 bc 06 20 f4 0d 07 c6  |he path.... ....|
000013b0  27 20 f4 20 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |' . ------------|
000013c0  2d 2d 2d 2d 2d 2d 2d 2d  2d 2d 2d 2d 2d 2d 2d 2d  |----------------|
000013d0  2d 2d 2d 2d 0d 07 d0 1c  20 ea 20 5f 69 25 2c 5f  |----.... . _i%,_|
000013e0  6a 25 2c 5f 50 61 74 68  2c 5f 64 78 2c 5f 64 79  |j%,_Path,_dx,_dy|
000013f0  0d 07 da 1b 20 c8 8e 20  a4 4f 62 6a 65 63 74 54  |.... .. .ObjectT|
00001400  79 70 65 28 70 61 74 68  29 20 ca 0d 07 e4 08 20  |ype(path) ..... |
00001410  c9 20 32 0d 07 ee 25 20  20 f2 44 72 61 77 5f 42  |. 2...%  .Draw_B|
00001420  6f 75 6e 64 69 6e 67 42  6f 78 28 70 61 74 68 2c  |oundingBox(path,|
00001430  5f 64 78 2c 5f 64 79 29  0d 07 f8 29 20 20 5f 64  |_dx,_dy)...)  _d|
00001440  78 3d 5f 64 78 2f a4 58  5f 53 63 61 6c 65 20 3a  |x=_dx/.X_Scale :|
00001450  20 5f 64 79 3d 5f 64 79  2f a4 59 5f 53 63 61 6c  | _dy=_dy/.Y_Scal|
00001460  65 0d 08 02 15 20 20 e3  20 5f 69 25 3d 30 20 b8  |e....  . _i%=0 .|
00001470  20 72 6f 77 73 25 0d 08  0c 18 20 20 e3 20 5f 6a  | rows%....  . _j|
00001480  25 3d 30 20 b8 20 63 6f  6c 75 6d 6e 73 25 0d 08  |%=0 . columns%..|
00001490  16 3c 20 20 20 e7 20 5f  69 25 2b 5f 6a 25 3c 3e  |.<   . _i%+_j%<>|
000014a0  30 20 8c 20 5f 50 61 74  68 3d a4 54 72 61 6e 73  |0 . _Path=.Trans|
000014b0  6c 61 74 65 28 70 61 74  68 2c 5f 69 25 2a 5f 64  |late(path,_i%*_d|
000014c0  78 2c 5f 6a 25 2a 5f 64  79 29 0d 08 20 08 20 20  |x,_j%*_dy).. .  |
000014d0  20 ed 0d 08 2a 08 20 20  20 ed 0d 08 34 06 20 7f  | ...*.   ...4. .|
000014e0  0d 08 3e 2b 20 20 85 20  30 2c 22 4f 6e 6c 79 20  |..>+  . 0,"Only |
000014f0  70 61 74 68 20 6f 62 6a  65 63 74 73 20 63 61 6e  |path objects can|
00001500  20 62 65 20 74 69 6c 65  64 2e 22 0d 08 48 06 20  | be tiled."..H. |
00001510  cb 0d 08 52 06 20 e1 0d  08 5c 04 0d 08 66 04 0d  |...R. ...\...f..|
00001520  08 70 29 dd 20 f2 44 72  61 77 5f 42 6f 75 6e 64  |.p). .Draw_Bound|
00001530  69 6e 67 42 6f 78 28 70  61 74 68 2c f8 20 64 78  |ingBox(path,. dx|
00001540  25 2c f8 20 64 79 25 29  0d 08 7a 3d ea 20 5f 70  |%,. dy%)..z=. _p|
00001550  61 74 68 25 2c 5f 53 74  79 6c 65 25 2c 5f 78 6d  |ath%,_Style%,_xm|
00001560  69 6e 25 2c 5f 78 6d 61  78 25 2c 5f 79 6d 69 6e  |in%,_xmax%,_ymin|
00001570  25 2c 5f 79 6d 61 78 25  2c 5f 69 25 2c 5f 6c 65  |%,_ymax%,_i%,_le|
00001580  6e 67 74 68 25 0d 08 84  2e 20 5f 70 61 74 68 25  |ngth%.... _path%|
00001590  3d 21 70 61 74 68 20 3a  20 5f 6c 65 6e 67 74 68  |=!path : _length|
000015a0  25 3d 5f 70 61 74 68 25  2b 28 5f 70 61 74 68 25  |%=_path%+(_path%|
000015b0  21 34 29 0d 08 8e 23 20  5f 53 74 79 6c 65 25 3d  |!4)...# _Style%=|
000015c0  5f 70 61 74 68 25 21 33  36 20 3a 20 5f 70 61 74  |_path%!36 : _pat|
000015d0  68 25 2b 3d 34 30 0d 08  98 35 20 e7 20 28 5f 53  |h%+=40...5 . (_S|
000015e0  74 79 6c 65 25 20 80 20  28 31 3c 3c 37 29 29 3c  |tyle% . (1<<7))<|
000015f0  3e 30 20 8c 20 5f 70 61  74 68 25 2b 3d 34 2a 28  |>0 . _path%+=4*(|
00001600  5f 70 61 74 68 25 21 34  29 2b 38 0d 08 a2 1f 20  |_path%!4)+8.... |
00001610  5f 78 6d 69 6e 25 3d 32  5e 33 30 3a 5f 78 6d 61  |_xmin%=2^30:_xma|
00001620  78 25 3d 2d 5f 78 6d 69  6e 25 0d 08 ac 1f 20 5f  |x%=-_xmin%.... _|
00001630  79 6d 69 6e 25 3d 32 5e  33 30 3a 5f 79 6d 61 78  |ymin%=2^30:_ymax|
00001640  25 3d 2d 5f 79 6d 69 6e  25 0d 08 b6 0f 20 5f 69  |%=-_ymin%.... _i|
00001650  25 3d 5f 70 61 74 68 25  0d 08 c0 06 20 f5 0d 08  |%=_path%.... ...|
00001660  ca 0f 20 20 c8 8e 20 21  5f 69 25 20 ca 0d 08 d4  |..  .. !_i% ....|
00001670  0e 20 20 20 c9 20 30 2c  35 20 3a 0d 08 de 1a 20  |.   . 0,5 :.... |
00001680  20 20 c9 20 32 2c 38 20  3a 20 f2 44 72 61 77 5f  |  . 2,8 : .Draw_|
00001690  42 6f 75 6e 64 0d 08 e8  36 20 20 20 c9 20 36 20  |Bound...6   . 6 |
000016a0  20 20 3a 20 f2 44 72 61  77 5f 42 6f 75 6e 64 20  |  : .Draw_Bound |
000016b0  3a 20 f2 44 72 61 77 5f  42 6f 75 6e 64 20 3a 20  |: .Draw_Bound : |
000016c0  f2 44 72 61 77 5f 42 6f  75 6e 64 0d 08 f2 21 20  |.Draw_Bound...! |
000016d0  20 20 7f 20 3a 20 85 20  30 2c 22 53 6f 6d 65 74  |  . : . 0,"Somet|
000016e0  68 69 6e 67 20 77 72 6f  6e 67 21 22 0d 08 fc 07  |hing wrong!"....|
000016f0  20 20 cb 0d 09 06 0c 20  20 5f 69 25 2b 3d 34 0d  |  .....  _i%+=4.|
00001700  09 10 14 20 fd 20 5f 69  25 3e 3d 5f 6c 65 6e 67  |... . _i%>=_leng|
00001710  74 68 25 0d 09 1a 16 20  64 78 25 3d 5f 78 6d 61  |th%.... dx%=_xma|
00001720  78 25 2d 5f 78 6d 69 6e  25 0d 09 24 16 20 64 79  |x%-_xmin%..$. dy|
00001730  25 3d 5f 79 6d 61 78 25  2d 5f 79 6d 69 6e 25 0d  |%=_ymax%-_ymin%.|
00001740  09 2e 05 e1 0d 09 38 04  0d 09 42 11 dd 20 f2 44  |......8...B.. .D|
00001750  72 61 77 5f 42 6f 75 6e  64 0d 09 4c 0a 5f 69 25  |raw_Bound..L._i%|
00001760  2b 3d 34 0d 09 56 1f e7  20 21 5f 69 25 3c 5f 78  |+=4..V.. !_i%<_x|
00001770  6d 69 6e 25 20 8c 20 5f  78 6d 69 6e 25 3d 21 5f  |min% . _xmin%=!_|
00001780  69 25 0d 09 60 1f e7 20  21 5f 69 25 3e 5f 78 6d  |i%..`.. !_i%>_xm|
00001790  61 78 25 20 8c 20 5f 78  6d 61 78 25 3d 21 5f 69  |ax% . _xmax%=!_i|
000017a0  25 0d 09 6a 0a 5f 69 25  2b 3d 34 0d 09 74 1f e7  |%..j._i%+=4..t..|
000017b0  20 21 5f 69 25 3c 5f 79  6d 69 6e 25 20 8c 20 5f  | !_i%<_ymin% . _|
000017c0  79 6d 69 6e 25 3d 21 5f  69 25 0d 09 7e 1f e7 20  |ymin%=!_i%..~.. |
000017d0  21 5f 69 25 3e 5f 79 6d  61 78 25 20 8c 20 5f 79  |!_i%>_ymax% . _y|
000017e0  6d 61 78 25 3d 21 5f 69  25 0d 09 88 05 e1 0d 09  |max%=!_i%.......|
000017f0  92 04 0d 09 9c 04 0d ff                           |........|
000017f8